lib.py 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  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. import time
  10. from dateutil import tz
  11. from cmk.agent_based.v2 import (
  12. get_rate,
  13. GetRateError,
  14. DiscoveryResult,
  15. Service,
  16. )
  17. uptime_attributes = [
  18. "Status_eDirectoryUpTime",
  19. ]
  20. time_attributes = [
  21. "Status_eDirectorySystemCurrTime",
  22. "CheckPointThreadData_CheckPointThreadStartTime",
  23. ]
  24. time_attributes_ignored = [
  25. "BackGroundProcInterval",
  26. "CheckPointThreadData_CheckPointThreadForceStartTime",
  27. "CheckPointThreadData_CheckPointThreadStartTime",
  28. ]
  29. non_graphable = [
  30. "Status_eDirectorySystemCurrTime",
  31. "Status_eDirectoryUpTime",
  32. "Status_eDirectoryAgentVersion",
  33. "CheckPointThreadData_CheckPointThreadStartTime",
  34. "CheckPointThreadData_CheckPointThreadForceStartTime",
  35. "CheckPointThreadData_CheckPointThreadIsForced",
  36. "Size_CurrentTransactionID",
  37. ]
  38. total_counters = [
  39. "Trafficvolume_inBytes",
  40. "Trafficvolume_outBytes",
  41. "Errors_securityErrors",
  42. "Errors_errors",
  43. "Bindings_simpleAuthBinds",
  44. "Bindings_unAuthBinds",
  45. "Bindings_bindSecurityErrors",
  46. "Bindings_strongAuthBinds",
  47. "IncomingOperations_extendedOps",
  48. "IncomingOperations_abandonOps",
  49. "IncomingOperations_wholeSubtreeSearchOps",
  50. "IncomingOperations_oneLevelSearchOps",
  51. "IncomingOperations_searchOps",
  52. "IncomingOperations_listOps",
  53. "IncomingOperations_modifyRDNOps",
  54. "IncomingOperations_modifyEntryOps",
  55. "IncomingOperations_removeEntryOps",
  56. "IncomingOperations_addEntryOps",
  57. "IncomingOperations_compareOps",
  58. "IncomingOperations_readOps",
  59. "IncomingOperations_inOps",
  60. "OutgoingOperations_chainings",
  61. ]
  62. def format_partition_agent(value):
  63. """strip unwanted data from Agent Partition data"""
  64. formatted = re.sub('CN=|OU=|O=|T=', '', value).replace("=", " ").replace(" ", "").split("#")
  65. return formatted
  66. def convert_timestamp(value):
  67. """convert Zulu time to current time in local timezone"""
  68. utc_dt = datetime.datetime.strptime(str(value), "%Y%m%d%H%M%SZ")
  69. utc = pytz.utc
  70. utc_dt = utc_dt.replace(tzinfo=tz.UTC)
  71. local_tz = tz.tzlocal()
  72. local_dt = utc_dt.astimezone(local_tz)
  73. return local_dt
  74. def parse_ldap_data(string_table):
  75. """parse one lines of data to dictionary"""
  76. parsed = {}
  77. for line in string_table:
  78. item = line[0]
  79. parsed.setdefault(item, {})
  80. for _count, data in enumerate(line[1:]):
  81. if item == "Agent Partition":
  82. key, value=format_partition_agent(data)
  83. else:
  84. key, value=data.split("=")
  85. parsed[item].setdefault(key, value)
  86. return parsed
  87. def discover_edirectory_items(section) -> DiscoveryResult:
  88. '''discover one item per key'''
  89. for key, data in section.items():
  90. yield Service(item=key)