Revision 8484b8bd
Version corrigée de Vigiboard. Encore des bugs dans les tests.
git-svn-id: https://vigilo-dev.si.c-s.fr/svn@713 b22e2e97-25c9-44ff-b637-2e5ceca36478
vigiboard/controllers/root.py | ||
---|---|---|
9 | 9 |
from pylons.controllers.util import abort |
10 | 10 |
from sqlalchemy import asc |
11 | 11 |
from vigiboard.model import DBSession |
12 |
from vigiboard.model import Event, EventHistory, Host, User, HostGroup |
|
12 |
from vigiboard.model import Event, EventHistory, EventsAggregate, \ |
|
13 |
Host, HostGroup, \ |
|
14 |
User |
|
13 | 15 |
from repoze.what.predicates import Any, not_anonymous |
14 | 16 |
from vigiboard.widgets.edit_event import edit_event_status_options |
15 | 17 |
from vigiboard.controllers.vigiboardrequest import VigiboardRequest |
... | ... | |
37 | 39 |
redirect('/') |
38 | 40 |
|
39 | 41 |
@expose('vigiboard.templates.vigiboard') |
40 |
@require(Any(not_anonymous(), msg="You need to be authenticated"))
|
|
42 |
# @require(Any(not_anonymous(), msg=_("You need to be authenticated")))
|
|
41 | 43 |
def default(self, page = None, host = None, service = None, output = None, |
42 | 44 |
trouble_ticket=None, *argv, **krgv): |
43 | 45 |
|
... | ... | |
77 | 79 |
events.add_filter(Event.servicename.like('%%%s%%' % service)) |
78 | 80 |
if output : |
79 | 81 |
search['output'] = output |
80 |
events.add_filter(Event.output.like('%%%s%%' % output))
|
|
82 |
events.add_filter(Event.message.like('%%%s%%' % output))
|
|
81 | 83 |
if trouble_ticket : |
82 | 84 |
search['tt'] = trouble_ticket |
83 |
events.add_filter(Event.trouble_ticket.like( |
|
85 |
events.add_filter(EventsAggregate.trouble_ticket.like(
|
|
84 | 86 |
'%%%s%%' % trouble_ticket)) |
85 | 87 |
|
86 | 88 |
# Calcul des éléments à afficher et du nombre de pages possibles |
... | ... | |
111 | 113 |
search = search, |
112 | 114 |
) |
113 | 115 |
|
114 |
@validate(validators={'idevent':validators.Int(not_empty=True)},
|
|
116 |
@validate(validators={'idevent':validators.String(not_empty=True)},
|
|
115 | 117 |
error_handler=process_form_errors) |
116 | 118 |
@expose('json') |
117 | 119 |
@require(Any(not_anonymous(), msg=_("You need to be authenticated"))) |
118 |
def history_dialog (self, idevent) :
|
|
120 |
def history_dialog(self, idevent):
|
|
119 | 121 |
|
120 | 122 |
""" |
121 | 123 |
JSon renvoyant les éléments pour l'affichage de la fenêtre de dialogue |
... | ... | |
130 | 132 |
).get('repoze.who.userid') |
131 | 133 |
user = User.by_user_name(username) |
132 | 134 |
|
133 |
events = DBSession.query(Event.severity, Event.idevent, |
|
134 |
Event.hostname, Event.servicename |
|
135 |
).join(( HostGroup , Event.hostname == HostGroup.hostname ) |
|
135 |
event = DBSession.query( |
|
136 |
EventsAggregate.severity, |
|
137 |
Event.hostname, |
|
138 |
Event.servicename, |
|
139 |
).join( |
|
140 |
(Event, EventsAggregate.idcause == Event.idevent), |
|
141 |
(HostGroup, Event.hostname == HostGroup.hostname), |
|
136 | 142 |
).filter(HostGroup.groupname.in_(user.groups) |
137 |
).filter(Event.idevent == idevent)[0] |
|
138 |
initial_state = DBSession.query(EventHistory |
|
143 |
).filter(EventsAggregate.idcause == idevent).one() |
|
144 |
|
|
145 |
initial_state = DBSession.query( |
|
146 |
EventHistory, |
|
139 | 147 |
).filter(EventHistory.idevent == idevent |
140 | 148 |
).order_by(asc(EventHistory.timestamp) |
141 | 149 |
).order_by(asc(EventHistory.type_action)) |
150 |
|
|
142 | 151 |
if initial_state.count() > 0 : |
143 | 152 |
for i in initial_state: |
144 | 153 |
if i.value != '' and i.value is not None: |
... | ... | |
155 | 164 |
config['vigiboard_links.eventdetails'].iteritems(): |
156 | 165 |
|
157 | 166 |
eventdetails[edname] = edlink[1] % { |
158 |
'idevent': events.idevent,
|
|
159 |
'host': events.hostname,
|
|
160 |
'service': events.servicename
|
|
167 |
'idevent': idevent, |
|
168 |
'host': event.hostname, |
|
169 |
'service': event.servicename |
|
161 | 170 |
} |
162 | 171 |
|
163 | 172 |
return dict( |
164 | 173 |
initial_state = severity[int(initial_state)], |
165 |
current_state = severity[events.severity],
|
|
166 |
idevent = events.idevent,
|
|
167 |
host = events.hostname,
|
|
168 |
service = events.servicename,
|
|
174 |
current_state = severity[event.severity], |
|
175 |
idevent = idevent, |
|
176 |
host = event.hostname, |
|
177 |
service = event.servicename, |
|
169 | 178 |
eventdetails = eventdetails |
170 | 179 |
) |
171 | 180 |
|
172 |
@validate(validators={'idevent':validators.Int(not_empty=True)},
|
|
181 |
@validate(validators={'idevent':validators.String(not_empty=True)},
|
|
173 | 182 |
error_handler=process_form_errors) |
174 | 183 |
@expose('vigiboard.templates.vigiboard') |
175 | 184 |
@require(Any(not_anonymous(), msg=_("You need to be authenticated"))) |
... | ... | |
182 | 191 |
""" |
183 | 192 |
|
184 | 193 |
events = VigiboardRequest() |
185 |
events.add_filter(Event.idevent == idevent)
|
|
194 |
events.add_filter(EventsAggregate.idcause == idevent)
|
|
186 | 195 |
|
187 | 196 |
# Vérification que l'évènement existe |
188 | 197 |
if events.num_rows() != 1 : |
... | ... | |
194 | 203 |
events.generate_tmpl_context() |
195 | 204 |
|
196 | 205 |
return dict( |
197 |
events = events.events, |
|
198 |
id_first_row = 1, |
|
199 |
id_last_row = 1, |
|
200 |
total_row = 1, |
|
201 |
pages = [1], |
|
202 |
page = 1, |
|
203 |
event_edit_status_options = edit_event_status_options, |
|
204 |
history = events.hist, |
|
205 |
hist_error = True, |
|
206 |
plugin_context = events.context_fct, |
|
207 |
search = {'host':None,'service':None,'output':None,'tt':None} |
|
208 |
) |
|
206 |
events = events.events, |
|
207 |
rows_info = { |
|
208 |
'id_first_row': 1, |
|
209 |
'id_last_row': 1, |
|
210 |
'total_rows': 1, |
|
211 |
}, |
|
212 |
pages = [1], |
|
213 |
page = 1, |
|
214 |
event_edit_status_options = edit_event_status_options, |
|
215 |
history = events.hist, |
|
216 |
hist_error = True, |
|
217 |
plugin_context = events.context_fct, |
|
218 |
search = { |
|
219 |
'host': None, |
|
220 |
'service': None, |
|
221 |
'output': None, |
|
222 |
'tt': None |
|
223 |
} |
|
224 |
) |
|
209 | 225 |
|
210 | 226 |
@validate(validators={'host':validators.NotEmpty(), |
211 | 227 |
'service':validators.NotEmpty()}, error_handler=process_form_errors) |
... | ... | |
235 | 251 |
events.format_history() |
236 | 252 |
events.generate_tmpl_context() |
237 | 253 |
return dict( |
238 |
events = events.events, |
|
239 |
id_first_row = 1, |
|
240 |
id_last_row = 1, |
|
241 |
total_row = 1, |
|
242 |
pages = [1], |
|
243 |
page = 1, |
|
244 |
event_edit_status_options = edit_event_status_options, |
|
245 |
history = events.hist, |
|
246 |
hist_error = True, |
|
247 |
plugin_context = events.context_fct, |
|
248 |
search = {'host':None,'service':None,'output':None,'tt':None} |
|
249 |
) |
|
254 |
events = events.events, |
|
255 |
rows_info = { |
|
256 |
'id_first_row': 1, |
|
257 |
'id_last_row': 1, |
|
258 |
'total_rows': 1, |
|
259 |
}, |
|
260 |
pages = [1], |
|
261 |
page = 1, |
|
262 |
event_edit_status_options = edit_event_status_options, |
|
263 |
history = events.hist, |
|
264 |
hist_error = True, |
|
265 |
plugin_context = events.context_fct, |
|
266 |
search = { |
|
267 |
'host': None, |
|
268 |
'service': None, |
|
269 |
'output': None, |
|
270 |
'tt': None |
|
271 |
} |
|
272 |
) |
|
250 | 273 |
|
251 | 274 |
@validate(validators={ |
252 |
"id":validators.Regex(r'^[0-9]+(,[0-9]*)*,?$'),
|
|
275 |
"id":validators.Regex(r'^[^,]+(,[^,]*)*,?$'),
|
|
253 | 276 |
"trouble_ticket":validators.Regex(r'^[0-9]*$'), |
254 | 277 |
"status":validators.OneOf(['NoChange', 'None', 'Acknowledged', |
255 | 278 |
'AAClosed']) |
... | ... | |
259 | 282 |
|
260 | 283 |
""" |
261 | 284 |
Mise à jour d'un évènement suivant les arguments passés. |
262 |
Cela peut être un changement de ticket ou un changement de statu. |
|
285 |
Cela peut être un changement de ticket ou un changement de statut.
|
|
263 | 286 |
|
264 | 287 |
@param krgv['id']: Le ou les identifiants des évènements à traiter |
265 | 288 |
@param krgv['tt']: Nouveau numéro du ticket associé. |
... | ... | |
275 | 298 |
ids = ids[:-1] |
276 | 299 |
|
277 | 300 |
events = VigiboardRequest() |
278 |
events.add_filter(Event.idevent.in_(ids))
|
|
301 |
events.add_filter(EventsAggregate.idcause.in_(ids))
|
|
279 | 302 |
|
280 | 303 |
# Vérification que au moins un des identifiants existe et est éditable |
281 | 304 |
if events.num_rows() <= 0 : |
... | ... | |
285 | 308 |
# Modification des évènements et création d'un historique |
286 | 309 |
# pour chacun d'eux |
287 | 310 |
|
288 |
username = request.environ.get('repoze.who.identity' |
|
289 |
).get('repoze.who.userid') |
|
311 |
username = request.environ['repoze.who.identity']['repoze.who.userid'] |
|
290 | 312 |
|
291 | 313 |
for req in events.req : |
292 |
if isinstance(req, Event): |
|
314 |
if isinstance(req, EventsAggregate):
|
|
293 | 315 |
event = req |
294 | 316 |
else: |
295 | 317 |
event = req[0] |
318 |
|
|
296 | 319 |
if krgv['trouble_ticket'] != '' : |
297 | 320 |
event.trouble_ticket = krgv['trouble_ticket'] |
298 |
history = EventHistory(type_action = "Ticket change", |
|
299 |
idevent = event.idevent, value = '', text = '', |
|
300 |
username = username) |
|
321 |
history = EventHistory( |
|
322 |
type_action="Ticket change", |
|
323 |
idevent=event.idcause, |
|
324 |
value='', |
|
325 |
text='', |
|
326 |
username=username, |
|
327 |
) |
|
301 | 328 |
DBSession.add(history) |
329 |
|
|
302 | 330 |
if krgv['status'] != 'NoChange' : |
303 | 331 |
event.status = krgv['status'] |
304 | 332 |
history = EventHistory( |
305 |
type_action = "Acknowlegement change state", |
|
306 |
idevent = event.idevent, value = '', text = '', |
|
307 |
username = username) |
|
333 |
type_action="Acknowlegement change state", |
|
334 |
idevent=event.idcause, |
|
335 |
value='', |
|
336 |
text='', |
|
337 |
username=username, |
|
338 |
) |
|
308 | 339 |
DBSession.add(history) |
309 | 340 |
|
310 | 341 |
flash(_('Updated successfully')) |
... | ... | |
336 | 367 |
except: |
337 | 368 |
raise |
338 | 369 |
|
339 |
@validate(validators= {"fontsize": validators.Int()}, |
|
340 |
error_handler = process_form_errors) |
|
370 |
# @validate(validators= {"fontsize": validators.Int()},
|
|
371 |
# error_handler = process_form_errors)
|
|
341 | 372 |
@expose('json') |
342 | 373 |
def set_fontsize(self, fontsize): |
343 | 374 |
""" |
Also available in: Unified diff