1 # Copyright 2018 Whitestack, LLC
2 # *************************************************************
4 # This file is part of OSM Monitoring module
5 # All Rights Reserved to Whitestack, LLC
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
11 # http://www.apache.org/licenses/LICENSE-2.0
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
19 # For those usages not covered by the Apache License, Version 2.0 please
20 # contact: bdiaz@whitestack.com or glavado@whitestack.com
29 from aiokafka
import AIOKafkaConsumer
31 from osm_mon
.core
.config
import Config
33 log
= logging
.getLogger(__name__
)
37 parser
= argparse
.ArgumentParser(prog
='osm-mon-healthcheck')
38 parser
.add_argument('--config-file', nargs
='?', help='MON configuration file')
39 args
= parser
.parse_args()
40 cfg
= Config(args
.config_file
)
42 if not _processes_running():
44 if not _is_kafka_ok(cfg
.get('message', 'host'), cfg
.get('message', 'port')):
46 if not _is_prometheus_exporter_ok():
51 def _processes_running():
52 def _contains_process(processes
, process_name
):
54 if process_name
in row
:
58 processes_to_check
= ['osm-mon-collector', 'osm-mon-evaluator', 'osm-mon-server']
59 ps
= subprocess
.Popen(['ps', 'aux'], stdout
=subprocess
.PIPE
).communicate()[0]
60 processes_running
= ps
.decode().split('\n')
61 for p
in processes_to_check
:
62 if not _contains_process(processes_running
, p
):
67 def _is_prometheus_exporter_ok():
69 r
= requests
.get('http://localhost:8000')
73 log
.exception("MON Prometheus exporter is not running")
77 def _is_kafka_ok(host
, port
):
78 async def _test_kafka(loop
):
79 consumer
= AIOKafkaConsumer(
81 loop
=loop
, bootstrap_servers
='{}:{}'.format(host
, port
))
82 await consumer
.start()
86 loop
= asyncio
.get_event_loop()
87 loop
.run_until_complete(_test_kafka(loop
))
90 log
.exception("MON can not connect to Kafka")
94 if __name__
== '__main__':