observium-to-syslog.py 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. #!/usr/local/bin/python
  2. # -*- coding: utf-8 -*-
  3. #
  4. # Copyright (c) 2017-2019 Joe Clarke <jclarke@cisco.com>
  5. # All rights reserved.
  6. #
  7. # Redistribution and use in source and binary forms, with or without
  8. # modification, are permitted provided that the following conditions
  9. # are met:
  10. # 1. Redistributions of source code must retain the above copyright
  11. # notice, this list of conditions and the following disclaimer.
  12. # 2. Redistributions in binary form must reproduce the above copyright
  13. # notice, this list of conditions and the following disclaimer in the
  14. # documentation and/or other materials provided with the distribution.
  15. #
  16. # THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
  17. # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  18. # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  19. # ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
  20. # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  21. # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  22. # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  23. # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  24. # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  25. # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  26. # SUCH DAMAGE.
  27. import sys
  28. import os
  29. import netsnmp
  30. import syslog
  31. import re
  32. import CLEUCreds
  33. MSG = 'Needs investigation: {} (SN: {}) {}'
  34. if __name__ == '__main__':
  35. syslog.openlog(facility=syslog.LOG_LOCAL3)
  36. vars = netsnmp.VarList(netsnmp.Varbind(
  37. 'entPhysicalClass'), netsnmp.Varbind('entPhysicalSerialNum'))
  38. chassis_index = -1
  39. csn = ''
  40. netsnmp.snmpwalk(vars,
  41. Version=3,
  42. DestHost=os.environ['OBSERVIUM_DEVICE_HOSTNAME'],
  43. SecLevel='authPriv',
  44. SecName='CLEUR',
  45. AuthProto='SHA',
  46. AuthPass=CLEUCreds.SNMP_AUTH_PASS,
  47. PrivProto='DES',
  48. PrivPass=CLEUCreds.SNMP_PRIV_PASS)
  49. for var in vars:
  50. if chassis_index == -1:
  51. if var.tag == 'entPhysicalClass':
  52. if int(var.val) == 3:
  53. chassis_index = int(var.iid)
  54. elif var.tag == 'entPhysicalSerialNum':
  55. if int(var.iid) == chassis_index:
  56. csn = var.val
  57. msg = MSG.format(os.environ['OBSERVIUM_DEVICE_HOSTNAME'],
  58. csn, os.environ['OBSERVIUM_ALERT_MESSAGE'])
  59. syslog.syslog(syslog.LOG_ERR, msg)