📄 handler.py
字号:
#! /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 + -