Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env python
- import Globals
- from Products.ZenUtils.ZenScriptBase import ZenScriptBase
- from transaction import commit
- dmd = ZenScriptBase(connect=True).dmd
- from Products.ZenUtils import Time
- from subprocess import call
- from daemon import Daemon
- import sys, time, logging, os, socket, re, subprocess, ConfigParser
- config = ConfigParser.ConfigParser()
- config.read(['zenticket.conf'])
- events = {}
- from daemon import Daemon
- class MyDaemon(Daemon):
- def run(self):
- while True:
- evt = 0
- delevents = []
- for k, v in events.iteritems():
- eventmatch = 0
- for e in dmd.ZenEventManager.getEventList([], "", "lastTime ASC, firstTime ASC"):
- if re.match(k, e.evid):
- eventmatch = 1
- if eventmatch == 0:
- delevents.append(k)
- for e in delevents:
- del events[e]
- for e in dmd.ZenEventManager.getEventList([], "", "lastTime ASC, firstTime ASC"):
- evt = None
- create = 0
- if e.evid in events:
- if e.count > events[e.evid]:
- create = 1
- events[e.evid] = e.count
- evt = dmd.ZenEventManager.getEventDetailFromStatusOrHistory(e.evid)
- else:
- evt = dmd.ZenEventManager.getEventDetailFromStatusOrHistory(e.evid)
- if evt.eventState == 0:
- create = 1
- events[e.evid] = e.count
- else:
- events[e.evid] = e.count
- if evt != None:
- if create == 1:
- ticket = None
- p = None
- if not re.match("Command timed out on device", evt.message) and evt.prodState == 1000 and evt.severity >= 3 and \
- not re.match("Unknown", evt.summary) and not re.match("/Discovered", evt.DeviceClass):
- groupmatch = 0
- for s in config.sections():
- groups = evt.DeviceGroups
- groups = groups.split('|')
- for g in groups:
- if not re.match('^$', str(e)):
- if re.match(str(config.get(s, "group1")), str(g)) or re.match(str(config.get(s, "group2")), str(g)) or \
- re.match(str(config.get(s, "group3")), str(g)) or re.match(str(config.get(s, "group4")), str(g)) or \
- re.match(str(config.get(s, "group5")), str(g)):
- groupmatch = 1
- custid = config.get(s, "id")
- if groupmatch == 1:
- if os.path.exists('/home/zenoss/zenticket/create_ticket.pl'):
- p = subprocess.Popen(['/home/zenoss/zenticket/create_ticket.pl', '-customer', str(custid), '-device',
- str(evt.device), '-deviceIP', str(evt.ipAddress), '-collector', socket.getfqdn(),
- '-first', str(evt.firstTime), '-last', str(evt.lastTime), '-count', str(evt.count),
- '-summary', str(evt.summary), '-noteTitle', 'System Monitor Error', '-note',
- str(evt.message), '-severity', str(evt.severity), '-group', str(evt.DeviceGroups),
- '-impact', str(evt.DevicePriority), '-component', str(evt.component),
- '-queue', 'Front Line'], stdout=subprocess.PIPE)
- if p:
- ticket = int(p.stdout.read())
- else:
- ticket = 0
- if ticket > 0:
- eventli = [evt.evid]
- dmd.ZenEventManager.manage_setEventStates(1, eventli)
- else:
- dmd.ZenEventManager.manage_deleteEvents(evt.evid)
- time.sleep(30)
- if __name__ == "__main__":
- daemon = MyDaemon('/tmp/ticket_create.pid')
- if len(sys.argv) == 2:
- if 'start' == sys.argv[1]:
- if os.path.exists('/home/zenoss/zenticket/zenticket.conf'):
- print 'starting...'
- daemon.start()
- else:
- print 'zenticket.conf is missing, aborting start.'
- elif 'stop' == sys.argv[1]:
- print 'stopping...'
- daemon.stop()
- elif 'restart' == sys.argv[1]:
- print 'stopping...'
- daemon.stop()
- if os.path.exists('/home/zenoss/zenticket/zenticket.conf'):
- print 'starting...'
- daemon.start()
- else:
- print 'zenticket.conf is missing, aborting start.'
- else:
- print "Unknown command"
- sys.exit(2)
- sys.exit(0)
- else:
- print "usage: %s start|stop|restart" % sys.argv[0]
- sys.exit(2)
Advertisement
Add Comment
Please, Sign In to add comment