MHVUL2 ;WAS/GPM - MHV UTILITIES - LOGGING ; 3/2/06 5:38pm [4/19/06 2:30pm] ;;1.0;My HealtheVet;**1**;Aug 23, 2005 ;;Per VHA Directive 2004-038, this routine should not be modified. ; Q ; LOG(NAME,DATA,TYPE,LEVEL) ;Log to MHV application log ; ; Input: ; NAME - Name to identify log entry ; DATA - Value,Tree, or Name of structure to put in log ; TYPE - Type of log entry ; S:Set Single Value ; M:Merge Tree ; I:Indirect Merge @ ; LEVEL - Level of log entry - ERROR,TRACE,NAMED,DEBUG ; ; Output: ; Adds entry to log ; ; ^XTMP("MHV7LOG",0) - Head of log file ; ^XTMP("MHV7LOG",1) - if set indicates that logging is on ; ^XTMP("MHV7LOG",1,"LEVEL") - logging level ; ^XTMP("MHV7LOG",1,"LEVEL",LEVEL) = rank ; ^XTMP("MHV7LOG",1,"NAMES",) - names to log caret delimited string ; ^XTMP("MHV7LOG",1,"NAMES",NAME) - name to log ; ^XTMP("MHV7LOG",2) - contains the log ; ^XTMP("MHV7LOG",2,negated FM timestamp,$J,counter,NAME) - log entry ; ; ^TMP("MHV7LOG",$J) - Session current log entry (DTM) ; ;Quit if logging is not turned on Q:'$G(^XTMP("MHV7LOG",1)) N DTM,CNT,LOGLEVEL ; Q:'$D(DATA) Q:$G(TYPE)="" Q:$G(NAME)="" S NAME=$TR(NAME,"^","-") ; ;If LEVEL is null or unknown default to DEBUG I $G(LEVEL)="" S LEVEL="DEBUG" I '$D(^XTMP("MHV7LOG",1,"LEVEL",LEVEL)) S LEVEL="DEBUG" ; ;Log entries at or lower than the current logging level set ;Levels are ranked as follows: ; ^XTMP("MHV7LOG",1,"LEVEL","ERROR")=1 ; ^XTMP("MHV7LOG",1,"LEVEL","TRACE")=2 ; ^XTMP("MHV7LOG",1,"LEVEL","NAMED")=3 ; ^XTMP("MHV7LOG",1,"LEVEL","DEBUG")=4 ;Named is like a filtered version of debug. ;Additional levels may be added, and ranks changed without affecting ;the LOG api. Inserting a level between Named and Debug will require ;a change to the conditional below. S LOGLEVEL=$G(^XTMP("MHV7LOG",1,"LEVEL")) I LOGLEVEL="" S LOGLEVEL="TRACE" I $G(^XTMP("MHV7LOG",1,"LEVEL",LEVEL))>$G(^XTMP("MHV7LOG",1,"LEVEL",LOGLEVEL)) Q:LOGLEVEL'="NAMED" Q:'$D(^XTMP("MHV7LOG",1,"NAMES",NAME)) ; ; Check ^TMP("MHV7LOG",$J) If no current log node start a new node I '$G(^TMP("MHV7LOG",$J)) D . S DTM=-$$NOW^XLFDT() . K ^XTMP("MHV7LOG",2,DTM,$J) . S ^TMP("MHV7LOG",$J)=DTM . S CNT=1 . S ^XTMP("MHV7LOG",2,DTM,$J)=CNT . D AUTOPRG . Q E D . S DTM=^TMP("MHV7LOG",$J) . S CNT=$G(^XTMP("MHV7LOG",2,DTM,$J))+1 . S ^XTMP("MHV7LOG",2,DTM,$J)=CNT . Q ; I TYPE="S" S ^XTMP("MHV7LOG",2,DTM,$J,CNT,NAME)=DATA Q I TYPE="M" M ^XTMP("MHV7LOG",2,DTM,$J,CNT,NAME)=DATA Q I TYPE="I" M ^XTMP("MHV7LOG",2,DTM,$J,CNT,NAME)=@DATA Q ; Q ; AUTOPRG ; Q:'$G(^XTMP("MHV7LOG",1,"AUTOPURGE")) N DT,DAYS,RESULT ; Purge only once per day S DT=$$DT^XLFDT Q:$G(^XTMP("MHV7LOG",1,"AUTOPURGE","PURGE DATE"))=DT ; S DAYS=$G(^XTMP("MHV7LOG",1,"AUTOPURGE","DAYS")) I DAYS<1 S DAYS=7 ; D LOGPRG^MHVUL1(.RESULT,$$HTFM^XLFDT($H-DAYS,1)) S ^XTMP("MHV7LOG",1,"AUTOPURGE","PURGE DATE")=DT Q ; LOGBROWS ; Browser view of Log N LOG,CNT,DTM,JOB,NUM,NAME,DIR,DIRUT,X,Y K ^TMP("MHV LOG SUMMARY",$J) K ^TMP("MHV LOG DETAIL",$J) K ^TMP("MHV LOG BROWSE",$J) K ^TMP("MHV LOG BROWSE DETAIL",$J) D LOGSUM^MHVUL1(.LOG) S CNT=$P(@LOG,"^",2) I CNT<1 D Q . W !!,?12,"LOG IS EMPTY" . K DIR,DIRUT,X,Y . S DIR(0)="E" . D ^DIR . Q F I=1:1:CNT D . S DTM=$P(@LOG@(I),"^") . S JOB=$P(@LOG@(I),"^",2) . S NUM=$P(@LOG@(I),"^",3) . S NAME=$E($P(@LOG@(I),"^",4)_$J("",20),1,20) . S ^TMP("MHV LOG BROWSE",$J,I)="$.%$CREF$^TMP(""MHV LOG BROWSE DETAIL"",$J,"_I_")$CREF$^"_NAME_"$.%"_$J($$FMTE^XLFDT(-DTM),22)_$J(JOB,13)_" "_NUM . S ^TMP("MHV LOG BROWSE DETAIL",$J,I)="$XC$^D LOGBDET^MHVUL2("_I_","_DTM_","_JOB_")$XC$^"_NAME_" "_$$FMTE^XLFDT(-DTM)_" "_JOB . Q D LOGBTITL S TITLE="Log Entry Timestamp Job Number Items" D BROWSE^DDBR("^TMP(""MHV LOG BROWSE"",$J)","NA",TITLE_$J("",80-$L(TITLE)),"","",3,24) K ^TMP("MHV LOG SUMMARY",$J) K ^TMP("MHV LOG DETAIL",$J) K ^TMP("MHV LOG BROWSE",$J) K ^TMP("MHV LOG BROWSE DETAIL",$J) Q ; LOGBTITL ; Build Titles for Browser N TITLE,INFO,TLOG,TPRG,TAUT,TLEN D LOGINFO^MHVUL1(.INFO) S TLOG="Logging: "_$S(INFO("STATE"):"",1:"OFF") I INFO("STATE") S TLOG=TLOG_INFO("LEVEL") S TAUT="Auto Purge: "_$S(INFO("AUTOPURGE"):"",1:"OFF") I INFO("AUTOPURGE") S TAUT=TAUT_+INFO("DAYS")_" days" S TPRG="Delete: "_$$FMTE^XLFDT(INFO("DELETE")) ; S TITLE="MHV APPLICATION LOG" S TLEN=$L(TITLE) W @IOF,$J(TITLE,TLEN\2+40)_$J(TPRG,40-(TLEN\2)) S TITLE=$J(TLOG_" ",15)_$J(TAUT,63) W !,TITLE Q ; LOGBDET(NODE,DTM,JOB) ; Build document from entry for Browser N I,CNT,LINE,ENTRY D LOGDET^MHVUL1(.ENTRY,DTM,JOB) S I=0 S CNT=0 F S I=$O(@ENTRY@(I)) Q:I="" D . S LINE=@ENTRY@(I) . S CNT=CNT+1 . S ^TMP("MHV LOG BROWSE DETAIL",$J,NODE,CNT)=$E(LINE,1,80) . S LINE=$E(LINE,81,999999) . F Q:LINE="" D .. S CNT=CNT+1 .. S ^TMP("MHV LOG BROWSE DETAIL",$J,NODE,CNT)=$J("",9)_$E(LINE,1,71) .. S LINE=$E(LINE,72,999999) .. Q . Q Q ;