vigiboard / vigiboard / controllers / plugins / groups.py @ fa6371b6
History | View | Annotate | Download (4.63 KB)
1 | 27140946 | Francois POIROTTE | # -*- coding: utf-8 -*-
|
---|---|---|---|
2 | # vim:set expandtab tabstop=4 shiftwidth=4:
|
||
3 | ################################################################################
|
||
4 | #
|
||
5 | fa6371b6 | Francois POIROTTE | # Copyright (C) 2007-2015 CS-SI
|
6 | 27140946 | Francois POIROTTE | #
|
7 | # This program is free software; you can redistribute it and/or modify
|
||
8 | # it under the terms of the GNU General Public License version 2 as
|
||
9 | # published by the Free Software Foundation.
|
||
10 | #
|
||
11 | # This program is distributed in the hope that it will be useful,
|
||
12 | # but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
13 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
14 | # GNU General Public License for more details.
|
||
15 | #
|
||
16 | # You should have received a copy of the GNU General Public License
|
||
17 | # along with this program; if not, write to the Free Software
|
||
18 | # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||
19 | ################################################################################
|
||
20 | |||
21 | """
|
||
22 | Un plugin pour VigiBoard qui ajoute une colonne avec les groupes
|
||
23 | d'éléments supervisés auxquels appartient l'objet associé
|
||
24 | à l'événement corrélé.
|
||
25 | """
|
||
26 | import tw.forms as twf |
||
27 | from pylons.i18n import lazy_ugettext as l_ |
||
28 | |||
29 | 86662bc9 | Francois POIROTTE | from vigiboard.controllers.plugins import VigiboardRequestPlugin, INNER |
30 | 27140946 | Francois POIROTTE | from vigilo.models.session import DBSession |
31 | 0f0e32ed | Francois POIROTTE | from vigilo.models import tables |
32 | 27140946 | Francois POIROTTE | from vigilo.models.tables.group import Group |
33 | from vigilo.models.tables.grouphierarchy import GroupHierarchy |
||
34 | 0f0e32ed | Francois POIROTTE | from vigilo.models.tables.secondary_tables import SUPITEM_GROUP_TABLE |
35 | 4654df60 | Vincent QUEMENER | from sqlalchemy.orm import aliased |
36 | 86662bc9 | Francois POIROTTE | from sqlalchemy import or_ |
37 | 180b869a | Vincent QUEMENER | |
38 | 8b2edebe | Aurelien BOMPARD | |
39 | 27140946 | Francois POIROTTE | class GroupSelector(twf.InputField): |
40 | params = ["choose_text", "text_value", "clear_text"] |
||
41 | choose_text = l_('Choose')
|
||
42 | clear_text = l_('Clear')
|
||
43 | text_value = ''
|
||
44 | |||
45 | template = """
|
||
46 | <div xmlns="http://www.w3.org/1999/xhtml"
|
||
47 | xmlns:py="http://genshi.edgewall.org/" py:strip="">
|
||
48 | <input type="hidden" name="${name}" class="${css_class}"
|
||
49 | id="${id}.value" value="${value}" py:attrs="attrs" />
|
||
50 | <input type="text" class="${css_class}" id="${id}.ui"
|
||
51 | value="${text_value}" readonly="readonly" py:attrs="attrs" />
|
||
52 | <input type="button" class="${css_class}" id="${id}"
|
||
53 | value="${choose_text}" py:attrs="attrs" />
|
||
54 | <input type="button" class="${css_class}" id="${id}.clear"
|
||
55 | value="${clear_text}" py:attrs="attrs" />
|
||
56 | </div>
|
||
57 | """
|
||
58 | |||
59 | def update_params(self, d): |
||
60 | super(GroupSelector, self).update_params(d) |
||
61 | text_value = DBSession.query(Group.name).filter( |
||
62 | Group.idgroup == d.value).scalar() |
||
63 | if not text_value: |
||
64 | d.value = ''
|
||
65 | else:
|
||
66 | d.text_value = text_value |
||
67 | |||
68 | |||
69 | class PluginGroups(VigiboardRequestPlugin): |
||
70 | """
|
||
71 | Affiche les groupes d'éléments supervisés auxquels
|
||
72 | appartient l'événement corrélé.
|
||
73 | """
|
||
74 | def get_search_fields(self): |
||
75 | return [
|
||
76 | GroupSelector( |
||
77 | 'supitemgroup',
|
||
78 | label_text=l_('Group'),
|
||
79 | validator=twf.validators.Int(if_invalid=None, if_missing=None), |
||
80 | ) |
||
81 | ] |
||
82 | |||
83 | 86662bc9 | Francois POIROTTE | def handle_search_fields(self, query, search, state, subqueries): |
84 | if search.get('supitemgroup') is None or state != INNER: |
||
85 | 0f0e32ed | Francois POIROTTE | return
|
86 | |||
87 | # Il s'agit d'un manager. On applique le filtre
|
||
88 | # indépendamment aux 2 sous-requêtes.
|
||
89 | if len(subqueries) == 2: |
||
90 | subqueries[0] = subqueries[0].join( |
||
91 | (SUPITEM_GROUP_TABLE, |
||
92 | or_( |
||
93 | SUPITEM_GROUP_TABLE.c.idsupitem == \ |
||
94 | tables.LowLevelService.idhost, |
||
95 | SUPITEM_GROUP_TABLE.c.idsupitem == \ |
||
96 | tables.LowLevelService.idservice, |
||
97 | ) |
||
98 | ), |
||
99 | (GroupHierarchy, GroupHierarchy.idchild == |
||
100 | SUPITEM_GROUP_TABLE.c.idgroup) |
||
101 | ).filter( |
||
102 | GroupHierarchy.idparent == search['supitemgroup']
|
||
103 | ) |
||
104 | |||
105 | subqueries[1] = subqueries[1].join( |
||
106 | (SUPITEM_GROUP_TABLE, |
||
107 | SUPITEM_GROUP_TABLE.c.idsupitem == \ |
||
108 | tables.Host.idhost, |
||
109 | ), |
||
110 | (GroupHierarchy, GroupHierarchy.idchild == |
||
111 | SUPITEM_GROUP_TABLE.c.idgroup) |
||
112 | ).filter( |
||
113 | GroupHierarchy.idparent == search['supitemgroup']
|
||
114 | ) |
||
115 | |||
116 | # Il s'agit d'un utilisateur normal.
|
||
117 | else:
|
||
118 | 4654df60 | Vincent QUEMENER | GroupHierarchy_aliased = aliased(GroupHierarchy, |
119 | name='GroupHierarchy_aliased')
|
||
120 | subqueries[0] = subqueries[0].join( |
||
121 | (GroupHierarchy_aliased, GroupHierarchy_aliased.idchild == |
||
122 | tables.UserSupItem.idsupitemgroup) |
||
123 | ).filter( |
||
124 | GroupHierarchy_aliased.idparent == search['supitemgroup']
|
||
125 | 0f0e32ed | Francois POIROTTE | ) |