Estadística bàsica de pàgines amb CUPS

La necessitat

Necessitam saber quantes pàgines s’han imprès durant el darrer mes per usuari i per impressora.

La idea

Sabem que el gestor d’impressió CUPS genera el fitxer de log /var/log/cups/page_log on es crea una línia per a cada treball d’impressió. Una de les dades és el número de pàgines del treball.

Quan el fitxer de log “roti” es llançarà un script que ens generarà el total per usuari i total per impressora.

La sol·lució

Modificam el fitxer /etc/logrotate.d/cups-daemon que cridarà l’script:

/var/log/cups/*log {
    # Generam una estadística mensual
    monthly
    missingok
    rotate 7
    sharedscripts
    postrotate
        invoke-rc.d --quiet cups restart > /dev/null
        #Executam el fitxer després d'haver fet el rotate
        /home/resum.py
    endscript
    nocompress
    create
}

 

El contingut de /home/resum.py és:

#!/usr/bin/python3

import os
import csv

users = []
printers = []
pagesusers = []
pagesprinters = []

# Feim còpia sobre fitxer a treballar

os.system("cp /var/log/cups/page_log.1 /tmp/page_log")

# Iteram per a cada linia i guardam grups de llistes (total per usuari i total per impressora)
#
# posicio1 de llista "users" ha imprès el número de pàgines indicat a posició1 de "pagesusers"
# Idem per printers i pagesprinters

with open('/tmp/page_log') as csvfile:
    readCSV = csv.reader(csvfile, delimiter=' ')

    for row in readCSV:
        # Columna d'impressora
        printer = row[0]
        # Columna d'usuari
        user = row[1].lower()
        # Columna de pàgines del document
        page = int(row[6])
        if not ( user in users ):
            # L'usuari és nou a la llista
            users.append(user)
            pagesusers.append(page)
        else:
            # Ja existeix l'usuari a la llista
            # Sumam número de pàgines ja comptabilitzades i el nou valor
            index = users.index(user)
            pagesusers[index] = pagesusers[index] + page

        if not ( printer in printers ):
            # L'usuari és nou a la llista
            printers.append(printer)
            pagesprinters.append(page)
        else:
            # Ja existeix l'usuari a la llista
            # Sumam número de pàgines ja comptabilitzades i el nou valor
            index = printers.index(printer)
            pagesprinters[index] = pagesprinters[index] + page
csvfile.close()

###########
# Escrivim resultats a fitxers amb format csv

# Totals per usuari
with open('/tmp/totalXusuari.csv', 'w') as csvfile:
    writeCSV = csv.writer(csvfile, delimiter=' ', quoting=csv.QUOTE_MINIMAL)
    # Posam capçalera
    csvfile.write("usuari pagines\n")
    # Per a cada usuari cream línia al fitxer
    for user in users:
        index = users.index(user)
        row = users[index]+" "+str(pagesusers[index])+"\n"
        csvfile.write(row)
csvfile.close()

# Totals per impressora
with open('/tmp/totalXimpresora.csv', 'w') as csvfile:
    writeCSV = csv.writer(csvfile, delimiter=' ', quoting=csv.QUOTE_MINIMAL)
    # Posam capalera
    csvfile.write("impressora pagines\n")
    # Per a cada usuari cream línia al fitxer
    for printer in printers:
        index = printers.index(printer)
        row = printers[index]+" "+str(pagesprinters[index])+"\n"
        csvfile.write(row)
csvfile.close()

 

D’aquesta manera tenim el fitxers:

  • /tmp/totalXusuari.csv -> total de pàgines de cada usuari
  • /tmp/totalXimpresora.csvon -> total de pàgines de cada impressora

 

😉

 

Aquesta entrada ha esta publicada en GNU/linux. Afegeix a les adreces d'interès l'enllaç permanent.

Deixa un comentari