Revision 01862853
Modification du système de plugin pour un ajout plus simple
git-svn-id: https://vigilo-dev.si.c-s.fr/svn@311 b22e2e97-25c9-44ff-b637-2e5ceca36478
vigiboard.egg-info/SOURCES.txt | ||
---|---|---|
73 | 73 |
vigiboard/controllers/vigiboard_ctl/userutils.py |
74 | 74 |
vigiboard/controllers/vigiboard_ctl/vigiboard_ctl.py |
75 | 75 |
vigiboard/controllers/vigiboard_ctl/vigiboardrequest.py |
76 |
vigiboard/controllers/vigiboard_ctl/vigiboard_plugin/__init__.py |
|
77 |
vigiboard/controllers/vigiboard_ctl/vigiboard_plugin/shn.py |
|
78 |
vigiboard/controllers/vigiboard_ctl/vigiboard_plugin/tests.py |
|
76 | 79 |
vigiboard/i18n/vigiboard.pot |
77 | 80 |
vigiboard/i18n/en/LC_MESSAGES/vigiboard.mo |
78 | 81 |
vigiboard/i18n/en/LC_MESSAGES/vigiboard.po |
... | ... | |
139 | 142 |
vigiboard/public/images/vigiboard/icon_page_edit.png |
140 | 143 |
vigiboard/public/images/vigiboard/plus.png |
141 | 144 |
vigiboard/templates/__init__.py |
145 |
vigiboard/templates/__init__.pyc |
|
142 | 146 |
vigiboard/templates/about.html |
143 | 147 |
vigiboard/templates/authentication.html |
144 | 148 |
vigiboard/templates/debug.html |
vigiboard/config/vigiboard_config.py | ||
---|---|---|
14 | 14 |
'vigiboard_item_per_page' : '15', |
15 | 15 |
|
16 | 16 |
# Nom de base des tables de la base de données |
17 |
'vigiboard_bdd.basename' : '' |
|
17 |
'vigiboard_bdd.basename' : '', |
|
18 |
|
|
19 |
'vigiboard_plugins' : [ |
|
20 |
[ 'shn' , 'PluginSHN' ] |
|
21 |
] |
|
22 |
|
|
18 | 23 |
} |
19 | 24 |
|
vigiboard/controllers/vigiboard_ctl/__init__.py | ||
---|---|---|
5 | 5 |
|
6 | 6 |
from vigiboard.controllers.vigiboard_ctl.userutils import get_user_groups |
7 | 7 |
from vigiboard.controllers.vigiboard_ctl.vigiboardrequest import \ |
8 |
VigiboardRequest, VigiboardRequestPlugin
|
|
8 |
VigiboardRequest |
|
9 | 9 |
from vigiboard.controllers.vigiboard_ctl.vigiboard_ctl import \ |
10 | 10 |
VigiboardController |
vigiboard/controllers/vigiboard_ctl/vigiboard_ctl.py | ||
---|---|---|
25 | 25 |
|
26 | 26 |
from vigiboard.controllers.vigiboard_ctl.userutils import get_user_groups |
27 | 27 |
from vigiboard.controllers.vigiboard_ctl.vigiboardrequest import \ |
28 |
VigiboardRequest, VigiboardRequestPlugin
|
|
28 |
VigiboardRequest |
|
29 | 29 |
|
30 | 30 |
__all__ = ['VigiboardController'] |
31 | 31 |
|
... | ... | |
75 | 75 |
|
76 | 76 |
events = VigiboardRequest() |
77 | 77 |
|
78 |
# Création d'un plugin affichant le nombre de service impactés |
|
79 |
# par un évènement |
|
80 |
|
|
81 |
class PluginSHN (VigiboardRequestPlugin): |
|
82 |
|
|
83 |
""" |
|
84 |
Plugin permettant de rajouter le nombre de SHNs impactés à |
|
85 |
l'affichage |
|
86 |
""" |
|
87 |
|
|
88 |
def show(self, req): |
|
89 |
"""Fonction d'affichage""" |
|
90 |
if req[1] : |
|
91 |
return req[2] |
|
92 |
else : |
|
93 |
return None |
|
94 |
|
|
95 |
# Intégration de celui-ci à la requête en cours |
|
96 |
|
|
97 |
events.add_plugin(PluginSHN( |
|
98 |
table = [ServiceHautNiveau.servicename_dep, |
|
99 |
sql.func.count(Events.idevent)], |
|
100 |
outerjoin = [(ServiceHautNiveau, |
|
101 |
ServiceHautNiveau.servicename_dep == Events.servicename)], |
|
102 |
groupby = [(Events),(ServiceHautNiveau.servicename_dep)], |
|
103 |
name = _(u'SHNs impacté'), |
|
104 |
style = {'style':'text-align:center'} |
|
105 |
)) |
|
106 |
|
|
107 | 78 |
# Application des filtres si nécessaire |
108 | 79 |
if host : |
109 | 80 |
events.add_filter(Events.hostname.like('%%%s%%' % host)) |
... | ... | |
306 | 277 |
username = request.environ.get('repoze.who.identity' |
307 | 278 |
).get('repoze.who.userid') |
308 | 279 |
|
309 |
for event in events.req : |
|
280 |
for req in events.req : |
|
281 |
if isinstance(req,Events): |
|
282 |
event = req |
|
283 |
else: |
|
284 |
event = req[0] |
|
310 | 285 |
if krgv['trouble_ticket'] != '' : |
311 | 286 |
event.trouble_ticket = krgv['trouble_ticket'] |
312 | 287 |
history = EventHistory(type_action = "Ticket change", |
vigiboard/controllers/vigiboard_ctl/vigiboard_plugin/__init__.py | ||
---|---|---|
1 |
# -*- coding: utf-8 -*- |
|
2 |
# vim:set expandtab tabstop=4 shiftwidth=4: |
|
3 |
|
|
4 |
class VigiboardRequestPlugin(object): |
|
5 |
|
|
6 |
""" |
|
7 |
Classe dont les plugins utilisé dans VigiboardRequest doivent étendre. |
|
8 |
""" |
|
9 |
|
|
10 |
def __init__ (self, table = None, join = None, outerjoin = None, |
|
11 |
filters = None, groupby = None, orderby = None, name = '', |
|
12 |
style = None): |
|
13 |
|
|
14 |
self.table = table |
|
15 |
self.join = join |
|
16 |
self.outerjoin = outerjoin |
|
17 |
self.filter = filters |
|
18 |
self.orderby = orderby |
|
19 |
self.name = name |
|
20 |
self.groupby = groupby |
|
21 |
self.style = style |
|
22 |
|
|
23 |
def __show__ (self, event): |
|
24 |
|
|
25 |
""" |
|
26 |
Permet d'éviter toutes erreurs d'affichage. |
|
27 |
C'est la fonction appelé par le formateur d'évènements. |
|
28 |
""" |
|
29 |
|
|
30 |
show = self.show(event) |
|
31 |
|
|
32 |
if show != None : |
|
33 |
try: |
|
34 |
return str(show) |
|
35 |
except: |
|
36 |
return _('Error') |
|
37 |
|
|
38 |
def show(self, event): |
|
39 |
|
|
40 |
""" |
|
41 |
Fonction qui affichera par défaut une chaîne de |
|
42 |
caractères vide dans la colonne attribué au plugin. |
|
43 |
|
|
44 |
En général, les plugins devront redéfinir cette fonction |
|
45 |
pour afficher ce qu'ils souhaitent. |
|
46 |
""" |
|
47 |
|
|
48 |
return '' |
|
49 |
|
vigiboard/controllers/vigiboard_ctl/vigiboard_plugin/shn.py | ||
---|---|---|
1 |
# -*- coding: utf-8 -*- |
|
2 |
# vim:set expandtab tabstop=4 shiftwidth=4: |
|
3 |
|
|
4 |
from vigiboard.controllers.vigiboard_ctl.vigiboard_plugin import \ |
|
5 |
VigiboardRequestPlugin |
|
6 |
from vigiboard.model import ServiceHautNiveau, Events |
|
7 |
from sqlalchemy import sql, asc |
|
8 |
from pylons.i18n import ugettext as _ |
|
9 |
|
|
10 |
class PluginSHN (VigiboardRequestPlugin): |
|
11 |
|
|
12 |
""" |
|
13 |
Plugin permettant de rajouter le nombre de SHNs impactés à |
|
14 |
l'affichage |
|
15 |
""" |
|
16 |
|
|
17 |
def __init__(self): |
|
18 |
super(PluginSHN,self).__init__( |
|
19 |
table = [ServiceHautNiveau.servicename_dep, |
|
20 |
sql.func.count(Events.idevent)], |
|
21 |
outerjoin = [(ServiceHautNiveau, |
|
22 |
ServiceHautNiveau.servicename_dep == Events.servicename)], |
|
23 |
groupby = [(Events),(ServiceHautNiveau.servicename_dep)], |
|
24 |
name = _(u'SHNs impacté'), |
|
25 |
style = {'style':'text-align:center'} |
|
26 |
) |
|
27 |
|
|
28 |
def show(self, req): |
|
29 |
"""Fonction d'affichage""" |
|
30 |
if req[1] : |
|
31 |
return req[2] |
|
32 |
else : |
|
33 |
return None |
vigiboard/controllers/vigiboard_ctl/vigiboard_plugin/tests.py | ||
---|---|---|
1 |
# -*- coding: utf-8 -*- |
|
2 |
# vim:set expandtab tabstop=4 shiftwidth=4: |
|
3 |
|
|
4 |
from vigiboard.controllers.vigiboard_ctl.vigiboard_plugin import \ |
|
5 |
VigiboardRequestPlugin |
|
6 |
from vigiboard.model import EventHistory, Events |
|
7 |
|
|
8 |
class MonPlugin(VigiboardRequestPlugin): |
|
9 |
"""Plugin de test""" |
|
10 |
|
|
11 |
def __init__(self): |
|
12 |
super(PluginSHN,self).__init__( |
|
13 |
table = [EventHistory.idevent], |
|
14 |
join = [(EventHistory, EventHistory.idevent == Events.idevent)] |
|
15 |
) |
|
16 |
|
|
17 |
def show(self, req): |
|
18 |
"""Fonction d'affichage""" |
|
19 |
return req[1] |
|
20 |
|
vigiboard/controllers/vigiboard_ctl/vigiboardrequest.py | ||
---|---|---|
4 | 4 |
|
5 | 5 |
from vigiboard.model.vigiboard_bdd import Events, Host, Service, \ |
6 | 6 |
HostGroups, ServiceGroups, EventHistory |
7 |
from tg import tmpl_context, url |
|
7 |
from tg import tmpl_context, url, config
|
|
8 | 8 |
from vigiboard.model import DBSession |
9 | 9 |
from sqlalchemy import not_ , and_ , asc , desc |
10 | 10 |
from tw.jquery import JQueryUIDialog |
11 | 11 |
from vigiboard.widgets.edit_event import EditEventForm , SearchForm |
12 | 12 |
from vigiboard.controllers.vigiboard_ctl.userutils import get_user_groups |
13 |
from vigiboard.controllers.vigiboard_ctl.vigiboard_plugin import VigiboardRequestPlugin |
|
13 | 14 |
from pylons.i18n import ugettext as _ |
14 | 15 |
|
15 | 16 |
class VigiboardRequest(): |
... | ... | |
93 | 94 |
Génération de la requête avec l'ensemble des données stockées |
94 | 95 |
et la place dans la variable rq de la classe |
95 | 96 |
""" |
97 |
for plug in config['vigiboard_plugins']: |
|
98 |
try: |
|
99 |
mypac = __import__( |
|
100 |
'vigiboard.controllers.vigiboard_ctl.vigiboard_plugin.' +\ |
|
101 |
plug[0],globals(), locals(), [plug[1]],-1) |
|
102 |
self.add_plugin(getattr(mypac,plug[1])()) |
|
103 |
except: |
|
104 |
raise |
|
96 | 105 |
|
97 | 106 |
# query et join ont besoin de referrence |
98 | 107 |
self.req = self.req.query(*self.table) |
... | ... | |
418 | 427 |
# Dialogue de détail d'un évènement |
419 | 428 |
tmpl_context.historydialog = JQueryUIDialog(id='HistoryDialog', |
420 | 429 |
autoOpen=False,title=_('History')) |
421 |
|
|
422 |
class VigiboardRequestPlugin(): |
|
423 |
|
|
424 |
""" |
|
425 |
Classe dont les plugins utilisé dans VigiboardRequest doivent étendre. |
|
426 |
""" |
|
427 |
|
|
428 |
def __init__ (self, table = None, join = None, outerjoin = None, |
|
429 |
filters = None, groupby = None, orderby = None, name = '', |
|
430 |
style = None): |
|
431 |
|
|
432 |
self.table = table |
|
433 |
self.join = join |
|
434 |
self.outerjoin = outerjoin |
|
435 |
self.filter = filters |
|
436 |
self.orderby = orderby |
|
437 |
self.name = name |
|
438 |
self.groupby = groupby |
|
439 |
self.style = style |
|
440 |
|
|
441 |
def __show__ (self, event): |
|
442 |
|
|
443 |
""" |
|
444 |
Permet d'éviter toutes erreurs d'affichage. |
|
445 |
C'est la fonction appelé par le formateur d'évènements. |
|
446 |
""" |
|
447 |
|
|
448 |
show = self.show(event) |
|
449 |
|
|
450 |
if show != None : |
|
451 |
try: |
|
452 |
return str(show) |
|
453 |
except: |
|
454 |
return _('Error') |
|
455 |
|
|
456 |
def show(self, event): |
|
457 |
|
|
458 |
""" |
|
459 |
Fonction qui affichera par défaut une chaîne de |
|
460 |
caractères vide dans la colonne attribué au plugin. |
|
461 |
|
|
462 |
En général, les plugins devront redéfinir cette fonction |
|
463 |
pour afficher ce qu'ils souhaitent. |
|
464 |
""" |
|
465 |
|
|
466 |
return '' |
vigiboard/tests/functional/test_vigiboardrequest.py | ||
---|---|---|
98 | 98 |
tg.request = response.request |
99 | 99 |
|
100 | 100 |
vigi_req = VigiboardRequest() |
101 |
|
|
102 |
# On cré notre plugin, ici il ne sert qu'à lier l'historique |
|
103 |
# avec chaque évènement |
|
104 |
|
|
105 |
class MonPlugin(VigiboardRequestPlugin): |
|
106 |
"""Plugin de test""" |
|
107 |
|
|
108 |
def show(self, req): |
|
109 |
"""Fonction d'affichage""" |
|
110 |
return req[1] |
|
111 |
|
|
112 |
vigi_req.add_plugin(MonPlugin( |
|
113 |
table = [EventHistory.idevent], |
|
114 |
join = [(EventHistory, EventHistory.idevent == Events.idevent)])) |
|
101 |
tg.config['vigiboard_plugins'] = [['tests','MonPlugin']] |
|
102 |
# Derrière, VigiboardRequest doit charger le plugin de test tout seul |
|
115 | 103 |
|
116 | 104 |
# On effectu les tests suivants : |
117 | 105 |
# le nombre de ligne (historique et évènements) doivent |
Also available in: Unified diff