Skip to content
Snippets Groups Projects
Verified Commit d7dd0647 authored by Pavel Břoušek's avatar Pavel Břoušek
Browse files

chore: use argparse in check_user_logins

parent 72fa5fb0
No related branches found
No related tags found
1 merge request!26feat: check_saml, check_user_logins
Pipeline #255174 passed
#!/usr/bin/env python3
import argparse
import datetime
import getopt
import sys
import re
......@@ -10,14 +10,6 @@ UNKNOWN = -1
OK = 0
WARNING = 1
CRITICAL = 2
usage = (
"usage: ./check_user_logins.py\n"
" -p/--path <string> path to log file\n"
" -r/--regex <string> parsing regex of logfile, must include userid group and datetime group\n"
" -d/--datetime_format <string> datetime format of log file\n"
" -l/--logins <integer> maximal number of logins\n"
" -s/--seconds <integer> time interval for logins check\n"
)
def parse_log_data(log_path, regex, date_format):
......@@ -67,75 +59,50 @@ def check_log_data(user_dict, limits, seconds):
sys.exit(WARNING)
# define command lnie options and validate data. Show usage or provide info on required options
def check_positive(value):
ivalue = int(value)
if ivalue <= 0:
raise argparse.ArgumentTypeError("%s is an invalid positive int value" % value)
return ivalue
def command_line_validate(argv):
try:
opts, args = getopt.getopt(
argv,
"p:r:d:l:s:",
["path=", "regex=", "datetime_format=" "logins=", "seconds="],
)
except getopt.GetoptError:
print(usage)
try:
for opt, arg in opts:
if opt in ("-l", "--logins"):
try:
logins = int(arg)
if logins <= 0:
sys.exit(CRITICAL)
except:
print("***logins value must be an integer higher than 0 ***")
sys.exit(CRITICAL)
elif opt in ("-s", "--seconds"):
try:
seconds = int(arg)
if seconds <= 0:
sys.exit(CRITICAL)
except:
print("***seconds value must be an integer higher than 0 ***")
sys.exit(CRITICAL)
elif opt in ("-p", "--path"):
path = arg
elif opt in ("-r", "--regex"):
regex = arg
elif opt in ("-d", "--datetime_format"):
datetime_format = arg
else:
print(usage)
try:
isinstance(logins, int)
except:
print("***logins is required***")
print(usage)
sys.exit(CRITICAL)
try:
isinstance(seconds, int)
except:
print("***seconds is required***")
print(usage)
sys.exit(CRITICAL)
try:
isinstance(path, str)
except:
print("***path to log file is required***")
print(usage)
sys.exit(CRITICAL)
try:
isinstance(regex, str)
except:
print("***parsing regex is required***")
print(usage)
sys.exit(CRITICAL)
try:
isinstance(datetime_format, str)
except:
print("***parsing datetime format is required***")
print(usage)
sys.exit(CRITICAL)
except:
sys.exit(CRITICAL)
return path, regex, datetime_format, logins, seconds
parser = argparse.ArgumentParser(description="frequent login check")
parser._optionals.title = "Options"
parser.add_argument(
"--path",
"-p",
required=True,
help="path to log file",
)
parser.add_argument(
"--regex",
"-r",
required=True,
help="parsing regex of logfile, must include groups userid and datetime",
)
parser.add_argument(
"--datetime_format",
"-d",
required=True,
help="datetime format of log file",
)
parser.add_argument(
"--logins",
"-l",
type=check_positive,
required=True,
help="maximal number of logins",
)
parser.add_argument(
"--seconds",
"-s",
type=check_positive,
required=True,
help="time interval for logins check",
)
args = parser.parse_args()
return args.path, args.regex, args.datetime_format, args.logins, args.seconds
def main():
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment