Project

General

Profile

Revision 01862853

ID018628538bd93fb5e65819f12891e93f21ac08da
Parent 03d542eb
Child 95743443

Added by Thomas ANDREJAK about 15 years ago

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

View differences:

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