AppWorx, Dollar Universe and Sysload Community

 View Only
  • 1.  How to count Object in Queues

    Posted Dec 13, 2019 02:54 AM
    Hi,

    i search a way to count object - active, waiting, ..... - in a Queue Object.

    Hope someone has an idea :)

    Right now i have to wait until a queue is empty.

    Thanks
    Thomas


  • 2.  RE: How to count Object in Queues

    Posted Dec 16, 2019 03:22 AM
    Hello Thomas,

    I think the easiest way would be an SQL-Query like this:

    select eh_queue,
    eh_status,
    msgtx_text,
    count(*) as "Number"
    from eh, msgtx
    where
    eh_status = msgtx_msg_idnr
    and msgtx_msgl_short = 'E'
    --and msgtx_msgl_short = 'D'     <- for german messagetext
    group by eh_queue,eh_status,msgtx_text;

    Best regards
    Bernhard

    ------------------------------
    Landeshauptstadt München
    ------------------------------



  • 3.  RE: How to count Object in Queues
    Best Answer

    Posted Dec 16, 2019 04:44 AM
    Edited by Thomas H Dec 16, 2019 05:34 AM
    Hello Bernhard,

    thank you for your time and reply!
    I didnt explain what i wanted in a good way - sorry :)
    I opened a Ticket and they helped me with that:
    :SET &ACTIVE_COUNT# = GET_UC_SETTING (QUEUE,"CLIENT_QUEUE",ACTIVE_COUNT)
    :PRINT &ACTIVE_COUNT#

    Now i made my "SCRI.CHECK_QUEUE_ACTIVITY" with that solution :)

    If someone found this and need a SCRI to check if one ore more QUEUES are empty to go on in a JOBP or whatever - here is my CHECK SCRI for that

    My VARA        VARA.PARAMETER
    Key                                                                        VALUE1                                                               VALUE2
    SHOP1_QUEUE_ABBRUCH_ZEIT                      10:35                                                                    HH:MM    
    SHOP1_QUEUE_LISTE                                       CLIENT_QUEUE#SHOP1_BSP_QUEUE
    SHOP1_QUEUE_SUM_ERL_OBJ_ANZAHL       0
    SHOP1_QUEUE_PRUEINTERVALL                    60


    :RSET &VARANAME#              = 'VARA.PARAMETER'
    :RSET &VERFAHREN#             = 'SHOP1'
    
    :RSET &QUEUE_ABBRUCH_ZEIT#    =  GET_VAR(&VARANAME#,"&VERFAHREN#_QUEUE_ABBRUCH_ZEIT")
    :RSET &ZEITFORMAT#            =  GET_VAR(&VARANAME#,"&VERFAHREN#_QUEUE_ABBRUCH_ZEIT",2)
    :RSET &JETZT_HHMM#            =  SYS_TIME_PHYSICAL('&ZEITFORMAT#')
    :RSET &QUEUE_ERL_OBJKT_SUM#   =  GET_VAR(&VARANAME#,"&VERFAHREN#_QUEUE_SUM_ERL_OBJ_ANZAHL")
    :RSET &QUEUE_PRUEF_INTERVA#   =  GET_VAR(&VARANAME#,"&VERFAHREN#_QUEUE_PRUEINTERVALL")
    
    ! Queue Liste ermitteln und in Array packen
    :SET &QUEUELISTE#            = GET_VAR(&VARANAME#,"&VERFAHREN#_QUEUE_LISTE",2)
    :DEFINE &ARR_QLISTE#,STRING,30
    :FILL &ARR_QLISTE#[] = STR_SPLIT(&QUEUELISTE#,"#")
    :RSET &ARR_USED# = LENGTH(&ARR_QLISTE#[],SIZE)
    :PRINT ****
    
    ! Initialparameter für WHILE-Schleife setzen
    :SET &PRUEFUNG_AKTIV#  =  "JA"
    :SET &CNT#             =  1
    
    ! So lange die Prüfung &PRUEFUNG_AKTIV# ("JA") aktiv ist durchlaufen wir immer wieder alle &QUEUELISTE# Objekte
    :WHILE &PRUEFUNG_AKTIV#        =  "JA"
    :  PRINT " ____________________________________"
    :  PRINT "| &ARR_QLISTE#[&CNT#] Infos:"
    :  PRINT "|____________________________________"
    :  SET &ACTIVE_COUNT#          =  GET_UC_SETTING (QUEUE,"&ARR_QLISTE#[&CNT#]",ACTIVE_COUNT) 
    :  SET &ACTIVE_COUNT#          =  FORMAT(&ACTIVE_COUNT#)
    :  PRINT "| Aktive Objekte:       &ACTIVE_COUNT#"
    :  SET &CONSIDER_ERT#          =  GET_UC_SETTING (QUEUE,"&ARR_QLISTE#[&CNT#]",CONSIDER_ERT) 
    :  SET &CONSIDER_ERT#          =  FORMAT(&CONSIDER_ERT#)
    :  PRINT "| CONSIDER_ERT:         &CONSIDER_ERT#"
    :  SET &MAX_SLOTS#             =  GET_UC_SETTING (QUEUE,"&ARR_QLISTE#[&CNT#]",MAX_SLOTS) 
    :  IF ISNUMERIC(&MAX_SLOTS#)   =  "Y"
    :    SET &MAX_SLOTS#           =  FORMAT(&MAX_SLOTS#)
    :  ENDIF
    :  PRINT "| MAX_SLOTS:            &MAX_SLOTS#"
    :  SET &PRIORITY#              =  GET_UC_SETTING (QUEUE,"&ARR_QLISTE#[&CNT#]",PRIORITY) 
    :  SET &PRIORITY#              =  FORMAT(&PRIORITY#)
    :  PRINT "| Priorität:            &PRIORITY#"
    :  SET &STATE#                 =  GET_UC_SETTING (QUEUE,"&ARR_QLISTE#[&CNT#]",STATE) 
    :  SET &STATE#                 =  FORMAT(&STATE#)
    :  PRINT "| Status:               &STATE#"
    :  PRINT
    !  Alle aktiven Objekte aller Queues addieren:
    :  SET &SUMME_AKTIVER_OBJ#    =  &SUMME_AKTIVER_OBJ# + &ACTIVE_COUNT#
    :  SET &SUMME_AKTIVER_OBJ#    =  FORMAT(&SUMME_AKTIVER_OBJ#)
    :  IF  &CNT#  =  &ARR_USED#
    !    &CNT# jetzt wieder auf 1 setzen damit von vorne alle Queues durchgeprüft werden
    :    SET &CNT#  =  1 
    :    IF &SUMME_AKTIVER_OBJ#   > &QUEUE_ERL_OBJKT_SUM#
    :      PRINT "!! In Summe gibt es &ACTIVE_COUNT# aktive Objekte. Erlaubt sind &QUEUE_ERL_OBJKT_SUM# !!"
    :      SET &JETZT_HHMM#       =  SYS_TIME_PHYSICAL('&ZEITFORMAT#')
    :      IF &JETZT_HHMM# >= &QUEUE_ABBRUCH_ZEIT#
    :        SET &PRUEFUNG_AKTIV#   =  "NEIN"
    :        PRINT "Wir warten nur bis &QUEUE_ABBRUCH_ZEIT# Uhr und die Zeit ist vorbei. Patchverarbeitung wird,"
    :        PRINT "trotz &SUMME_AKTIVER_OBJ# aktiver Objekte, fortgesetzt!!"
    :      ELSE
    :        PRINT " ---------> &QUEUE_PRUEF_INTERVA# Sekunden bis zur nächsten Prüfung warten [max. bis: &QUEUE_ABBRUCH_ZEIT#Uhr]"
    :        WAIT &QUEUE_PRUEF_INTERVA#
    :      ENDIF
    :    ELSE
    :      PRINT "!! Erlaubt sind &QUEUE_ERL_OBJKT_SUM# aktive Objekte. Derzeit aktiv sind: &SUMME_AKTIVER_OBJ# !!"
    :      PRINT "Beende Script und fahre mit Patchmanagement fort"
    :      SET &PRUEFUNG_AKTIV#   =  "NEIN"
    :    ENDIF
    :    SET  &SUMME_AKTIVER_OBJ#    =  0   
    :  ELSE
    :    SET &CNT#  =  &CNT# + 1
    :  ENDIF
    :ENDWHILE