Compare commits
No commits in common. "e59e1647acb74a53fb6e93a9b631bbdb73cf80b0" and "b5f522ad8b41c405a70c9a3d043aeb42fecf710d" have entirely different histories.
e59e1647ac
...
b5f522ad8b
|
|
@ -1,6 +1,3 @@
|
||||||
import json
|
|
||||||
from collections import defaultdict
|
|
||||||
|
|
||||||
from log_analyzer import LogSettings
|
from log_analyzer import LogSettings
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -8,7 +5,7 @@ class Analyzer:
|
||||||
def __init__(self, settings: LogSettings):
|
def __init__(self, settings: LogSettings):
|
||||||
self.settings = settings
|
self.settings = settings
|
||||||
|
|
||||||
def process(self, entry: dict) -> bool:
|
def process(self, entry: object) -> bool:
|
||||||
raise NotImplementedError()
|
raise NotImplementedError()
|
||||||
|
|
||||||
def result(self) -> object:
|
def result(self) -> object:
|
||||||
|
|
@ -16,35 +13,12 @@ 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.entries
|
return self.settings.spatials
|
||||||
|
|
||||||
def render(self, format="geojson"):
|
|
||||||
if format is "geojson":
|
|
||||||
return json.dumps([entry['location']['coordinates'] for entry in self.entries])
|
|
||||||
raise NotImplementedError()
|
|
||||||
|
|
||||||
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: dict) -> bool:
|
def process(self, entry: object) -> bool:
|
||||||
self.store[entry[self.settings.entry_type]] += 1
|
self.store[entry] += 1
|
||||||
return False
|
return False
|
||||||
|
|
||||||
def __init__(self, settings: LogSettings):
|
def __init__(self, settings: LogSettings):
|
||||||
|
|
|
||||||
|
|
@ -1,14 +0,0 @@
|
||||||
{
|
|
||||||
"logFormat": "sqlite",
|
|
||||||
"entryType": "@class",
|
|
||||||
"spatials":["de.findevielfalt.games.game2.instance.log.entry.LogEntryLocation"],
|
|
||||||
"actions":["...QuestionAnswerEvent", "...SimuAnswerEvent"],
|
|
||||||
"analyzers": {
|
|
||||||
"analyzer": [
|
|
||||||
"LocationAnalyzer"
|
|
||||||
],
|
|
||||||
"analyzer.biogames": [
|
|
||||||
"BoardDurationAnalyzer"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
19
load.py
19
load.py
|
|
@ -1,7 +1,4 @@
|
||||||
import json
|
import json
|
||||||
import sqlite3
|
|
||||||
|
|
||||||
from json import loads as json_loads
|
|
||||||
|
|
||||||
|
|
||||||
class Loader:
|
class Loader:
|
||||||
|
|
@ -18,25 +15,19 @@ 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) -> dict:
|
def get_entry(self):
|
||||||
for entry in self.data:
|
for entry in self.data:
|
||||||
yield entry
|
yield entry
|
||||||
|
|
||||||
|
|
||||||
class SQLiteLoader(Loader):
|
class SQLiteLoader(Loader):
|
||||||
conn = None
|
|
||||||
|
|
||||||
def load(self, file: str):
|
def load(self, file: str):
|
||||||
self.conn = sqlite3.connect(file)
|
pass
|
||||||
|
|
||||||
def get_entry(self) -> dict:
|
def get_entry(self) -> object:
|
||||||
cursor = self.conn.cursor()
|
pass
|
||||||
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("biogames2.json")
|
settings = load_settings("biogames.json")
|
||||||
print(settings)
|
print(settings)
|
||||||
logfile = "data/inst_56d9b64144ab44e7b90bf766f3be32e3/instance_log.sqlite"
|
logfile = "sample.json"
|
||||||
loader = LOADERS[settings.log_format]()
|
loader = LOADERS[settings.log_format]()
|
||||||
try:
|
try:
|
||||||
loader.load(logfile)
|
loader.load(logfile)
|
||||||
|
|
@ -48,11 +48,7 @@ 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:
|
||||||
if analyzer.process(entry):
|
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())
|
||||||
coords = analyzers[0].render()
|
|
||||||
with open("test.js", "w") as out:
|
|
||||||
out.write("coords = "+coords)
|
|
||||||
Loading…
Reference in New Issue