def main() -> None: config = { 'REPORT_SIZE': 1000, 'REPORT_DIR': './reports', 'LOG_DIR': './log', } config.update(config_parser()) logging.basicConfig(format='[%(asctime)s] %(levelname).1s %(message)s', level=logging.INFO, datefmt='%Y.%m.%d %H:%M:%S', filename=config.get('LOG_FILE')) log_dir = path.abspath(config['LOG_DIR']) report_dir = path.abspath(config['REPORT_DIR']) try: if file := find_log_file(log_dir, report_dir): if path.exists(file.report_path): logging.info(f'Report already exists: {file.report_path}') return None else: generate_report(file=file, report_size=int(config['REPORT_SIZE'])) except Exception as err: logging.exception(f'Unexpected error: {err}') sys.exit(1)
def test_find_last_file_with_correct_name(self): for day in range(1, 10): open(path.join(self.log_dir, f'nginx-access-ui.log-2017062{day}'), 'w').close() file = find_log_file(self.log_dir, self.rep_dir) self.assertEqual( file.path, path.join(self.log_dir, 'nginx-access-ui.log-20170629')) self.assertEqual(file.report_path, path.join(self.rep_dir, 'report-2017.06.29.html')) self.assertEqual(file.date, datetime.strptime('20170629', '%Y%m%d')) self.assertEqual(file.ext, '')
def test_generate_report(self): with open(path.join(self.log_dir, f'nginx-access-ui.log-20170620'), 'w') as log: for _ in range(100): url = random.choice([ '/api/v2/internal', '/export/app-install', '/api/v2/target', '/api/v2/banner' ]) time = round(random.random(), 3) log.write( f'1.1.1.1 - - [-] "GET {url} HTTP/1.1" 200 22 "-" "-" "-" "-" "-" {time}\n' ) file = find_log_file(self.log_dir, self.rep_dir) generate_report(file=file, report_size=100) self.assertIn('report-2017.06.20.html', listdir(self.rep_dir))
def test_find_last_file_with_bad_name(self): for day in range(1, 10): open(path.join(self.log_dir, f'BAD-NAME-log-2017062{day}'), 'w').close() file = find_log_file(self.log_dir, self.rep_dir) self.assertEqual(file, None)
def test_log_not_exist(self): open(path.join(self.log_dir, 'data.log'), 'w').close() file = find_log_file(self.log_dir, self.rep_dir) self.assertEqual(file, None)
def test_empty_directory(self): file = find_log_file(self.log_dir, self.rep_dir) self.assertEqual(file, None)