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