Project

General

Profile

Revision 3d0d254c

ID3d0d254cf9f9d1b45e6a3e56a7fcbaad4cc344e4
Parent be29aa96
Child c49defb8

Added by Francois POIROTTE over 14 years ago

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

View differences:

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