Changeset 1041 for pykota/trunk/pykota/accounters
- Timestamp:
- 06/25/03 16:10:01 (21 years ago)
- Location:
- pykota/trunk/pykota/accounters
- Files:
-
- 3 modified
Legend:
- Unmodified
- Added
- Removed
-
pykota/trunk/pykota/accounters/external.py
r1000 r1041 21 21 # 22 22 # $Log$ 23 # Revision 1.4 2003/06/25 14:10:01 jalet 24 # Hey, it may work (edpykota --reset excepted) ! 25 # 23 26 # Revision 1.3 2003/05/27 23:00:21 jalet 24 27 # Big rewrite of external accounting methods. … … 41 44 42 45 class Accounter(AccounterBase) : 43 def doAccounting(self, printer id, userid) :46 def doAccounting(self, printer, user) : 44 47 """Deletgates the computation of the job size to an external command. 45 48 … … 50 53 51 54 # get last job information for this printer 52 pgc = self.filter.storage.getPrinterPageCounter(printerid) 53 if pgc is None : 55 if not printer.LastJob.Exists : 54 56 # The printer hasn't been used yet, from PyKota's point of view 55 57 counterbeforejob = 0 … … 58 60 # Last lifetime page counter before actual job is 59 61 # last page counter + last job size 60 counterbeforejob = (pgc["pagecounter"] or 0) + (pgc["jobsize"]or 0)62 counterbeforejob = int(printer.LastJob.PrinterPageCounter or 0) + int(printer.LastJob.JobSize or 0) 61 63 62 64 # Is the current user allowed to print at all ? 63 action = self.filter.warnUserPQuota(self.filter.username, self.filter.printername) 65 userpquota = self.filter.storage.getUserPQuota(user, printer) 66 action = self.filter.warnUserPQuota(userpquota) 64 67 65 68 # update the quota for the current user on this printer, if allowed to print … … 67 70 jobsize = 0 68 71 else : 69 self.filter.storage.updateUserPQuota(userid, printerid,jobsize)72 userpquota.increasePagesUsage(jobsize) 70 73 71 74 # adds the current job to history 72 self.filter.storage.addJobToHistory(self.filter.jobid, self.filter.storage.getUserId(self.filter.username), printerid, counterbeforejob, action, jobsize)75 printer.addJobToHistory(self.filter.jobid, user, counterbeforejob, action, jobsize) 73 76 74 77 return action … … 102 105 # launches child process 103 106 command = "%s <%s >%s 2>%s" % (self.arguments, infilename, outfilename, errfilename) 104 o = open("/tmp/comm", "w")105 o.write("%s\n" % command)106 o.close()107 107 retcode = os.system(command) 108 108 -
pykota/trunk/pykota/accounters/querying.py
r988 r1041 21 21 # 22 22 # $Log$ 23 # Revision 1.4 2003/06/25 14:10:01 jalet 24 # Hey, it may work (edpykota --reset excepted) ! 25 # 23 26 # Revision 1.3 2003/05/06 14:55:47 jalet 24 27 # Missing import ! … … 38 41 from pykota.requester import openRequester, PyKotaRequesterError 39 42 40 MAXTRIES = 6# maximum number of tries to get the printer's internal page counter43 MAXTRIES = 12 # maximum number of tries to get the printer's internal page counter 41 44 TIMETOSLEEP = 10 # number of seconds to sleep between two tries to get the printer's internal page counter 42 45 43 46 class Accounter(AccounterBase) : 44 def doAccounting(self, printer id, userid) :47 def doAccounting(self, printer, user) : 45 48 """Does print accounting and returns if the job status is ALLOW or DENY.""" 46 49 # Get the page counter directly from the printer itself … … 65 68 66 69 # get last job information for this printer 67 pgc = self.filter.storage.getPrinterPageCounter(printerid) 68 if pgc is None : 70 if not printer.LastJob.Exists : 69 71 # The printer hasn't been used yet, from PyKota's point of view 70 lasthistoryid = None 71 lastjobid = self.filter.jobid 72 lastuserid = userid 73 lastusername = self.filter.username 72 lastjob = None 73 lastuser = user 74 74 lastpagecounter = counterbeforejob 75 75 else : 76 76 # get last values from Quota Storage 77 (lasthistoryid, lastjobid, lastuserid, lastusername, lastpagecounter) = (pgc["id"], pgc["jobid"], pgc["userid"], pgc["username"], pgc["pagecounter"]) 77 lastjob = printer.LastJob 78 lastuser = printer.LastJob.User 79 lastpagecounter = printer.LastJob.PrinterPageCounter 78 80 79 81 # if printer is off then we assume the correct counter value is the last one … … 107 109 # For more accurate accounting, don't switch off your HP printers ! 108 110 # explanation at : http://web.mit.edu/source/third/lprng/doc/LPRng-HOWTO-15.html 109 self.filter.logger.log_message(_("Error in page count value %i for user %s on printer %s") % (jobsize, lastuser name, self.filter.printername), "error")111 self.filter.logger.log_message(_("Error in page count value %i for user %s on printer %s") % (jobsize, lastuser.Name, self.filter.printername), "error") 110 112 jobsize = abs(int((10 - abs(jobsize)) / 2)) # Workaround for HP printers' feature ! 111 113 112 114 # update the quota for the previous user on this printer 113 self.filter.storage.updateUserPQuota(lastuserid, printerid, jobsize) 115 lastuserquota = self.filter.storage.getUserPQuota(lastuser, printer) 116 if lastuserquota.Exists : 117 lastuserquota.increasePagesUsage(jobsize) 114 118 115 119 # update the last job size in the history 116 self.filter.storage.updateJobSizeInHistory(lasthistoryid, jobsize) 120 if printer.LastJob.Exists : 121 printer.LastJob.setSize(jobsize) 117 122 118 123 # warns the last user if he is over quota 119 self.filter.warnUserPQuota(lastusername, self.filter.printername) 124 if lastuserquota.Exists : 125 self.filter.warnUserPQuota(lastuserquota) 120 126 121 127 # Is the current user allowed to print at all ? 122 action = self.filter.warnUserPQuota(self.filter. username, self.filter.printername)128 action = self.filter.warnUserPQuota(self.filter.storage.getUserPQuota(user, printer)) 123 129 124 130 # adds the current job to history 125 self.filter.storage.addJobToHistory(self.filter.jobid, self.filter.storage.getUserId(self.filter.username), printerid, counterbeforejob, action)131 printer.addJobToHistory(self.filter.jobid, user, counterbeforejob, action) 126 132 127 133 return action -
pykota/trunk/pykota/accounters/stupid.py
r1000 r1041 21 21 # 22 22 # $Log$ 23 # Revision 1.4 2003/06/25 14:10:01 jalet 24 # Hey, it may work (edpykota --reset excepted) ! 25 # 23 26 # Revision 1.3 2003/05/27 23:00:21 jalet 24 27 # Big rewrite of external accounting methods. … … 39 42 40 43 class Accounter(AccounterBase) : 41 def doAccounting(self, printer id, userid) :44 def doAccounting(self, printer, user) : 42 45 """Does print accounting by stupidly counting the 'showpage' postscript instructions in the document. 43 46 … … 51 54 52 55 # get last job information for this printer 53 pgc = self.filter.storage.getPrinterPageCounter(printerid) 54 if pgc is None : 56 if not printer.LastJob.Exists : 55 57 # The printer hasn't been used yet, from PyKota's point of view 56 58 counterbeforejob = 0 … … 59 61 # Last lifetime page counter before actual job is 60 62 # last page counter + last job size 61 counterbeforejob = (pgc["pagecounter"] or 0) + (pgc["jobsize"]or 0)63 counterbeforejob = int(printer.LastJob.PrinterPageCounter or 0) + int(printer.LastJob.JobSize or 0) 62 64 63 65 # Is the current user allowed to print at all ? 64 action = self.filter.warnUserPQuota(self.filter.username, self.filter.printername) 66 userpquota = self.filter.storage.getUserPQuota(user, printer) 67 action = self.filter.warnUserPQuota(userpquota) 65 68 66 69 # update the quota for the current user on this printer, if allowed to print … … 68 71 jobsize = 0 69 72 else : 70 self.filter.storage.updateUserPQuota(userid, printerid,jobsize)73 userpquota.increasePagesUsage(jobsize) 71 74 72 75 # adds the current job to history 73 self.filter.storage.addJobToHistory(self.filter.jobid, self.filter.storage.getUserId(self.filter.username), printerid, counterbeforejob, action, jobsize)76 printer.addJobToHistory(self.filter.jobid, user, counterbeforejob, action, jobsize) 74 77 75 78 return action