Coverage for osm_mon/cmd/mon_healthcheck.py: 0%

38 statements  

« prev     ^ index     » next       coverage.py v7.6.12, created at 2025-05-06 19:04 +0000

1# Copyright 2018 Whitestack, LLC 

2# ************************************************************* 

3 

4# This file is part of OSM Monitoring module 

5# All Rights Reserved to Whitestack, LLC 

6 

7# Licensed under the Apache License, Version 2.0 (the "License"); you may 

8# not use this file except in compliance with the License. You may obtain 

9# a copy of the License at 

10 

11# http://www.apache.org/licenses/LICENSE-2.0 

12 

13# Unless required by applicable law or agreed to in writing, software 

14# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 

15# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 

16# License for the specific language governing permissions and limitations 

17# under the License. 

18 

19# For those usages not covered by the Apache License, Version 2.0 please 

20# contact: bdiaz@whitestack.com or glavado@whitestack.com 

21## 

22import argparse 

23import logging 

24import subprocess 

25import sys 

26 

27import requests 

28 

29log = logging.getLogger(__name__) 

30 

31 

32def main(): 

33 parser = argparse.ArgumentParser(prog="osm-mon-healthcheck") 

34 parser.add_argument("--config-file", nargs="?", help="MON configuration file") 

35 # args = parser.parse_args() 

36 # cfg = Config(args.config_file) 

37 

38 if not _processes_running(): 

39 sys.exit(1) 

40 if not _is_prometheus_exporter_ok(): 

41 sys.exit(1) 

42 sys.exit(0) 

43 

44 

45def _processes_running(): 

46 def _contains_process(processes, process_name): 

47 for row in processes: 

48 if process_name in row: 

49 return True 

50 return False 

51 

52 processes_to_check = ["osm-mon-collector", "osm-mon-evaluator", "osm-mon-server"] 

53 ps = subprocess.Popen(["ps", "aux"], stdout=subprocess.PIPE).communicate()[0] 

54 processes_running = ps.decode().split("\n") 

55 for p in processes_to_check: 

56 if not _contains_process(processes_running, p): 

57 log.error("Process %s not running!" % p) 

58 return False 

59 return True 

60 

61 

62def _is_prometheus_exporter_ok(): 

63 try: 

64 r = requests.get("http://localhost:8000") 

65 r.raise_for_status() 

66 return True 

67 except Exception: 

68 log.exception("MON Prometheus exporter is not running") 

69 return False 

70 

71 

72if __name__ == "__main__": 

73 main()