Project

General

Profile

Revision 0f0e32ed

ID0f0e32eddeeeb503c97a9a8d17966e19356a3e2b
Parent db58b89e
Child 809955f3

Added by Francois POIROTTE about 13 years ago

Refait fonctionner la recherche sur les supitemgroups (#595).

git-svn-id: https://vigilo-dev.si.c-s.fr/svn@6680 b22e2e97-25c9-44ff-b637-2e5ceca36478

View differences:

vigiboard/controllers/vigiboardrequest.py
51 51
        'AAClosed': '_Ack',
52 52
    }
53 53

  
54
    def __init__(self, user, mask_closed_events=True, supitemgroup=None):
54
    def __init__(self, user, mask_closed_events=True, search=None):
55 55
        """
56 56
        Initialisation de l'objet qui effectue les requêtes de VigiBoard
57 57
        sur la base de données.
......
59 59
        l'utilisateur sur les données manipulées.
60 60
        """
61 61

  
62
        # Permet s'appliquer des filtres de recherche aux sous-requêtes.
63
        self.subqueries = []
62 64
        self.generaterq = False
63 65

  
64 66
        is_manager = in_group('managers').is_met(request.environ)
......
66 68
        # Si l'utilisateur fait partie du groupe 'managers',
67 69
        # il a accès à tous les hôtes/services sans restriction.
68 70
        if is_manager:
69

  
70 71
            # Sélection de tous les services de la BDD.
71
            self.lls_query = DBSession.query(
72
            lls_query = DBSession.query(
72 73
                LowLevelService.idservice.label("idsupitem"),
73 74
                LowLevelService.servicename.label("servicename"),
74 75
                Host.name.label("hostname"),
75 76
            ).join(
76 77
                (Host, Host.idhost == LowLevelService.idhost),
77
            )
78

  
79
            # Ajout d'un filtre sur le groupe de supitems
80
            if supitemgroup:
81
                self.lls_query = self.lls_query.join(
82
                    (SUPITEM_GROUP_TABLE,
83
                        or_(
84
                            SUPITEM_GROUP_TABLE.c.idsupitem == \
85
                                LowLevelService.idhost,
86
                            SUPITEM_GROUP_TABLE.c.idsupitem == \
87
                                LowLevelService.idservice,
88
                        )
89
                    ),
90
                    (GroupHierarchy, GroupHierarchy.idchild ==
91
                        SUPITEM_GROUP_TABLE.c.idgroup)
92
                ).filter(
93
                    GroupHierarchy.idparent == supitemgroup
94
                )
95

  
96
            self.lls_query = self.lls_query.distinct()
78
            ).distinct()
97 79

  
98 80
            # Sélection de tous les hôtes de la BDD.
99
            self.host_query = DBSession.query(
81
            host_query = DBSession.query(
100 82
                Host.idhost.label("idsupitem"),
101 83
                expr_null().label("servicename"),
102 84
                Host.name.label("hostname"),
103
            )
104

  
105
            # Ajout d'un filtre sur le groupe de supitems
106
            if supitemgroup:
107
                self.host_query = self.host_query.join(
108
                    (SUPITEM_GROUP_TABLE,
109
                        SUPITEM_GROUP_TABLE.c.idsupitem == \
110
                            Host.idhost,
111
                    ),
112
                    (GroupHierarchy, GroupHierarchy.idchild ==
113
                        SUPITEM_GROUP_TABLE.c.idgroup)
114
                ).filter(
115
                    GroupHierarchy.idparent == supitemgroup
116
                )
117

  
118
            self.host_query = self.host_query.distinct()
85
            ).host_query.distinct()
86

  
87
            # Application des filtres des plugins si nécessaire.
88
            if search is not None:
89
                # On tire ici partie du fait que les listes sont passées
90
                # par référence dans les fonctions.
91
                subqueries = [lls_query, host_query]
92
                for plugin, instance in config.get('columns_plugins', []):
93
                    instance.handle_search_fields(self, search, )
94
                lls_query = subqueries[0]
95
                host_query = subqueries[1]
119 96

  
120 97
            # Union des deux sélections précédentes
121 98
            self.items = union_all(
122
                self.lls_query,
123
                self.host_query,
99
                lls_query,
100
                host_query,
124 101
                correlate=False
125 102
            ).alias()
126 103

  
......
132 109
                UserSupItem.hostname,
133 110
            ).filter(
134 111
                UserSupItem.username == user.user_name
135
            )
112
            ).distinct()
136 113

  
137
            # Ajout d'un filtre sur le groupe de supitems
138
            if supitemgroup:
139
                items = items.filter(
140
                    UserSupItem.idsupitemgroup == supitemgroup
141
                )
114
            # Application des filtres des plugins si nécessaire.
115
            if search is not None:
116
                # On tire ici partie du fait que les listes sont passées
117
                # par référence dans les fonctions.
118
                subqueries = [items]
119
                for plugin, instance in config.get('columns_plugins', []):
120
                    instance.handle_search_fields(self, search, subqueries)
121
                items = subqueries[0]
142 122

  
143
            self.items = items.distinct().subquery()
123
            self.items = items.subquery()
144 124

  
145 125
        # Éléments à retourner (SELECT ...)
146 126
        self.table = []
......
266 246
            self.req = self.req.group_by(i)
267 247
        for i in self.orderby:
268 248
            self.req = self.req.order_by(i)
269

  
270 249
        self.generaterq = True
271 250

  
272 251
    def num_rows(self):

Also available in: Unified diff