Project

General

Profile

Revision 8484b8bd

ID8484b8bdcea522719db789d3794e6a8382230d89
Parent 348eec2c
Child bc94248f

Added by Francois POIROTTE over 14 years ago

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

View differences:

vigiboard/controllers/vigiboardrequest.py
2 2
# vim:set expandtab tabstop=4 shiftwidth=4: 
3 3
"""Gestion de la requête, des plugins et de l'affichage du Vigiboard"""
4 4

  
5
from vigiboard.model import Event, Host, Service, \
6
        HostGroup, ServiceGroup, EventHistory, User
5
from vigiboard.model import Event, EventsAggregate, EventHistory, \
6
        Host, HostGroup, Service, ServiceGroup, User
7 7
from tg import tmpl_context, url, config, request
8 8
from vigiboard.model import DBSession
9 9
from sqlalchemy import not_ , and_ , asc , desc
......
30 30

  
31 31
        username = request.environ['repoze.who.identity']['repoze.who.userid']
32 32
        self.user_groups = User.by_user_name(username).groups
33
        self.bouton_severity = { 0: 'Minor', 1: 'Minor', 2: 'Minor',
34
                3: 'Minor', 4: 'Minor', 5: 'Minor', 6: 'Major', 7: 'Critical' }
35
        self.class_severity = { 0: 'None', 1: 'None', 2: 'None', 3: 'None',
36
                4: 'None', 5: 'Minor', 6: 'Major', 7: 'Critical' }
37
        self.severity = { 0: _('None'), 1: _('OK'), 2: _('Suppressed'),
38
                3: _('Initial'), 4: _('Maintenance'), 5: _('Minor'),
39
                6: _('Major'), 7: _('Critical') }
40 33

  
41
        self.class_ack = {'Acknowledged': 'Ack', 'None': '', 'AAClosed': 'Ack'}
34
        self.bouton_severity = (
35
                'Minor', 'Minor', 'Minor', 'Minor',
36
                'Minor', 'Minor', 'Major', 'Critical'
37
            )
38

  
39
        self.class_severity = (
40
                'None', 'None', 'None', 'None',
41
                'None', 'Minor', 'Major', 'Critical'
42
            )
43

  
44
        self.severity = (
45
                _('None'),          # 0
46
                _('OK'),
47
                _('Suppressed'),
48
                _('Initial'),
49
                _('Maintenance'),
50
                _('Minor'),
51
                _('Major'),
52
                _('Critical'),      # 7
53
            )
54

  
55
        self.class_ack = {
56
                'Acknowledged': 'Ack',
57
                'None': '',
58
                'AAClosed': 'Ack'
59
            }
42 60

  
43 61
        self.generaterq = False
44
        self.table = [Event]
45
        self.join = [( Host, Event.hostname == Host.name ),
46
                ( Service, Event.servicename == Service.name ),
47
                ( HostGroup , Host.name == HostGroup.hostname ),
48
                ( ServiceGroup , Service.name == ServiceGroup.servicename )
49
                ]
62

  
63
        self.table = [EventsAggregate]
64

  
65
        self.join = [
66
                (Event, EventsAggregate.idcause == Event.idevent),
67
                (Host, Event.hostname == Host.name),
68
                (Service, Event.servicename == Service.name),
69
                (HostGroup, Host.name == HostGroup.hostname),
70
                (ServiceGroup, Service.name == ServiceGroup.servicename),
71
            ]
72

  
50 73
        self.outerjoin = []
51
        self.filter = [HostGroup.groupname.in_(self.user_groups),
52
                 ServiceGroup.groupname.in_(self.user_groups),
53
                 not_(and_(Event.active == False,
54
                     Event.status == 'AAClosed')),
55
                 Event.timestamp_active != None#,
56
                 #not_(Event.timestamp_active.like('0000-00-00 00:00:00'))
57
                 ]
58
        self.orderby = [desc(Event.status),
59
                                desc(Event.active),
60
                                desc(Event.severity),
61
                                asc(Event.hostname),
62
                                desc(Event.timestamp)]
