/
vaneq-server-info-monitor.py
83 lines (72 loc) · 2.95 KB
/
vaneq-server-info-monitor.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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
import psycopg2
import graphitesend
import threading
import logging
from psycopg2.extras import RealDictCursor
from psycopg2.pool import SimpleConnectionPool
from datetime import timedelta
event = threading.Event()
g = graphitesend.init(prefix='server_status',
graphite_server='localhost', system_name='')
logging.basicConfig(level=logging.INFO,
format='%(asctime)s %(levelname)s - %(message)s')
class GetVaneQServersInfo:
def __init__(self, **kwargs):
self.pool = SimpleConnectionPool(minconn=2, maxconn=5, **kwargs)
self.filter_item = ['name', 'mac_address', 'version', 'capabilities',
'drb_uri', 'ipaddress', 'upgrade_message', 'build', 'guid']
def _get_data(self, conn):
with conn.cursor(cursor_factory=RealDictCursor) as cur:
cur.execute('SELECT * FROM miq_servers')
result = cur.fetchall()
return result
def _parse_data(self, conn):
while not event.is_set():
data = self._get_data(conn)
result = {}
for server in data:
hostname = server.pop('hostname')
for item in self.filter_item:
server.pop(item)
for key, value in server.items():
new_key = '{}.{}'.format(hostname, key)
if value is None or value is False:
result[new_key] = 0
continue
elif value is True:
result[new_key] = 1
continue
if key in ('last_heartbeat', 'started_on',
'stopped_on', 'last_update_check'):
result[new_key] = (
value + timedelta(hours=8)).strftime('%Y%m%d%H%M')
elif key in ('memory_size', 'memory_usage',
'proportional_set_size'):
result[new_key] = int(value)
elif key == 'status':
if value == 'started':
result[new_key] = 1
else:
result[new_key] = 0
else:
result[new_key] = str(value)
yield result
def _send_data(self, data):
g.send_dict(data)
def main(self):
while not event.is_set():
conn = self.pool.getconn()
for data in self._parse_data(conn):
self._send_data(data)
logging.info(data)
event.wait(5)
if __name__ == '__main__':
try:
q = GetVaneQServersInfo(host='192.168.20.103',
port=5432,
user='root',
password='smartvm',
database='vmdb_production')
q.main()
except KeyboardInterrupt:
event.is_set()