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 | ) |