Exemple #1
0
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)
Exemple #2
0
 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, '')
Exemple #3
0
 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))
Exemple #4
0
 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)
Exemple #5
0
 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)
Exemple #6
0
 def test_empty_directory(self):
     file = find_log_file(self.log_dir, self.rep_dir)
     self.assertEqual(file, None)