Revision cf4ae971
Début d'ajout de la gestion des permissions sur les données dans VigiGraph.
git-svn-id: https://vigilo-dev.si.c-s.fr/svn@2675 b22e2e97-25c9-44ff-b637-2e5ceca36478
vigigraph/controllers/rpc.py | ||
---|---|---|
8 | 8 |
|
9 | 9 |
from pylons.i18n import ugettext as _, lazy_ugettext as l_ |
10 | 10 |
from tg import expose, response, request, redirect, config, url, exceptions |
11 |
from sqlalchemy.orm import aliased |
|
12 | 11 |
from repoze.what.predicates import not_anonymous |
13 | 12 |
|
13 |
from sqlalchemy.orm import aliased |
|
14 |
from sqlalchemy import or_ |
|
15 |
|
|
14 | 16 |
from vigigraph.lib.base import BaseController |
15 | 17 |
|
16 | 18 |
from vigilo.models.session import DBSession |
17 |
from vigilo.models.tables import LowLevelService, Host |
|
19 |
from vigilo.models.tables import LowLevelService, Host, User
|
|
18 | 20 |
from vigilo.models.tables import SupItemGroup, GroupHierarchy |
19 | 21 |
from vigilo.models.tables import PerfDataSource |
20 | 22 |
from vigilo.models.tables import Graph, GraphGroup |
... | ... | |
27 | 29 |
|
28 | 30 |
from vigilo.turbogears.rrdproxy import RRDProxy |
29 | 31 |
from vigilo.turbogears.nagiosproxy import NagiosProxy |
32 |
from vigilo.turbogears.helpers import get_current_user |
|
30 | 33 |
|
31 | 34 |
from vigigraph.widgets.searchhostform import SearchHostForm |
32 | 35 |
from vigigraph.lib import graphs |
... | ... | |
68 | 71 |
@note: L'ID des groupes est converti en chaîne de caractères |
69 | 72 |
dans le résultat. |
70 | 73 |
""" |
71 |
topgroups = [(tpg.name, str(tpg.idgroup)) \ |
|
72 |
for tpg in SupItemGroup.get_top_groups()] |
|
74 |
user = get_current_user() |
|
75 |
if user is None: |
|
76 |
return dict(items=[]) |
|
77 |
supitemgroups = user.supitemgroups() |
|
78 |
|
|
79 |
children = DBSession.query( |
|
80 |
SupItemGroup |
|
81 |
).distinct( |
|
82 |
).join( |
|
83 |
(GroupHierarchy, GroupHierarchy.idchild == SupItemGroup.idgroup) |
|
84 |
).filter(GroupHierarchy.hops > 0) |
|
85 |
|
|
86 |
topgroups = DBSession.query( |
|
87 |
SupItemGroup, |
|
88 |
).filter(SupItemGroup.idgroup.in_(supitemgroups) |
|
89 |
).except_(children).order_by(SupItemGroup.name).all() |
|
90 |
topgroups = [(sig.name, str(sig.idgroup)) for sig in topgroups] |
|
73 | 91 |
return dict(items=topgroups) |
74 | 92 |
|
75 | 93 |
@expose('json') |
... | ... | |
88 | 106 |
@note: L'ID des groupes est converti en chaîne de caractères |
89 | 107 |
dans le résultat. |
90 | 108 |
""" |
109 |
user = get_current_user() |
|
110 |
if user is None: |
|
111 |
return dict(items=[]) |
|
112 |
supitemgroups = user.supitemgroups() |
|
113 |
|
|
91 | 114 |
hostgroups = DBSession.query( |
92 | 115 |
SupItemGroup.name, |
93 | 116 |
SupItemGroup.idgroup, |
... | ... | |
96 | 119 |
SupItemGroup.idgroup), |
97 | 120 |
).filter(GroupHierarchy.idparent == maingroupid |
98 | 121 |
).filter(GroupHierarchy.hops == 1 |
122 |
).filter(SupItemGroup.idgroup.in_(supitemgroups) |
|
99 | 123 |
).order_by( |
100 | 124 |
SupItemGroup.name.asc(), |
101 | 125 |
).all() |
... | ... | |
114 | 138 |
@return: hotes |
115 | 139 |
@rtype: document json (sous forme de dict) |
116 | 140 |
""" |
141 |
user = get_current_user() |
|
142 |
if user is None: |
|
143 |
return dict(items=[]) |
|
144 |
supitemgroups = user.supitemgroups() |
|
145 |
|
|
117 | 146 |
hosts = DBSession.query( |
118 | 147 |
Host.name, |
119 | 148 |
Host.idhost, |
120 | 149 |
).join( |
121 | 150 |
(SUPITEM_GROUP_TABLE, SUPITEM_GROUP_TABLE.c.idsupitem == \ |
122 | 151 |
Host.idhost), |
123 |
(SupItemGroup, SupItemGroup.idgroup == \ |
|
124 |
SUPITEM_GROUP_TABLE.c.idgroup), |
|
125 |
).filter(SupItemGroup.idgroup == othergroupid |
|
152 |
).filter(SUPITEM_GROUP_TABLE.c.idgroup == othergroupid |
|
153 |
).filter(SUPITEM_GROUP_TABLE.c.idgroup.in_(supitemgroups) |
|
126 | 154 |
).order_by( |
127 | 155 |
Host.name.asc(), |
128 | 156 |
).all() |
... | ... | |
142 | 170 |
@return: groupes de service |
143 | 171 |
@rtype: document json (sous forme de dict) |
144 | 172 |
""" |
173 |
user = get_current_user() |
|
174 |
if user is None: |
|
175 |
return dict(items=[]) |
|
176 |
supitemgroups = user.supitemgroups() |
|
177 |
|
|
145 | 178 |
graphgroups = DBSession.query( |
146 | 179 |
GraphGroup.name, |
147 | 180 |
GraphGroup.idgroup, |
... | ... | |
156 | 189 |
GRAPH_PERFDATASOURCE_TABLE.c.idperfdatasource), |
157 | 190 |
(LowLevelService, LowLevelService.idservice == \ |
158 | 191 |
PerfDataSource.idservice), |
159 |
).filter( |
|
160 |
LowLevelService.idhost == idhost |
|
192 |
(SUPITEM_GROUP_TABLE, or_( |
|
193 |
SUPITEM_GROUP_TABLE.c.idsupitem == LowLevelService.idhost, |
|
194 |
SUPITEM_GROUP_TABLE.c.idsupitem == LowLevelService.idservice, |
|
195 |
)), |
|
196 |
).filter(LowLevelService.idhost == idhost |
|
197 |
).filter(SUPITEM_GROUP_TABLE.c.idgroup.in_(supitemgroups) |
|
161 | 198 |
).order_by( |
162 | 199 |
GraphGroup.name.asc() |
163 |
) |
|
200 |
).all()
|
|
164 | 201 |
|
165 |
print "@@@\n%s\n@@@" % graphgroups |
|
166 |
graphgroups = graphgroups.all() |
|
167 |
|
|
168 | 202 |
graphgroups = [(gg.name, str(gg.idgroup)) for gg in graphgroups] |
169 | 203 |
return dict(items=graphgroups) |
170 | 204 |
|
... | ... | |
180 | 214 |
@return: graphes |
181 | 215 |
@rtype: document json (sous forme de dict) |
182 | 216 |
""" |
183 |
graphs_l = DBSession.query( |
|
217 |
user = get_current_user() |
|
218 |
if user is None: |
|
219 |
return dict(items=[]) |
|
220 |
supitemgroups = user.supitemgroups() |
|
221 |
|
|
222 |
graphs = DBSession.query( |
|
184 | 223 |
Graph.name, |
185 | 224 |
Graph.idgraph, |
186 | 225 |
).distinct().join( |
... | ... | |
194 | 233 |
GRAPH_PERFDATASOURCE_TABLE.c.idperfdatasource), |
195 | 234 |
(LowLevelService, LowLevelService.idservice == \ |
196 | 235 |
PerfDataSource.idservice), |
236 |
(SUPITEM_GROUP_TABLE, or_( |
|
237 |
SUPITEM_GROUP_TABLE.c.idsupitem == LowLevelService.idhost, |
|
238 |
SUPITEM_GROUP_TABLE.c.idsupitem == LowLevelService.idservice, |
|
239 |
)), |
|
197 | 240 |
).filter(GraphGroup.idgroup == idgraphgroup |
198 | 241 |
).filter(LowLevelService.idhost == idhost |
242 |
).filter(SUPITEM_GROUP_TABLE.c.idgroup.in_(supitemgroups) |
|
199 | 243 |
).order_by( |
200 | 244 |
Graph.name.asc() |
201 |
) |
|
202 |
|
|
203 |
print "@@@\n%s\n@@@" % graphs_l |
|
204 |
graphs_l = graphs_l.all() |
|
245 |
).all() |
|
205 | 246 |
|
206 |
graphs_l = [(pds.name, str(pds.idgraph)) for pds in graphs_l]
|
|
207 |
return dict(items=graphs_l)
|
|
247 |
graphs = [(pds.name, str(pds.idgraph)) for pds in graphs]
|
|
248 |
return dict(items=graphs) |
|
208 | 249 |
|
209 | 250 |
@expose('json') |
210 | 251 |
def searchHostAndGraph(self, **kwargs): |
... | ... | |
222 | 263 |
@return: couples hote-graphe |
223 | 264 |
@rtype: document json (sous forme de dict) |
224 | 265 |
""" |
266 |
user = get_current_user() |
|
267 |
if user is None: |
|
268 |
return dict(items=[]) |
|
269 |
supitemgroups = user.supitemgroups() |
|
270 |
|
|
225 | 271 |
host = kwargs.get('host') |
226 | 272 |
graph = kwargs.get('graph') |
227 | 273 |
items = None |
228 | 274 |
|
229 | 275 |
# On a un nom d'indicateur, mais pas de nom d'hôte, |
230 | 276 |
# on considère que l'utilisateur veut tous les indicateurs |
231 |
# correspondant au motif, quelque soit l'hôte. |
|
277 |
# correspondant au motif, quel que soit l'hôte.
|
|
232 | 278 |
if graph is not None: |
233 | 279 |
if host is None: |
234 | 280 |
host = '*' |
... | ... | |
248 | 294 |
PerfDataSource.idperfdatasource), |
249 | 295 |
(Graph, Graph.idgraph == \ |
250 | 296 |
GRAPH_PERFDATASOURCE_TABLE.c.idgraph), |
297 |
(SUPITEM_GROUP_TABLE, or_( |
|
298 |
SUPITEM_GROUP_TABLE.c.idsupitem == Host.idhost, |
|
299 |
SUPITEM_GROUP_TABLE.c.idsupitem == LowLevelService.idservice, |
|
300 |
)), |
|
251 | 301 |
).filter(Host.name.ilike('%' + host + '%') |
252 | 302 |
).filter(Graph.name.ilike('%' + graph + '%') |
303 |
).filter(SUPITEM_GROUP_TABLE.c.idgroup.in_(supitemgroups) |
|
253 | 304 |
).order_by( |
254 | 305 |
Host.name.asc(), |
255 | 306 |
Graph.name.asc(), |
... | ... | |
267 | 318 |
host = sql_escape_like(host) |
268 | 319 |
items = DBSession.query( |
269 | 320 |
Host.name.label('hostname'), |
270 |
).filter( |
|
271 |
Host.name.ilike('%' + host + '%') |
|
321 |
).join( |
|
322 |
(SUPITEM_GROUP_TABLE, SUPITEM_GROUP_TABLE.c.idsupitem == \ |
|
323 |
Host.idhost), |
|
324 |
).filter(Host.name.ilike('%' + host + '%') |
|
325 |
).filter(SUPITEM_GROUP_TABLE.c.idsupitem.in_(supitemgroups) |
|
272 | 326 |
).order_by(Host.name.asc()) |
273 | 327 |
|
274 | 328 |
items = items.limit(100).all() |
Also available in: Unified diff