class SimpleLogAnalyzer: def __init__(self, lgConfFile, ptrnConfFile, outFldr, chnksz): self.lgConfFile = lgConfFile self.ptrnConfFile = ptrnConfFile self.outFldr = outFldr self.chnksz = chnksz self.rep = Report() self.fu = FileUtil() def getLogFiles(self): files =[] folders = self.fu.readAllLines(self.lgConfFile); for fldrName in folders: lindx = getLastPathIndx( fldrName ) fldr = fldrName[0:lindx] ptrn = fldrName[lindx+1:] files+=self.fu.listDir( fldr, ptrn ) return files def copy(self,rb,chunks,found): chnk = chunk() chnk.addTag(found) chunks.append(chnk) for rbel in rb.get(): if(rbel!=None): chnk.append(rbel) def processBuffer(self,buff, ptrns, offset, chnksz, chnks,rb): cLastIndx = len(chnks) - 1 for line in buff: if(offset>0): chnks[cLastIndx].append(line) found = match(line,ptrns) offset-=1 if(found != None): chnks[cLastIndx].addTag(found) else: rb.append(line) found = match(line,ptrns) if(found != None): self.copy(rb,chnks,found) cLastIndx+=1 offset=chnksz return offset def processFile(self,inFileName, ptrns, chnksz): bsz = chnksz * 20 offset=0 chnks=[] rb = RingBuffer(chnksz) buffitr = self.fu.readNextBuffer(inFileName, bsz) for buff in buffitr: offset = self.processBuffer(buff,ptrns,offset,chnksz,chnks,rb) return chnks def dumpChnks(self, chnks, outFldr, lgFile): i=getLastPathIndx(lgFile) outFile = outFldr + lgFile[i:] + ".xml" for cn in chnks: self.fu.writeContents(outFile, cn.serialize()) def process(self): lgFiles = self.getLogFiles() ptrns = self.fu.readAllLines(self.ptrnConfFile) if(len(lgFiles)>0 and len(ptrns)>0): for lgFile in lgFiles: chnks = self.processFile(lgFile, ptrns, self.chnksz) if(len(chnks)>0): self.rep.addMatchedFile(lgFile,chnks) self.dumpChnks(chnks, self.outFldr, lgFile) else: self.rep.addUnMatchedFile(lgFile) def generateReport(self): self.rep.printReport()