Ignore:
Timestamp:
May 11, 2011, 9:30:11 AM (13 years ago)
Author:
Sam Habiel
Message:

Fixes and enhancements to BMX4

File:
1 edited

Legend:

Unmodified
Added
Removed
  • BMXNET_RPMS_dotNET_UTILITIES-BMX/branch/routines/BMXMON.m

    r1147 r1181  
    1 BMXMON  ; IHS/OIT/HMW - BMXNet MONITOR ; 4/6/11 12:42pm
     1BMXMON  ; IHS/OIT/HMW - BMXNet MONITOR ; 5/9/11 10:16am
    22        ;;4.1000;BMX;;Apr 17, 2011
    3         ;
    4         ; IMPORTANT: Logging is on by default. Set XWBDEBUG=0 to turn it off.
    53        ;
    64        ; Changes for *1000 by WV/SMH (Feb 2 2011) to support GT.M
    75        ; - XINETD entry point for GT.M
    86        ; - Replacement of all W *-3 to W !
    9         ; - Addition of logging capabilities for analysis
     7        ; - Addition of logging capabilities for analysis using XWBDLOG
    108        ; - In SESSRES
    119        ; -- Broker Timeout set from Kernel System Parameter Broker Timeout Field
    12         ; -- Process Name now changes to show name in %SS or ZSY
    13         ;
     10        ; -- Process Name now gets Set to show in %SS or ZSY
     11        ; - Error Handling does not log Network Errors to the Error Trap.
     12    ; - Major refactoring to Writing to the TCP Network Stream.
     13    ; --> All writes are buffered up to 32767 characters (max string on Cache)
     14    ; --> Then sent...
     15    ; --> See EP's WRITE and WBF
     16    ; --> This avoids the side effects of the Nagle Algorithm on the Linux TCP Stack
     17    ; - BMXERR renamed to BMXERROR in EP ETRAP so that it can be sent via SNDERR.
     18    ; --> This reduces the need for custom error trap handling which is very difficult to do
     19    ; --> in Mumps for new programmers. Mumps errors now are thrown on the client.
    1420        ;
    1521        ;IHS/OIT/HMW Patch 1 added validity check for passed-in namespace
     
    241247        ;
    242248SESSMAIN        ; MAIN LOOP!!!!!!
    243         N BMXTBUF
     249        N BMXTBUF ; BMX Read Buffer
     250    N BMXWBUF S BMXWBUF="" ; BMX Write Buffer
    244251        D SETUP^BMXMSEC(.RET) ;Setup required system vars
    245252        S U="^"
     
    254261        . I 'BMXHTYPE S BMXTBUF="#BYE#" D  QUIT  ;;***QUITTING HERE***
    255262        . . D SNDERR
    256         . . W BMXTBUF,$C(4),!
    257         . . D LOG("Write: "_BMXTBUF_$C(4)_"(flush)")
     263        . . D WRITE(BMXTBUF_$C(4)),WBF
    258264        . S BMXTLEN=$E(BMXTBUF,6,10),L=$E(BMXTBUF,11,11)
    259265        . R BMXTBUF#4:BMXDTIME(1)
     
    269275        . I $P(BMXTBUF,U)="TCPconnect" D  QUIT  ;;***QUIT HERE***
    270276        . . D SNDERR
    271         . . W "accept",$C(4),!  ;Ack
    272         . . ;
    273         . . D LOG("Write: accept"_$C(4)_"(flush)")
    274         . . ;
     277        . . D WRITE("accept"_$C(4)),WBF  ;Ack
    275278        . IF BMXHTYPE D
    276279        . . K BMXR,BMXARY
    277280        . . IF BMXTBUF="#BYE#" D  QUIT
    278281        . . . D SNDERR
    279         . . . W "#BYE#",$C(4),!
    280         . . . ;
    281         . . . D LOG("Write: #BYE#\4")
    282         . . . ;
     282        . . . D WRITE("#BYE#"_$C(4))
     283    . . . D WBF
    283284        . . S BMXTLEN=BMXTLEN-15
    284285        . . D CALLP^BMXMBRK(.BMXR,BMXTBUF)
     
    288289        . D SNDERR ;Clears SNDERR parameters
    289290        . D SND
    290         . D WRITE($C(4)) W ! ;send eot and flush buffer
    291         . ;
    292         . D LOG("Write: "_$C(4))
    293         . ;
     291        . D WRITE($C(4)) ;send eot
     292    . D WBF ; Flush Buffer
    294293        D UNREGALL^BMXMEVN ;Unregister all events for this session
    295294        Q  ;End Of Main
    296         ;
    297295        ;
    298296SNDERR  ;send error information
     
    300298        N X
    301299        S X=$E($G(BMXSEC),1,255)
    302         W $C($L(X))_X W !
    303         D LOG("Write: "_$C($L(X))_X_"(flush)")
     300        D WRITE($C($L(X))_X)
    304301        S X=$E($G(BMXERROR),1,255)
    305         W $C($L(X))_X W !
    306         D LOG("Write: "_$C($L(X))_X_"(flush)")
     302        D WRITE($C($L(X))_X)
    307303        S BMXERROR="",BMXSEC="" ;clears parameters
    308304        Q
    309305        ;
    310 WRITE(BMXSTR)   ;Write a data string
    311         ;
    312         I $L(BMXSTR)<511 W ! W BMXSTR Q
    313         ;Handle a long string
    314         W ! ;Flush the buffer
    315         F  Q:'$L(BMXSTR)  W $E(BMXSTR,1,510),! S BMXSTR=$E(BMXSTR,511,99999)
    316         Q
     306WRITE(BMXSTR)   ;Write a data string to the output buffer
     307    F  Q:'$L(BMXSTR)  D
     308    . I $L(BMXWBUF)+$L(BMXSTR)>32767 D WBF  ; Maximum String Length on Cache
     309    . S BMXWBUF=BMXWBUF_$E(BMXSTR,1,255),BMXSTR=$E(BMXSTR,256,999999)
     310    QUIT
     311    ;
     312WBF ;Write Buffer to Network Stream then flush
     313    Q:'$L(BMXWBUF)
     314    I $G(XWBDEBUG)>2,$L(BMXWBUF) D LOG^XWBDLOG("wrt ("_$L(BMXWBUF)_"): "_BMXWBUF)
     315    W BMXWBUF,!
     316    S BMXWBUF=""
     317    QUIT
     318
    317319SND     ; -- send data for all, Let WRITE sort it out
    318320        N I,T
    319321        ;
    320322        ; -- error or abort occurred, send null
    321         IF $L(BMXSEC)>0 D WRITE(""),LOG("Write Sting.Empty") Q
     323        IF $L(BMXSEC)>0 D WRITE("") QUIT
     324    ;
    322325        ; -- single value
    323         IF BMXPTYPE=1 S BMXR=$G(BMXR) D WRITE(BMXR),LOG("Write: "_BMXR) Q
    324         ; -- table delimited by CR+LF
    325         IF BMXPTYPE=2 D  Q
    326         . S I="" F  S I=$O(BMXR(I)) Q:I=""  D WRITE(BMXR(I)),WRITE($C(13,10)),LOG("Write: "_BMXR(I))
     326        IF BMXPTYPE=1 S BMXR=$G(BMXR) D WRITE(BMXR) QUIT
     327        ;
     328    ; -- table delimited by CR+LF
     329        IF BMXPTYPE=2 D  QUIT
     330        . S I="" F  S I=$O(BMXR(I)) Q:I=""  D WRITE(BMXR(I)),WRITE($C(13,10))
     331    ;
    327332        ; -- word processing
    328         IF BMXPTYPE=3 D  Q
    329         . S I="" F  S I=$O(BMXR(I)) Q:I=""  D WRITE(BMXR(I)),LOG("Write: "_BMXR(I)) D:BMXWRAP WRITE($C(13,10)),LOG("Write: "_$C(13,10))
     333        IF BMXPTYPE=3 D  QUIT
     334        . S I="" F  S I=$O(BMXR(I)) Q:I=""  D WRITE(BMXR(I)),WRITE($C(13,10)):BMXWRAP
     335    ;
    330336        ; -- global array
    331         IF BMXPTYPE=4 D  Q
    332         . S I=$G(BMXR) Q:I=""  S T=$E(I,1,$L(I)-1) D:$D(@I)>10 WRITE(@I),LOG("Write: "_@I)
    333         . F  S I=$Q(@I) Q:I=""!(I'[T)  W ! W @I W:BMXWRAP&(@I'=$C(13,10)) $C(13,10) D LOG("Write: "_@I)
     337        IF BMXPTYPE=4 D  QUIT
     338        . S I=$G(BMXR) Q:I=""  S T=$E(I,1,$L(I)-1) D:$D(@I)>10 WRITE(@I)
     339        . F  S I=$Q(@I) Q:I=""!(I'[T)  D WRITE(@I),WRITE($C(13,10)):(BMXWRAP&(@I'=$C(13,10)))
    334340        . IF $D(@BMXR) K @BMXR
     341    ;
    335342        ; -- global instance
    336         IF BMXPTYPE=5 S BMXR=$G(@BMXR) D WRITE(BMXR),LOG("Write: "_BMXR) Q
     343        IF BMXPTYPE=5 S BMXR=$G(@BMXR) D WRITE(BMXR) QUIT
     344    ;
    337345        ; -- variable length records only good upto 255 char)
    338         IF BMXPTYPE=6 S I="" F  S I=$O(BMXR(I)) Q:I=""  D WRITE($C($L(BMXR(I)))),WRITE(BMXR(I)),LOG("Write: "_$C($L(BMXR(I)))_BMXR(I))
    339         Q
     346        IF BMXPTYPE=6 S I="" F  S I=$O(BMXR(I)) Q:I=""  D WRITE($C($L(BMXR(I)))),WRITE(BMXR(I))
     347        QUIT
    340348        ;
    341349TIMEOUT ;Do this on MAIN  loop timeout
    342         I $G(DUZ)>0 D SNDERR,WRITE("#BYE#"_$C(4)) Q
     350        I $G(DUZ)>0 D SNDERR,WRITE("#BYE#"_$C(4)),WBF QUIT
    343351        ;Sign-on timeout
    344352        S BMXR(0)=0,BMXR(1)=1,BMXR(2)="",BMXR(3)="TIME-OUT",BMXPTYPE=2
    345         D SNDERR,SND,WRITE($C(4))
    346         Q
     353        D SNDERR,SND,WRITE($C(4)),WBF QUIT
    347354        ;
    348355SEMAPHOR(BMXTSKT,BMXACT)        ;Lock/Unlock BMXMON semaphore
     
    384391ETRAP   ; -- on trapped error, send error info to client
    385392        ; Error Trap Vars: Code, Error, Last Global Reference
    386         N BMXERC,BMXERR,BMXLGR
     393        N BMXERC,BMXERROR,BMXLGR
    387394        ;
    388395        ;Change trapping during trap.
     
    398405        ; Otherwise, log error and send to client
    399406        S BMXERC=$$EC^%ZOSV
    400         S BMXERR="M ERROR="_BMXERC_$C(13,10)_"LAST REF="
     407        S BMXERROR="M ERROR="_BMXERC_$C(13,10)_"LAST REF="
    401408        S BMXLGR=$$LGR^%ZOSV_$C(4)
    402         S BMXERR=BMXERR_BMXLGR
     409        S BMXERROR=BMXERROR_BMXLGR
    403410        ;
    404411        D ^%ZTER ;%ZTER clears $ZE and $ECODE
     
    406413        U $P
    407414        ;
    408         D SNDERR,WRITE(BMXERR) W !
     415        D SNDERR,WRITE(BMXERROR),WBF
    409416        ;
    410417        S $ETRAP="Q:($ESTACK&'$QUIT)  Q:$ESTACK -9 S $ECODE="""" G SESSRES^BMXMON",$ECODE=",U99," ;IHS/OIT/HMW SAC Exemption Applied For
Note: See TracChangeset for help on using the changeset viewer.