vbscript - VB script to scan latest log file for errors -


i have vb script scans mentioned log file errors , sends notification through email.

how can scan latest log file in folder? example, filename1.070615 (filename1.mmddyy) log file. after size, logfile switches new file same name different date: filename1.070615.

    cdosendusingport = 2, _  const forreading = 1  dim intstartatline, strfilecreateddate, i, strresults, strtexttoscanfor, bstartfromscratch dim strlastcheckedfor, strarraytostring, strsubject, strmailfrom, strmailto   strmailto               = "<emailaddress>"   strmailfrom     = "<fromaddress>"        strsubject              = "log scanner"   strsmtpserver   = "x.x.x.x"      filetoread              = "d:\log\filename1.mmddyy"  arrtexttoscanfor        = array("error","another thing")  set wshshell            = wscript.createobject("wscript.shell")  searchkey                       = replace(replace(filetoread,":",""),"\","_")  on error resume next strlastfilecheckedcreatedate    = wshshell.regread("hkcu\software\rdscripts\checktxtfile\" & searchkey & "\createdate") strlastfilelastlinechecked              = wshshell.regread("hkcu\software\rdscripts\checktxtfile\" & searchkey & "\lastlinechecked") strlastcheckedfor                               = wshshell.regread("hkcu\software\rdscripts\checktxtfile\" & searchkey & "\checkforstring") ilastcheckedline                                = wshshell.regread("hkcu\software\rdscripts\checktxtfile\" & searchkey & "\lastlinechecked") on error goto 0  set objfso                                              = wscript.createobject("scripting.filesystemobject") set varfile                                     = objfso.getfile(filetoread)  arrlastcheckedfortext                   = split(strlastcheckedfor,",") strfilecreatedate                               = varfile.datecreated strfilemodifieddate                             = varfile.datelastmodified  sstatus                                                 = "<li>using mail server: " & strsmtpserver & "</li><li>running from: " & wscript.scriptfullname & "</li>"  set objtextfile = objfso.opentextfile(filetoread, forreading) objtextfile.readall      ilinecount = objtextfile.line  objtextfile.close       if strlastcheckedfor = ""         bstartfromscratch = true         sstatus = sstatus & "<li>first run of script against string search</li>" & vbcrlf  elseif ubound(arrtexttoscanfor) <> ubound(arrlastcheckedfortext)         bstartfromscratch = true         sstatus = sstatus & "<li>count of string search criteria has changed</li>" & vbcrlf else         each stritem in arrtexttoscanfor                                     else                            bstartfromscratch = true                          'msgbox strresults                 end if                  if bstartfromscratch = true                         sstatus = sstatus & "<li>string search criteria not match prior search</li>" & vbcrlf                 end if          next end if if cint(ilinecount) < cint(ilastcheckedline)               bstartfromscratch = true         sstatus = sstatus & "<li>last line checked (" & ilastcheckedline & ") greater total line count (" & ilinecount & ") in file</li>"  end if  if cstr(strfilecreatedate) = cstr(strlastfilecheckedcreatedate) , bstartfromscratch <> true          intstartatline = strlastfilelastlinechecked         if bstartfromscratch <> true                 sstatus = sstatus & "<li>continuing search line " & intstartatline & "</li>" & vbcrlf         end if   elseif strfilecreatedate <> strlastfilecheckedcreatedate or bstartfromscratch = true          intstartatline = 0         if bstartfromscratch <> true                 sstatus = sstatus & "<li>file created date has changed, starting search line 0</li>" & vbcrlf         end if end if  = 0 dim strnextline  each stritem in arrtexttoscanfor         strarraytostring = strarraytostring & delim & stritem         delim = "," next   set objtextfile = objfso.opentextfile(filetoread, forreading)  while objtextfile.atendofstream <> true       if < cint(intstartatline)         objtextfile.skipline       else         'msgbox         strnextline = objtextfile.readline         each stritem in arrtexttoscanfor                 if instr(lcase(strnextline),lcase(stritem))                         strresults = "<span style='font-family:courier-new;color:#696969'><span style='font-weight:bold;background-color:#bef3f3'>line " & & ":</span> " & replace(lcase(strnextline),lcase(stritem),"<span style='background-color:#ffff81'>" & stritem & "</span>") & "</span><br>" & vbcrlf & strresults                         bsendmail = true                 end if         next       end if          = + 1  loop objtextfile.close  set wshshell = createobject("wscript.shell") 'let's save our settings next time. wshshell.regwrite "hkcu\software\rdscripts\checktxtfile\" & searchkey & "\filechecked", filetoread, "reg_sz" wshshell.regwrite "hkcu\software\rdscripts\checktxtfile\" & searchkey & "\createdate", strfilecreatedate, "reg_sz" wshshell.regwrite "hkcu\software\rdscripts\checktxtfile\" & searchkey & "\lastlinechecked", i, "reg_sz" wshshell.regwrite "hkcu\software\rdscripts\checktxtfile\" & searchkey & "\lastscanned", now, "reg_sz" wshshell.regwrite "hkcu\software\rdscripts\checktxtfile\" & searchkey & "\checkforstring",strarraytostring, "reg_sz" set wshshell = nothing      strfilesummary                          = "<tr><td style='font-family:calibri;font-weight:bold;color:darkblue;width:200px'>file path:</td><td>" & filetoread & "</td></tr>" strfilecreatedatesummary        = "<tr><td style='font-family:calibri;font-weight:bold;color:darkblue;width:200px'>created date:</td><td>" & strfilecreatedate & "</td></tr>" strfilemodifieddatesummary      = "<tr><td style='font-family:calibri;font-weight:bold;color:darkblue;width:200px'>modified date:</td><td>" & strfilemodifieddate & "</td></tr>" strarraysummary                         = "<tr><td style='font-family:calibri;font-weight:bold;color:darkblue;width:200px'>text string(s):</td><td>" & strarraytostring & "</td></tr>" strfilelinesummary                      = "<tr><td style='font-family:calibri;font-weight:bold;color:darkblue;width:200px'>last line checked:</td><td>" & & "</td></tr>" strsummary                                      = strfilesummary & strfilecreatedatesummary & strfilemodifieddatesummary & strarraysummary & strfilelinesummary strbodycontent                          = "<table style='font-family:calibri;'>" & strsummary & "</table><br><br><span style='font-size:large;'>entries:</span><br>" & strresults & "<div style='padding-top:30px;font-size:x-small'><br><div style='font-weight:bold;font-family:calibri;color:black;'>job details:<ul style='font-weight:normal;font-family:calibri;color:darkgray;'>" & sstatus & "</ul></div></div>" on error goto 0  'send email if need be. if bsendmail = true call sendmail(strmailfrom,strmailto,strsubject,strbodycontent)  '------------------------------------------------------------------------ 'function emailfile - email warning file '------------------------------------------------------------------------ function sendmail(strfrom,strto,strsubject,strmessage) dim imsg, iconf, flds on error goto 0  '//  create cdo connections. set imsg = createobject("cdo.message") set iconf = createobject("cdo.configuration") set flds = iconf.fields   '//  smtp server configuration. flds     .item(cdosendusingmethod) = cdosendusingport      '//  set smtp server address here.    .item(cdosmtpserver) = strsmtpserver     .update end  '//  set message properties. imsg     set .configuration = iconf         .to       = strmailto         .from     = strmailfrom         .subject  = strsubject         .htmlbody = strmessage end  'imsg.htmlbody = strmessage  '//  send message.  imsg.send ' send message.  if cstr(err.number) <> 0  else  end if end function 

it bit easier if log files named filename1.yymmdd.

nevertheless, can use regex not verify filename swap date components put them in our desired format!

set re = new regexp re.pattern = "^(filename1\.)(\d{2})(\d{2})(\d{2})$"  set fso = createobject("scripting.filesystemobject")  each objfile in fso.getfolder("d:\log").files     if re.test(objfile.name)         strcomparename = re.replace(objfile.name, "$1$4$2$3")         if strcomparename > strlatest strlatest = strcomparename     end if next  ' switch name back... strlatest = re.replace(strlatest, "$1$3$4$2") wscript.echo "the latest file is: " & strlatest 

this line:

strcomparename = re.replace(objfile.name, "$1$4$2$3") 

changes format mmddyy yymmdd , saves in string comparison.

once we've finished our comparisons, need take latest file found , reverse process:

 strlatest = re.replace(strlatest, "$1$3$4$2") 

to original filename back!


Comments

Popular posts from this blog

toolbar - How to add link to user registration inside toobar in admin joomla 3 custom component -

linux - disk space limitation when creating war file -