Project

General

Profile

Statistics
| Branch: | Tag: | Revision:

vigiboard / vigiboard / controllers / plugins / groups.py @ 011743be

History | View | Annotate | Download (3.94 KB)

1 27140946 Francois POIROTTE
# -*- coding: utf-8 -*-
2
# vim:set expandtab tabstop=4 shiftwidth=4:
3 011743be Francois POIROTTE
# Copyright (C) 2007-2020 CS GROUP - France
4 9b8d9497 Francois POIROTTE
# License: GNU GPL v2 <http://www.gnu.org/licenses/gpl-2.0.html>
5 27140946 Francois POIROTTE
6
"""
7
Un plugin pour VigiBoard qui ajoute une colonne avec les groupes
8
d'éléments supervisés auxquels appartient l'objet associé
9
à l'événement corrélé.
10
"""
11
import tw.forms as twf
12 02c4a1e7 Francois POIROTTE
from tg.i18n import lazy_ugettext as l_
13 27140946 Francois POIROTTE
14 86662bc9 Francois POIROTTE
from vigiboard.controllers.plugins import VigiboardRequestPlugin, INNER
15 27140946 Francois POIROTTE
from vigilo.models.session import DBSession
16 0f0e32ed Francois POIROTTE
from vigilo.models import tables
17 27140946 Francois POIROTTE
from vigilo.models.tables.group import Group
18
from vigilo.models.tables.grouphierarchy import GroupHierarchy
19 0f0e32ed Francois POIROTTE
from vigilo.models.tables.secondary_tables import SUPITEM_GROUP_TABLE
20 4654df60 Vincent QUEMENER
from sqlalchemy.orm import aliased
21 86662bc9 Francois POIROTTE
from sqlalchemy import or_
22 180b869a Vincent QUEMENER
23 8b2edebe Aurelien BOMPARD
24 27140946 Francois POIROTTE
class GroupSelector(twf.InputField):
25
    params = ["choose_text", "text_value", "clear_text"]
26
    choose_text = l_('Choose')
27
    clear_text = l_('Clear')
28
    text_value = ''
29
30
    template = """
31
<div xmlns="http://www.w3.org/1999/xhtml"
32
   xmlns:py="http://genshi.edgewall.org/" py:strip="">
33
<input type="hidden" name="${name}" class="${css_class}"
34
    id="${id}.value" value="${value}" py:attrs="attrs" />
35
<input type="text" class="${css_class}" id="${id}.ui"
36
    value="${text_value}" readonly="readonly" py:attrs="attrs" />
37
<input type="button" class="${css_class}" id="${id}"
38
    value="${choose_text}" py:attrs="attrs" />
39
<input type="button" class="${css_class}" id="${id}.clear"
40
    value="${clear_text}" py:attrs="attrs" />
41
</div>
42
"""
43
44
    def update_params(self, d):
45
        super(GroupSelector, self).update_params(d)
46
        text_value = DBSession.query(Group.name).filter(
47
                        Group.idgroup == d.value).scalar()
48
        if not text_value:
49
            d.value = ''
50
        else:
51
            d.text_value = text_value
52
53
54
class PluginGroups(VigiboardRequestPlugin):
55
    """
56
    Affiche les groupes d'éléments supervisés auxquels
57
    appartient l'événement corrélé.
58
    """
59
    def get_search_fields(self):
60
        return [
61
            GroupSelector(
62
                'supitemgroup',
63
                label_text=l_('Group'),
64
                validator=twf.validators.Int(if_invalid=None, if_missing=None),
65
            )
66
        ]
67
68 86662bc9 Francois POIROTTE
    def handle_search_fields(self, query, search, state, subqueries):
69
        if search.get('supitemgroup') is None or state != INNER:
70 0f0e32ed Francois POIROTTE
            return
71
72
        # Il s'agit d'un manager. On applique le filtre
73
        # indépendamment aux 2 sous-requêtes.
74
        if len(subqueries) == 2:
75
            subqueries[0] = subqueries[0].join(
76
                (SUPITEM_GROUP_TABLE,
77
                    or_(
78
                        SUPITEM_GROUP_TABLE.c.idsupitem == \
79
                            tables.LowLevelService.idhost,
80
                        SUPITEM_GROUP_TABLE.c.idsupitem == \
81
                            tables.LowLevelService.idservice,
82
                    )
83
                ),
84
                (GroupHierarchy, GroupHierarchy.idchild ==
85
                    SUPITEM_GROUP_TABLE.c.idgroup)
86
            ).filter(
87
                GroupHierarchy.idparent == search['supitemgroup']
88
            )
89
90
            subqueries[1] = subqueries[1].join(
91
                (SUPITEM_GROUP_TABLE,
92
                    SUPITEM_GROUP_TABLE.c.idsupitem == \
93
                        tables.Host.idhost,
94
                ),
95
                (GroupHierarchy, GroupHierarchy.idchild ==
96
                    SUPITEM_GROUP_TABLE.c.idgroup)
97
            ).filter(
98
                GroupHierarchy.idparent == search['supitemgroup']
99
            )
100
101
        # Il s'agit d'un utilisateur normal.
102
        else:
103 4654df60 Vincent QUEMENER
            GroupHierarchy_aliased = aliased(GroupHierarchy,
104
                name='GroupHierarchy_aliased')
105
            subqueries[0] = subqueries[0].join(
106
                (GroupHierarchy_aliased, GroupHierarchy_aliased.idchild ==
107
                    tables.UserSupItem.idsupitemgroup)
108
            ).filter(
109
                 GroupHierarchy_aliased.idparent == search['supitemgroup']
110 0f0e32ed Francois POIROTTE
            )