Changeset 3190

Show
Ignore:
Timestamp:
06/20/07 21:22:27 (15 years ago)
Author:
jerome
Message:

Added the 'snmperrormask' directive.

Location:
pykota/trunk
Files:
3 modified

Legend:

Unmodified
Added
Removed
  • pykota/trunk/conf/pykota.conf.sample

    r3180 r3190  
    12841284# When not set, an hardcoded value of 5 times is used. 
    12851285# The value must be a strictly positive integer. 
    1286 statusstabilizationloops = 5 
     1286statusstabilizationloops : 5 
    12871287 
    12881288 
     
    12991299# The value must be a positive floating point value greater 
    13001300# than or equal to 0.25 seconds. 
    1301 statusstabilizationdelay = 4.0 
     1301statusstabilizationdelay : 4.0 
     1302 
     1303 
     1304 
     1305# Defines a bit mask to specify the set of error conditions 
     1306# reported through SNMP for which PyKota has to wait indefinitely 
     1307# until such an error is fixed before continuing with printing 
     1308# and/or accounting. 
     1309# 
     1310# This directive can be set either globally or on a per printer 
     1311# basis.  
     1312# 
     1313# The bit values are specified as in RFC3805 (Printer MIB v2), 
     1314# as an ORed value of one or more of the following conditions : 
     1315# 
     1316#       1000 0000 0000 0000 : Low Paper 
     1317#       0100 0000 0000 0000 : No Paper 
     1318#       0010 0000 0000 0000 : Low Toner 
     1319#       0001 0000 0000 0000 : No Toner 
     1320#       0000 1000 0000 0000 : Door Open 
     1321#       0000 0100 0000 0000 : Jammed 
     1322#       0000 0010 0000 0000 : Offline 
     1323#       0000 0001 0000 0000 : Service Requested 
     1324#       0000 0000 1000 0000 : Input Tray Missing 
     1325#       0000 0000 0100 0000 : Output Tray Missing 
     1326#       0000 0000 0010 0000 : Marker Supply Missing 
     1327#       0000 0000 0001 0000 : Output Near Full 
     1328#       0000 0000 0000 1000 : Output Full 
     1329#       0000 0000 0000 0100 : Input Tray Empty 
     1330#       0000 0000 0000 0010 : Overdue Preventive Maintainance 
     1331#       0000 0000 0000 0001 : Not assigned 
     1332# 
     1333# When not set, an hardcoded value of hexadecimal 0x4FCC is used, 
     1334# which means that PyKota will wait indefinitely when using SNMP 
     1335# hardware accounting if one of the following conditions is met : 
     1336# 
     1337#   No Paper, Door Open, Jammed, Offline, Service Requested, 
     1338#   Input Tray Missing, Output Tray Missing, Output Full, Input Tray Empty 
     1339#  
     1340# This value can be specified either in hexadecimal (prefixed with 0x), 
     1341# in octal (prefixed with 0) or in decimal (no prefix). 
     1342# 
     1343snmperrormask : 0x4FCC 
    13021344 
    13031345 
  • pykota/trunk/pykota/accounters/snmp.py

    r3180 r3190  
    9191                                  ]   
    9292                                   
    93 # TODO : make the following list configurable at runtime, possibly per printer.                                   
    94 errorConditions = [ 'No Paper', 
    95                     # 'No Toner', 
    96                     'Door Open', 
    97                     'Jammed', 
    98                     'Offline', 
    99                     'Service Requested', 
    100                     'Input Tray Missing', 
    101                     'Output Tray Missing', 
    102                     # 'Marker Supply Missing', 
    103                     'Output Full', 
    104                     'Input Tray Empty', 
    105                   ] 
     93# The default error mask to use when checking error conditions. 
     94defaultErrorMask = 0x4fcc # [ 'No Paper', 
     95                          #   'Door Open', 
     96                          #   'Jammed', 
     97                          #   'Offline', 
     98                          #   'Service Requested', 
     99                          #   'Input Tray Missing', 
     100                          #   'Output Tray Missing', 
     101                          #   'Output Full', 
     102                          #   'Input Tray Empty', 
     103                          # ] 
     104                           
    106105# WARNING : some printers don't support this one :                   
    107106prtConsoleDisplayBufferTextOID = "1.3.6.1.2.1.43.16.5.1.2.1.1" # SNMPv2-SMI::mib-2.43.16.5.1.2.1.1 
     
    147146            return True 
    148147        else : 
     148            try : 
     149                errormask = self.parent.filter.config.getPrinterSNMPErrorMask(self.parent.filter.PrinterName) 
     150            except AttributeError : # debug mode     
     151                errormask = defaultErrorMask 
     152            if errormask is None : 
     153                errormask = defaultErrorMask 
     154            errormaskbytes = [ chr((errormask & 0xff00) >> 8), 
     155                               chr((errormask & 0x00ff)), 
     156                             ] 
     157            errorConditions = self.extractErrorStates(errormaskbytes) 
     158            self.parent.filter.logdebug("Error conditions for mask 0x%04x : %s" \ 
     159                                               % (errormask, errorConditions)) 
    149160            for err in errorstates : 
    150161                if err in errorConditions : 
     162                    self.parent.filter.logdebug("Error condition '%s' encountered. PyKota will wait until this problem is fixed." % err) 
    151163                    return True 
     164            self.parent.filter.logdebug("No error condition matching mask 0x%04x" % errormask) 
    152165            return False     
    153166         
  • pykota/trunk/pykota/config.py

    r3184 r3190  
    631631                return stab 
    632632         
     633    def getPrinterSNMPErrorMask(self, printername) :     
     634        """Returns the SNMP error mask for a particular printer, or None if not defined.""" 
     635        try :  
     636            errmask = self.getPrinterOption(printername, "snmperrormask").lower() 
     637        except PyKotaConfigError :     
     638            return None         # tells to use hardcoded value 
     639        else :     
     640            try : 
     641                if errmask.startswith("0x") : 
     642                    value = int(errmask, 16) 
     643                elif errmask.startswith("0") :     
     644                    value = int(errmask, 8) 
     645                else :     
     646                    value = int(errmask) 
     647                if 0 <= value < 65536 : 
     648                    return value 
     649                else :     
     650                    raise ValueError 
     651            except ValueError :     
     652                raise PyKotaConfigError, _("Incorrect value %s for the snmperrormask directive in section %s") % (errmask, printername) 
     653         
    633654    def getWinbindSeparator(self) :           
    634655        """Returns the winbind separator's value if it is set, else None."""