1
2
3
4
5
6
7
8
9
10
11 import logging
12 log = logging.getLogger("zen.EventView")
13
14 from decorator import decorator
15 from copy import deepcopy
16 from AccessControl import ClassSecurityInfo, getSecurityManager
17 from Globals import InitializeClass
18 from zope.interface import Interface, implements
19
20 from Products.Zuul import getFacade
21 from Products.ZenUtils.guid.interfaces import IGlobalIdentifier
22 from Products.ZenWidgets import messaging
23 from zenoss.protocols.services import ServiceResponseError
24 from zenoss.protocols.services.zep import ZepConnectionError
25 from zenoss.protocols.protobufs.zep_pb2 import (STATUS_NEW, STATUS_ACKNOWLEDGED, SEVERITY_CRITICAL,
26 SEVERITY_ERROR, SEVERITY_WARNING, SEVERITY_INFO,
27 SEVERITY_DEBUG)
30 """
31 Marker interface for objects which have event views.
32 """
33
35 def outer(func):
36 def inner(func, self, *args, **kwargs):
37 try:
38 return func(self, *args, **kwargs)
39 except ZepConnectionError, e:
40 msg = 'Connection refused. Check zeneventserver status on <a href="/zport/About/zenossInfo">Daemons</a>'
41 messaging.IMessageSender(self).sendToBrowser("ZEP connection error",
42 msg,
43 priority=messaging.CRITICAL,
44 sticky=True)
45 log.warn("Could not connect to ZEP")
46 return deepcopy(retval)
47 return decorator(inner, func)
48 return outer
49
51 """
52 This class provides convenience methods for retrieving events to any subclass. Note that
53 this class is currently transitioning between the old event system and ZEP. Most of the methods
54 are marked as deprecated except those that go through ZEP.
55
56 """
57 implements(IEventView)
58
59 security = ClassSecurityInfo()
60
62 """Return the current event manager for this object.
63 """
64 if table=='history':
65 return self.ZenEventHistory
66 return self.ZenEventManager
67
69 """Return the status number for this device of class statClass.
70 """
71
72 f = self.getStatus
73 return self.convertStatus(f(statclass, **kwargs))
74
75 @zepConnectionError(())
77 """Return an event summary list for this managed entity.
78 """
79 zep = getFacade('zep', self.dmd)
80 sevsum = []
81 try:
82
83 sevs = (SEVERITY_CRITICAL,SEVERITY_ERROR,SEVERITY_WARNING,SEVERITY_INFO,SEVERITY_DEBUG)
84 severities = zep.getEventSeveritiesByUuid(self.getUUID(), severities=sevs)
85 getCssClass = self.getEventManager().getEventCssClass
86 for sev in sorted(severities.keys(), reverse=True):
87 if sev < severity:
88 continue
89 counts = severities[sev]
90 count = counts.get('count', 0)
91 acked = counts.get('acknowledged_count', 0)
92 sevsum.append([getCssClass(sev), acked, count])
93 except TypeError, e:
94 log.warn("Attempted to query events for %r which does not have a uuid" % self)
95 return sevsum
96
101
106
109
117
118 security.declareProtected('Manage Events','manage_ackEvents')
119 @zepConnectionError()
121 """Set event state from this managed entity.
122 """
123 if not evids:
124 self._redirectToEventConsole("No events to acknowledge", REQUEST)
125 return
126
127 zep = getFacade('zep', self.dmd)
128 if isinstance(evids, basestring):
129 evids = [evids]
130
131 try:
132 evids_filter = zep.createEventFilter(uuid=evids)
133 zep.acknowledgeEventSummaries(eventFilter=evids_filter)
134 self._redirectToEventConsole("Acknowledged events: %s" % ", ".join(evids), REQUEST)
135 except ServiceResponseError, e:
136 self._redirectToEventConsole("Error acknowledging events: %s" % str(e), REQUEST)
137
138 security.declareProtected('Manage Events','manage_deleteEvents')
139 @zepConnectionError()
141 """Delete events from this managed entity.
142 """
143 if not evids:
144 self._redirectToEventConsole("No events to close", REQUEST)
145 return
146
147 zep = getFacade('zep', self.dmd)
148 if isinstance(evids, basestring):
149 evids = [evids]
150 try:
151 evids_filter = zep.createEventFilter(uuid=evids)
152 zep.closeEventSummaries(eventFilter=evids_filter)
153 self._redirectToEventConsole("Closed events: %s" % ", ".join(evids), REQUEST)
154 except ServiceResponseError, e:
155 self._redirectToEventConsole("Error Closing events: %s" % str(e), REQUEST)
156
157 security.declareProtected('Manage Events','manage_undeleteEvents')
158 @zepConnectionError()
160 """Delete events from this managed entity.
161 """
162 if not evids:
163 self._redirectToEventConsole("No events to reopen", REQUEST)
164 return
165
166 zep = getFacade('zep', self.dmd)
167 if isinstance(evids, basestring):
168 evids = [evids]
169 try:
170 evids_filter = zep.createEventFilter(uuid=evids)
171 zep.reopenEventSummaries(eventFilter=evids_filter)
172 self._redirectToEventConsole("Reopened events: %s" % ", ".join(evids), REQUEST)
173 except ServiceResponseError, e:
174 self._redirectToEventConsole("Error Reopening events: %s" % str(e), REQUEST)
175
176 @zepConnectionError(0)
177 - def getStatus(self, statusclass=None, **kwargs):
178 """
179 Return the status number for this device of class statClass.
180 """
181 zep = getFacade('zep', self.dmd)
182 try:
183 event_filter = zep.createEventFilter(tags=[self.getUUID()],
184 severity=[SEVERITY_WARNING,SEVERITY_ERROR,SEVERITY_CRITICAL],
185 status=[STATUS_NEW,STATUS_ACKNOWLEDGED],
186 event_class=filter(None, [statusclass]))
187 except TypeError, e:
188 log.warn("Attempted to query events for %r which does not have a uuid" % self)
189 return 0
190 result = zep.getEventSummaries(0, filter=event_filter, limit=0)
191 return int(result['total'])
192
195
196 @zepConnectionError({})
198 """
199 Uses the zep facade to return a list of
200 event summaries for this entity
201 """
202 zep = getFacade('zep', self.dmd)
203 try:
204
205 sevs = (SEVERITY_CRITICAL,SEVERITY_ERROR,SEVERITY_WARNING,SEVERITY_INFO,SEVERITY_DEBUG)
206 severities = zep.getEventSeveritiesByUuid(self.getUUID(), severities=sevs)
207 except TypeError, e:
208 log.warn("Attempted to query events for %r which does not have a uuid" % self)
209 return {}
210 results = dict((zep.getSeverityName(sev).lower(), counts) for (sev, counts) in severities.iteritems())
211 return results
212
213 @zepConnectionError(0)
215 """
216 Uses Zep to return the worst severity for this object
217 """
218 zep = getFacade('zep', self.dmd)
219 try:
220 result = zep.getWorstSeverityByUuid(self.getUUID())
221 except TypeError, e:
222 log.warn("Attempted to query events for %r which does not have a uuid" % self)
223 result = 0
224 return result
225
226 InitializeClass(EventView)
227