63
        self.groupby = []
74

  
75
        self.filter = [
76
                HostGroup.groupname.in_(self.user_groups),
77
                ServiceGroup.groupname.in_(self.user_groups),
78
                not_(and_(Event.active == False,
79
                    EventsAggregate.status == 'AAClosed')),
80
                EventsAggregate.timestamp_active != None#,
81
                #not_(Event.timestamp_active.like('0000-00-00 00:00:00'))
82
            ]
83

  
84
        self.orderby = [
85
                desc(EventsAggregate.status),
86
                desc(Event.active),
87
                desc(EventsAggregate.severity),
88
                asc(Event.hostname),
89
                desc(Event.timestamp),
90
            ]
91

  
92
        self.groupby = [
93
                EventsAggregate.idaggregate,
94
                EventsAggregate,
95
            ]
96

  
64 97
        self.plugin = []
65 98
        self.events = []
66 99
        self.idevents = []
......
141 174
        @param argv: Liste des tables à ajouter
142 175
        """
143 176
        
144
        #On vérifi qu'il n'y a pas de doublons dans la liste des
145
        #tables finale
177
        # On vérifie qu'il n'y a pas de doublons dans la liste finale
178
        # des tables.
146 179
        
147 180
        for i in argv :
148 181
            for j in self.table:
......
159 192
        @param argv: Liste des jointures à ajouter
160 193
        """
161 194
        
162
        #On vérifi qu'il n'y a pas de doublons dans la liste des
163
        #jointures finale
195
        # On vérifie qu'il n'y a pas de doublons dans la liste finale
196
        # des jointures.
164 197
        
165 198
        for i in argv:
166 199
            for j in self.join:
......
177 210
        @param argv: Liste des jointures externes à ajouter
178 211
        """
179 212
        
180
        #On vérifi qu'il n'y a pas de doublons dans la liste des
181
        #jointures externes finale
213
        # On vérifie qu'il n'y a pas de doublons dans la liste finale
214
        # des jointures externes.
182 215
        
183 216
        for i in argv:
184 217
            for j in self.outerjoin:
......
194 227
        @param argv: Liste des filtres à ajouter
195 228
        """
196 229
        
197
        #On vérifi qu'il n'y a pas de doublons dans la liste des
198
        #filtres finale
230
        # On vérifie qu'il n'y a pas de doublons dans la liste finale
231
        # des filtres.
199 232
        
200 233
        for i in argv:
201 234
            for j in self.filter:
......
211 244
        @param argv: Liste des groupements à ajouter
212 245
        """
213 246
        
214
        #On vérifi qu'il n'y a pas de doublons dans la liste des
215
        #groupements finale
247
        # On vérifie qu'il n'y a pas de doublons dans la liste finale
248
        # des groupements.
216 249
        
217 250
        for i in argv:
218 251
            for j in self.groupby:
......
228 261
        @param argv: Liste des ordres à ajouter
229 262
        """
230 263
        
231
        #On vérifi qu'il n'y a pas de doublons dans la liste des
232
        #ordres finale
264
        # On vérifie qu'il n'y a pas de doublons dans la liste finale
265
        # des ordres.
233 266
        
234 267
        for i in argv:
235 268
            for j in self.orderby:
......
237 270
                    break
238 271
            self.orderby.append(i)
239 272

  
240
    def format_events_img_statu (self, event):
273
    def format_events_img_status(self, event):
241 274
        
242 275
        """
243 276
        Suivant l'état de l'évènement, retourne la classe à appliquer
......
248 281
        @return: Dictionnaire représentant la classe à appliquer
249 282
        """
250 283

  
251
        if event.active and event.status == 'AAClosed':
284
        if event.cause.active and event.status == 'AAClosed':
252 285
            return { 'src': url('/images/crossed.png') }
253 286
        elif event.status == 'Acknowledged' :
254 287
            return { 'src': url('/images/checked.png') }
......
298 331
            # rq devient une liste plutôt que d'être directement la
299 332
            # table souhaité
300 333
            
