Skip to content

Commit 1692f4b

Browse files
🎨 add running_time_in_hours to /services/-/aggregated-usages (#6350)
1 parent 9380819 commit 1692f4b

File tree

8 files changed

+71
-7
lines changed

8 files changed

+71
-7
lines changed

api/specs/web-server/_resource_usage.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,9 @@
1313

1414
from _common import assert_handler_signature_against_model
1515
from fastapi import APIRouter, Query, status
16+
from models_library.api_schemas_resource_usage_tracker.service_runs import (
17+
OsparcCreditsAggregatedByServiceGet,
18+
)
1619
from models_library.api_schemas_webserver.resource_usage import (
1720
ConnectServiceToPricingPlanBodyParams,
1821
CreatePricingPlanBodyParams,
@@ -93,7 +96,7 @@ async def list_resource_usage_services(
9396

9497
@router.get(
9598
"/services/-/aggregated-usages",
96-
response_model=Envelope[list[ServiceRunGet]],
99+
response_model=Envelope[list[OsparcCreditsAggregatedByServiceGet]],
97100
summary="Used credits based on aggregate by type, currently supported `services`. (user and product are taken from context, optionally wallet_id parameter might be provided).",
98101
tags=["usage"],
99102
)

packages/models-library/src/models_library/api_schemas_resource_usage_tracker/service_runs.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ class ServiceRunPage(NamedTuple):
4343
class OsparcCreditsAggregatedByServiceGet(BaseModel):
4444
osparc_credits: Decimal
4545
service_key: ServiceKey
46+
running_time_in_hours: Decimal
4647

4748

4849
class OsparcCreditsAggregatedUsagesPage(NamedTuple):

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,7 @@ class Config:
109109
class OsparcCreditsAggregatedByServiceKeyDB(BaseModel):
110110
osparc_credits: Decimal
111111
service_key: ServiceKey
112+
running_time_in_hours: Decimal
112113

113114
class Config:
114115
orm_mode = True

services/resource-usage-tracker/src/simcore_service_resource_usage_tracker/modules/db/repositories/resource_tracker.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -329,6 +329,22 @@ async def get_osparc_credits_aggregated_by_service(
329329
sa.func.SUM(
330330
resource_tracker_credit_transactions.c.osparc_credits
331331
).label("osparc_credits"),
332+
sa.func.SUM(
333+
sa.func.round(
334+
(
335+
sa.func.extract(
336+
"epoch",
337+
resource_tracker_service_runs.c.stopped_at,
338+
)
339+
- sa.func.extract(
340+
"epoch",
341+
resource_tracker_service_runs.c.started_at,
342+
)
343+
)
344+
/ 3600,
345+
2,
346+
)
347+
).label("running_time_in_hours"),
332348
)
333349
.select_from(
334350
resource_tracker_service_runs.join(

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -219,6 +219,7 @@ async def get_osparc_credits_aggregated_usages_page(
219219
OsparcCreditsAggregatedByServiceGet.construct(
220220
osparc_credits=item.osparc_credits,
221221
service_key=item.service_key,
222+
running_time_in_hours=item.running_time_in_hours,
222223
)
223224
)
224225

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

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -51,37 +51,49 @@ def resource_tracker_setup_db(
5151
random_resource_tracker_service_run(
5252
user_id=_USER_ID_1,
5353
service_run_id=_SERVICE_RUN_ID_1,
54-
started_at=datetime.now(tz=timezone.utc),
54+
started_at=datetime.now(tz=timezone.utc) - timedelta(hours=1),
55+
stopped_at=datetime.now(tz=timezone.utc),
56+
service_run_status="SUCCESS",
5557
service_key="simcore/services/dynamic/jupyter-smash",
5658
),
5759
random_resource_tracker_service_run(
5860
user_id=_USER_ID_2,
5961
service_run_id=_SERVICE_RUN_ID_2,
60-
started_at=datetime.now(tz=timezone.utc),
62+
started_at=datetime.now(tz=timezone.utc) - timedelta(hours=1),
63+
stopped_at=datetime.now(tz=timezone.utc),
64+
service_run_status="SUCCESS",
6165
service_key="simcore/services/dynamic/jupyter-smash",
6266
),
6367
random_resource_tracker_service_run(
6468
user_id=_USER_ID_1,
6569
service_run_id=_SERVICE_RUN_ID_3,
66-
started_at=datetime.now(tz=timezone.utc),
70+
started_at=datetime.now(tz=timezone.utc) - timedelta(hours=1),
71+
stopped_at=datetime.now(tz=timezone.utc),
72+
service_run_status="SUCCESS",
6773
service_key="simcore/services/dynamic/jupyter-smash",
6874
),
6975
random_resource_tracker_service_run(
7076
user_id=_USER_ID_1,
7177
service_run_id=_SERVICE_RUN_ID_4,
72-
started_at=datetime.now(tz=timezone.utc),
78+
started_at=datetime.now(tz=timezone.utc) - timedelta(hours=1),
79+
stopped_at=datetime.now(tz=timezone.utc),
80+
service_run_status="SUCCESS",
7381
service_key="simcore/services/dynamic/jupyter-smash",
7482
),
7583
random_resource_tracker_service_run(
7684
user_id=_USER_ID_1,
7785
service_run_id=_SERVICE_RUN_ID_5,
7886
started_at=datetime.now(tz=timezone.utc) - timedelta(days=3),
87+
stopped_at=datetime.now(tz=timezone.utc),
88+
service_run_status="SUCCESS",
7989
service_key="simcore/services/dynamic/jupyter-smash",
8090
),
8191
random_resource_tracker_service_run(
8292
user_id=_USER_ID_1,
8393
service_run_id=_SERVICE_RUN_ID_6,
8494
started_at=datetime.now(tz=timezone.utc) - timedelta(days=10),
95+
stopped_at=datetime.now(tz=timezone.utc),
96+
service_run_status="SUCCESS",
8597
service_key="simcore/services/dynamic/sim4life",
8698
),
8799
]

services/web/server/src/simcore_service_webserver/api/v0/openapi.yaml

Lines changed: 31 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4258,7 +4258,7 @@ paths:
42584258
'403':
42594259
description: ProjectInvalidRightsError
42604260
'404':
4261-
description: ProjectNotFoundError, UserDefaultWalletNotFoundError
4261+
description: UserDefaultWalletNotFoundError, ProjectNotFoundError
42624262
'409':
42634263
description: ProjectTooManyProjectOpenedError
42644264
'422':
@@ -4579,7 +4579,7 @@ paths:
45794579
content:
45804580
application/json:
45814581
schema:
4582-
$ref: '#/components/schemas/Envelope_list_models_library.api_schemas_webserver.resource_usage.ServiceRunGet__'
4582+
$ref: '#/components/schemas/Envelope_list_models_library.api_schemas_resource_usage_tracker.service_runs.OsparcCreditsAggregatedByServiceGet__'
45834583
/v0/services/-/usage-report:
45844584
get:
45854585
tags:
@@ -7641,6 +7641,17 @@ components:
76417641
$ref: '#/components/schemas/TaskGet'
76427642
error:
76437643
title: Error
7644+
Envelope_list_models_library.api_schemas_resource_usage_tracker.service_runs.OsparcCreditsAggregatedByServiceGet__:
7645+
title: Envelope[list[models_library.api_schemas_resource_usage_tracker.service_runs.OsparcCreditsAggregatedByServiceGet]]
7646+
type: object
7647+
properties:
7648+
data:
7649+
title: Data
7650+
type: array
7651+
items:
7652+
$ref: '#/components/schemas/OsparcCreditsAggregatedByServiceGet'
7653+
error:
7654+
title: Error
76447655
Envelope_list_models_library.api_schemas_storage.FileMetaDataGet__:
76457656
title: Envelope[list[models_library.api_schemas_storage.FileMetaDataGet]]
76467657
type: object
@@ -9339,6 +9350,24 @@ components:
93399350
- WALLET_SHARED
93409351
type: string
93419352
description: An enumeration.
9353+
OsparcCreditsAggregatedByServiceGet:
9354+
title: OsparcCreditsAggregatedByServiceGet
9355+
required:
9356+
- osparc_credits
9357+
- service_key
9358+
- running_time_in_hours
9359+
type: object
9360+
properties:
9361+
osparc_credits:
9362+
title: Osparc Credits
9363+
type: number
9364+
service_key:
9365+
title: Service Key
9366+
pattern: ^simcore/services/((comp|dynamic|frontend))/([a-z0-9][a-z0-9_.-]*/)*([a-z0-9-_]+[a-z0-9])$
9367+
type: string
9368+
running_time_in_hours:
9369+
title: Running Time In Hours
9370+
type: number
93429371
Owner:
93439372
title: Owner
93449373
required:

services/web/server/tests/unit/with_dbs/03/resource_usage/test_list_osparc_credits_aggregated_usages.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
**{
3131
"osparc_credits": Decimal(-50),
3232
"service_key": "simcore/services/comp/itis/sleeper",
33+
"running_time_in_hours": Decimal(0.5),
3334
}
3435
)
3536
],

0 commit comments

Comments
 (0)