add sqlite loader
parent
b5f522ad8b
commit
3c5e6c3ce3
|
|
@ -1,3 +1,5 @@
|
||||||
|
from collections import defaultdict
|
||||||
|
|
||||||
from log_analyzer import LogSettings
|
from log_analyzer import LogSettings
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -5,7 +7,7 @@ class Analyzer:
|
||||||
def __init__(self, settings: LogSettings):
|
def __init__(self, settings: LogSettings):
|
||||||
self.settings = settings
|
self.settings = settings
|
||||||
|
|
||||||
def process(self, entry: object) -> bool:
|
def process(self, entry: dict) -> bool:
|
||||||
raise NotImplementedError()
|
raise NotImplementedError()
|
||||||
|
|
||||||
def result(self) -> object:
|
def result(self) -> object:
|
||||||
|
|
@ -13,12 +15,30 @@ class Analyzer:
|
||||||
|
|
||||||
|
|
||||||
class LocationAnalyzer(Analyzer):
|
class LocationAnalyzer(Analyzer):
|
||||||
|
entries = []
|
||||||
|
|
||||||
def __init__(self, settings: LogSettings):
|
def __init__(self, settings: LogSettings):
|
||||||
super().__init__(settings)
|
super().__init__(settings)
|
||||||
|
|
||||||
def result(self) -> object:
|
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:
|
def result(self) -> object:
|
||||||
return self.store
|
return self.store
|
||||||
|
|
||||||
def process(self, entry: object) -> bool:
|
def process(self, entry: dict) -> bool:
|
||||||
self.store[entry] += 1
|
self.store[entry[self.settings.entry_type]] += 1
|
||||||
return False
|
return False
|
||||||
|
|
||||||
def __init__(self, settings: LogSettings):
|
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"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
23
load.py
23
load.py
|
|
@ -1,4 +1,7 @@
|
||||||
import json
|
import json
|
||||||
|
import sqlite3
|
||||||
|
|
||||||
|
from json import loads as json_loads
|
||||||
|
|
||||||
|
|
||||||
class Loader:
|
class Loader:
|
||||||
|
|
@ -15,19 +18,25 @@ class JSONLoader(Loader):
|
||||||
def load(self, file: str):
|
def load(self, file: str):
|
||||||
self.data = json.load(open(file))
|
self.data = json.load(open(file))
|
||||||
|
|
||||||
def get_entry(self):
|
def get_entry(self) -> dict:
|
||||||
for entry in self.data:
|
for entry in self.data:
|
||||||
yield entry
|
yield entry
|
||||||
|
|
||||||
class SQLiteLoader(Loader):
|
|
||||||
def load(self, file: str):
|
|
||||||
pass
|
|
||||||
|
|
||||||
def get_entry(self) -> object:
|
class SQLiteLoader(Loader):
|
||||||
pass
|
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 = {
|
LOADERS = {
|
||||||
"json": JSONLoader,
|
"json": JSONLoader,
|
||||||
"sqlite": SQLiteLoader
|
"sqlite": SQLiteLoader
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -35,9 +35,9 @@ def load_settings(file:str) -> LogSettings:
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
settings = load_settings("biogames.json")
|
settings = load_settings("biogames2.json")
|
||||||
print(settings)
|
print(settings)
|
||||||
logfile = "sample.json"
|
logfile = "data/inst_56d9b64144ab44e7b90bf766f3be32e3/instance_log.sqlite"
|
||||||
loader = LOADERS[settings.log_format]()
|
loader = LOADERS[settings.log_format]()
|
||||||
try:
|
try:
|
||||||
loader.load(logfile)
|
loader.load(logfile)
|
||||||
|
|
@ -48,7 +48,8 @@ if __name__ == '__main__':
|
||||||
analyzers.append(analyzer(settings))
|
analyzers.append(analyzer(settings))
|
||||||
for entry in loader.get_entry():
|
for entry in loader.get_entry():
|
||||||
for analyzer in analyzers:
|
for analyzer in analyzers:
|
||||||
analyzer.process(entry)
|
if analyzer.process(entry):
|
||||||
|
break
|
||||||
for analyzer in analyzers:
|
for analyzer in analyzers:
|
||||||
print("* Result for " + str(type(analyzer)))
|
print("* Result for " + str(type(analyzer)))
|
||||||
print(analyzer.result())
|
print(analyzer.result())
|
||||||
Loading…
Reference in New Issue