Riduciamo e ottimizziamo i tempi delle nostre attività

Controllare e gestire le stampanti con l'SQL

In questo articolo parlerò di come poter analizzare lo stato delle stampanti, sia locali che remote con normali query SQL. Questo è possibile grazie agli IBM i Services SQL che IBM ha messo a disposizione dalla versione 7.2 del sistema operativo e che sta facendo crescere sempre più.

Come sempre, lo scopo di questi articoli, è aiutare a trovare le scorciatoie per velocizzare alcune attività che la quotidianità del nostro lavoro richiede.

Vediamo quindi come poter rispondere al volo a domande come le seguenti:

  • quali stampanti sono accese e quali spente?
  • quali sono gli indirizzi IP e le code associate alle stampanti remote?
  • quali stampanti sono in errore e qual è l'errore?
  • ci sono spool legati alla stampante X che ancora devono essere smistati o che sono stati salvati?

    Printer Device (os version 7.2+)

    I dispositivi di stampa creati sul sistema sono recuperabili con questa semplice query SQL

    select * from table (qsys2.OBJECT_STATISTICS('*ALL','*DEVD') ) AS dev
    where dev.objattribute in ('PRTLAN','PRTVRT', 'PRTLCL', 'PRTRMT', 'PRTSNP')​


    In questo modo però non possiamo sapere quali siano accese e quali spente e in che stato sono. Per fare questo dobbiamo estrarre i dati delle output queue legate ai device e vedere le loro proprietà. Ecco come unire le due informazioni con una query:

    SELECT *
    FROM TABLE (qsys2.OBJECT_STATISTICS('*ALL','*DEVD') ) AS dev left outer join qsys2.OUTPUT_QUEUE_INFO outq
    ON
    (dev.objname=outq.printer_device_name)
    where dev.objattribute in ('PRTLAN','PRTVRT', 'PRTLCL', 'PRTRMT', 'PRTSNP')​


    E se vogliamo solo le informazioni principali con l'indicazione di device attivo o meno, ecco come possiamo migliorare la query:

    SELECT CASE 
           WHEN outq.writer_job_name is null THEN 'Off'
           Else 'On'
         END as status,
    dev.objname,outq.writer_job_name,outq.writer_job_status,
    dev.objtype,dev.objowner,dev.objcreated,dev.objlongname,dev.last_used_timestamp,dev.days_used_count,dev.iasp_number,dev.objattribute,
    outq.output_queue_name, outq.output_queue_library_name, outq.number_of_files, outq.number_of_writers, outq.writers_to_autostart,
    outq.printer_device_name,outq.output_queue_status,outq.text_description,outq.manufacturer_type_and_model,outq.MESSAGE_QUEUE_LIBRARY,outq.MESSAGE_QUEUE_NAME
    FROM TABLE (qsys2.OBJECT_STATISTICS('*ALL','*DEVD') ) AS dev left outer join qsys2.OUTPUT_QUEUE_INFO outq
    ON
    (dev.objname=outq.printer_device_name)
    where dev.objattribute in ('PRTLAN','PRTVRT', 'PRTLCL', 'PRTRMT', 'PRTSNP')​




    Se vogliamo estrarre solo i Device in stato di errore possiamo aggiungere alla query la condizione outq.writer_job_status='MSGW'

    Lista degli spool associati al Device (os version 7.2+)

    Un device acceso ha i campi OUTPUT_QUEUE_LIBRARY_NAME e OUTPUT_QUEUE_NAME valorizzati nella precedente query. Possono essere utilizzati per estrarre la lista degli spool associati ad un particolare Device con questa query:

    SELECT *
    FROM TABLE(QSYS2.OUTPUT_QUEUE_ENTRIES('output_queue_library_name', 'output_queue_name', 'YES')) A
    ​

    Anche un device spento potrebbe avere degli spool associati e salvati, ma in questo caso non abbiamo la coda associata con la sua libreria. Possiamo provare quella di default oppure cercarla in un altro modo con comandi interattivi IBM i.

  • Default OUTPUT_QUEUE_LIBRARY_NAME: QUSRSYS
  • Default OUTPUT_QUEUE_NAME: il nome del device (dev.objname)

    Visualizzazione del contenuto dello spool (os version 7.3+)

    Una volta che abbiamo estratto la lista degli spool, può diventare interessante vederne direttamente il contenuto sempre con una query che sfrutta i campi JOB_NAME e SPOOLED_FILE_NAME di quella precedente

    SELECT * FROM TABLE(SYSTOOLS.SPOOLED_FILE_DATA(
    JOB_NAME          =>'campo JOB_NAME',
    SPOOLED_FILE_NAME =>'campo SPOOLED_FILE_NAME')) as x
    ORDER BY ORDINAL_POSITION
                                

    Remote output queue

    A differenza dei device, ci potrebbero essere delle remote output queue utilizzate sempre per stampare. Il loro elenco lo possiamo estrarre con questa query:

    select *
    from QSYS2.OUTPUT_QUEUE_INFO outq
    where not remote_system_name is null and printer_device_name is null
    

    Anche qui, se vogliamo avere lo stato delle stampanti remote e altre informazioni principali, potremmo ridurre la query ai seguenti campi:

    select CASE
           WHEN outq.writer_job_name is null THEN 'Off'
           Else 'On'
         END as status,
    outq.output_queue_name as objname, outq.writer_job_name,outq.writer_job_status,
    outq.output_queue_name, outq.output_queue_library_name, outq.number_of_files, outq.number_of_writers, outq.writers_to_autostart,
    outq.printer_device_name,outq.output_queue_status,outq.text_description,outq.message_queue_librar,outq.message_queue_name,
    outq.host_print_transform, outq.manufacturer_type_and_model, outq.network_connection_type, outq.destination_type, outq.remote_system_name,
    outq.remote_printer_queue,outq.MESSAGE_QUEUE_LIBRARY,outq.MESSAGE_QUEUE_NAME
    from QSYS2.OUTPUT_QUEUE_INFO outq
    where not remote_system_name is null and printer_device_name is null
    

    Se vogliamo estrarre solo i Device in stato di errore possiamo aggiungere alla query la condizione outq.writer_job_status='MSGW'

    Come prima, per estrarre poi gli eventuali spool associati alla coda remota, posso ripetere le query già descritte in precedenza

    Conclusioni
    Abbiamo visto come è semplice estrarre velocemente informazioni che interattivamente richiedevano più tempo e conoscenze. Le query riportate sopra usano il . come separatore tra librerie e nomi dei file perchè fatte con un editor ODBC. Le stesse query potete eseguirle con la voce "Esegui script SQL" dell'Access Client di IBM oppure con il tool interattivo "strsql" sostituendo al separatore . il separatore /

    Marco Moret Monitoring Project Manager presso smeup ICS
     Puoi trovare l'articolo anche su LinkedIn


    Tutti gli articoli
     Quando il sistema è ripartito l'ultima volta?
     Writers Manager: Controllare e gestire le stampanti con l'SQL
     Controllare la sicurezza sui sistemi IBM i: l'​Audit Journal
     JTOpen per ambienti .Net. La prima connessione JDBC da C#
     JTOpen, sviluppare applicazioni in .Net per IBM i
     DB2 for i: gestire le date in SQL
     Scaricare, installare e utilizzare i driver ODBC per IBM i
     Ottenere le info di sistema in SQL

    Gestisci, analizza e controlla il sistema IBM i
    Scarica, installa e lavora in pochi secondi
      IBM i Monitoring Facility - Check è completamente gratuito fino a fine mese

  • Update cookies preferences