#!/usr/bin/env python3 ''' Copyright Daniel Jones 2018 This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . ''' import os, json; class Message: ''' messages.append(Message(filepath)); print(messages[x].filepath); ''' msgcount = 0; channels = []; def __init__(self, fp, line): self.filepath = fp; self.line = line; Message.msgcount+=1; def parsechannel(self): # channel name is taken from file path self.channel = self.filepath.split("#")[1].split("_")[0]; def parsedate(self): # date taken from file path self.date = self.filepath.rsplit("_", 1)[1].rsplit(".", 1)[0]; def parseline(self): try: self.user = self.line.split("<", 1)[1].split(">", 1)[0]; except: self.user = "ZNCLOG"; self.line = "[99:99:99] name change or join/part, disregard.\n"; self.time = self.line.split(" <", 1)[0].replace("[", "").replace("]", ""); self.message = self.line.split("> ", 1)[1]; if self.message.endswith("\n"): self.message = self.message[:-1]; def getstructuredmsg(self): self.data = {}; self.data["date"] = self.date; self.data["time"] = self.time; self.data["channel"] = self.channel; self.data["user"] = self.user; self.data["message"] = self.message; return self.data; def parse(self): # get message time self.parseline(); self.parsechannel(); self.parsedate(); def getlines(logfile): with open(logfile, encoding="utf-8") as f: for line in f: messages.append(Message(logfile, line)); def getlogpaths(): # loop through each .log file inside indir for file in os.listdir(indir): if (file.endswith(".log")): filepath = os.path.join(indir, file); logfiles.append(filepath); if (debug): break; if __name__ == "__main__": debug = 1; indir = "logs/parse"; logfiles = []; messages = []; getlogpaths(); tmpdata = []; # collect all lines for file in logfiles: getlines(file); # parse each line for x in range(len(messages)): messages[x].parse(); tmpdata.append(messages[x].getstructuredmsg()); jsondata = json.dumps(tmpdata); print(jsondata);