⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 handler.py

📁 Network Administration Visualized 网络管理可视化源码
💻 PY
📖 第 1 页 / 共 2 页
字号:
#! /usr/bin/env python# -*- coding: ISO8859-1 -*-## Copyright 2006 UNINETT AS## 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### Author: Stein Magnus Jodal <stein.magnus.jodal@uninett.no>#"""mod_python handler for Maintenance subsystem."""__copyright__ = "Copyright 2006 UNINETT AS"__license__ = "GPL"__author__ = "Stein Magnus Jodal (stein.magnus.jodal@uninett.no)"__id__ = "$Id:$"import timefrom mod_python import apache, utilimport nav.dbimport nav.maintenancefrom nav.web.URI import URIfrom nav.web.templates.MaintenanceCalTemplate import MaintenanceCalTemplatefrom nav.web.templates.MaintenanceListTemplate import MaintenanceListTemplatefrom nav.web.templates.MaintenanceNewTemplate import MaintenanceNewTemplatefrom nav.web.TreeSelect import TreeSelect, Select, UpdateableSelectdbconn = nav.db.getConnection('webfront', 'manage')db = dbconn.cursor()def handler(req):    """Handler for the Maintenance subsystem."""    # Initialize form    keep_blank_values = True    req.form = util.FieldStorage(req, keep_blank_values)    # Get arguments    args = URI(req.unparsed_uri)    # Get section    if len(args.path.split('/')[-1]):        section = args.path.split('/')[-1]    else:        section = 'active'    # Create initial menu, more is appended depending on context    menu = []    menu.append({'link': 'calendar', 'text': 'Calendar', 'admin': False})    menu.append({'link': 'active', 'text': 'Active', 'admin': False})    menu.append({'link': 'planned', 'text': 'Planned', 'admin': False})    menu.append({'link': 'historic', 'text': 'Historic', 'admin': False})    ### SECTIONS    # Show active maintenance tasks (public tasks)    if section == 'active':        page = MaintenanceListTemplate()        page.title = 'Active Maintenance Tasks'        page.tasks = nav.maintenance.getTasks('maint_start < now() AND maint_end > now()')    # Planned maintenance tasks (not yet reached activation time)    elif section == 'planned':        page = MaintenanceListTemplate()        page.title = 'Planned Maintenance Tasks'        page.tasks = nav.maintenance.getTasks('maint_start > now() AND maint_end > now()')    # Historic maintenance tasks    elif section == 'historic':        page = MaintenanceListTemplate()        page.title = 'Historic Maintenance Tasks'        page.tasks = nav.maintenance.getTasks('maint_end < now()', 'maint_end DESC')    # View a maintenance task    elif section == 'view' and args.get('id'):        page = MaintenanceListTemplate()        page.title = 'Maintenance Task'        menu.append({'link': 'view', 'text': 'View', 'admin': False})        taskid = int(args.get('id'))        page.tasks = nav.maintenance.getTask(taskid)    # Cancel a maintenance task    elif section == 'cancel' and args.get('id'):        page = MaintenanceListTemplate()        page.title = 'Cancel maintenance task'        menu.append({'link': 'cancel', 'text': 'Cancel', 'admin': True})        page.infomsgs = []        taskid = int(args.get('id'))        nav.maintenance.cancelTask(taskid)        page.infomsgs.append('The following maintenance task was canceled.')        page.tasks = nav.maintenance.getTask(taskid)    # New and edit    elif section == 'new' or section =='edit':        page = MaintenanceNewTemplate()        page.title = 'Create New Maintenance Task'        page.errors = []        page.components = []        # Create select tree        selectbox = TreeSelect()        sr = {"locations": [], "rooms": [], "netboxes": [], "services": []}        if req.form.has_key('sb_submit'):            sr = searchbox.getResults(req)        select1 = Select('cn_location',                        'Location',                        multiple = True,                        multipleSize = 10,                        initTable='Location',                        initTextColumn = 'descr',                        initIdColumn = 'locationid',                        preSelected = sr['locations'],                        optionFormat = '$v ($d)',                        optgroupFormat = '$v ($d)',                        orderByValue = True)        select2 = UpdateableSelect(select1,                                   'cn_room',                                   'Room',                                   'Room',                                   'descr',                                   'roomid',                                   'locationid',                                   multiple = True,                                   multipleSize = 10,                                   preSelected = sr['rooms'],                                   optionFormat = '$v ($d)',                                   optgroupFormat = '$v ($d)',                                   orderByValue = True)        select3 = UpdateableSelect(select2,                                   'cn_netbox',                                   'IP Device',                                   'Netbox',                                   'sysname',                                   'netboxid',                                   'roomid',                                   multiple = True,                                   multipleSize = 10,                                   optgroupFormat = '$v ($d)',                                   preSelected = sr['netboxes'])        select4 = UpdateableSelect(select3,                                   'cn_service',                                   'Service',                                   'Service',                                   'handler',                                   'serviceid',                                   'netboxid',                                   multiple = True,                                   multipleSize = 10,                                   optgroupFormat = '$d',                                   preSelected = sr['services'])        selectbox.addSelect(select1)        selectbox.addSelect(select2)        selectbox.addSelect(select3)        selectbox.addSelect(select4)        # Update the selectboxes based on form data        selectbox.update(req.form)        page.selectbox = selectbox        # Update component submit button        buttontext = "Add to task"        buttonkey = "cn_add"        buttonenabled = False        if len(select4.selectedList):            validSelect = True            buttontext = "Add service(s) to task"            buttonkey = "cn_add_services"            buttonenabled = True        elif len(select3.selectedList):            validSelect = True            buttontext = "Add IP device(s) to task"            buttonkey = "cn_add_netboxes"            buttonenabled = True        elif len(select2.selectedList):            validSelect = True            buttontext = "Add room(s) to task"            buttonkey = "cn_add_rooms"            buttonenabled = True        elif len(select1.selectedList):            validSelect = True            buttontext = "Add location(s) to task"            buttonkey = "cn_add_locations"            buttonenabled = True        page.selectsubmit = { 'control': buttonkey,                              'value': buttontext,                              'enabled': buttonenabled }        # Edit: Fill page with existing data        if section == 'edit':            page.title = 'Edit Maintenance Task'            page.submittext = 'Save Maintenance Task'            menu.append({'link': 'edit', 'text': 'Edit', 'admin': True})            if not args.get('id') or not args.get('id').isdigit():                page.errors.append('Maintenance task ID in request is not a digit.')            else:                taskid = int(args.get('id'))                task = nav.maintenance.getTask(taskid)[0]                page.edit_taskid = taskid                # Maintenance components                page.components = task['components']                # Maintenance times                page.start_year = int(task['maint_start'].strftime('%Y'))                page.start_month = int(task['maint_start'].strftime('%m'))                page.start_day = int(task['maint_start'].strftime('%d'))                page.start_hour = int(task['maint_start'].strftime('%H'))                page.start_min = int(task['maint_start'].strftime('%M'))                page.end_year = int(task['maint_end'].strftime('%Y'))                page.end_month = int(task['maint_end'].strftime('%m'))                page.end_day = int(task['maint_end'].strftime('%d'))                page.end_hour = int(task['maint_end'].strftime('%H'))                page.end_min = int(task['maint_end'].strftime('%M'))                # Description                page.description = task['description']        # Init components

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -