diff --git a/analyzer/analyzer.py b/analyzer/analyzer.py index 3741b43..3319130 100644 --- a/analyzer/analyzer.py +++ b/analyzer/analyzer.py @@ -1,3 +1,5 @@ +from collections import defaultdict + from log_analyzer import LogSettings @@ -5,7 +7,7 @@ class Analyzer: def __init__(self, settings: LogSettings): self.settings = settings - def process(self, entry: object) -> bool: + def process(self, entry: dict) -> bool: raise NotImplementedError() def result(self) -> object: @@ -13,12 +15,30 @@ class Analyzer: class LocationAnalyzer(Analyzer): + entries = [] def __init__(self, settings: LogSettings): super().__init__(settings) def result(self) -> object: - return self.settings.spatials + return self.entries + + def process(self, entry: dict) -> bool: + if entry[self.settings.entry_type] in self.settings.spatials: + self.entries.append(entry) + return False + + +class LogEntryCountAnalyzer(Analyzer): + def result(self) -> object: + return self.store + + def process(self, entry: dict) -> bool: + self.store[entry[self.settings.entry_type]] += 1 + return False + + def __init__(self, settings: LogSettings): + super().__init__(settings) + self.store = defaultdict(lambda: 0) + - def process(self, entry: object) -> bool: - pass \ No newline at end of file diff --git a/analyzer/biogames.py b/analyzer/biogames.py index 40691c7..44e7f94 100644 --- a/analyzer/biogames.py +++ b/analyzer/biogames.py @@ -9,8 +9,8 @@ class BoardDurationAnalyzer(Analyzer): def result(self) -> object: return self.store - def process(self, entry: object) -> bool: - self.store[entry] += 1 + def process(self, entry: dict) -> bool: + self.store[entry[self.settings.entry_type]] += 1 return False def __init__(self, settings: LogSettings): diff --git a/biogames2.json b/biogames2.json new file mode 100644 index 0000000..1943eaa --- /dev/null +++ b/biogames2.json @@ -0,0 +1,14 @@ +{ + "logFormat": "sqlite", + "entryType": "@class", + "spatials":["de.findevielfalt.games.game2.instance.log.entry.LogEntryLocation"], + "actions":["...QuestionAnswerEvent", "...SimuAnswerEvent"], + "analyzers": { + "analyzer": [ + "LocationAnalyzer" + ], + "analyzer.biogames": [ + "BoardDurationAnalyzer" + ] + } +} \ No newline at end of file diff --git a/load.py b/load.py index 05c2c81..b9610bd 100644 --- a/load.py +++ b/load.py @@ -1,4 +1,7 @@ import json +import sqlite3 + +from json import loads as json_loads class Loader: @@ -15,19 +18,25 @@ class JSONLoader(Loader): def load(self, file: str): self.data = json.load(open(file)) - def get_entry(self): + def get_entry(self) -> dict: for entry in self.data: yield entry -class SQLiteLoader(Loader): - def load(self, file: str): - pass - def get_entry(self) -> object: - pass +class SQLiteLoader(Loader): + conn = None + + def load(self, file: str): + self.conn = sqlite3.connect(file) + + def get_entry(self) -> dict: + cursor = self.conn.cursor() + cursor.execute("SELECT * FROM log_entry") + for seq, timestamp, json in cursor.fetchall(): + yield json_loads(json) LOADERS = { "json": JSONLoader, "sqlite": SQLiteLoader -} \ No newline at end of file +} diff --git a/log_analyzer.py b/log_analyzer.py index 057420b..005e9d6 100644 --- a/log_analyzer.py +++ b/log_analyzer.py @@ -35,9 +35,9 @@ def load_settings(file:str) -> LogSettings: if __name__ == '__main__': - settings = load_settings("biogames.json") + settings = load_settings("biogames2.json") print(settings) - logfile = "sample.json" + logfile = "data/inst_56d9b64144ab44e7b90bf766f3be32e3/instance_log.sqlite" loader = LOADERS[settings.log_format]() try: loader.load(logfile) @@ -48,7 +48,8 @@ if __name__ == '__main__': analyzers.append(analyzer(settings)) for entry in loader.get_entry(): for analyzer in analyzers: - analyzer.process(entry) + if analyzer.process(entry): + break for analyzer in analyzers: print("* Result for " + str(type(analyzer))) print(analyzer.result()) \ No newline at end of file