Project

General

Profile

Revision 86c3ae23

ID86c3ae23765b254aff08c482d6d1977b60c5684f
Parent 9beee92d
Child ef31cc13

Added by Francois POIROTTE over 14 years ago

Corrections dans VigiBoard suite aux changements dans le modèle.
Corrections des tests unitaires associés.

git-svn-id: https://vigilo-dev.si.c-s.fr/svn@1293 b22e2e97-25c9-44ff-b637-2e5ceca36478

View differences:

vigiboard/controllers/root.py
14 14
from vigiboard.model import DBSession
15 15
from vigiboard.model import Event, EventHistory, EventsAggregate, \
16 16
                            Host, HostGroup, \
17
                            State, StateName, User
17
                            StateName, User
18 18
from repoze.what.predicates import Any, not_anonymous
19 19
from vigiboard.widgets.edit_event import edit_event_status_options
20 20
from vigiboard.controllers.vigiboardrequest import VigiboardRequest
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, EventsAggregate, EventHistory, State, \
5
from vigiboard.model import Event, EventsAggregate, EventHistory, \
6 6
                            Host, HostGroup, ServiceLowLevel, ServiceGroup, \
7 7
                            StateName
8
from vigilo.models.secondary_tables import HOST_GROUP_TABLE, \
9
                                            SERVICE_GROUP_TABLE
8 10
from tg import tmpl_context, url, config
9 11
from vigiboard.model import DBSession
10 12
from sqlalchemy import not_, and_, asc, desc, sql
13
from sqlalchemy.orm import aliased
11 14
from tw.jquery.ui_dialog import JQueryUIDialog
12 15
from vigiboard.widgets.edit_event import EditEventForm , SearchForm
13 16
from vigiboard.controllers.vigiboard_plugin import VigiboardRequestPlugin
14 17
from pylons.i18n import ugettext as _
15 18

  
16 19
class VigiboardRequest():
20
    """
21
    Classe gérant la génération de la requête finale,
22
    le préformatage des événements et celui des historiques
23
    """
24

  
17 25
    class_ack = {
18 26
        'None': '',
19 27
        'Acknowledged': '_Ack',
20 28
        'AAClosed': '_Ack',
21 29
    }
22 30

  
23
    """
24
    Classe gérant la génération de la requête finale,
25
    le préformatage des événements et celui des historiques
26
    """
27

  
28 31
    def __init__(self, user):
29 32

  
30 33
        """
31
        Initialisation de toutes les variables nécessaires: Liste des groupes
32
        de l'utilisateur, les classes à appliquer suivant la sévérité, les
33
        différentes étapes de la génération de la requête et la liste des
34
        plugins appliqués.
34
        Initialisation de toutes les variables nécessaires :
35
        - la liste des groupes de l'utilisateur,
36
        - les différentes étapes de la génération de la requête,
37
        - la liste des plugins à appliquer.
35 38
        """
36 39

  
37 40
        self.user_groups = user.groups
......
39 42

  
40 43
        self.table = [
41 44
            EventsAggregate,
42
            sql.func.count(EventsAggregate.idaggregate)
45
            sql.func.count(EventsAggregate.idaggregate),
43 46
        ]
44 47

  
45 48
        self.join = [
46 49
            (Event, EventsAggregate.idcause == Event.idevent),
47
            (Host, Event.hostname == Host.name),
48
            (ServiceLowLevel, Event.servicename == ServiceLowLevel.name),
49
            (HostGroup, Host.name == HostGroup.hostname),
50
            (ServiceGroup, ServiceLowLevel.name == ServiceGroup.servicename),
50
            (ServiceLowLevel, Event._idservice == ServiceLowLevel.idservice),
51
            (Host, Host.name == ServiceLowLevel.hostname),
51 52
            (StateName, StateName.idstatename == Event.current_state),
53
            (HOST_GROUP_TABLE, HOST_GROUP_TABLE.c.hostname == Host.name),
54
            (SERVICE_GROUP_TABLE, SERVICE_GROUP_TABLE.c.idservice == \
55
                ServiceLowLevel.idservice),
52 56
        ]
53 57

  
54 58
        self.outerjoin = [
55 59
        ]
