Compare commits

..

6 Commits

Author SHA1 Message Date
75ae245d40 Adjust sleep back to 5 2023-11-11 15:42:23 -05:00
1c6a45a1d2 Cleanly exit on SIGINT 2023-11-11 15:40:52 -05:00
1e958b397a Handle KeyErrors in __parse_headers. Closes #9 2023-11-11 15:33:18 -05:00
e4a153d385 Bugfix: event loop issues. Closes #8 2023-11-11 15:30:17 -05:00
f599911998 Update screenshot 2023-11-11 14:37:03 -05:00
73e5a63565 Add custom log levels. Closes #1 2023-11-11 14:34:14 -05:00
4 changed files with 32 additions and 11 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 88 KiB

After

Width:  |  Height:  |  Size: 114 KiB

View File

@ -72,9 +72,12 @@ class GitHubApi:
headers (dict): The response headers from the GitHub API. headers (dict): The response headers from the GitHub API.
""" """
try:
self.rate_reset = datetime.fromtimestamp(int(headers['x-ratelimit-reset'])) self.rate_reset = datetime.fromtimestamp(int(headers['x-ratelimit-reset']))
self.rate_remaining = int(headers['x-ratelimit-remaining']) self.rate_remaining = int(headers['x-ratelimit-remaining'])
logger.info(f'{self.rate_remaining} calls remaining until {self.rate_reset} ({self.rate_reset - datetime.now()})') logger.info(f'{self.rate_remaining} calls remaining until {self.rate_reset} ({self.rate_reset - datetime.now()})')
except KeyError as e:
logger.warning(f'Could not parse headers: {str(e)}')
def get_events(self, page=None): def get_events(self, page=None):
"""Fetch GitHub events. """Fetch GitHub events.

View File

@ -2,6 +2,9 @@
import sys import sys
from loguru import logger from loguru import logger
logger.level('CREATE', no=34, color='<green>')
logger.level('DELETE', no=35, color='<red>')
def setup_logger(): def setup_logger():
logger.remove() logger.remove()

21
main.py
View File

@ -1,4 +1,5 @@
"""GitMon""" """GitMon"""
import signal
import time import time
from loguru import logger from loguru import logger
from gitmon.api import GitHubApi from gitmon.api import GitHubApi
@ -16,23 +17,37 @@ def log_event(event):
actor = event.get('actor') actor = event.get('actor')
if event_type == 'DeleteEvent': if event_type == 'DeleteEvent':
logger.error(f'{event_type}:\thttps://github.com/{repo["name"]}, {actor["login"]}') logger.log('DELETE', f'{event_type}:\thttps://github.com/{repo["name"]}, {actor["login"]}')
else: else:
logger.info(f'{event_type}:\thttps://github.com/{repo["name"]}, {actor["login"]}') logger.log('CREATE', f'{event_type}:\thttps://github.com/{repo["name"]}, {actor["login"]}')
def sigint_handler(signum, frame):
"""Signal handler for Ctrl+C."""
raise KeyboardInterrupt
def main(): def main():
"""Main entry point.""" """Main entry point."""
# Setup logger and signal handling
setup_logger() setup_logger()
signal.signal(signal.SIGINT, sigint_handler)
api = GitHubApi(token) api = GitHubApi(token)
try:
while True: while True:
events = api.get_events() events = api.get_events()
for event in events: for event in events:
if event['type'] in ['CreateEvent', 'DeleteEvent']: if (
isinstance(event, dict)
and event.get('type') in ['CreateEvent', 'DeleteEvent']
):
log_event(event) log_event(event)
time.sleep(5) time.sleep(5)
except KeyboardInterrupt:
logger.info('Program terminating')
if __name__ == '__main__': if __name__ == '__main__':