-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.py
67 lines (61 loc) · 1.91 KB
/
main.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
import psutil
import argparse
import logging
import sys
# Configure logging
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s - %(levelname)s - %(message)s',
handlers=[
logging.FileHandler("monitor_services.log"),
logging.StreamHandler(sys.stdout)
]
)
def setup_argparse():
"""
Set up command line argument parsing.
"""
parser = argparse.ArgumentParser(
description="Monitor critical service status and provide alerts."
)
parser.add_argument(
'--services',
type=str,
nargs='+',
required=True,
help="List of services to monitor, separated by spaces."
)
return parser.parse_args()
def monitor_services(service_names):
"""
Monitor the status of the specified services.
Args:
service_names (list): List of service names to monitor.
"""
try:
for service_name in service_names:
service_found = False
for service in psutil.win_service_iter():
if service.name().lower() == service_name.lower():
service_found = True
service_status = service.status()
logging.info(f"Service '{service_name}' is {service_status}.")
if service_status != "running":
logging.warning(f"Service '{service_name}' is not running!")
break
if not service_found:
logging.error(f"Service '{service_name}' not found.")
except Exception as e:
logging.error(f"An error occurred while monitoring services: {e}")
def main():
"""
Main function to execute the service monitoring tool.
"""
try:
args = setup_argparse()
monitor_services(args.services)
except Exception as e:
logging.critical(f"Critical error in main execution: {e}")
sys.exit(1)
if __name__ == "__main__":
main()