56 60

  
57 61
        self.filter = [
58
                HostGroup.idgroup.in_(self.user_groups),
59
                ServiceGroup.idgroup.in_(self.user_groups),
62
                HOST_GROUP_TABLE.c.idgroup.in_(self.user_groups),
63
                SERVICE_GROUP_TABLE.c.idgroup.in_(self.user_groups),
60 64

  
61 65
                # On masque les événements avec l'état OK
62 66
                # et traités (status == u'AAClosed').
......
78 82
                priority_order,                 # Priorité ITIL (entier).
79 83
                desc(StateName.order),          # Etat courant (entier).
80 84
                desc(Event.timestamp),
81
                asc(Event.hostname),
85
                asc(ServiceLowLevel.hostname),
82 86
            ]
83 87

  
84 88
        self.groupby = [
85 89
                EventsAggregate.idaggregate,
86 90
                EventsAggregate,
87
                Event.hostname,
91
                ServiceLowLevel.hostname,
88 92
                StateName.order,
89 93
                Event.timestamp,
90 94
            ]
vigiboard/tests/functional/test_userutils.py
7 7
import transaction
8 8
from nose.tools import assert_true
9 9

  
10
from vigiboard.model import DBSession, Group, Permission, User
10
from vigiboard.model import DBSession, HostGroup, Permission, User
11 11
from vigiboard.tests import TestController
12 12

  
13 13
class TestUserUtils(TestController):
......
18 18
        """
19 19

  
20 20
        # Création de 2 groupes d'utilisateurs.
21
        hosteditors = Group(name=u'hosteditors', parent=None)
21
        hosteditors = HostGroup(name=u'hosteditors', parent=None)
22 22
        DBSession.add(hosteditors)
23 23

  
24
        hostmanagers = Group(name=u'hostmanagers', parent=hosteditors)
24
        hostmanagers = HostGroup(name=u'hostmanagers', parent=hosteditors)
25 25
        DBSession.add(hostmanagers)
26 26

  
27 27
        # L'attribution des permissions.
28 28
        manage_perm = Permission.by_permission_name(u'manage')
29 29
        edit_perm = Permission.by_permission_name(u'edit')
30 30

  
31
        manage_perm.groups.append(hostmanagers)
32
        edit_perm.groups.append(hosteditors)
31
        manage_perm.hostgroups.append(hostmanagers)
32
        edit_perm.hostgroups.append(hosteditors)
33 33
        DBSession.flush()
34 34
        transaction.commit()
35 35

  
......
45 45
        grp = User.by_user_name(username).groups
46 46

  
47 47
        # Permet de rafraîchir les instances.
48
        hostmanagers = DBSession.query(Group).filter(
49
                            Group.name==u'hostmanagers').one()
50
        hosteditors = DBSession.query(Group).filter(
51
                            Group.name==u'hosteditors').one()
48
        hostmanagers = DBSession.query(HostGroup).filter(
49
                            HostGroup.name==u'hostmanagers').one()
50
        hosteditors = DBSession.query(HostGroup).filter(
51
                            HostGroup.name==u'hosteditors').one()
52 52

  
53 53
        # On vérifie que la liste est correcte : le manager doit avoir accès
54 54
        # aux groupes 'hostmanagers' & 'hosteditors' (dont il hérite).
vigiboard/tests/functional/test_vigiboardrequest.py
12 12
from vigiboard.model import DBSession, \
13 13
    Event, EventHistory, EventsAggregate, \
14 14
    Permission, User, StateName, \
15
    Group, Host, HostGroup, ServiceLowLevel, ServiceGroup
15
    Host, HostGroup, ServiceLowLevel, ServiceGroup
16 16
from vigiboard.tests import TestController
17 17
from vigiboard.controllers.vigiboardrequest import VigiboardRequest
18 18
from vigiboard.controllers.vigiboard_plugin.tests import MonPlugin
......
33 33
        # On peuple la base de données.
34 34

  
35 35
        # Les groupes et leurs dépendances
36
        self.editorsgroup = Group(name=u'editorsgroup')
37
        DBSession.add(self.editorsgroup)
38
        DBSession.flush()
39

  
40
        self.managersgroup = Group(name=u'managersgroup', parent=self.editorsgroup)
41
        DBSession.add(self.managersgroup)
36
        self.hosteditors = HostGroup(name=u'editorsgroup')
37
        DBSession.add(self.hosteditors)
38
        self.hostmanagers = HostGroup(name=u'managersgroup', parent=self.hosteditors)
39
        DBSession.add(self.hostmanagers)
40
        self.serviceeditors = ServiceGroup(name=u'editorsgroup')
41
        DBSession.add(self.serviceeditors)
42
        self.servicemanagers = ServiceGroup(name=u'managersgroup', parent=self.serviceeditors)
43
        DBSession.add(self.servicemanagers)
42 44
        DBSession.flush()
43 45

  
44 46
        manage_perm = Permission.by_permission_name(u'manage')
45 47
        edit_perm = Permission.by_permission_name(u'edit')
46 48

  
47
        self.managersgroup.permissions.append(manage_perm)
48
        self.editorsgroup.permissions.append(edit_perm)
49
        self.hostmanagers.permissions.append(manage_perm)
50
        self.hosteditors.permissions.append(edit_perm)
51
        self.servicemanagers.permissions.append(manage_perm)
52
        self.serviceeditors.permissions.append(edit_perm)
49 53
        DBSession.flush()
50 54

  
51
        # Les dépendances des événements
55
        # Création des hôtes de test.
52 56
        host_template = {
53 57
            'checkhostcmd': u'halt',
54 58
            'snmpcommunity': u'public',
55
            'fqhn': u'localhost',
56 59
            'hosttpl': u'/dev/null',
57 60
            'mainip': u'192.168.1.1',
58 61
            'snmpport': 42,
59 62
        }
60 63

  
64
        managerhost = Host(name=u'managerhost', **host_template)
65
        editorhost = Host(name=u'editorhost', **host_template)
66
        DBSession.add(managerhost)
67
        DBSession.add(editorhost)
68

  
69
        # Création des services techniques de test.
61 70
        service_template = {
62 71
            'command': u'halt',
63 72
            'op_dep': u'+',
73
            'priority': 1,
64 74
        }
65 75

  
66
        DBSession.add(Host(name=u'managerhost', **host_template))
67
        DBSession.add(ServiceLowLevel(name=u'managerservice', **service_template))
68
        DBSession.add(Host(name=u'editorhost', **host_template))
69
        DBSession.add(ServiceLowLevel(name=u'editorservice', **service_template))
76
        service1 = ServiceLowLevel(
77
            hostname=managerhost.name,
78
            servicename=u'managerservice',
79
            **service_template
80
        )
81

  
82
        service2 = ServiceLowLevel(
83
            hostname=editorhost.name,
84
            servicename=u'managerservice',
85
            **service_template
86
        )
87

  
88
        service3 = ServiceLowLevel(
89
            hostname=managerhost.name,
90
            servicename=u'editorservice',
91
            **service_template
92
        )
93

  
94
        service4 = ServiceLowLevel(
95
            hostname=editorhost.name,
96
            servicename=u'editorservice',
97
            **service_template
98
        )
99

  
100
        DBSession.add(service1)
101
        DBSession.add(service2)
102
        DBSession.add(service3)
103
        DBSession.add(service4)
70 104
        DBSession.flush()
71 105

  
72
        # Table de jointure entre les hôtes/services et les groupes
73
        DBSession.add(HostGroup(hostname = u"managerhost",
74
            idgroup=self.managersgroup.idgroup))
75
        DBSession.add(HostGroup(hostname = u"editorhost",
76
            idgroup=self.editorsgroup.idgroup))
77
        DBSession.add(ServiceGroup(servicename = u"managerservice",
78
            idgroup=self.managersgroup.idgroup))
79
        DBSession.add(ServiceGroup(servicename = u"editorservice",
80
            idgroup=self.editorsgroup.idgroup))
106
        # Affectation des hôtes/services aux groupes.
107
        self.hosteditors.hosts.append(editorhost)
108
        self.hostmanagers.hosts.append(managerhost)
109
        self.servicemanagers.services.append(service1)
110
        self.servicemanagers.services.append(service2)
111
        self.serviceeditors.services.append(service3)
112
        self.serviceeditors.services.append(service4)
81 113
        DBSession.flush()
82 114

  
83 115
        # Les événements eux-mêmes
......
86 118
            'current_state': StateName.statename_to_value(u'WARNING'),
87 119
        }
88 120

  
89
        event1 = Event(hostname=u'managerhost',
90
            servicename=u'managerservice', **event_template)
91
        event2 = Event(hostname=u'editorhost',
92
            servicename=u'managerservice', **event_template)
93
        event3 = Event(hostname=u'managerhost',
94
            servicename=u'editorservice', **event_template)
95
        event4 = Event(hostname=u'editorhost',
96
            servicename=u'editorservice', **event_template)
121
        event1 = Event(service=service1, **event_template)
122
        event2 = Event(service=service2, **event_template)
123
        event3 = Event(service=service3, **event_template)
124
        event4 = Event(service=service4, **event_template)
97 125

  
98 126
        DBSession.add(event1)
99 127
        DBSession.add(event2)
......
103 131

  
104 132

  
105 133
        # Les historiques
106
        DBSession.add(EventHistory(type_action = u'Nagios update state',
134
        DBSession.add(EventHistory(type_action=u'Nagios update state',
107 135
            idevent=event1.idevent, timestamp=datetime.now()))
108
        DBSession.add(EventHistory(type_action = u'Acknowlegement change state',
136
        DBSession.add(EventHistory(type_action=u'Acknowlegement change state',
109 137
            idevent=event1.idevent, timestamp=datetime.now()))
110
        DBSession.add(EventHistory(type_action = u'Nagios update state',
138
        DBSession.add(EventHistory(type_action=u'Nagios update state',
111 139
            idevent=event2.idevent, timestamp=datetime.now()))
112
        DBSession.add(EventHistory(type_action = u'Acknowlegement change state',
140
        DBSession.add(EventHistory(type_action=u'Acknowlegement change state',
113 141
            idevent=event2.idevent, timestamp=datetime.now()))
114
        DBSession.add(EventHistory(type_action = u'Nagios update state',
142
        DBSession.add(EventHistory(type_action=u'Nagios update state',
115 143
            idevent=event3.idevent, timestamp=datetime.now()))
116
        DBSession.add(EventHistory(type_action = u'Acknowlegement change state',
144
        DBSession.add(EventHistory(type_action=u'Acknowlegement change state',
117 145
            idevent=event3.idevent, timestamp=datetime.now()))
118
        DBSession.add(EventHistory(type_action = u'Nagios update state',
146
        DBSession.add(EventHistory(type_action=u'Nagios update state',
119 147
            idevent=event4.idevent, timestamp=datetime.now()))
120
        DBSession.add(EventHistory(type_action = u'Acknowlegement change state',
148
        DBSession.add(EventHistory(type_action=u'Acknowlegement change state',
121 149
            idevent=event4.idevent, timestamp=datetime.now()))
122 150
        DBSession.flush()
123 151

  
......
139 167
        DBSession.add(self.aggregate1)
140 168
        DBSession.add(self.aggregate2)
141 169
        DBSession.flush()
142

  
143
        for e in DBSession.query(Event).all():
144
            print "Event", e.idevent, e.hostname, e.servicename, e.current_state
145
        for ea in DBSession.query(EventsAggregate).all():
146
            print "EAggr", ea.idcause, ea.status
147
        for g in DBSession.query(Group).all():
148
            print "Group", g.idgroup, g.name, repr(g.idparent)
149
        for hg in DBSession.query(HostGroup).all():
150
            print "HGrup", hg.idgroup, hg.hostname
151
        for sg in DBSession.query(ServiceGroup).all():
152
            print "SGrup", sg.idgroup, sg.servicename
153 170
        transaction.commit()
154 171

  
155 172
    def tearDown(self):
......
160 177
        TestController.tearDown(self)
161 178

  
162 179

  
163
    def test_creation_requete(self):
180
    def test_request_creation(self):
164 181
        """Génération d'une requête avec plugin et permissions."""
165 182

  
166 183
        # On indique qui on est et on requête l'index pour obtenir
......
185 202

  
186 203
        vigi_req.format_events(0, 10)
187 204
        vigi_req.format_history()
188
        print vigi_req.events
189 205
        assert_true(len(vigi_req.events) == 1 + 1,
190 206
                msg = "1 evenement devrait etre disponible pour " +
191 207
                        "l'utilisateur 'editor' mais il y en a %d" %

Also available in: Unified diff