58 lines
1.5 KiB
Python
Executable File
58 lines
1.5 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
import requests
|
|
import sys
|
|
import traceback
|
|
import os
|
|
|
|
from argparse import ArgumentParser
|
|
from ch1p import State
|
|
|
|
|
|
def main():
|
|
# parse arguments
|
|
parser = ArgumentParser()
|
|
parser.add_argument('--log-file', type=str, help='A file to read from')
|
|
parser.add_argument('--state-file', default=('%s/.log-checker.state' % os.getenv('HOME')))
|
|
parser.add_argument('--token', help='Telegram bot token')
|
|
parser.add_argument('--chat-id', type=int, help='Telegram chat id (with bot)')
|
|
args = parser.parse_args()
|
|
|
|
# read file
|
|
jstate = State(file=args.state_file, default=dict(seek=0, size=0))
|
|
state = jstate.read()
|
|
|
|
fsize = os.path.getsize(args.log_file)
|
|
|
|
if fsize < state['size']:
|
|
state['seek'] = 0
|
|
|
|
with open(args.log_file, 'r') as f:
|
|
if state['seek']:
|
|
# jump to the latest readed position
|
|
f.seek(state['seek'])
|
|
|
|
# read till the end of the file
|
|
content = f.read()
|
|
|
|
# save new position
|
|
state['seek'] = f.tell()
|
|
state['size'] = fsize
|
|
jstate.write(state)
|
|
|
|
# if got something, send it to telegram
|
|
if content != '':
|
|
print('sending: %s' % content)
|
|
r = requests.post('https://api.telegram.org/bot%s/sendMessage' % args.token, data={
|
|
'chat_id': args.chat_id,
|
|
'text': content
|
|
})
|
|
print(r.status_code)
|
|
print(r.text)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
try:
|
|
main()
|
|
except:
|
|
traceback.print_exc()
|
|
sys.exit(1) |