Skip to content

Commit

Permalink
Adapt python lib to allow for defining multiple scores
Browse files Browse the repository at this point in the history
  • Loading branch information
stefan-k committed Apr 26, 2022
1 parent 52096ce commit 6ef0baa
Show file tree
Hide file tree
Showing 9 changed files with 133 additions and 43 deletions.
6 changes: 4 additions & 2 deletions client/auditorclient/db.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
import logging
from dateutil import parser
from .task import Task, Instruction
from .record import Record, Components
from .record import Record, Components, Scores


class DB(ABC):
Expand Down Expand Up @@ -140,7 +140,9 @@ def __init__(self, empty_db=False):
"site",
"user",
"group",
Components().add_component("comp1", 1, 2.0),
Components().add_component(
"comp1", 1, Scores().add_score("score1", 2.0)
),
),
5,
)
Expand Down
36 changes: 29 additions & 7 deletions client/auditorclient/record.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,13 +15,36 @@ def __str__(self) -> str:
def __eq__(self, other: Components) -> bool:
return self._components == other._components

def add_component(self, name: str, amount: int, factor: float) -> Components:
self._components.append({"name": name, "amount": amount, "factor": factor})
def add_component(self, name: str, amount: int, scores: Scores=None) -> Components:
if scores is not None:
self._components.append({"name": name, "amount": amount, "scores": scores.get()})
else:
self._components.append({"name": name, "amount": amount, "scores": []})
return self

def get(self) -> [dict]:
return self._components

class Scores:
def __init__(self, json_str=None):
if json_str is not None:
self._scores = json.loads(json_str)
else:
self._scores = []

def __str__(self) -> str:
return self._scores.__str__()

def __eq__(self, other: Scores) -> bool:
return self._scores == other._scores

def add_score(self, name: str, factor: float) -> Scores:
self._scores.append({"name": name, "factor": factor})
return self

def get(self) -> [dict]:
return self._scores


