//**************************************************************************** // // EBZLOG.VDM (C) C.Z. 05.09.1997 // 28.08.1998 ebzprod // 17.11.1998 NT ++ // 13.01.1999 Helpwin // 14.01.1999 // 17.05.1999 Y2000 ... // 19.05.1999 // 16.03.2000 rcp-x // 10.04.2000 rcp wieder o.k. // 15.08.2000 f. 5.20 (HOME->USER_MACRO) // // Analyse-Tool für die UPIC-/UTM-Logfiles der EBZ-Neu // // Aufruf durch EBZLOG.CMD // //**************************************************************************** // // Numerische Register: // -------------------- // #86 : Flag für NextFile // #87 : temp. f. Buffer-Nummer // #88 : Flag für lokales oder erw. Mailsuchen // #89 : temp. Buffer-Num // #90 : Line-Nr in Filelist // #91 : Flag für aktuelles Logfile (zur Aktualisierung des akt. Logfiles) // #92 : Flag zur Aktualisierung des aktuellen Logfiles // #93 : Flag für 1. Hilfe-Aufruf // #94 : aktuelle Buffer-Nummer // #95 : Sammel-Buffer-Nummer (0, wenn nicht vorh.) // #96 : LogFile-Nr (=Upic-Prozeß 1,2,3) // #97 : temp. Buffer-Num // #98 : Anzahl Logfiles // #99 : Flag für Ende der Datei-Schleife // // Text-Register: // -------------- // Reg10 : UNIX-Dateiname inkl. Pfad // Reg11 : DOS-Dateiname // Reg12 : Unix-Dateiname ohne Pfad und ohne Datums-Endung // Reg13 : Suchstring // Reg14 : rcp-Command // Reg15 : LogFile-Nr als String (Upic-Prozeß = 1,2,3 / UTM = 0) // Reg16 : temp. für Mailtransport und Suchstring // Reg17 : temp. für Statuszeile // Reg18 : Pfad für Dateiablage (beim Aufruf gesetzt) // Reg19 : rcp-Kommando mit user@Rechner auf Unix // Reg20 : String am Beginn einer Mail (UPIC) // Reg21 : String am Beginn eines Blocks (UTM), wird bei Bedarf nach @20 kopiert // //**************************************************************************** // // Aufbau der Liste der Logfiles: // ------------------------------ // /prodEbzExe/bs2/upc/log/UPICAGT1.log2 // /prodEbzExe/bs2/upc/log/UPICAGT1.log2.970911090600 // ... \ ^^^^^^^^^^^^^ ".JJMMTTHHMMSS" // `- Nr. des UPIC-Prozesses // bzw.: // // /prodEbzExe/bs2/utm/log/utmp.out // /prodEbzExe/bs2/utm/log/utmp.out.970911090600 // ... ^^^^^^^^^^^^^ ".JJMMTTHHMMSS" // // // !!! ab Mai 1999: Dateinamen: .JJJJMMTTHHMMSS wegen Y2000 // // //**************************************************************************** Config( C_COMMENT, "Color for comments", 32 ) Config( C_W_COMMENT, "Color for comments", 32 ) Config( C_SYMBOL, "Color for symbols", 32 ) Config( C_W_SYMBOL, "Color for symbols", 32 ) Config( PG_E_SYNTAX, 1) Syntax_Load("|(USER_MACRO)\EBZLOG.SYN") Reg_Set(18,"\", APPEND) Reg_Set(19, "rcp ebzprod.ebzadm:") Reg_Set(20, ">>> -------------------------") Reg_Set(21, "-----------------------------") ? //#93=0 // bei 1. Aufruf der Hilfe : "Taste ..." //Call(100, "Hilfe") KeyAdd('F1', '[VISUAL EXIT] Call(100, "Hilfe")',NOCONFIRM) KeyAdd('Shft-F1', '[VISUAL EXIT] Call(100, "HilfeW")',NOCONFIRM) KeyAdd('Ctrl-F11', '[VISUAL EXIT] #86=-1 Call(100,"Next_File")',NOCONFIRM) KeyAdd('Ctrl-F12', '[VISUAL EXIT] #86=+1 Call(100,"Next_File")',NOCONFIRM) KeyAdd('Shft-F9', '[VISUAL EXIT] Call(100,"Mark_Mail")',NOCONFIRM) KeyAdd('Ctrl-F9', '[VISUAL EXIT] Call(100,"Print_Block")',NOCONFIRM) KeyAdd('Shft-F10', '[VISUAL EXIT] if (BB!=-1){RCB(13,BB,BE) BB(CLEAR)}',NOCONFIRM) KeyAdd('Shft-F11', '[VISUAL EXIT] BoL S("|@(20)",REVERSE+NOERR) SVL(11)',NOCONFIRM) KeyAdd('Shft-F12', '[VISUAL EXIT] EoL S("|@(20)",NOERR) SVL(11)',NOCONFIRM) KeyAdd('Ctrl-F10', '[VISUAL EXIT] #88=0 Call(100,"Coll_Mails")',NOCONFIRM) KeyAdd('Alt-F10', '[VISUAL EXIT] #88=1 Call(100,"Coll_Mails")',NOCONFIRM) KeyAdd('Alt-F9', '[VISUAL EXIT] Call(100,"Coll_Header")',NOCONFIRM) KeyAdd('F10', '[VISUAL EXIT] Call(100,"S_String")',NOCONFIRM) //KeyAdd('F11', '[VISUAL EXIT] SM(9,CP) BoL S("|@(13)",REVERSE+ADVANCE+NOERR) if(EM){GP(M(9)) }else{SVL(11)} ',NOCONFIRM) //KeyAdd('F12', '[VISUAL EXIT] SM(9,CP) EoL S("|@(13)",ADVANCE+NOERR) if(EM){GP(M(9))}else{SVL(11)} ',NOCONFIRM) KeyAdd('F11', '[VISUAL EXIT] SM(9,CP) BoL Call(100, "SEARCHB") CALL(33+BUFFER) if(Return_Value){GP(M(9)) }else{SVL(11)} ',NOCONFIRM) KeyAdd('F12', '[VISUAL EXIT] SM(9,CP) EoL Call(100, "SEARCHF") CALL(33+BUFFER) if(Return_Value){GP(M(9))}else{SVL(11)} ',NOCONFIRM) #90=1 // default Line-Nr in Filelist #92=1 // Flag für 1. Aufruf #95=0 // bisher kein Sammelbuffer eingerichtet // FileList Buf_Switch(1) Browse_Mode(SET) EoF #98=Cur_Line-1 // Anzahl Logfiles // LogFile-Nr ermitteln (=Upic-Prozeß) #96=N_Option if (#96>=90){ // wenn Flag>=90 => ist wiederh. Aufruf => Actual nicht neu laden #96=#96-90 // Nr errechnen (Offset 90 abziehen) #92=0 // Flag: Actual nicht neu laden } Buf_Switch(Buf_Free) // Nr des UPIC's/UTM (0,1,2,3) Num_Ins(#96,LEFT) // als Text in BoF // Reg_Copy_Block(15,0,Eol_Pos) // Reg.15 schreiben Reg_Set(15,"-",APPEND) Buf_Quit(OK) if (#96==0){ // UTM-Logfile Reg_Set(20, @21) // anderer Mail-Trenner im UTM-Log } //----------------------------------------------------------- // erstes bzw. nächstes/vorheriges Logfile (durch #90 positioniert) ermitteln // und bei Bedarf von UNIX holen :Next_File: #90=#90+#86 // in Liste positionieren #97=Buf_Num // gerade aktueller Buffer Buf_Switch(1) if (#90<1){ #90=1 Buf_Switch(#97) #86=0 return(1) // kein jüngeres File mehr vorhanden } if (#90>#98){ #90=#98 Buf_Switch(#97) #86=0 return(1) // kein älteres File mehr vorhanden } Goto_Line(#90) // positionieren und auswerten Reg_Copy_Block(10,Cur_Pos,EoL_Pos) Eol Char(-2) Search(".", REVERSE+ADVANCE) if (Match("|D",COUNT,12)!=0){ // keine 12-st. Zahl (Datum) dort => aktuelles Log Search("/", REVERSE+ADVANCE) Reg_Copy_Block(12,CurPos,EoL_Pos) Reg_Set(11,@15) Reg_Set(11,"actual", APPEND) #91=0 if (#92==1) { // bei 1. Aufruf aktuelles Logfile zwingend aktualisieren #91=1 } } else { // älteres Logfile (mit Datumsstempel) bzw. *.Z Char(12) if (Match(".Z")==0){ #90=#90-#86 // Positionierung in Liste rückgängig #86=0 Buf_Switch(#97) return } if (Match("|D|D.Z")==0){ #90=#90-#86 // Positionierung in Liste rückgängig #86=0 Buf_Switch(#97) return } Char(-12) Reg_Set(11,@15) Reg_Copy_Block(11, Cur_Pos, Cur_Pos+8, APPEND) Reg_Set(11,".", APPEND) Reg_Copy_Block(11, Cur_Pos+8, Cur_Pos+12, APPEND) #91=0 } // Logfile bei Bedarf von UNIX holen if ((#91==1) || (! FileExist("|@(18)|@(11)"))) { Reg_Set(14, @19) // Aufbau des rcp-Kommandos Reg_Set(14, @10, APPEND) Reg_Set(14, " ", APPEND) Reg_Set(14, @18, APPEND) Reg_Set(14, @11, APPEND) Win_Clear() Message("\n\n\n\n\n\n\nLoading logfile from UNIX: \n\n") Reg_Type(14) Message("Working. Please wait ...", STATLINE) // geht nur bis 94 Bytes Länge! // System('|@(14)',DOS+SIMPLE+SUPPRESS) // Aufruf des rcp-Kommandos // // Workaround: // CMD.EXE kann direkt deutlich längere Eingabestrings verarbeiten (> 256). File_Delete("c:\tmp\ebzlog$.bat", OK+NOERR) Out_File("c:\tmp\ebzlog$.bat") RT(14) Out_file(CLEAR) System('c:\tmp\ebzlog$.bat',DOS+SIMPLE+SUPPRESS) // Aufruf des rcp-Kommandos } Buf_Switch(#97) if (Buf_Free==-1){ if (File_Check("|@(18)|@(11)")==-1){ Alert() Get_Key("Error: No more buffers available! ",STATLINE) Key_Purge Visual_Macro(8) #86=0 return(1) } } File_Open("|@(18)|@(11)") Browse_Mode(SET) BoF #92=0 // 1. Durchlauf beendet #86=0 // darf nur bei einem Durchlauf aktiv sein (nur per Key) return(0) //----------------------------------------------------------- // aktuelle Mail als Block markieren :Mark_Mail: Save_Pos() Line(1) Search("|@(20)", REVERSE+NOERR) if (Error_Match){ Restore_Pos() return(1) } BoL Block_Begin(CLEAR) Block_Begin(Cur_Pos) Line(2) Search("|@(20)", NOERR) if (Error_Match){ EoF } Block_End(CP) Restore_Pos() return(0) //----------------------------------------------------------- // markierten Block ausdrucken :Print_Block: if (BB!=-1){ Print_Block(BB,BE) Print_Finish() } return //----------------------------------------------------------- // Such-String eingeben :S_String: Reg_Set(16,@13) if (Is_Windows) { #91=Dialog_Input_1(13,"'Log-File Analysis', 'String to search:', '??String:', '[&Ok]','[Cancel]', ","",APP+CENTER,0,0) if ((#91==0) || (#91==2)) { RS(13,@16) } return } else { Get_Input(13,"String to search: ",STATLINE+NOCR) Visual_Macro(8) return } return //----------------------------------------------------------- // alle Mails, die den Suchstring enthalten, in einem Buffer sammeln :Coll_Mails: if (Reg_Size(13)==0) { return } Save_Pos() #94=Buf_Num // ursprünglicher Buffer #89=Buf_Num // im folgenden gerade bearbeiteter Buffer if (#95==0){ // falls noch kein Sammelbuffer vorh.: einen eröffnen #95=Buf_Free } Buf_Switch(#95) Browse_Mode(CLEAR) Buf_Empty(OK) Win_Clear() Message("\n please wait ...") File_Save_As("|@(18)sammler.|@(15)",OK) Buf_Switch(#89) Reg_Empty(17) Out_Reg(17) Num_Type(#95,LEFT+NOCR) Out_Reg(CLEAR) // Buffer-Nr. f. Statuszeile Statline_Message('sammle Mails in Buffer |@(17) ...') if(#88==1){ // wenn im allen Logs gesucht werden soll #90=1 // auf erstes File (aktuelles) positionieren #86=0 Call(100,"Next_File") BoF Update() #89=Buf_Num } #99=-1 while (#99<=0){ // Schleife durch das bzw. alle vorhanden Logfiles EoF while (! At_BoF){ // Search("|@(13)", REVERSE+ERRBREAK) Call(100, "SEARCHB") Call(33+BUFFER) if(Return_Value) { break } Call(100,"Mark_Mail") Reg_Copy_Block(16,BB,BE) Buf_Switch(#95) Browse_Mode(CLEAR) BoF Reg_Ins(16) Buf_Switch(#89) Goto_Pos(BB) BB(CLEAR) } if (#99==0) { Buf_Quit(OK) } #90++ if(#88==0){ // wenn nur im aktuellen/lokalen Log gesucht wird: raus break } Call(100,"Next_File") Update() #99=Return_Value #89=Buf_Num } if (Buf_Num > #94){ // evtl. vorh. Arbeitsbuffer schließen Buf_Quit(OK) } Restore_Pos() Buf_Switch(#95) // zum Sammler Win_Clear() BoF File_Save() Statline_Message('Mail-Sammlung in Buffer |@(17)') Visual_Macro(8) return //----------------------------------------------------------- // alle Header des aktuellen Logs in einem Buffer sammeln :Coll_Header: Save_Pos() #89=Buf_Num // aktueller Buffer if ((#95==0)||(#95==#89)){ // falls noch kein Sammelbuffer vorh.: einen eröffnen #95=Buf_Free } Buf_Switch(#95) Buf_Empty(OK) Win_Clear() Message("\n please wait ...") File_Save_As("|@(18)header.|@(15)",OK) Buf_Switch(#89) Reg_Empty(17) Out_Reg(17) Num_Type(#95,LEFT+NOCR) Out_Reg(CLEAR) // Buffer-Nr. f. Statuszeile Statline_Message('sammle Header in Buffer |@(17) ...') BoF if(#96==0) { // UTM-Log Reg_Set(16, "Programmstart: ") Search(" ( ", ADVANCE) Reg_Copy_Block(16,Cur_Pos,EoL_Pos-2,APPEND) Buf_Switch(#95) Reg_Ins(16, APPEND) Ins_Newline(2) Buf_Switch(#89) while (! At_EoF){ Search("Uhrzeit", ADVANCE+ERRBREAK) Search("= ", ADVANCE+ERRBREAK) Reg_Copy_Block(16, Cur_Pos, EoL_Pos) Reg_Set(16," ", APPEND) Search("Telegrammtyp", ADVANCE+ERRBREAK) BoL Search(" ", ADVANCE) Reg_Copy_Block(16,BoL_Pos,Cur_Pos,APPEND) Search(":") Reg_Copy(16,1,APPEND) Buf_Switch(#95) Reg_Ins(16, APPEND) Buf_Switch(#89) Line(1) } } else { // UPIC-Log Search("Programmstart. |M: ", ADVANCE+NOERR) if(! Error_Flag){ Reg_Set(16, "Programmstart: ") Reg_Copy(16,1,APPEND) Buf_Switch(#95) Reg_Ins(16, APPEND) Ins_Newline(1) Buf_Switch(#89) } else { Reg_Empty(16) BoF } while (! At_EoF){ Search("|<>>> Mail ", ADVANCE+ERRBREAK) Search("(", ADVANCE+ERRBREAK+COUNT,3) Reg_Copy_Block(16, Cur_Pos, EoL_Pos-2) Reg_Set(16," ", APPEND) Line(1) Reg_Copy(16, 1, APPEND) Buf_Switch(#95) Reg_Ins(16, APPEND) Buf_Switch(#89) Line(1) } } Restore_Pos() Buf_Switch(#95) // zum Sammler Win_Clear() BoF File_Save() Statline_Message('Header-Sammlung in Buffer |@(17)') Visual_Macro(8) return //---------------------------------------------------------------------------- :SEARCHF: #87=BN BS(33) BY(OK) IT('S("') RI(13) IT('", ADVANCE+NOERR)') IT('return(Error_Flag)') BS(#87) return //---------------------------------------------------------------------------- :SEARCHB: #87=BN BS(33) BY(OK) IT('S("') RI(13) IT('", REVERSE+ADVANCE+NOERR)') IT('return(Error_Flag)') BS(#87) return //---------------------------------------------------------------------------- :Hilfe: Win_Clear() Message(' (1/2) EBZ-Logfile-Analyse (UTM und UPIC) ================================== F10 neuen Suchstring eingeben Shft-F10 Block als Suchstring eintragen F11 Suchstring rückwärts suchen F12 Suchstring vorwärts suchen Ctrl-F10 alle Mails dieser Datei mit Suchstring in einem Buffer sammeln Alt-F10 alle Mails aller n-Logs mit Suchstring in einem Buffer sammeln Shft-F9 aktuelle Mail markieren Ctrl-F9 markierten Block ausdrucken Alt-F9 alle Mailheader der aktuellen Log-Datei in einem Buffer sammeln Shft-F11 zum Anfang der aktuellen Mail Shft-F12 zum Ende der aktuellen Mail Ctrl-F11 zum nächsten jüngeren Logfile Ctrl-F12 zum nächsten älteren Logfile Shft-F1 Kurzhilfe ein-/ausschalten ') if (#93==1) { Sleep(100) #93=0 } else { Message(' Bitte eine Taste drücken ...') Get_Key() Key_Purge() } Win_Clear() Message(' (2/2) Typ Mail Langname UPIC-Pr./Mbx UTM-TP ---------------------------------------------------------------------- 201 - MBK-Beginn - ANT401 204 - SA-MBK-ENDE - ANT401 205 - KAP-Ende - ANT501 101 ANK Anforderung KB-Daten 1 AGT101/102 102 ANA Anforderung AP-Daten 1 AGT101/102 103 ANR Anforderung Ring-Daten-Transport 1 AGT101/102 104 SAL Schneidarm loeschen 2 AGT201/202 105 RAE Rueckmeldung Ausgang EBZ 3 AGT301/302 106 REE Rueckmeldung Eingang EBZ 3 AGT301/302 108 RHE Rueckmeldung HRL Eingang 2 AGT201/202 109 RHA Rueckmeldung HRL Ausgang 2 AGT201/202 110 RIA Ruechmeldung IL Ausgang 2 AGT201/202 111 RKA Ruechmeldung KB-Rep. Ausgang 2 AGT201/202 112 RVS Rueckmeldung Versandschreiber 3 AGT301/302 113 RVB Rueckmeldung Versandschreiber Bewertung 3 AGT301/302 114 RUM Rueckmeldung Umbuchung 2 AGT201/202 115 RGE Ring Entnahme 3 AGT301/302 116 ANP Anforderung Paket-Daten 1 AGT101/102 117 RGK Ring wird Kaltband 2 AGT201/202 ') if (#93==1) { Sleep(100) #93=0 } else { Message(' Bitte eine Taste drücken ...') Get_Key() Key_Purge() } Visual_Macro(8) return //---------------------------------------------------------------------------- :HilfeW: if(Win_Reserved_Bottom_ID != 0) { win_delete('H') return } #99=Win_Num win_delete('H') win_reserved('H',4,BOTTOM+NOBORDER) WS('H') Win_Color(15,15,EXTRA) // nur wegen Bug ??? Win_Clear() M(" AF9 Header sammeln | AF10 alle Mails m. Such$ | | CF9 Block ausdrucken | CF10 akt. Mails m. Such$ | CF11 << Logfile | CF12 Logfile >> SF9 Mail markieren | SF10 Block --> Suchstr. | SF11 << Mail | SF12 Mail >> | F10 Suchstring eingeben | F11 << Suchstring | F12 Suchstring >>") Win_Color(112,112,EXTRA) // nur wegen Bug ??? WS(#99) return //============================================================================