lib.py 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. #!/usr/bin/env python3
  2. '''functions used by multiple parts of the plugin'''
  3. # -*- encoding: utf-8; py-indent-offset: 4 -*-
  4. # (c) Michael Honkoop <mhonkoop@comsolve.nl>
  5. # License: GNU General Public License v2
  6. import re
  7. import pytz
  8. import datetime
  9. from dateutil import tz
  10. from cmk.agent_based.v2 import (
  11. DiscoveryResult,
  12. Service,
  13. )
  14. uptime_attributes = [
  15. "Status_eDirectoryUpTime",
  16. ]
  17. time_attributes = [
  18. "Status_eDirectorySystemCurrTime",
  19. "CheckPointThreadData_CheckPointThreadStartTime",
  20. ]
  21. time_attributes_ignored = [
  22. "BackGroundProcInterval",
  23. "CheckPointThreadData_CheckPointThreadForceStartTime",
  24. "CheckPointThreadData_CheckPointThreadStartTime",
  25. ]
  26. non_graphable_attributes = [
  27. "Status_eDirectorySystemCurrTime",
  28. "Status_eDirectoryUpTime",
  29. "Status_eDirectoryAgentVersion",
  30. "CheckPointThreadData_CheckPointThreadStartTime",
  31. "CheckPointThreadData_CheckPointThreadForceStartTime",
  32. "CheckPointThreadData_CheckPointThreadIsForced",
  33. "Size_CurrentTransactionID",
  34. "EngineVersion_EngineVersion",
  35. "driverSet_Stats_driverSetDN",
  36. "Driver_startOption",
  37. "Driver_type",
  38. "Driver_uptime",
  39. "Driver_driver-state",
  40. "Driver_DriverDN",
  41. ]
  42. total_counter_attributes = [
  43. "TrafficVolume_inBytes",
  44. "TrafficVolume_outBytes",
  45. "Errors_securityErrors",
  46. "Errors_errors",
  47. "Bindings_simpleAuthBinds",
  48. "Bindings_unAuthBinds",
  49. "Bindings_bindSecurityErrors",
  50. "Bindings_strongAuthBinds",
  51. "IncomingOperations_extendedOps",
  52. "IncomingOperations_abandonOps",
  53. "IncomingOperations_wholeSubtreeSearchOps",
  54. "IncomingOperations_oneLevelSearchOps",
  55. "IncomingOperations_searchOps",
  56. "IncomingOperations_listOps",
  57. "IncomingOperations_modifyRDNOps",
  58. "IncomingOperations_modifyEntryOps",
  59. "IncomingOperations_removeEntryOps",
  60. "IncomingOperations_addEntryOps",
  61. "IncomingOperations_compareOps",
  62. "IncomingOperations_readOps",
  63. "IncomingOperations_inOps",
  64. "OutgoingOperations_chainings",
  65. "CacheFaultLooks_Total",
  66. "CacheFaultLooks_BlockCache",
  67. "CacheFaultLooks_EntryCache",
  68. "Hits_Total",
  69. "Hits_BlockCache",
  70. "Hits_EntryCache",
  71. "HitLooks_Total",
  72. "HitLooks_BlockCache",
  73. "HitLooks_EntryCache",
  74. ]
  75. def format_partition_agent(value):
  76. """strip unwanted data from Agent Partition data"""
  77. formatted = re.sub('CN=|OU=|O=|T=', '', value).replace("=", " ").replace(" ", "").split("#")
  78. return formatted
  79. def format_partition_data(value):
  80. """strip unwanted data from Agent Partition data"""
  81. formatted = (re.sub('CN=|OU=|O=', '', value).replace(',', '.')).split("=")
  82. return formatted
  83. def convert_timestamp(value):
  84. """convert Zulu time to current time in local timezone"""
  85. utc_dt = datetime.datetime.strptime(str(value), "%Y%m%d%H%M%SZ")
  86. utc = pytz.utc
  87. utc_dt = utc_dt.replace(tzinfo=tz.UTC)
  88. local_tz = tz.tzlocal()
  89. local_dt = utc_dt.astimezone(local_tz)
  90. return local_dt
  91. def parse_ldap_data(string_table):
  92. """parse one lines of data to dictionary"""
  93. parsed = {}
  94. for line in string_table:
  95. item = line[0]
  96. parsed.setdefault(item, {})
  97. for _count, data in enumerate(line[1:]):
  98. if item == "Agent Partition":
  99. key, value=format_partition_agent(data)
  100. else:
  101. #key, value=data.split("=")
  102. key, value=format_partition_data(data)
  103. parsed[item].setdefault(key, value)
  104. return parsed
  105. def discover_edirectory_items(section) -> DiscoveryResult:
  106. '''discover one item per key'''
  107. for key, data in section.items():
  108. print(key.strip())
  109. if len(key) != 0:
  110. yield Service(item=key)