class Record:
def __init__(
Expand Down Expand Up @@ -54,7 +77,10 @@ def __init__(
d = json.loads(json_str)
c = Components()
for comp in d["components"]:
c.add_component(comp["name"], comp["amount"], comp["factor"])
score = Scores()
for s in comp["scores"]:
score.add_score(s["name"], s["factor"])
c.add_component(comp["name"], comp["amount"], score)
self._record_id = d["record_id"]
self._site_id = d["site_id"]
self._user_id = d["user_id"]
Expand Down Expand Up @@ -86,10 +112,6 @@ def with_stop_time(self, stop_time: str) -> Record:
self._stop_time = stop_time
return self

# def with_runtime(self, runtime: str) -> Record:
# self._runtime = runtime
# return self

def record_id(self) -> str:
return self._record_id

Expand Down
8 changes: 4 additions & 4 deletions client/collector_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
import asyncio
import logging
from uuid import uuid4
from auditorclient.record import Record, Components
from auditorclient.record import Record, Components, Scores
from auditorclient.client import AuditorClient
from pprint import pprint

Expand All @@ -22,9 +22,9 @@ async def main(client: AuditorClient):

components = (
Components()
.add_component("Cores", 40, 1)
.add_component("Memory", 100, 1)
.add_component("Disk", 196, 1)
.add_component("Cores", 40, Scores().add_score("score1", 1.0))
.add_component("Memory", 100)
.add_component("Disk", 196)
)
record_id = "nemo-13312889"
record = Record(record_id, "NEMO", "atlsch", "atlsch", components).with_start_time(
Expand Down
3 changes: 2 additions & 1 deletion client/plugin_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,10 +21,11 @@ def compute_cputime_per_group(response):
data[group_id]["count"] += 1
print(rec["start_time"])
print(rec["stop_time"])
print(rec["components"])
data[group_id]["cpu_time"] += (
(parser.parse(rec["stop_time"]) - parser.parse(rec["start_time"]))
* rec["components"][0]["amount"]
* rec["components"][0]["factor"]
* rec["components"][0]["scores"][0]["factor"]
).total_seconds()
return data

Expand Down
22 changes: 17 additions & 5 deletions client/tests/test_client.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
from unittest import IsolatedAsyncioTestCase, TestCase, mock
import auditorclient
from auditorclient.db import MockDB
from auditorclient.record import Record, Components
from auditorclient.record import Record, Components, Scores
from auditorclient.task import Task, Instruction
from auditorclient.client import AuditorClient
from auditorclient.errors import RecordExistsError, RecordDoesNotExistError
Expand All @@ -25,7 +25,13 @@ def setUp(self):
"site_id": "site",
"user_id": "user",
"group_id": "grop",
"components": [{"name": "CPU", "amount": 1, "factor": 1.3}],
"components": [
{
"name": "CPU",
"amount": 1,
"scores": [{"name": "score1", "factor": 1.3}],
}
],
"start_time": "2019-11-28T12:45:59.324310Z",
"stop_time": "2020-11-29T12:45:59.324310Z",
"runtime": 31708800,
Expand All @@ -36,7 +42,13 @@ def setUp(self):
"site_id": "site",
"user_id": "user",
"group_id": "group",
"components": [{"name": "CPU", "amount": 2, "factor": 1.3}],
"components": [
{
"name": "CPU",
"amount": 2,
"scores": [{"name": "score1", "factor": 1.3}],
}
],
"start_time": "2019-11-28T12:45:59.324310Z",
"stop_time": "2020-11-29T12:45:59.324310Z",
"runtime": 31708800,
Expand Down Expand Up @@ -79,7 +91,7 @@ async def test_AuditorClient(self, mocked):
"site",
"user",
"group",
Components().add_component("comp1", 1, 2.0),
Components().add_component("comp1", 1, Scores().add_score("score1", 2.0)),
)

response = await client.add_record(record)
Expand Down Expand Up @@ -143,7 +155,7 @@ async def test_AuditorClient_workers(self, mocked):
"site",
"user",
"group",
Components().add_component("comp1", 1, 2.0),
Components().add_component("comp1", 1, Scores().add_score("score1", 2.0)),
)

mocked.post("http://localhost:8080/add", status=200, body="test")
Expand Down
12 changes: 7 additions & 5 deletions client/tests/test_db.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from unittest import IsolatedAsyncioTestCase, TestCase, mock
from auditorclient.db import DB, DBsqlite
from auditorclient.record import Record, Components
from auditorclient.record import Record, Components, Scores
from auditorclient.task import Task, Instruction

import aiosqlite
Expand Down Expand Up @@ -58,17 +58,19 @@ async def test_DBsqlite(self): # , mock_isfile):
self.assertEqual(" ".join(row[0].split()), self.sql_create_cmd)

record = Record(
"record", "site", "user", "group", Components().add_component("comp1", 1, 2.0)
"record",
"site",
"user",
"group",
Components().add_component("comp1", 1, Scores().add_score("score1", 2.0)),
)
retries = 5
task = Task(Instruction.ADD, record, retries)

await db.put(task)

async with aiosqlite.connect(self.test_db) as con:
async with con.execute(
"SELECT * FROM auditorclient;"
) as cursor:
async with con.execute("SELECT * FROM auditorclient;") as cursor:
row = await cursor.fetchone()
self.assertEqual(Record(json_str=row[3]), record)

Expand Down
6 changes: 4 additions & 2 deletions client/tests/test_queue.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
from auditorclient.db import MockDB
from auditorclient.queue import Queue
from auditorclient.task import Task, Instruction
from auditorclient.record import Record, Components
from auditorclient.record import Record, Components, Scores
from unittest import IsolatedAsyncioTestCase, TestCase, mock


Expand All @@ -29,7 +29,9 @@ async def test_queue(self):
"site",
"user",
"group",
Components().add_component("comp1", 1, 2.0),
Components().add_component(
"comp1", 1, Scores().add_score("score1", 2.0)
),
),
5,
)
Expand Down
74 changes: 60 additions & 14 deletions client/tests/test_record.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
from unittest import TestCase
from auditorclient.record import Record, Components
from auditorclient.record import Record, Components, Scores
from auditorclient.errors import InsufficientParametersError


