Project

General

Profile

Revision dc005588

IDdc00558861c121d5112d4bcf0be941a37a05f5c2
Parent b051cd52
Child 338575f6

Added by Francois POIROTTE almost 12 years ago

Liens vers les cartes dans VigiBoard (#959).

Ajoute des liens vers les cartes sur lesquelles l'hôte concerné par un
événement apparaît dans le dialogue de détail d'un l'événement corrélé.

L'URL de base de VigiMap doit être renseignée dans le fichier de
configuration de VigiBoard pour que ceci fonctionne. La configuration de
l'URL se fait grâce à l'option de configuration "interfaces.vigimap" (le
nom est le même que celui attendu par VigiAdmin).

Le nombre de liens pouvant apparaître est configurable grâce à l'option
"max_maps" avec 2 valeurs particulières :
  • -1 inhibe toute limite (ie. affiche toutes les cartes)
  • 0 désactive la fonctionnalité (ie. n'affiche aucune carte, ni même la
    partie réservée à l'affichage des liens dans la boîte de dialogue)
    Si le nombre de cartes disponibles est supérieur à la limite définie et
    que le mécanisme d'affiche des liens est activé, un message avertit en
    plus l'utilisateur.

Ajoute des tests sur cette nouvelle fonctionnalité.
De plus, le code !JavaScript du module "details" a été externalisé afin
de faciliter la lecture du fichier .html du module.

Enfin, le comportement d'ouverture des liens (ex: dans l'onglet courant
ou dans un nouvel onglet) est configurable grâce à l'option
"links_target" (il s'agit du même nom d'option que dans VigiAdmin).

Change-Id: I0d1b73fc4e9e7caf36e10a87bc3e0ae3d8972d88
Refs: #959.
Reviewed-on: https://vigilo-dev.si.c-s.fr/review/690
Tested-by: Build system <>
Reviewed-by: Aurelien BOMPARD <>

View differences:

vigiboard/controllers/plugins/details.py
25 25
"""
26 26

  
27 27
import urllib
28
from tg import config, url
28
from tg import config, url, request
29 29
from sqlalchemy.sql.expression import null as expr_null, union_all
30 30

  
31
from repoze.what.predicates import has_permission, in_group
32
from vigilo.turbogears.helpers import get_current_user
33

  
31 34
from vigilo.models.session import DBSession
32
from vigilo.models.tables import Event, \
33
    CorrEvent, Host, LowLevelService, StateName
35
from vigilo.models.tables import Event, CorrEvent, Host, LowLevelService, \
36
    StateName, Map, MapNode, MapNodeHost, MapGroup
37
from vigilo.models.tables.secondary_tables import MAP_GROUP_TABLE
34 38

  
35 39
from vigiboard.controllers.plugins import VigiboardRequestPlugin
36 40

  
......
52 56
        # Obtention de données sur l'événement et sur son historique
53 57
        host_query = DBSession.query(
54 58
            Host.idhost.label("idsupitem"),
59
            Host.idhost.label("idhost"),
55 60
            Host.name.label("host"),
56 61
            expr_null().label("service"),
57 62
        )
58 63
        lls_query = DBSession.query(
59 64
            LowLevelService.idservice.label("idsupitem"),
65
            Host.idhost.label("idhost"),
60 66
            Host.name.label("host"),
61 67
            LowLevelService.servicename.label("service"),
62 68
        ).join(
......
66 72
        event = DBSession.query(
67 73
            CorrEvent.idcorrevent,
68 74
            CorrEvent.idcause,
75
            supitems.c.idhost,
69 76
            supitems.c.host,
70 77
            supitems.c.service,
71 78
            Event.message,
......
78 85
        ).filter(CorrEvent.idcorrevent == idcorrevent
79 86
        ).first()
80 87

  
88
        # On détermine les cartes auxquelles cet utilisateur a accès.
89
        user_maps = {}
90
        max_maps = int(config['max_maps'])
91
        is_manager = in_group('managers').is_met(request.environ)
92
        if max_maps != 0 and (is_manager or
93
            has_permission('vigimap-access').is_met(request.environ)):
94
            items = DBSession.query(
95
                    Map.idmap,
96
                    Map.title,
97
                ).distinct(
98
                ).join(
99
                    (MAP_GROUP_TABLE, MAP_GROUP_TABLE.c.idmap == Map.idmap),
100
                    (MapGroup, MapGroup.idgroup == MAP_GROUP_TABLE.c.idgroup),
101
                    (MapNodeHost, MapNodeHost.idmap == Map.idmap),
102
                ).order_by(Map.title.asc()
103
                ).filter(MapNodeHost.idhost == event.idhost)
104

  
105
            if not is_manager:
106
                mapgroups = get_current_user().mapgroups(only_direct=True)
107
                # pylint: disable-msg=E1103
108
                items = items.filter(MapGroup.idgroup.in_(mapgroups))
109

  
110
            # La valeur -1 supprime la limite.
111
            if max_maps > 0:
112
                # On limite au nombre maximum de cartes demandés + 1.
113
                # Un message sera affiché s'il y a effectivement plus
114
                # de cartes que la limite configurée.
115
                items = items.limit(max_maps + 1)
116

  
117
            user_maps = dict([(m.idmap, m.title) for m in items.all()])
118

  
81 119
        context = {
82 120
            'idcorrevent': idcorrevent,
83 121
            'host': event.host,
84 122
            'service': event.service,
85 123
            'message': event.message,
124
            'maps': user_maps,
86 125
        }
87 126

  
88 127
        eventdetails = {}
......
122 161
                host = event.host,
123 162
                service = event.service,
124 163
                eventdetails = eventdetails,
164
                maps = user_maps,
125 165
                idcause = event.idcause,
126 166
            )

Also available in: Unified diff