1
0
Эх сурвалжийг харах

Update 'plugins/edirectory_monitor/agent_based/edirectory_monitor.py'

Michael Honkoop 4 сар өмнө
parent
commit
cabc1dd03d

+ 22 - 2
plugins/edirectory_monitor/agent_based/edirectory_monitor.py

@@ -7,6 +7,7 @@
 from typing import Dict
 import datetime
 import pytz
+import time
 from dateutil import tz
 import re
 from cmk.agent_based.v2 import (
@@ -18,6 +19,9 @@ from cmk.agent_based.v2 import (
     Service,
     State,
     Metric,
+    get_rate,
+    get_value_store,
+    GetRateError,
 )
 
 non_graphable = [
@@ -44,6 +48,11 @@ time_attributes = [
     "CheckPointThreadStartTime",
 ]
 
+total_counters = [
+    "inBytes",
+    "outBytes",
+]
+
 def format_partition_agent(value):
     formatted = re.sub('CN=|OU=|O=|T=', '', value).replace("=", " ").replace(" ", "").split("#")
     return formatted
@@ -82,16 +91,27 @@ def check_edirectory_items(item: str, section) -> CheckResult:
         return
     for key, value in data.items():
         if key in time_attributes_ignored:
+            '''do not iternate keys which only hold a timestamp'''
             continue
-        if key in uptime_attributes:
+        elif key in uptime_attributes:
+            '''create readable notation of uptime attributes from seconds'''
             uptime = datetime.timedelta(seconds=float(value))
             yield Result(state=State(0), summary=f"{key}: {uptime}", details=f"{key}: {uptime}")
         elif key in time_attributes:
+            '''if a timestamp attribute is not ignored, convert it to local time in (human) readable format'''
             datevalue = convert_timestamp(value)
             yield Result(state=State(0), summary=f"{key}: {datevalue}", details=f"{key}: {datevalue}")
         else:
             yield Result(state=State(0), summary=f"{key}: {value}", details=f"{key}: {value}")
-        if key not in non_graphable:
+        if key in total_counters:
+            try:
+                value = get_rate(get_value_store(), key, time.time(), float(value), raise_overflow=True)
+            except GetRateError:
+                value = 0
+            yield Metric(key, value, boundaries=(0, None))
+
+        elif key not in non_graphable:
+            '''Only create metrics for graphable values'''
             yield Metric(key, float(value))
 
 agent_section_edirectory_monitor = AgentSection(