Guest User

Untitled

a guest
Nov 9th, 2009
445
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 5.53 KB | None | 0 0
  1. #!/usr/bin/env python
  2.  
  3. import Globals
  4. from Products.ZenUtils.ZenScriptBase import ZenScriptBase
  5. from transaction import commit
  6.  
  7. dmd = ZenScriptBase(connect=True).dmd
  8.  
  9. from Products.ZenUtils import Time
  10. from subprocess import call
  11. from daemon import Daemon
  12. import sys, time, logging, os, socket, re, subprocess, ConfigParser
  13.  
  14. config = ConfigParser.ConfigParser()
  15. config.read(['zenticket.conf'])
  16.  
  17. events = {}
  18.  
  19. from daemon import Daemon
  20.  
  21. class MyDaemon(Daemon):
  22.     def run(self):
  23.         while True:
  24.             evt = 0
  25.             delevents = []
  26.             for k, v in events.iteritems():
  27.                 eventmatch = 0
  28.                 for e in dmd.ZenEventManager.getEventList([], "", "lastTime ASC, firstTime ASC"):
  29.                     if re.match(k, e.evid):
  30.                         eventmatch = 1
  31.                 if eventmatch == 0:
  32.                     delevents.append(k)
  33.  
  34.             for e in delevents:
  35.                 del events[e]
  36.  
  37.             for e in dmd.ZenEventManager.getEventList([], "", "lastTime ASC, firstTime ASC"):
  38.                 evt = None
  39.                 create = 0
  40.                 if e.evid in events:
  41.                     if e.count > events[e.evid]:
  42.                         create = 1
  43.                         events[e.evid] = e.count
  44.                         evt = dmd.ZenEventManager.getEventDetailFromStatusOrHistory(e.evid)
  45.                 else:
  46.                     evt = dmd.ZenEventManager.getEventDetailFromStatusOrHistory(e.evid)
  47.                     if evt.eventState == 0:
  48.                         create = 1
  49.                         events[e.evid] = e.count
  50.                     else:
  51.                         events[e.evid] = e.count
  52.  
  53.                 if evt != None:
  54.                     if create == 1:
  55.                         ticket = None
  56.                         p = None
  57.  
  58.                         if not re.match("Command timed out on device", evt.message) and evt.prodState == 1000 and evt.severity >= 3 and \
  59.                             not re.match("Unknown", evt.summary) and not re.match("/Discovered", evt.DeviceClass):
  60.  
  61.                             groupmatch = 0
  62.  
  63.                             for s in config.sections():
  64.                                 groups = evt.DeviceGroups
  65.                                 groups = groups.split('|')
  66.                                 for g in groups:
  67.                                     if not re.match('^$', str(e)):
  68.                                         if re.match(str(config.get(s, "group1")), str(g)) or re.match(str(config.get(s, "group2")), str(g)) or \
  69.                                             re.match(str(config.get(s, "group3")), str(g)) or re.match(str(config.get(s, "group4")), str(g)) or \
  70.                                             re.match(str(config.get(s, "group5")), str(g)):
  71.  
  72.                                             groupmatch = 1
  73.                                             custid = config.get(s, "id")
  74.  
  75.                             if groupmatch == 1:
  76.                                 if os.path.exists('/home/zenoss/zenticket/create_ticket.pl'):
  77.                                     p = subprocess.Popen(['/home/zenoss/zenticket/create_ticket.pl', '-customer', str(custid), '-device',
  78.                                                                 str(evt.device), '-deviceIP', str(evt.ipAddress), '-collector', socket.getfqdn(),
  79.                                                                 '-first', str(evt.firstTime), '-last', str(evt.lastTime), '-count', str(evt.count),
  80.                                                                 '-summary', str(evt.summary), '-noteTitle', 'System Monitor Error', '-note',
  81.                                                                 str(evt.message), '-severity', str(evt.severity), '-group', str(evt.DeviceGroups),
  82.                                                                 '-impact', str(evt.DevicePriority), '-component', str(evt.component),
  83.                                                                 '-queue', 'Front Line'], stdout=subprocess.PIPE)
  84.  
  85.                             if p:
  86.                                 ticket = int(p.stdout.read())
  87.                             else:
  88.                                 ticket = 0
  89.  
  90.                             if ticket > 0:
  91.                                 eventli = [evt.evid]
  92.                                 dmd.ZenEventManager.manage_setEventStates(1, eventli)                        
  93.  
  94.                         else:
  95.                             dmd.ZenEventManager.manage_deleteEvents(evt.evid)
  96.  
  97.             time.sleep(30)
  98.  
  99.  
  100. if __name__ == "__main__":
  101.     daemon = MyDaemon('/tmp/ticket_create.pid')
  102.     if len(sys.argv) == 2:
  103.         if 'start' == sys.argv[1]:
  104.                         if os.path.exists('/home/zenoss/zenticket/zenticket.conf'):
  105.                             print 'starting...'
  106.                 daemon.start()
  107.                         else:
  108.                             print 'zenticket.conf is missing, aborting start.'
  109.         elif 'stop' == sys.argv[1]:
  110.                         print 'stopping...'
  111.             daemon.stop()
  112.         elif 'restart' == sys.argv[1]:
  113.                         print 'stopping...'
  114.             daemon.stop()
  115.                         if os.path.exists('/home/zenoss/zenticket/zenticket.conf'):
  116.                             print 'starting...'
  117.                             daemon.start()
  118.                         else:
  119.                             print 'zenticket.conf is missing, aborting start.'
  120.         else:
  121.             print "Unknown command"
  122.             sys.exit(2)
  123.         sys.exit(0)
  124.     else:
  125.         print "usage: %s start|stop|restart" % sys.argv[0]
  126.         sys.exit(2)
Advertisement
Add Comment
Please, Sign In to add comment