1491.2.18
by Christopher Lee
Put check logic into separate file with tests. |
1 |
#!/usr/bin/env python
|
2 |
"""Simple looped check over provided file for regex content."""
|
|
3 |
from __future__ import print_function |
|
4 |
||
5 |
import argparse |
|
6 |
import os |
|
7 |
import subprocess |
|
8 |
import sys |
|
9 |
import time |
|
10 |
||
11 |
||
12 |
class check_result: |
|
13 |
success = 0 |
|
14 |
failure = 1 |
|
15 |
exception = 2 |
|
16 |
||
17 |
||
18 |
def check_file(check_string, file_path): |
|
19 |
print('Checking for:\n{}'.format(check_string)) |
|
20 |
for _ in range(0, 10): |
|
21 |
try: |
|
22 |
subprocess.check_call( |
|
23 |
['sudo', 'egrep', check_string, file_path]) |
|
24 |
print('Log content found. No need to continue.') |
|
25 |
return check_result.success |
|
26 |
except subprocess.CalledProcessError as e: |
|
27 |
if e.returncode == 1: |
|
28 |
time.sleep(1) |
|
29 |
else: |
|
30 |
return check_result.exception |
|
31 |
print('Unexpected error with file check.') |
|
32 |
return check_result.failure |
|
33 |
||
34 |
||
35 |
def raise_if_file_not_found(file_path): |
|
36 |
if not os.path.exists(file_path): |
|
37 |
raise ValueError('File not found: {}'.format(file_path)) |
|
38 |
||
39 |
||
40 |
def parse_args(argv=None): |
|
41 |
parser = argparse.ArgumentParser( |
|
42 |
description='File content check.') |
|
43 |
parser.add_argument( |
|
44 |
'regex', help='Regex string to check file with.') |
|
45 |
parser.add_argument( |
|
46 |
'file_path', help='Path to file to check.') |
|
47 |
return parser.parse_args(argv) |
|
48 |
||
49 |
||
50 |
def main(argv=None): |
|
51 |
args = parse_args(argv) |
|
52 |
try: |
|
53 |
raise_if_file_not_found(args.file_path) |
|
54 |
except ValueError as e: |
|
55 |
print(e) |
|
56 |
sys.exit(check_result.exception) |
|
57 |
||
58 |
sys.exit(check_file(args.regex, args.file_path)) |
|
59 |
||
60 |
||
61 |
if __name__ == '__main__': |
|
62 |
sys.exit(main()) |