301
            if isinstance(req, Event) :
334
            if isinstance(req, EventsAggregate) :
302 335
                event = req
303
            else :
336
            else:
304 337
                event = req[0]
305
            ids.append(event.idevent)
338
            ids.append(event.idcause)
306 339

  
307 340
            # La liste pour l'évènement actuel comporte dans l'ordre :
308 341
            #   L'évènment en lui même
......
310 343
            #       couleurs suivant les lignes)
311 344
            #   La classe pour la case comportant la flèche de détails
312 345
            #   La classe pour la date, l'occurrence et l'édition
313
            #   L'image a affiche pour la flèche de détails
346
            #   L'image à afficher pour la flèche de détails
314 347
            #   Une liste (une case par plugin) de ce que le plugin souhaite
315 348
            #       afficher en fonction de l'évènement
316 349

  
317
            if event.active :
350
            if event.cause.active:
318 351
                events.append([
319
                    event,
320
                    {'class': class_tr[i%2]},
321
                    {'class' : self.bouton_severity[event.severity] + \
322
                            self.class_ack[event.status]},
323
                    {'class' : self.bouton_severity[event.severity] + \
324
                            self.class_ack[event.status] },
325
                    {'src' : '/images/%s2.png' % \
326
                            self.bouton_severity[event.severity].upper()},
327
                    self.format_events_img_statu(event),
328
                    [[j.__show__(req), j.style] for j in self.plugin]
352
                        event,
353
                        {'class': class_tr[i%2]},
354
                        {'class' : self.bouton_severity[event.severity] + \
355
                                self.class_ack[event.status]},
356
                        {'class' : self.bouton_severity[event.severity] + \
357
                                self.class_ack[event.status]},
358
                        {'src' : '/images/%s2.png' % \
359
                                self.bouton_severity[event.severity].upper()},
360
                        self.format_events_img_status(event),
361
                        [[j.__show__(req), j.style] for j in self.plugin]
329 362
                    ])
330
            else :
363
            else:
331 364
                events.append([
332
                    event,
333
                    {'class': class_tr[i%2]},
334
                    {'class' : self.bouton_severity[event.severity] + \
335
                            self.class_ack[event.status] },
336
                    {'class' : 'Cleared' + self.class_ack[event.status] },
337
                    {'src' : '/images/%s2.png' % \
338
                            self.bouton_severity[event.severity].upper()},
339
                    self.format_events_img_statu(event),
340
                    [[j.__show__(req), j.style] for j in self.plugin]
365
                        event,
366
                        {'class': class_tr[i%2]},
367
                        {'class' : self.bouton_severity[event.severity] + \
368
                                self.class_ack[event.status] },
369
                        {'class' : 'Cleared' + self.class_ack[event.status] },
370
                        {'src' : '/images/%s2.png' % \
371
                                self.bouton_severity[event.severity].upper()},
372
                        self.format_events_img_status(event),
373
                        [[j.__show__(req), j.style] for j in self.plugin]
341 374
                    ])
342
            i = i + 1
375
            i += 1
343 376

  
344 377
        # On sauvegarde la liste précédemment créée puis rempli
345 378
        # le TmplContext
......
347 380
        self.events = events
348 381
        self.idevents = ids
349 382

  
350
    def format_history (self):
383
    def format_history(self):
351 384
        
352 385
        """
353 386
        Formate les historiques correspondant aux évènements sélectionnés
354 387
        pour un affichage simple du résultat par Genshi.
355
        On génère une liste de liste, chaqu'une étant la description de l'affichage pour un
356
        historique donné.
388
        On génère une liste de liste, chaqu'une étant la description
389
        de l'affichage pour un historique donné.
357 390
        """
358 391

  
359 392
        history = DBSession.query(EventHistory
......
407 440
                    {'class' : class_tr[i%2]},
408 441
                    {'class':self.class_severity[0]}
409 442
                ])    
410
            i = i + 1
443
            i += 1
411 444
        
412 445
        hists[last_idevent] = hist_tmp
413 446
        self.hist = hists

Also available in: Unified diff