71 lines
1.8 KiB
Python
Executable File
71 lines
1.8 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
import requests
|
|
import sys
|
|
import traceback
|
|
import json
|
|
import os
|
|
|
|
from argparse import ArgumentParser
|
|
|
|
|
|
def readstate(file: str) -> dict:
|
|
if not os.path.exists(file):
|
|
default_state = {'seek': 0}
|
|
writestate(file, default_state)
|
|
return default_state
|
|
|
|
with open(file, 'r') as f:
|
|
return json.loads(f.read())
|
|
|
|
|
|
def writestate(file: str, state: dict):
|
|
with open(file, 'w') as f:
|
|
f.write(json.dumps(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
|
|
state = readstate(args.state_file)
|
|
with open(args.log_file, 'r') as f:
|
|
# 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()
|
|
writestate(args.state_file, 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) |