1
2
3
4
5
6
7
8
9
10
11
12
13
14 import urllib
15 from Products.Five.browser import BrowserView
16 from Products.ZenUtils.jsonutils import json
17 from Products.ZenUtils.Utils import unused, formreq
21 """
22 A view for Devices, CustomEventViews and EventViews that provides JSON data
23 to populate the event console widget.
24 """
27
28 @json
29 @formreq
30 - def _getEventsData(self, offset=0, count=50, getTotalCount=True,
31 startdate=None, enddate=None, filter='', severity=2,
32 state=1, orderby='', **kwargs):
33 """
34 Data that populates the event console.
35
36 @return: A JSON representation of a tuple containing a list of lists of
37 event info, and the total number of matching events
38 @rtype: "([[a, b, c], [a, b, c]], 17)"
39 """
40 unused(kwargs)
41
42 context = self.context
43 zem = self._getEventManager()
44
45 if hasattr(context, 'getResultFields'):
46 fields = context.getResultFields()
47 else:
48
49 if hasattr(context, 'event_key'):
50 base = context
51 else:
52 base = zem.dmd.Events
53 fields = zem.lookupManagedEntityResultFields(base.event_key)
54
55 data, totalCount = zem.getEventListME(context,
56 offset=offset, rows=count, resultFields=fields,
57 getTotalCount=getTotalCount, filter=filter, severity=severity,
58 state=state, orderby=orderby, startdate=startdate, enddate=enddate)
59
60 results = [self._extract_data_from_zevent(ev, fields) for ev in data]
61 return (results, totalCount)
62
64 return self.context.dmd.ZenEventManager
65
67 """return a list of data elements that map to the fields parameter.
68 """
69 def _sanitize(val):
70 return val.replace('<', '<').replace('>','>')
71
72 from Products.ZenModel.Device import Device
73 contextIsDevice = isinstance( self.context, Device )
74
75 data = []
76 for field in fields:
77 value = getattr(zevent, field)
78 _shortvalue = str(value) or ''
79 if field == "device":
80 dev = self.context.dmd.searchDevices( value )
81 if len(dev) == 1:
82 devUrl = '%s/viewEvents' % dev[0].getPrimaryUrlPath()
83 value = dev[0].urlLink(url=devUrl)
84 else:
85 value = urllib.quote('<a class="%s"' % ('') +
86 ' href="/zport/dmd/deviceSearchResults'
87 '?query=%s">%s</a>' % (value, _shortvalue))
88 elif field == 'eventClass':
89 _shortvalue = _shortvalue.replace('/','/­')
90 if not zevent.eventPermission:
91 value = _shortvalue
92 else:
93 value = urllib.quote('<a class="%s" ' % ('') +
94 'href="/zport/dmd/Events%s">%s</a>' % (value,_shortvalue))
95 elif field == 'component' and ( getattr(zevent, 'device', None) or
96 contextIsDevice ):
97
98 component = getattr(zevent, 'component')
99 if contextIsDevice:
100 device = self.context.id
101 else:
102 device = getattr(zevent,'device')
103
104 comp = self.context.dmd.searchComponents( device, component )
105 if len(comp) == 1:
106 compUrl = '%s/viewEvents' % comp[0].getPrimaryUrlPath()
107 value = comp[0].urlLink(url=compUrl)
108 else:
109 value = urllib.quote('<a class="%s"' % ('') +
110 ' href="/zport/dmd/searchComponents'
111 '?device=%s&component=%s">%s</a>' % (
112 device, value, _shortvalue))
113 elif field == 'summary':
114 value = urllib.quote(
115 value.replace('<','<').replace('>','>'))
116 elif field == 'prodState':
117 value = self.context.dmd.convertProdState(value)
118 else:
119 value = _shortvalue
120 data.append(value)
121 data.append(zevent.evid)
122 data.append(zevent.getCssClass())
123 return data
124
127 """
128 Get the fields for the event console. This is a separate call so that the
129 header DOM elements can be created first.
130
131 FIXME: Make the event console a single call.
132 """
135
136 @json
156
158 return self.context.dmd.ZenEventManager
159
160
161 -class HistoryConsole(EventConsole):
162 """
163 Same as the event console, only it accesses the history table.
164 """
166 return self.context.dmd.ZenEventHistory
167
168
169 -class HistoryConsoleFields(EventConsoleFields):
170 """
171 Same as the event console fields, only for history.
172
173 FIXME: Is this used anywhere?
174 """
176 return self.context.dmd.ZenEventHistory
177