add dhcp.leases file size chart to Parse statistics family
lgz committed
Dec 24, 2016 at 02:11 UTC
32c9f42c249ddf17b5dadab0ba30f2ac1a92bfd1
1 file changed
+12
-6
python.d/isc_dhcpd.chart.py
+12
-6
@@ -5,6 +5,7 @@
5
from base import SimpleService
6
from re import compile
7
from time import mktime, strptime, gmtime, time
8
+from os import stat
9
try:
10
from ipaddress import IPv4Address as ipaddress
11
from ipaddress import ip_network
@@ -46,7 +47,7 @@ class Service(SimpleService):
47
return False
48
49
# Creating dynamic charts
49
- self.order = ['parse_time', 'utilization']
50
+ self.order = ['parse_time', 'leases_size', 'utilization']
51
self.definitions = {'utilization':
52
{'options':
53
[None, 'Pools utilization', 'used %', 'Utulization', 'isc_dhcpd.util', 'line'],
@@ -54,7 +55,11 @@ class Service(SimpleService):
55
'parse_time':
56
{'options':
57
[None, 'Parse time', 'ms', 'Parse statistics', 'isc_dhcpd.parse', 'line'],
57
- 'lines': [['ptime', 'time', 'absolute']]}}
58
+ 'lines': [['ptime', 'time', 'absolute']]},
59
+ 'leases_size':
60
+ {'options':
61
+ [None, 'dhcpd.leases file size', 'kilobytes', 'Parse statistics', 'isc_dhcpd.lsize', 'line'],
62
+ 'lines': [['lsize', 'size', 'absolute']]}}
63
for pool in self.pools:
64
self.definitions['utilization']['lines'].append([''.join(['ut_', pool]), pool, 'absolute'])
65
self.order.append(''.join(['leases_', pool]))
@@ -111,7 +116,7 @@ class Service(SimpleService):
116
[raw_leases[0][_] for _ in range(1, raw_leases[1], 2)]))
117
118
# Result: [active binding, active binding....]. (Expire time (ends date;) - current time > 0)
114
- active_leases = [k for k, v in all_leases.items() if is_bind_active(all_leases[k])]
119
+ active_leases = [k for k, v in all_leases.items() if is_binding_active(all_leases[k])]
120
121
# Result: {pool: number of active bindings in pool, ...}
122
pools_count = {pool: len([lease for lease in active_leases if is_address_in(lease, pool)])
@@ -128,14 +133,15 @@ class Service(SimpleService):
133
# Bulding dicts to send to netdata
134
final_count = {''.join(['le_', k]): v for k, v in pools_count.items()}
135
final_util = {''.join(['ut_', k]): v for k, v in pools_util.items()}
131
-
132
- to_netdata = {'ptime': int(raw_leases[2])}
136
+
137
+ to_netdata = {'lsize': int(stat(self.leases_path)[6] / 1024)}
138
+ to_netdata.update({'ptime': int(raw_leases[2])})
139
to_netdata.update(final_util)
140
to_netdata.update(final_count)
141
142
return to_netdata
143
138
-def is_bind_active(binding):
144
+def is_binding_active(binding):
145
return mktime(strptime(binding, '%w %Y/%m/%d %H:%M:%S')) - mktime(gmtime()) > 0
146
147
def is_address_in(address, pool):