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

📄 dump.py

📁 Network Administration Visualized 网络管理可视化源码
💻 PY
字号:
#!/usr/bin/env python# -*- coding: ISO8859-1 -*-## Copyright 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### Dumps core information from NAV to textfiles importable by editDB.## Author: Stian S鴌land <stain@itea.ntnu.no>#"""Dumps core information from NAV to textfiles importable by editDB."""import sys# Backup! =) sys._stdout = sys.stdoutfrom nav.db import manageSEPARATOR=":"def warn(msg):    sys.stderr.write(msg + "\n")def fail(resultcode, msg):    warn(msg)    sys.exit(resultcode)def header(header):    header = header.replace(":", SEPARATOR)    print headerdef lineout(line):    # Remove any : in strings    newline = [x.replace(SEPARATOR, "") for x in line]    print SEPARATOR.join(newline)class Handlers:    def netbox(self):        header("#roomid:ip:orgid:catid:[ro:serial:rw:function:subcat1:subcat2..]")        allFunctions = manage.Netboxinfo.getAll(where="var='function'")        for box in manage.Netbox.getAllIterator():            line = []            line.append(box.room.roomid)            line.append(box.ip)            line.append(box.org.orgid)            line.append(box.cat.catid)            line.append(box.ro or "")            line.append(box.device.serial or box.sysname)            line.append(box.rw or "")            functions = [f.val for f in allFunctions                          if f.netbox == box]            functions = str.join(", ", functions)            line.append(functions)            categories = box.getChildren(manage.Netboxcategory)            categories = [cat.category for cat in categories]            categories.sort()            line.extend(categories)            lineout(line)    def org(self):        header("#orgid[:parent:description:optional1:optional2:optional3]")        for org in manage.Org.getAllIterator():            line = []            line.append(org.orgid)            line.append(org.parent or "")            line.append(org.descr or "")            line.append(org.opt1 or "")            line.append(org.opt2 or "")            line.append(org.opt3 or "")            lineout(line)     def subcat(self):        header("#subcatid:catid:description")        for subcat in manage.Subcat.getAllIterator():            line = []            line.append(subcat.subcatid)            line.append(subcat.cat.catid)            line.append(subcat.descr)            lineout(line)      def usage(self):        header("#usageid:descr")        for usage in manage.Usage.getAllIterator():            line = []            line.append(usage.usageid)            line.append(usage.descr)            lineout(line)       def location(self):        header("#locationid:descr")        for location in manage.Location.getAllIterator():            line = []                     line.append(location.locationid)            line.append(location.descr)            lineout(line)        def room(self):        header("#roomid[:locationid:descr:opt1:opt2:opt3:opt4]")        for room in manage.Room.getAllIterator():                     line = []                     line.append(room.roomid)            line.append(room.location.locationid)            line.append(room.descr or "")            line.append(room.opt1 or "")            line.append(room.opt2 or "")            line.append(room.opt3 or "")            line.append(room.opt4 or "")            lineout(line)       def type(self):        header("#vendorid:typename:sysoid[:description:frequency:cdp:tftp]")        for type in manage.Type.getAllIterator():            line = []            line.append(type.vendor.vendorid)            line.append(type.typename)            line.append(type.sysobjectid)            line.append(type.descr)            line.append(str(type.frequency))            line.append(str(type.cdp))            line.append(str(type.tftp))            lineout(line)    def vendor(self):        header("#vendorid")        for vendor in manage.Vendor.getAllIDs():            line = [vendor]            lineout(line)       def product(self):        header("#vendorid:productno[:description]")        for product in manage.Product.getAllIterator():            line = []            line.append(product.vendor.vendorid)            line.append(product.productno)            line.append(product.descr or "")            lineout(line)    def prefix(self):        header("#prefix/mask:nettype[:orgid:netident:usage:description:vlan]")        for prefix in manage.Prefix.getAllIterator():            vlan = prefix.vlan            line = []            line.append(prefix.netaddr)            line.append(vlan.nettype.nettypeid)            line.append(vlan.org and vlan.org.orgid or "")            line.append(vlan.netident or "")            line.append(vlan.usage and vlan.usage.usageid or "")            line.append(vlan.description or "")            line.append(vlan.vlan and str(vlan.vlan) or "")            lineout(line)    def service(self):        global SEPARATOR        old_sep = SEPARATOR        if SEPARATOR==":":            # (since it is used in URLs for HTTP checker and we don't            # have a defined way to escape it)             warn("Not smart to use : as separator for services, using ;")            SEPARATOR=";"        header("#ip/sysname:handler[:arg=value[:arg=value]]")        for service in manage.Service.getAllIterator():            line = []                        line.append(service.netbox.sysname)            line.append(service.handler)            properties = ["%s=%s" % (p.property, p.value)                          for p in service.getChildren(manage.Serviceproperty)]            line.extend(properties)                              lineout(line)        SEPARATOR = old_sepdef main():    try:        # Available from Python 2.3        from optparse import OptionParser    except ImportError:        try:            from optik import OptionParser        except ImportError:            fail(1, "optik 1.4.1 or Python 2.3 or later needed "                    "for command line) usage.\n"                    "Download optik from "                    "http://optik.sourceforge.net/ or upgrade Python.")    usage = "usage: %prog [options]\n" \            "Dumps NAV database to importable files."    parser = OptionParser(usage=usage)    parser.add_option("-s", "--seperator", dest="separator",                      help="use SEP to seperate fields in output, "                           "[default :]",                      metavar="SEP", default=":")    parser.add_option("-t", "--table", dest="table",                      help="dump data from TABLE",                      default="")    parser.add_option("-o", "--output", dest="output",                      help="dump data to FILE instead of stdout",                      metavar="FILE")     parser.add_option("-a", "--all", dest="all", action="store_true",                      help="dump all tables to files named TABLE.txt")    (options, args) = parser.parse_args()    if options.separator:        global SEPARATOR        SEPARATOR = options.separator        if options.all:        handlers = Handlers()        for key in Handlers.__dict__.keys():            if key[0] == "_":                continue            file = key + ".txt"                sys.stdout = sys._stdout                print "Dumping " + file            try:                # We're lazy and are using print all the way                 sys.stdout = open(file, "w")            except IOError, e:                fail(2, "Could not open file %s: %s" %                         (options.output, e))            handler = getattr(handlers, key)            handler()        sys.exit(0)          if options.output:        try:            # We're lazy and are using print all the way             sys.stdout = open(options.output, "w")        except IOError, e:            fail(2, "Could not open file %s: %s" %                     (options.output, e))        except TypeError:            fail(2, "You stupid moron")            handler = getattr(Handlers(), options.table, "")    if not handler:        parser.print_help()        tables = [table for table in Handlers.__dict__.keys()                   if not table[0] == "_"]        tables.sort()                      tables = str.join(" ", tables)        fail(3, "\nERROR: You must select a valid table. Valid tables are:\n" + tables)    # And run the handler    handler()if __name__ == "__main__":    main()

⌨️ 快捷键说明

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