|
@@ -7,6 +7,7 @@
|
|
from typing import Dict
|
|
from typing import Dict
|
|
import datetime
|
|
import datetime
|
|
import pytz
|
|
import pytz
|
|
|
|
+import time
|
|
from dateutil import tz
|
|
from dateutil import tz
|
|
import re
|
|
import re
|
|
from cmk.agent_based.v2 import (
|
|
from cmk.agent_based.v2 import (
|
|
@@ -18,6 +19,9 @@ from cmk.agent_based.v2 import (
|
|
Service,
|
|
Service,
|
|
State,
|
|
State,
|
|
Metric,
|
|
Metric,
|
|
|
|
+ get_rate,
|
|
|
|
+ get_value_store,
|
|
|
|
+ GetRateError,
|
|
)
|
|
)
|
|
|
|
|
|
non_graphable = [
|
|
non_graphable = [
|
|
@@ -44,6 +48,11 @@ time_attributes = [
|
|
"CheckPointThreadStartTime",
|
|
"CheckPointThreadStartTime",
|
|
]
|
|
]
|
|
|
|
|
|
|
|
+total_counters = [
|
|
|
|
+ "inBytes",
|
|
|
|
+ "outBytes",
|
|
|
|
+]
|
|
|
|
+
|
|
def format_partition_agent(value):
|
|
def format_partition_agent(value):
|
|
formatted = re.sub('CN=|OU=|O=|T=', '', value).replace("=", " ").replace(" ", "").split("#")
|
|
formatted = re.sub('CN=|OU=|O=|T=', '', value).replace("=", " ").replace(" ", "").split("#")
|
|
return formatted
|
|
return formatted
|
|
@@ -82,16 +91,27 @@ def check_edirectory_items(item: str, section) -> CheckResult:
|
|
return
|
|
return
|
|
for key, value in data.items():
|
|
for key, value in data.items():
|
|
if key in time_attributes_ignored:
|
|
if key in time_attributes_ignored:
|
|
|
|
+ '''do not iternate keys which only hold a timestamp'''
|
|
continue
|
|
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))
|
|
uptime = datetime.timedelta(seconds=float(value))
|
|
yield Result(state=State(0), summary=f"{key}: {uptime}", details=f"{key}: {uptime}")
|
|
yield Result(state=State(0), summary=f"{key}: {uptime}", details=f"{key}: {uptime}")
|
|
elif key in time_attributes:
|
|
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)
|
|
datevalue = convert_timestamp(value)
|
|
yield Result(state=State(0), summary=f"{key}: {datevalue}", details=f"{key}: {datevalue}")
|
|
yield Result(state=State(0), summary=f"{key}: {datevalue}", details=f"{key}: {datevalue}")
|
|
else:
|
|
else:
|
|
yield Result(state=State(0), summary=f"{key}: {value}", details=f"{key}: {value}")
|
|
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))
|
|
yield Metric(key, float(value))
|
|
|
|
|
|
agent_section_edirectory_monitor = AgentSection(
|
|
agent_section_edirectory_monitor = AgentSection(
|