add sqlite loader
parent
b5f522ad8b
commit
3c5e6c3ce3
|
|
@ -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
|
||||
|
|
@ -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):
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
]
|
||||
}
|
||||
}
|
||||
21
load.py
21
load.py
|
|
@ -1,4 +1,7 @@
|
|||
import json
|
||||
import sqlite3
|
||||
|
||||
from json import loads as json_loads
|
||||
|
||||
|
||||
class Loader:
|
||||
|
|
@ -15,16 +18,22 @@ 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 = {
|
||||
|
|
|
|||
|
|
@ -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())
|
||||
Loading…
Reference in New Issue