📄 rrd.py
字号:
# -*- coding: ISO8859-1 -*-# Copyright 2002-2004 Norwegian University of Science and Technology## This file is part of Network Administration Visualized (NAV)## NAV is free software; you can redistribute it and/or modify# it under the terms of the GNU General Public License as published by# the Free Software Foundation; either version 2 of the License, or# (at your option) any later version.## NAV is distributed in the hope that it will be useful,# but WITHOUT ANY WARRANTY; without even the implied warranty of# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the# GNU General Public License for more details.## You should have received a copy of the GNU General Public License# along with NAV; if not, write to the Free Software# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA### Authors: Magnus Nordseth <magnun@itea.ntnu.no># Stian Soiland <stain@itea.ntnu.no>"""Integrate rrdBrowser into deviceBrowser...TODO:* Define y-axis, max-min* probably some moreAuthor: Magnus Nordseth <magnun@stud.ntnu.no>"""from mod_python import apache, utilimport nav.configimport osfrom nav.web.TreeSelect import TreeSelect, Option, Select, UpdateableSelectfrom nav.rrd import presenterimport forgetHTML as htmlfrom nav.web import urlbuilderfrom nav.errors import *from nav.web.templates.TreeSelectTemplate import TreeSelectTemplatefrom nav.web.templates.SearchBoxTemplate import SearchBoxTemplatefrom nav.web.SearchBox import SearchBoxfrom nav.db import navprofilesimport nav.dbconfigfile = 'rrdBrowser.conf'def process(request): args = request['args'] query = parseQuery(request['query']) session = request['session'] if not args: raise RedirectError, urlbuilder.createUrl(division="rrd") if args[0] == "": return showIndex(request['req'], session) if args[0] == "datasources": return datasources(query, session) if args[0] == "timeframe": timeframe(session, query) session.save() raise RedirectError, urlbuilder.createUrl(division="rrd") if args[0] == "add": return treeselect(request['req'], session) if args[0] == 'pageAction': pageAction(request['req']) session.save() raise RedirectError, urlbuilder.createUrl(division="rrd") if args[0] == "graph": graph(request['req'], query['id'][0]) if args[0] == "join": try: id = query['id'] except: return "nalle" join(session, id) session.save() raise RedirectError, urlbuilder.createUrl(division="rrd") if args[0] == "split": try: id = query['id'] except: return html.Division('Noe gikk galt') split(session, id) raise RedirectError, urlbuilder.createUrl(division="rrd") if args[0] == "remove": try: id = query['id'] except: return html.Division('Dette gikk d錼lig') #return showGraphs(session) remove(session, id) raise RedirectError, urlbuilder.createUrl(division="rrd") if args[0] == "zoom": try: id = int(query['id'][0]) except Exception, e: return html.Division("No id passed in %s, %s" % (e, query['id'])) try: value = float(query['value'][0]) except Exception, e: return html.Division("Invalid value, %s, %s" % (e, query['value'])) zoom(session, id, value) raise RedirectError, urlbuilder.createUrl(division="rrd") if args[0] == "save": try: name = query['name'][0] except: name = 'ingenting' return save(session, name) if args[0] == 'load': try: name = query['name'][0] except: name = 'ingenting' load(session, name) raise RedirectError, urlbuilder.createUrl(division="rrd") return html.Division("args: %s, query: %s " %(str(args), str(query)))def pageAction(req): req.form = util.FieldStorage(req) action = req.form['action'] zoomList = req.form['zoom'] if req.form.has_key('cn_zoom'): for i in range(len(zoomList)): try: value = float(zoomList[i]) except: continue if value != 0: zoom(req.session, i, value) try: selected = req.form['selected'] except KeyError: selected = [] if type(selected) != list: selected = [selected] if 'join'in action: return join(req.session, selected) if 'remove' in action: return remove(req.session, selected) if 'split' in action: return split(req.session, selected) return html.Division("req.form: %s action: %s zoom: %s selected: %s" % (str(req.form), action, zoom, selected))def join(session, list): try: page = session['rrd'].presentations except Exception, e: return html.Division("%s %s" % (str(e), str(index))) if len(list) < 2: return html.Division("Need at least 2 elements to join") # we want to add to our first first = page[int(list[0])] toDelete = [] for i in list[1:]: i = int(i) toDelete.append(i) for ds in page[i].datasources: first.datasources.append(ds) # remove the elements joind to another, but largest id first toDelete.sort() toDelete.reverse() for i in toDelete: del page[i] session.save()def split(session, list): graphs = session['rrd'].presentations splitted = [] for index in list: for ds in graphs[int(index)].datasources: pres = presenter.presentation() pres.datasources.append(ds) splitted.append(pres) graphs.extend(splitted) session.save() remove(session, list)def remove(session, list): try: list.sort() list.reverse() for i in list: session['rrd'].presentations.pop(int(i)) except Exception, e: return html.Division("%s %s" % (str(e), str(list))) session.save()def zoom(session, id, value): session['rrd'].presentations[id].setYAxis(value) session.save()def timeframe(session, query): tf = query['tf'][0] try: session['rrd'].timeframeIndex = query['tfIndex'][0] except: pass session['rrd'].timeframe = tf session.save() for i in session['rrd'].presentations: i.timeLast(tf, session['rrd'].timeframeIndex)def showIndex(req, session): try: presentations = session['rrd'].presentations except KeyError: # session contains no rrd info. # poor user, but sure we can help session['rrd'] = presenter.page() session['rrd'].presentations = [] session.save() presentations = session['rrd'].presentations if len(presentations): return showGraphs(session) return treeselect(req, session)def treeselect(req, session, action=None): result = html.Division() keep_blank_values = True req.form = util.FieldStorage(req, keep_blank_values) searchbox = SearchBox(req,'Type a room id, an ip or a (partial) sysname') searchbox.addSearch('ds', 'Datasource', 'RrdDataSourceFile', {'catids': ['netbox.cat'], 'netboxes': ['netbox'], 'datasources' : ['rrd_datasourceid'], }, where = "rrd_datasource.descr like '%%%s%%'" )
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -