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

📄 devicemanagement.py

📁 Network Administration Visualized 网络管理可视化源码
💻 PY
📖 第 1 页 / 共 5 页
字号:
# -*- coding: ISO8859-1 -*-# $Id: deviceManagement.py 3315 2005-07-27 12:12:47Z mortenv $## Copyright 2003, 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: Hans J鴕gen Hoel <hansjorg@orakel.ntnu.no>#"""Contains all the functions and custom classes used by the deviceTracker, and is also the default handler."""################################################### Importsimport nav.db.manage,mx.DateTime,re,forgetSQL,psycopgfrom mod_python import util,apachefrom nav.web.templates.deviceManagementTemplate import deviceManagementTemplate#from deviceManagementTemplate import deviceManagementTemplatefrom nav.web.TreeSelect import TreeSelect,Select,UpdateableSelect,Option,SimpleSelectfrom nav.web import urlbuilder,SearchBox################################################### Constants (read from config file)BASEPATH = '/devicemanagement/'DATEFORMAT = '%d-%m-%Y'TIMEFORMAT = '%d-%m-%Y %H:%M'TIMESTAMP = '%Y-%m-%d %H:%M:%S'INFINITY = mx.DateTime.DateTime(999999,12,31,0,0,0)MAX_NUMBER_OF_DEVICES_ORDERED = 20NUMBER_OF_ARRIVED_SERIALS = 10DELETE_TIME_THRESHOLD = mx.DateTime.TimeDelta(hours=48)MAIN_MENU = [['Device history',BASEPATH,'Browse and view device history'],             ['Order devices',BASEPATH + 'order/','Order new devices and register arrivals of devices with serials'],             ['Register devices',BASEPATH + 'register/','Register new devices with serials'],             ['Register RMA',BASEPATH + 'rma/','Register a RMA request'],             ['Register error event',BASEPATH + 'error/','Register an error event with a comment on a location, room, box or module'],              ['Module delete',BASEPATH + 'delete/','Manually delete any modules that are flagged as down']]CURRENT_PATH = [('Home','/'),                ('Tools','/toolbox'),                ('Device Management',None)]# Controlnames for TreeSelectCN_LOCATION = 'location'CN_ROOM = 'room'CN_BOX = 'box'CN_MODULE = 'module'CN_DEVICE = 'device'#### Default handler##def handler(req):    keep_blank_values = True    req.form = util.FieldStorage(req,keep_blank_values)    path = req.uri.split(BASEPATH)[1]    path = path.split('/')    if path[0] == 'error':        output = error(req)    elif path[0] == 'order':        output = order(req,path)    elif path[0] == 'delete':        output = delete(req,path)    elif path[0] == 'rma':        output = rma(req,path)    elif path[0] == 'register':        output = register(req,path)    else:        # Default         output = history(req)    if output:        req.content_type = "text/html"        req.write(output)        return apache.OK    else:        return apache.HTTP_NOT_FOUND#### Pages##def register(req,path):    page = Page()    form = req.form    subpath = path[1]    product = None    if form.has_key(CN_PRODUCT):        product = form[CN_PRODUCT]    if form.has_key(CN_ARRIVE_CONFIRM):        if form.has_key(CN_SERIAL):            if len(form[CN_SERIAL]):                if len(form[CN_PRODUCT]):                    serial = form[CN_SERIAL]                    # Create devices                    fields = {}                    fields['productid'] = form[CN_PRODUCT]                    fields['active'] = 'true'                    fields['serial'] = serial                    try:                        sequence = ('deviceid',                                    'public.device_deviceid_seq')                        deviceid = insertFields(fields,'device',sequence)                        page.messages.append("Added device with serial '" +\                                             serial + "'")                    except psycopg.IntegrityError:                        page.errors.append("A device with serial '" +\                                             serial + "' already exists")                    # Send device active start event                    event = DeviceEvent('deviceActive')                    event.state = DeviceEvent.STATE_START                    event.deviceid = deviceid                    event.addVar('serial',serial)                    event.addVar('source','registered')                    event.post()                    # Send deviceState onShelf start                    event = DeviceEvent('deviceState','deviceOnShelf')                    event.state = DeviceEvent.STATE_START                    event.addVar('username',req.session['user'].login)                    event.deviceid = deviceid                    event.post()                else:                    page.errors.append('Missing product')        else:            page.errors.append('Missing serial')        # Set menu    page.menu = makeMainMenu(selected=2)    page.name = 'register'    page.title = 'Register devices'    page.description = 'Create new devices by entering serialnumbers.'    page.widgets = {}    page.action = BASEPATH+'register/'    page.widgets['serial'] = Widget(CN_SERIAL,'text','Serial')    page.widgets['submit'] = Widget(CN_ARRIVE_CONFIRM,'submit','Register')    # Make productlist    products = nav.db.manage.Product.getAllIterator()    options = [(None,'Select a product',False)]    for product in products:        options.append((str(product.productid),                        product.productno + ' (' + product.descr + ')',                        False))    page.widgets['product'] = Widget(CN_PRODUCT,'select','Product',                                     product,                                                                     options={'options': options},                                     required=True)    nameSpace = {'page': page}    template = deviceManagementTemplate(searchList=[nameSpace])    template.path = CURRENT_PATH    return template.respond()CN_ADD_DEVICE = 'r_dadd'CN_ADD_RMA = 'r_radd'CN_RMANUMBER = 'r_number'CN_RMACOMMENT = 'r_comment'CN_RMARETAILER = 'r_retailer'CN_ADDED_DEVICES = 'r_added'def rma(req,path):    page = Page()    form = req.form    subpath = path[1]    # Set menu    page.menu = makeMainMenu(selected=3)    page.name = 'rma'    page.title = 'Register RMA'    page.description = 'Active RMA events. Select return to register ' +\                       'return of devices.'    page.widgets = {}    page.action = BASEPATH+'rma/register/'    # Get formdata    addRMAKeys = [CN_YEAR,CN_MONTH,CN_DAY,CN_RMANUMBER,CN_RMACOMMENT,                  CN_RMARETAILER]    formData = {}    for key in addRMAKeys:        if form.has_key(key):            formData[key] = form[key]        else:            formData[key] = None    submenu = [('Active RMA events','List active RMA events',                BASEPATH+'rma/'),               ('Register RMA request','Register RMA request',                BASEPATH+'rma/register')]    page.submenu = submenu    deviceidList = []    if form.has_key(CN_ADD_DEVICE):        if form.has_key(CN_DEVICE):            deviceidList = form[CN_DEVICE]            if type(deviceidList) in (str, unicode, util.StringField):                deviceidList = [deviceidList]    elif form.has_key(CN_ADD_RMA):        if form.has_key(CN_RMANUMBER):            if len(form[CN_RMANUMBER]):                if form.has_key(CN_ADDED_DEVICES):                    if len(form[CN_ADDED_DEVICES]):                        rmanumber = form[CN_RMANUMBER]                        deviceidsAdded = form[CN_ADDED_DEVICES]                        if type(deviceidsAdded) in (str, unicode,                                                    util.StringField):                            deviceidsAdded = [deviceidsAdded]                        retailer = None                        if form.has_key(CN_RMARETAILER):                            retailer = form[CN_RMARETAILER]                        comment = None                        if form.has_key(CN_RMACOMMENT):                            retailer = form[CN_RMACOMMENT]                         year = form[CN_YEAR]                        month = form[CN_MONTH]                        day = form[CN_DAY]                        registerRMA(deviceidsAdded,rmanumber,year,month,day,                                    retailer,comment,req.session['user'].login)                        subpath = ''                        page.messages.append('Sent RMA event')                    else:                        page.errors.append('You must select at least one ' +\                                           'device')                else:                    page.errors.append('You must select at least one device')            else:                page.errors.append('You must enter an RMA number')        else:            page.errors.append('You must enter an RMA number')    if subpath == 'register':        page.subname = 'register'        page.description = 'Add devices to RMA'        page.rmasearchbox,page.treeselect = makeTreeSelectRMA(req)        addedDevices = []        if form.has_key(CN_ADDED_DEVICES):            addedDevices = form[CN_ADDED_DEVICES]            if type(addedDevices) in (str, unicode, util.StringField):                addedDevices = [addedDevices]        for deviceid in deviceidList:            if not deviceid in addedDevices:                addedDevices.append(deviceid)        rows = []        for deviceid in addedDevices:            page.hiddenInputs.append((CN_ADDED_DEVICES,deviceid))            device = nav.db.manage.Device(deviceid)            if device.product:                productname = device.product.productno            else:                productname = ''            rows.append([[device.serial],[productname],                         [device.hw_ver],[device.sw_ver]])                page.rmalist = RMAList('Selected devices',rows)        page.widgets['rmadate'] = Widget([CN_DAY,CN_MONTH,CN_YEAR],'date',                                          'RMA date',                                          [formData[CN_YEAR],                                           formData[CN_MONTH],                                           formData[CN_DAY]])        page.widgets['number'] = Widget(CN_RMANUMBER,'text','RMA Number',                                           formData[CN_RMANUMBER],                                           required=True)        page.widgets['comment'] = Widget(CN_RMACOMMENT,'textarea','Comment',                                           formData[CN_RMACOMMENT],                                           options={'rows': '5',                                                    'cols': '10',                                                    'style': 'width: 100%;'})        page.widgets['retailer'] = Widget(CN_RMARETAILER,'text','Retailer',                                           formData[CN_RMARETAILER])        page.widgets['adddevice'] = Widget(CN_ADD_DEVICE,'submit','Add device')        page.widgets['addrma'] = Widget(CN_ADD_RMA,'submit','Add RMA')    if not subpath:        # Main page        sql = "SELECT device.deviceid,serial,serial " +\              "FROM device,alerthist WHERE " +\              "device.deviceid = alerthist.deviceid AND " +\              "active='false' AND active='true' ORDER BY deviceid"        colformat = [['$1$'],                     ['$2$'],                     ['$3$'],                     [['url','Details',BASEPATH+'rma/details/$8$/']]]                        headings = [('RMA Number',None),                    ('Date',None),                    ('Amount',None),                    ('',None)]        page.rmaList = FormattedList('orders','Active RMA events',headings,                                       colformat,sql)

⌨️ 快捷键说明

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