From 4286aff8b238db77783768c6df85892fee6cea54 Mon Sep 17 00:00:00 2001 From: Chris Veilleux Date: Tue, 4 Jun 2019 11:34:03 -0500 Subject: [PATCH] Repository code for the new job metrics table --- shared/selene/data/metrics/__init__.py | 2 ++ shared/selene/data/metrics/entity/job.py | 13 +++++++++++++ shared/selene/data/metrics/repository/job.py | 18 ++++++++++++++++++ .../metrics/repository/sql/add_job_metric.sql | 13 +++++++++++++ 4 files changed, 46 insertions(+) create mode 100644 shared/selene/data/metrics/entity/job.py create mode 100644 shared/selene/data/metrics/repository/job.py create mode 100644 shared/selene/data/metrics/repository/sql/add_job_metric.sql diff --git a/shared/selene/data/metrics/__init__.py b/shared/selene/data/metrics/__init__.py index 4b0594a8..44dc2373 100644 --- a/shared/selene/data/metrics/__init__.py +++ b/shared/selene/data/metrics/__init__.py @@ -1,2 +1,4 @@ from .entity.api import ApiMetric +from .entity.job import JobMetric from .repository.api import ApiMetricsRepository +from .repository.job import JobRepository diff --git a/shared/selene/data/metrics/entity/job.py b/shared/selene/data/metrics/entity/job.py new file mode 100644 index 00000000..0b307029 --- /dev/null +++ b/shared/selene/data/metrics/entity/job.py @@ -0,0 +1,13 @@ +from dataclasses import dataclass +from datetime import date, datetime + + +@dataclass +class JobMetric(object): + job_name: str + batch_date: date + start_ts: datetime + end_ts: datetime + command: str + success: bool + id: str = None diff --git a/shared/selene/data/metrics/repository/job.py b/shared/selene/data/metrics/repository/job.py new file mode 100644 index 00000000..17e652b4 --- /dev/null +++ b/shared/selene/data/metrics/repository/job.py @@ -0,0 +1,18 @@ +from dataclasses import asdict + +from ...repository_base import RepositoryBase +from ..entity.job import JobMetric + + +class JobRepository(RepositoryBase): + def __init__(self, db): + super(JobRepository, self).__init__(db, __file__) + + def add(self, job: JobMetric): + db_request = self._build_db_request( + sql_file_name='add_job_metric.sql', + args=asdict(job) + ) + db_result = self.cursor.insert_returning(db_request) + + return db_result.id diff --git a/shared/selene/data/metrics/repository/sql/add_job_metric.sql b/shared/selene/data/metrics/repository/sql/add_job_metric.sql new file mode 100644 index 00000000..e262dbdb --- /dev/null +++ b/shared/selene/data/metrics/repository/sql/add_job_metric.sql @@ -0,0 +1,13 @@ +INSERT INTO + metrics.job +VALUES ( + DEFAULT, + %(job_name)s, + %(batch_date)s, + %(start_ts)s, + %(end_ts)s, + %(command)s, + %(success)s +) +RETURNING + id