Skip to content

Commit 918ea9b

Browse files
authored
Merge pull request #147 from OpenDataAlex/process_tracker_python-139
Process tracker python 139
2 parents 99f378c + 77e02f6 commit 918ea9b

File tree

5 files changed

+53
-23
lines changed

5 files changed

+53
-23
lines changed

dbscripts/mysql_process_tracker.sql

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -263,6 +263,8 @@ create table process
263263
process_tool_id int null,
264264
last_failed_run_date_time datetime not null,
265265
schedule_frequency_id int default 0 not null,
266+
last_completed_run_date_time datetime not null,
267+
last_errored_run_date_time datetime not null,
266268
constraint process_name
267269
unique (process_name),
268270
constraint process_fk03

dbscripts/postgresql_process_tracker.sql

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ SET search_path TO process_tracker;
33
create schema process_tracker;
44

55
alter schema process_tracker owner to pt_admin;
6-
76
create schema process_tracker;
87

98
alter schema process_tracker owner to pt_admin;
@@ -303,7 +302,9 @@ create table process
303302
last_failed_run_date_time timestamp default '1900-01-01 00:00:00'::timestamp without time zone not null,
304303
schedule_frequency_id integer default 0 not null
305304
constraint process_fk04
306-
references schedule_frequency_lkup
305+
references schedule_frequency_lkup,
306+
last_completed_run_date_time timestamp default '1900-01-01 00:00:00'::timestamp without time zone not null,
307+
last_errored_run_date_time timestamp default '1900-01-01 00:00:00'::timestamp without time zone not null
307308
);
308309

309310
comment on table process is 'Processes being tracked';

process_tracker/models/process.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,12 @@ class Process(Base):
148148
last_failed_run_date_time = Column(
149149
DateTime(timezone=True), nullable=False, default=default_date
150150
)
151+
last_completed_run_date_time = Column(
152+
DateTime(timezone=True), nullable=False, default=default_date
153+
)
154+
last_errored_run_date_time = Column(
155+
DateTime(timezone=True), nullable=False, default=default_date
156+
)
151157
schedule_frequency_id = Column(
152158
Integer,
153159
ForeignKey("process_tracker.schedule_frequency_lkup.schedule_frequency_id"),

process_tracker/process_tracker.py

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -267,20 +267,19 @@ def change_run_status(self, new_status, end_date=None):
267267
new_status
268268
]
269269

270-
if (
271-
self.process_status_types[new_status] == self.process_status_complete
272-
) or (self.process_status_types[new_status] == self.process_status_failed):
273-
274-
self.logger.info("Process status changing to failed or completed.")
275-
270+
if self.process_status_types[new_status] == self.process_status_complete:
271+
self.logger.info("Process status changing to completed.")
272+
self.process.last_completed_run_date_time = end_date
276273
self.process_tracking_run.process_run_end_date_time = end_date
277274

278-
if self.process_status_types[new_status] == self.process_status_failed:
279-
self.logger.info(
280-
"Process recording as failed. Setting process last_failed_run_date_time."
281-
)
275+
elif self.process_status_types[new_status] == self.process_status_failed:
276+
277+
self.logger.info(
278+
"Process recording as failed. Setting process last_failed_run_date_time."
279+
)
282280

283-
self.process.last_failed_run_date_time = end_date
281+
self.process.last_failed_run_date_time = end_date
282+
self.process_tracking_run.process_run_end_date_time = end_date
284283

285284
self.session.commit()
286285

tests/test_process_tracker.py

Lines changed: 32 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1559,32 +1559,54 @@ def test_register_process_target_object_attributes(self):
15591559
def test_change_run_status_complete(self):
15601560
"""
15611561
Testing that when changing the run status from 'running' to 'complete' the run record updates successfully.
1562+
Process record is also updated for last_completed_date_time.
15621563
:return:
15631564
"""
1564-
self.process_tracker.change_run_status(new_status="completed")
1565+
end_date = datetime.now()
1566+
end_date = end_date.replace(microsecond=0)
1567+
self.process_tracker.change_run_status(
1568+
new_status="completed", end_date=end_date
1569+
)
15651570

1566-
run_record = self.session.query(ProcessTracking).filter(
1567-
ProcessTracking.process_id == self.process_id
1571+
run_record = (
1572+
self.session.query(
1573+
ProcessTracking.process_status_id, Process.last_completed_run_date_time
1574+
)
1575+
.join(Process)
1576+
.filter(ProcessTracking.process_id == self.process_id)
15681577
)
15691578

1570-
given_result = run_record[0].process_status_id
1571-
expected_result = self.process_tracker.process_status_complete
1579+
given_result = [
1580+
run_record[0].process_status_id,
1581+
run_record[0].last_completed_run_date_time,
1582+
]
1583+
expected_result = [self.process_tracker.process_status_complete, end_date]
15721584

15731585
self.assertEqual(expected_result, given_result)
15741586

15751587
def test_change_run_status_failed(self):
15761588
"""
15771589
Testing that when changing the run status from 'running' to 'failed' the run record updates successfully.
1590+
Process record is also updated for last_failed_date_time.
15781591
:return:
15791592
"""
1580-
self.process_tracker.change_run_status(new_status="failed")
1593+
end_date = datetime.now()
1594+
end_date = end_date.replace(microsecond=0)
1595+
self.process_tracker.change_run_status(new_status="failed", end_date=end_date)
15811596

1582-
run_record = self.session.query(ProcessTracking).filter(
1583-
ProcessTracking.process_id == self.process_id
1597+
run_record = (
1598+
self.session.query(
1599+
ProcessTracking.process_status_id, Process.last_failed_run_date_time
1600+
)
1601+
.join(Process)
1602+
.filter(ProcessTracking.process_id == self.process_id)
15841603
)
15851604

1586-
given_result = run_record[0].process_status_id
1587-
expected_result = self.process_tracker.process_status_failed
1605+
given_result = [
1606+
run_record[0].process_status_id,
1607+
run_record[0].last_failed_run_date_time,
1608+
]
1609+
expected_result = [self.process_tracker.process_status_failed, end_date]
15881610

15891611
self.assertEqual(expected_result, given_result)
15901612

0 commit comments

Comments
 (0)