Expand All @@ -8,14 +8,31 @@ def test_components(self):
comp = Components()
self.assertEqual(comp._components, [])
self.assertEqual(comp.get(), [])
comp.add_component("blaah", 1, 1.2)
self.assertEqual(comp.get(), [{"name": "blaah", "amount": 1, "factor": 1.2}])
comp.add_component("blubb", 2, 5)
comp.add_component("blaah", 1, Scores().add_score("score1", 1.2))
self.assertEqual(
comp.get(),
[
{"name": "blaah", "amount": 1, "factor": 1.2},
{"name": "blubb", "amount": 2, "factor": 5},
{
"name": "blaah",
"amount": 1,
"scores": [{"name": "score1", "factor": 1.2}],
}
],
)
comp.add_component("blubb", 2, Scores().add_score("score2", 5))
self.assertEqual(
comp.get(),
[
{
"name": "blaah",
"amount": 1,
"scores": [{"name": "score1", "factor": 1.2}],
},
{
"name": "blubb",
"amount": 2,
"scores": [{"name": "score2", "factor": 5}],
},
],
)
self.assertEqual(comp.__str__(), comp._components.__str__())
Expand All @@ -27,7 +44,11 @@ def test_record(self):
record = Record()

record = Record(
"record", "site", "user", "group", Components().add_component("comp1", 1, 2.0)
"record",
"site",
"user",
"group",
Components().add_component("comp1", 1, Scores().add_score("score1", 2.0)),
)
self.assertEqual(record.record_id(), "record")
self.assertEqual(record.site_id(), "site")
Expand All @@ -38,7 +59,13 @@ def test_record(self):
"site_id": "site",
"user_id": "user",
"group_id": "group",
"components": [{"name": "comp1", "amount": 1, "factor": 2.0}],
"components": [
{
"name": "comp1",
"amount": 1,
"scores": [{"name": "score1", "factor": 2.0}],
}
],
"start_time": None,
"stop_time": None,
},
Expand All @@ -52,7 +79,13 @@ def test_record(self):
"site_id": "site",
"user_id": "user",
"group_id": "group",
"components": [{"name": "comp1", "amount": 1, "factor": 2.0}],
"components": [
{
"name": "comp1",
"amount": 1,
"scores": [{"name": "score1", "factor": 2.0}],
}
],
"start_time": "time1",
"stop_time": None,
},
Expand All @@ -66,7 +99,13 @@ def test_record(self):
"site_id": "site",
"user_id": "user",
"group_id": "group",
"components": [{"name": "comp1", "amount": 1, "factor": 2.0}],
"components": [
{
"name": "comp1",
"amount": 1,
"scores": [{"name": "score1", "factor": 2.0}],
}
],
"start_time": "time1",
"stop_time": "time2",
},
Expand All @@ -76,15 +115,16 @@ def test_record(self):
record.as_json(),
'{"record_id": "record", "site_id": "site", "user_id": "user", '
+ '"group_id": "group", '
+ '"components": [{"name": "comp1", "amount": 1, "factor": 2.0}], '
+ '"components": [{"name": "comp1", "amount": 1, '
+ '"scores": [{"name": "score1", "factor": 2.0}]}], '
+ '"start_time": "time1", "stop_time": "time2"}',
)

def test_record_from_json(self):
record = Record(
json_str='{"record_id": "record", "site_id": "site", "user_id": "user", '
+ '"group_id": "group", '
+ '"components": [{"name": "comp1", "amount": 1, "factor": 2.0}], '
+ '"group_id": "group", "components": '
+ '[ { "name": "comp1", "amount": 1, "scores": [{"name": "score1", "factor": 2.0}] } ], '
+ '"start_time": "time1", "stop_time": "time2"}',
)
self.assertEqual(
Expand All @@ -94,7 +134,13 @@ def test_record_from_json(self):
"site_id": "site",
"user_id": "user",
"group_id": "group",
"components": [{"name": "comp1", "amount": 1, "factor": 2.0}],
"components": [
{
"name": "comp1",
"amount": 1,
"scores": [{"name": "score1", "factor": 2.0}],
}
],
"start_time": "time1",
"stop_time": "time2",
},
Expand Down
9 changes: 6 additions & 3 deletions client/tests/test_task.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
from auditorclient.task import Instruction, Task
from auditorclient.record import Record, Components
from auditorclient.record import Record, Components, Scores

from unittest import TestCase
from unittest.mock import patch
Expand All @@ -22,8 +22,11 @@ def test_task(self, mock_datetime):
1992, 11, 3, 0, 0, 0
)
record = Record(
"record", "site", "user", "group",
Components().add_component("comp1", 1, 2.0)
"record",
"site",
"user",
"group",
Components().add_component("comp1", 1, Scores().add_score("score1", 2.0)),
)
retries = 5
task1 = Task(Instruction.ADD, record, retries)
Expand Down

0 comments on commit 6ef0baa

Please sign in to comment.