added logging

This commit is contained in:
Paolo Asperti 2018-01-14 22:01:01 +01:00
parent 0c01c20880
commit 0388bf7ad2
3 changed files with 127 additions and 65 deletions

1
.gitignore vendored
View File

@ -1 +1,2 @@
telegram-notify.conf
telegram-notify.log

View File

@ -10,16 +10,24 @@ import json
import sys
import os
import argparse
import logging
from telepot.loop import MessageLoop
from watchdog.observers import Observer
from watchdog.events import PatternMatchingEventHandler
version = 0.1
def writeconfig():
global configParser
with open('telegram-notify.conf', 'wb') as configfile:
configParser.write(configfile)
if not os.access(configFile, os.W_OK):
print 'WARNING: Config file (%s) is not writable ...' % configFile
logger.warning('Config file (%s) is not writable ...' % configFile)
return False
with open(configFile, 'wb') as theFile:
configParser.write(theFile)
logger.info('Config file (%s) updated ...' % configFile)
def handle(msg):
global configParser
@ -105,25 +113,28 @@ def handle(msg):
def processFile(filename):
global chat_ids
logger.info('Processing %s' % filename)
if re.match(r'.*jpg$',filename):
for c in chat_ids:
try:
logger.debug('sending %s as picture to %s' % (filename,c['username']))
r=bot.sendPhoto(c['id'], open(filename, 'rb'))
os.remove(filename)
logger.debug('removed %s' % filename)
except:
time.sleep(10)
if re.match(r'.*txt$',filename):
for c in chat_ids:
try:
with open(filename,'r') as f:
logger.debug('sending %s as text to %s' % (filename,c['username']))
r=bot.sendMessage(c['id'], f.read())
os.remove(filename)
logger.debug('removed %s' % filename)
except:
time.sleep(10)
class FilesChangedHandler(PatternMatchingEventHandler):
patterns = ["*.jpg", "*.txt"]
@ -147,88 +158,136 @@ class FilesChangedHandler(PatternMatchingEventHandler):
self.process(event)
def checkFiles():
spool_dir = configParser.get('general', 'spool_dir')
logger.info('Checking %s for new files ...' % spool_dir)
l=os.listdir(spool_dir)
for f in l:
processFile("%s/%s" % (spool_dir,f) )
configFile = '/etc/telegram-notify/telegram-notify.conf'
if not os.path.isfile(configFile) or not os.access(configFile, os.R_OK):
configFile = './telegram-notify.conf'
def setDefaults():
global configFile
global defaults
configFile = '/etc/telegram-notify/telegram-notify.conf'
if not os.path.isfile(configFile) or not os.access(configFile, os.R_OK):
configFile = ''
configFile = './telegram-notify.conf'
if not os.path.isfile(configFile) or not os.access(configFile, os.R_OK):
configFile = ''
logFile = '/var/log/telegram-notify.log'
if not os.path.isfile(logFile) or not os.access(logFile, os.W_OK):
logFile = ''
defaults = {
'log_file': logFile,
'log_level': 'info',
'daemon': False,
'token': '',
'pair_pin': '1234',
'spool_dir': '/var/spool/telegram-notify'
}
parser = argparse.ArgumentParser(description='Daemon for Telegram notification management')
parser.add_argument('-c', '--config', nargs='?',
help='start with specified config file')
parser.add_argument('-V', '--version', action='store_true',
help='show program version and quit')
args = parser.parse_args()
def parseCmdLine():
global configFile
if args.version:
print 'telegram-notify version %s - Copyright (C) 2018 by Paolo Asperti.' % version
sys.exit(0)
parser = argparse.ArgumentParser(description='Daemon for Telegram notification management')
parser.add_argument('-c', '--config', nargs='?',
help='start with specified config file (default: telegram-notify.conf in /etc/ or in current directory)')
parser.add_argument('-V', '--version', action='store_true',
help='show program version and quit')
args = parser.parse_args()
if args.config:
if not os.path.isfile(args.config):
print 'specified config file doesn\'t exists or is not a file'
if args.version:
print 'telegram-notify version %s - Copyright (C) 2018 by Paolo Asperti.' % version
sys.exit(0)
if args.config:
if not os.path.isfile(args.config):
print 'specified config file doesn\'t exists or is not a file'
sys.exit(1)
if not os.access(args.config, os.R_OK):
print 'specified config file is not readable'
sys.exit(1)
configFile = args.config
def readConfigFile():
global configParser
if configFile == '':
print 'no config file available'
sys.exit(1)
if not os.access(args.config, os.R_OK):
print 'specified config file is not readable'
if not os.access(configFile, os.W_OK):
print 'WARNING: specified config file is not writable'
configParser = ConfigParser.SafeConfigParser(defaults=defaults)
configParser.read(configFile)
def initLogger():
global logger
logFile = configParser.get('general', 'log_file')
if logFile == '':
print 'no log file available'
sys.exit(1)
if not os.access(args.config, os.W_OK):
# TODO: logging
print 'WARNING: specified config file is not wriable'
configFile = args.config
if configFile == '':
print 'no config file available'
sys.exit(1)
logLevel = configParser.get('general', 'log_level')
logging.basicConfig(filename=logFile,level=logLevel,format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
logger = logging.getLogger(__name__)
# TODO: logging
print 'INFO: using config file: %s' % configFile
configParser = ConfigParser.RawConfigParser()
configParser.read(configFile)
def checkSpoolDir():
spool_dir = configParser.get('general', 'spool_dir')
if not os.path.isdir(spool_dir):
print "spool directory (%s) doesn't exists or is not a directory!" % spool_dir
sys.exit(1)
spool_dir = configParser.get('general', 'spool_dir')
if not os.path.isdir(spool_dir):
print "spool directory (%s) doesn't exists or is not a directory!" % spool_dir
sys.exit(1)
if not os.access(spool_dir, os.W_OK):
print "spool directory (%s) is not writable!" % spool_dir
sys.exit(1)
if not os.access(spool_dir, os.W_OK):
print "spool directory (%s) is not writable!" % spool_dir
sys.exit(1)
chat_ids=[]
print "Allowed users: "
for p in configParser.sections():
if re.match('^id-.*',p):
chat_id={
'username': configParser.get(p,'username'),
'firstname': configParser.get(p,'firstname'),
'lastname': configParser.get(p,'lastname'),
'id': int(re.sub(r'^id-','',p))
}
chat_ids.append(chat_id)
print(" - (%s) %s %s" % (chat_id['username'],chat_id['firstname'],chat_id['lastname']) )
def initBot():
global bot
global chat_ids
chat_ids=[]
logger.info('Allowed users:')
for p in configParser.sections():
if re.match('^id-.*',p):
chat_id={
'username': configParser.get(p,'username'),
'firstname': configParser.get(p,'firstname'),
'lastname': configParser.get(p,'lastname'),
'id': int(re.sub(r'^id-','',p))
}
chat_ids.append(chat_id)
logger.debug(" - (%s) %s %s" % (chat_id['username'],chat_id['firstname'],chat_id['lastname']) )
token = configParser.get('general', 'token')
bot = telepot.Bot(token)
token = configParser.get('general', 'token')
bot = telepot.Bot(token)
MessageLoop(bot, handle).run_as_thread()
print 'I am listening ...'
MessageLoop(bot, handle).run_as_thread()
logger.info('Loop started. I am listening ...')
checkFiles()
checkFiles()
observer = Observer()
observer.schedule(FilesChangedHandler(), path=spool_dir)
observer.start()
spool_dir = configParser.get('general', 'spool_dir')
observer = Observer()
observer.schedule(FilesChangedHandler(), path=spool_dir)
observer.start()
setDefaults()
parseCmdLine()
readConfigFile()
initLogger()
checkSpoolDir()
initBot()
daemon = configParser.get('general', 'daemon')
while 1:
time.sleep(10)
checkFiles()
if re.match('false', daemon, re.IGNORECASE):
sys.exit(0)
time.sleep(10)

View File

@ -1,5 +1,7 @@
[general]
daemon = false
daemon = true
token = aaaaaaaaaaaaaaaaaaaaaaaaa
pair_pin = 1234
spool_dir = /var/spool/telegram-notify
log_file = /var/log/telegram-notify.log
log_level = INFO