Revision 3d0d254c
Utilisation de idaggregate de préférence par rapport à idevent (permet d'obtenir plus d'informations).
On suppose que la base de données génère les id des events (le corrélateur et le connector-db sont en train d'être modifiés pour suivre ce changement).
Utilisation de HighLevelService plutôt que ServiceHautNiveau.
git-svn-id: https://vigilo-dev.si.c-s.fr/svn@794 b22e2e97-25c9-44ff-b637-2e5ceca36478
vigiboard/controllers/root.py | ||
---|---|---|
17 | 17 |
from vigiboard.controllers.vigiboardrequest import VigiboardRequest |
18 | 18 |
from vigiboard.controllers.vigiboard_controller import VigiboardRootController |
19 | 19 |
|
20 |
__all__ = ['RootController']
|
|
20 |
__all__ = ('RootController', )
|
|
21 | 21 |
|
22 | 22 |
class RootController(VigiboardRootController): |
23 | 23 |
|
... | ... | |
69 | 69 |
page = 1 |
70 | 70 |
|
71 | 71 |
username = request.environ['repoze.who.identity']['repoze.who.userid'] |
72 |
events = VigiboardRequest(User.by_user_name(username))
|
|
72 |
aggregates = VigiboardRequest(User.by_user_name(username))
|
|
73 | 73 |
|
74 | 74 |
search = { |
75 | 75 |
'host': '', |
... | ... | |
82 | 82 |
search['host'] = host |
83 | 83 |
host = host.replace('%', '\\%').replace('_', '\\_') \ |
84 | 84 |
.replace('*', '%').replace('?', '_') |
85 |
events.add_filter(Event.hostname.like('%%%s%%' % host))
|
|
85 |
aggregates.add_filter(Event.hostname.like('%%%s%%' % host))
|
|
86 | 86 |
|
87 | 87 |
if service : |
88 | 88 |
search['service'] = service |
89 | 89 |
service = service.replace('%', '\\%').replace('_', '\\_') \ |
90 | 90 |
.replace('*', '%').replace('?', '_') |
91 |
events.add_filter(Event.servicename.like('%%%s%%' % service))
|
|
91 |
aggregates.add_filter(Event.servicename.like('%%%s%%' % service))
|
|
92 | 92 |
|
93 | 93 |
if output : |
94 | 94 |
search['output'] = output |
95 | 95 |
output = output.replace('%', '\\%').replace('_', '\\_') \ |
96 | 96 |
.replace('*', '%').replace('?', '_') |
97 |
events.add_filter(Event.message.like('%%%s%%' % output))
|
|
97 |
aggregates.add_filter(Event.message.like('%%%s%%' % output))
|
|
98 | 98 |
|
99 | 99 |
if trouble_ticket : |
100 | 100 |
search['tt'] = trouble_ticket |
101 | 101 |
trouble_ticket = trouble_ticket.replace('%', '\\%') \ |
102 | 102 |
.replace('_', '\\_').replace('*', '%').replace('?', '_') |
103 |
events.add_filter(EventsAggregate.trouble_ticket.like(
|
|
103 |
aggregates.add_filter(EventsAggregate.trouble_ticket.like(
|
|
104 | 104 |
'%%%s%%' % trouble_ticket)) |
105 | 105 |
|
106 | 106 |
# Calcul des éléments à afficher et du nombre de pages possibles |
107 |
total_rows = events.num_rows() |
|
108 |
|
|
107 |
total_rows = aggregates.num_rows() |
|
109 | 108 |
item_per_page = int(config['vigiboard_item_per_page']) |
110 | 109 |
|
111 |
if total_rows <= item_per_page * (page-1) :
|
|
110 |
if total_rows <= item_per_page * (page-1): |
|
112 | 111 |
page = 1 |
113 | 112 |
id_first_row = item_per_page * (page-1) |
114 | 113 |
id_last_row = min(id_first_row + item_per_page, total_rows) |
115 | 114 |
|
116 |
events.format_events(id_first_row, id_last_row) |
|
117 |
events.generate_tmpl_context() |
|
115 |
aggregates.format_events(id_first_row, id_last_row) |
|
116 |
aggregates.generate_tmpl_context() |
|
117 |
|
|
118 | 118 |
return dict( |
119 |
events = events.events,
|
|
119 |
events = aggregates.events,
|
|
120 | 120 |
rows_info = { |
121 |
'id_first_row': id_first_row + 1, |
|
122 |
'id_last_row': id_last_row, |
|
123 |
'total_rows': total_rows, |
|
121 |
'id_first_row': id_first_row + 1,
|
|
122 |
'id_last_row': id_last_row,
|
|
123 |
'total_rows': total_rows,
|
|
124 | 124 |
}, |
125 | 125 |
pages = range(1, (total_rows / item_per_page) + 2), |
126 | 126 |
page = page, |
127 | 127 |
event_edit_status_options = edit_event_status_options, |
128 | 128 |
history = [], |
129 | 129 |
hist_error = False, |
130 |
plugin_context = events.context_fct,
|
|
130 |
plugin_context = aggregates.context_fct,
|
|
131 | 131 |
search = search, |
132 | 132 |
) |
133 | 133 |
|
134 |
@validate(validators={'idevent':validators.String(not_empty=True)},
|
|
134 |
@validate(validators={'idaggregate':validators.Int(not_empty=True)},
|
|
135 | 135 |
error_handler=process_form_errors) |
136 | 136 |
@expose('json') |
137 | 137 |
@require(Any(not_anonymous(), msg=_("You need to be authenticated"))) |
138 |
def history_dialog(self, idevent):
|
|
138 |
def history_dialog(self, idaggregate):
|
|
139 | 139 |
|
140 | 140 |
""" |
141 | 141 |
JSon renvoyant les éléments pour l'affichage de la fenêtre de dialogue |
... | ... | |
154 | 154 |
EventsAggregate.severity, |
155 | 155 |
Event.hostname, |
156 | 156 |
Event.servicename, |
157 |
Event.idevent |
|
157 | 158 |
).join( |
158 | 159 |
(Event, EventsAggregate.idcause == Event.idevent), |
159 | 160 |
(HostGroup, Event.hostname == HostGroup.hostname), |
160 | 161 |
).filter(HostGroup.groupname.in_(user.groups) |
161 |
).filter(EventsAggregate.idcause == idevent).one()
|
|
162 |
).filter(EventsAggregate.idaggregate == idaggregate).one()
|
|
162 | 163 |
|
163 | 164 |
initial_state = DBSession.query( |
164 | 165 |
EventHistory, |
165 |
).filter(EventHistory.idevent == idevent |
|
166 |
).filter(EventHistory.idevent == event.idevent
|
|
166 | 167 |
).order_by(asc(EventHistory.timestamp) |
167 | 168 |
).order_by(asc(EventHistory.type_action)) |
168 | 169 |
|
... | ... | |
183 | 184 |
config['vigiboard_links.eventdetails'].iteritems(): |
184 | 185 |
|
185 | 186 |
eventdetails[edname] = edlink[1] % { |
186 |
'idevent': idevent,
|
|
187 |
'idaggregate': idaggregate,
|
|
187 | 188 |
'host': event.hostname, |
188 | 189 |
'service': event.servicename |
189 | 190 |
} |
... | ... | |
191 | 192 |
return dict( |
192 | 193 |
initial_state = severity[int(initial_state)], |
193 | 194 |
current_state = severity[event.severity], |
194 |
idevent = idevent,
|
|
195 |
idaggregate = idaggregate,
|
|
195 | 196 |
host = event.hostname, |
196 | 197 |
service = event.servicename, |
197 | 198 |
eventdetails = eventdetails |
198 | 199 |
) |
199 | 200 |
|
200 |
@validate(validators={'idevent':validators.String(not_empty=True)},
|
|
201 |
@validate(validators={'idaggregate':validators.Int(not_empty=True)},
|
|
201 | 202 |
error_handler=process_form_errors) |
202 | 203 |
@expose('vigiboard.templates.vigiboard') |
203 | 204 |
@require(Any(not_anonymous(), msg=_("You need to be authenticated"))) |
204 |
def event(self, idevent):
|
|
205 |
def event(self, idaggregate):
|
|
205 | 206 |
""" |
206 | 207 |
Affichage de l'historique d'un évènement. |
207 | 208 |
Pour accéder à cette page, l'utilisateur doit être authentifié. |
... | ... | |
211 | 212 |
|
212 | 213 |
username = request.environ['repoze.who.identity']['repoze.who.userid'] |
213 | 214 |
events = VigiboardRequest(User.by_user_name(username)) |
214 |
events.add_filter(EventsAggregate.idcause == idevent)
|
|
215 |
events.add_filter(EventsAggregate.idaggregate == idaggregate)
|
|
215 | 216 |
|
216 | 217 |
# Vérification que l'évènement existe |
217 | 218 |
if events.num_rows() != 1 : |
... | ... | |
293 | 294 |
) |
294 | 295 |
|
295 | 296 |
@validate(validators={ |
296 |
"id":validators.Regex(r'^[^,]+(,[^,]*)*,?$'),
|
|
297 |
"trouble_ticket":validators.Regex(r'^[0-9]*$'), |
|
297 |
"id":validators.Regex(r'^[0-9]+(,[0-9]*)*,?$'),
|
|
298 |
# "trouble_ticket":validators.Regex(r'^[0-9]*$'),
|
|
298 | 299 |
"status":validators.OneOf(['NoChange', 'None', 'Acknowledged', |
299 | 300 |
'AAClosed']) |
300 | 301 |
}, error_handler=process_form_errors) |
... | ... | |
320 | 321 |
|
321 | 322 |
username = request.environ['repoze.who.identity']['repoze.who.userid'] |
322 | 323 |
events = VigiboardRequest(User.by_user_name(username)) |
323 |
events.add_filter(EventsAggregate.idcause.in_(ids))
|
|
324 |
events.add_filter(EventsAggregate.idaggregate.in_(ids))
|
|
324 | 325 |
|
325 | 326 |
# Vérification que au moins un des identifiants existe et est éditable |
326 | 327 |
if events.num_rows() <= 0 : |
... | ... | |
332 | 333 |
|
333 | 334 |
username = request.environ['repoze.who.identity']['repoze.who.userid'] |
334 | 335 |
|
335 |
for req in events.req :
|
|
336 |
for req in events.req: |
|
336 | 337 |
if isinstance(req, EventsAggregate): |
337 | 338 |
event = req |
338 | 339 |
else: |
... | ... | |
359 | 360 |
username=username, |
360 | 361 |
) |
361 | 362 |
DBSession.add(history) |
362 |
|
|
363 |
|
|
364 |
DBSession.flush() |
|
363 | 365 |
flash(_('Updated successfully')) |
364 | 366 |
redirect(request.environ.get('HTTP_REFERER', url('/'))) |
365 | 367 |
|
366 | 368 |
|
367 | 369 |
@validate(validators={"plugin_name":validators.OneOf( |
368 |
[i for [i,j] in config.get('vigiboard_plugins', [])])}, |
|
370 |
[i for [i, j] in config.get('vigiboard_plugins', [])])},
|
|
369 | 371 |
error_handler = process_form_errors) |
370 | 372 |
@expose('json') |
371 | 373 |
def get_plugin_value(self, plugin_name, *arg, **krgv): |
Also available in: Unified diff