Revision 86c3ae23
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
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