Skip to content

Commit c26d3d6

Browse files
🎨 Bill dynamic service in case of error. (#5706)
1 parent 88492cd commit c26d3d6

File tree

3 files changed

+23
-4
lines changed

3 files changed

+23
-4
lines changed

services/resource-usage-tracker/src/simcore_service_resource_usage_tracker/models/resource_tracker_service_runs.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ class ServiceRunDB(BaseModel):
7474
node_name: str
7575
service_key: ServiceKey
7676
service_version: ServiceVersion
77-
service_type: str
77+
service_type: ResourceTrackerServiceType
7878
service_resources: dict
7979
started_at: datetime
8080
stopped_at: datetime | None

services/resource-usage-tracker/src/simcore_service_resource_usage_tracker/resource_tracker_background_task.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
from fastapi import FastAPI
66
from models_library.resource_tracker import (
77
CreditTransactionStatus,
8+
ResourceTrackerServiceType,
89
ServiceRunId,
910
ServiceRunStatus,
1011
)
@@ -102,7 +103,12 @@ async def _close_unhealthy_service(
102103
update_credit_transaction = CreditTransactionCreditsAndStatusUpdate(
103104
service_run_id=service_run_id,
104105
osparc_credits=make_negative(computed_credits),
105-
transaction_status=CreditTransactionStatus.NOT_BILLED,
106+
transaction_status=(
107+
CreditTransactionStatus.NOT_BILLED
108+
if running_service.service_type
109+
== ResourceTrackerServiceType.COMPUTATIONAL_SERVICE
110+
else CreditTransactionStatus.BILLED
111+
),
106112
)
107113
await resource_tracker_repo.update_credit_transaction_credits_and_status(
108114
update_credit_transaction

services/resource-usage-tracker/tests/unit/with_dbs/test_background_task.py

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,11 @@
33

44
import pytest
55
import sqlalchemy as sa
6-
from models_library.resource_tracker import CreditTransactionStatus, ServiceRunStatus
6+
from models_library.resource_tracker import (
7+
CreditTransactionStatus,
8+
ResourceTrackerServiceType,
9+
ServiceRunStatus,
10+
)
711
from servicelib.rabbitmq import RabbitMQClient
812
from simcore_postgres_database.models.resource_tracker_credit_transactions import (
913
resource_tracker_credit_transactions,
@@ -50,6 +54,7 @@ def resource_tracker_setup_db(
5054
resource_tracker_service_runs.insert().values(
5155
**random_resource_tracker_service_run(
5256
service_run_id=_SERVICE_RUN_ID_OSPARC_10_MIN_OLD,
57+
service_type=ResourceTrackerServiceType.COMPUTATIONAL_SERVICE,
5358
product_name="osparc",
5459
last_heartbeat_at=_LAST_HEARTBEAT_10_MIN_OLD,
5560
modified=_LAST_HEARTBEAT_10_MIN_OLD,
@@ -61,6 +66,7 @@ def resource_tracker_setup_db(
6166
resource_tracker_service_runs.insert().values(
6267
**random_resource_tracker_service_run(
6368
service_run_id=_SERVICE_RUN_ID_S4L_10_MIN_OLD,
69+
service_type=ResourceTrackerServiceType.DYNAMIC_SERVICE,
6470
product_name="s4l",
6571
last_heartbeat_at=_LAST_HEARTBEAT_10_MIN_OLD,
6672
modified=_LAST_HEARTBEAT_10_MIN_OLD,
@@ -186,6 +192,13 @@ async def test_process_event_functions(
186192
_SERVICE_RUN_ID_OSPARC_10_MIN_OLD,
187193
_SERVICE_RUN_ID_S4L_10_MIN_OLD,
188194
):
189-
assert transaction.transaction_status == CreditTransactionStatus.NOT_BILLED
195+
if transaction.service_run_id == _SERVICE_RUN_ID_OSPARC_10_MIN_OLD:
196+
# Computational service is not billed
197+
assert (
198+
transaction.transaction_status == CreditTransactionStatus.NOT_BILLED
199+
)
200+
else:
201+
# Dynamic service is billed
202+
assert transaction.transaction_status == CreditTransactionStatus.BILLED
190203
else:
191204
assert transaction.transaction_status == CreditTransactionStatus.PENDING

0 commit comments

Comments
 (0)