Skip to content

Commit a3d0eb8

Browse files
first commit
1 parent 0273e7c commit a3d0eb8

File tree

16 files changed

+60
-10
lines changed

16 files changed

+60
-10
lines changed

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ class LicensedItemCheckoutGet(BaseModel):
1717
licensed_item_id: LicensedItemID
1818
wallet_id: WalletID
1919
user_id: UserID
20+
user_email: str
2021
product_name: ProductName
2122
service_run_id: ServiceRunID
2223
started_at: datetime
@@ -31,6 +32,7 @@ class LicensedItemCheckoutGet(BaseModel):
3132
"licensed_item_id": "303942ef-6d31-4ba8-afbe-dbb1fce2a953",
3233
"wallet_id": 1,
3334
"user_id": 1,
35+
"user_email": "[email protected]",
3436
"product_name": "osparc",
3537
"service_run_id": "run_1",
3638
"started_at": "2023-01-11 13:11:47.293595",

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ class LicensedItemPurchaseGet(BaseModel):
2525
expire_at: datetime
2626
num_of_seats: int
2727
purchased_by_user: UserID
28+
user_email: str
2829
purchased_at: datetime
2930
modified: datetime
3031

@@ -43,6 +44,7 @@ class LicensedItemPurchaseGet(BaseModel):
4344
"expire_at": "2023-01-11 13:11:47.293595",
4445
"num_of_seats": 1,
4546
"purchased_by_user": 1,
47+
"user_email": "[email protected]",
4648
"purchased_at": "2023-01-11 13:11:47.293595",
4749
"modified": "2023-01-11 13:11:47.293595",
4850
}

packages/models-library/src/models_library/api_schemas_webserver/licensed_items_checkouts.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ class LicensedItemCheckoutRestGet(OutputSchema):
5353
licensed_item_id: LicensedItemID
5454
wallet_id: WalletID
5555
user_id: UserID
56+
user_email: str
5657
product_name: ProductName
5758
started_at: datetime
5859
stopped_at: datetime | None

packages/models-library/src/models_library/api_schemas_webserver/licensed_items_purchases.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ class LicensedItemPurchaseGet(OutputSchema):
2424
expire_at: datetime
2525
num_of_seats: int
2626
purchased_by_user: UserID
27+
user_email: str
2728
purchased_at: datetime
2829
modified_at: datetime
2930

packages/postgres-database/src/simcore_postgres_database/models/resource_tracker_licensed_items_purchases.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,11 @@
7272
sa.BigInteger,
7373
nullable=False,
7474
),
75+
sa.Column(
76+
"user_email",
77+
sa.String,
78+
nullable=True,
79+
),
7580
sa.Column(
7681
"purchased_at",
7782
sa.DateTime(timezone=True),

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ class LicensedItemsPurchasesDB(BaseModel):
2424
expire_at: datetime
2525
num_of_seats: int
2626
purchased_by_user: UserID
27+
user_email: str
2728
purchased_at: datetime
2829
modified: datetime
2930

@@ -41,6 +42,7 @@ class CreateLicensedItemsPurchasesDB(BaseModel):
4142
expire_at: datetime
4243
num_of_seats: int
4344
purchased_by_user: UserID
45+
user_email: str
4446
purchased_at: datetime
4547

4648
model_config = ConfigDict(from_attributes=True)

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

Lines changed: 26 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@ async def _close_unhealthy_service(
8181
service_run_id: ServiceRunID,
8282
base_start_timestamp: datetime,
8383
):
84+
8485
# 1. Close the service_run
8586
update_service_run_stopped_at = ServiceRunStoppedAtUpdate(
8687
service_run_id=service_run_id,
@@ -106,21 +107,39 @@ async def _close_unhealthy_service(
106107
running_service.last_heartbeat_at,
107108
running_service.pricing_unit_cost,
108109
)
110+
_transaction_status = (
111+
CreditTransactionStatus.NOT_BILLED
112+
if running_service.service_type
113+
== ResourceTrackerServiceType.COMPUTATIONAL_SERVICE
114+
else CreditTransactionStatus.BILLED
115+
)
109116
update_credit_transaction = CreditTransactionCreditsAndStatusUpdate(
110117
service_run_id=service_run_id,
111118
osparc_credits=make_negative(computed_credits),
112-
transaction_status=(
113-
CreditTransactionStatus.NOT_BILLED
114-
if running_service.service_type
115-
== ResourceTrackerServiceType.COMPUTATIONAL_SERVICE
116-
else CreditTransactionStatus.BILLED
117-
),
119+
transaction_status=_transaction_status,
118120
)
119121
await credit_transactions_db.update_credit_transaction_credits_and_status(
120122
db_engine, data=update_credit_transaction
121123
)
122124

123-
# 3. Release license seats in case some were checked out but not properly released.
125+
# 3. If the credit transaction status is considered "NOT_BILLED", this might return
126+
# the wallet to positive numbers. If, in the meantime, some transactions were marked as DEBT,
127+
# we need to update them back to the BILLED state.
128+
if _transaction_status == CreditTransactionStatus.NOT_BILLED:
129+
wallet_total_credits = await credit_transactions_db.sum_wallet_credits(
130+
db_engine,
131+
product_name=running_service.product_name,
132+
wallet_id=running_service.wallet_id,
133+
)
134+
if wallet_total_credits.available_osparc_credits >= 0:
135+
await credit_transactions_db.batch_update_credit_transaction_status_for_in_debt_transactions(
136+
db_engine,
137+
project_id=None,
138+
wallet_id=running_service.wallet_id,
139+
transaction_status=CreditTransactionStatus.BILLED,
140+
)
141+
142+
# 4. Release license seats in case some were checked out but not properly released.
124143
await licensed_items_checkouts_db.force_release_license_seats_by_run_id(
125144
db_engine, service_run_id=service_run_id
126145
)

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ async def list_licensed_items_checkouts(
6060
licensed_item_id=licensed_item_checkout_db.licensed_item_id,
6161
wallet_id=licensed_item_checkout_db.wallet_id,
6262
user_id=licensed_item_checkout_db.user_id,
63+
user_email=licensed_item_checkout_db.user_email,
6364
product_name=licensed_item_checkout_db.product_name,
6465
service_run_id=licensed_item_checkout_db.service_run_id,
6566
started_at=licensed_item_checkout_db.started_at,
@@ -90,6 +91,7 @@ async def get_licensed_item_checkout(
9091
licensed_item_id=licensed_item_checkout_db.licensed_item_id,
9192
wallet_id=licensed_item_checkout_db.wallet_id,
9293
user_id=licensed_item_checkout_db.user_id,
94+
user_email=licensed_item_checkout_db.user_email,
9395
product_name=licensed_item_checkout_db.product_name,
9496
service_run_id=licensed_item_checkout_db.service_run_id,
9597
started_at=licensed_item_checkout_db.started_at,
@@ -171,6 +173,7 @@ async def checkout_licensed_item(
171173
licensed_item_id=licensed_item_checkout_db.licensed_item_id,
172174
wallet_id=licensed_item_checkout_db.wallet_id,
173175
user_id=licensed_item_checkout_db.user_id,
176+
user_email=licensed_item_checkout_db.user_email,
174177
product_name=licensed_item_checkout_db.product_name,
175178
service_run_id=licensed_item_checkout_db.service_run_id,
176179
started_at=licensed_item_checkout_db.started_at,
@@ -200,6 +203,7 @@ async def release_licensed_item(
200203
licensed_item_id=licensed_item_checkout_db.licensed_item_id,
201204
wallet_id=licensed_item_checkout_db.wallet_id,
202205
user_id=licensed_item_checkout_db.user_id,
206+
user_email=licensed_item_checkout_db.user_email,
203207
product_name=licensed_item_checkout_db.product_name,
204208
service_run_id=licensed_item_checkout_db.service_run_id,
205209
started_at=licensed_item_checkout_db.started_at,

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ async def list_licensed_items_purchases(
6262
expire_at=licensed_item_purchase_db.expire_at,
6363
num_of_seats=licensed_item_purchase_db.num_of_seats,
6464
purchased_by_user=licensed_item_purchase_db.purchased_by_user,
65+
user_email=licensed_item_purchase_db.user_email,
6566
purchased_at=licensed_item_purchase_db.purchased_at,
6667
modified=licensed_item_purchase_db.modified,
6768
)
@@ -96,6 +97,7 @@ async def get_licensed_item_purchase(
9697
expire_at=licensed_item_purchase_db.expire_at,
9798
num_of_seats=licensed_item_purchase_db.num_of_seats,
9899
purchased_by_user=licensed_item_purchase_db.purchased_by_user,
100+
user_email=licensed_item_purchase_db.user_email,
99101
purchased_at=licensed_item_purchase_db.purchased_at,
100102
modified=licensed_item_purchase_db.modified,
101103
)
@@ -120,6 +122,7 @@ async def create_licensed_item_purchase(
120122
expire_at=data.expire_at,
121123
num_of_seats=data.num_of_seats,
122124
purchased_by_user=data.purchased_by_user,
125+
user_email=data.user_email,
123126
purchased_at=data.purchased_at,
124127
)
125128

@@ -169,6 +172,7 @@ async def create_licensed_item_purchase(
169172
expire_at=licensed_item_purchase_db.expire_at,
170173
num_of_seats=licensed_item_purchase_db.num_of_seats,
171174
purchased_by_user=licensed_item_purchase_db.purchased_by_user,
175+
user_email=licensed_item_purchase_db.user_email,
172176
purchased_at=licensed_item_purchase_db.purchased_at,
173177
modified=licensed_item_purchase_db.modified,
174178
)

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,7 @@ async def batch_update_credit_transaction_status_for_in_debt_transactions(
165165
)
166166
async with transaction_context(engine, connection) as conn:
167167
result = await conn.execute(update_stmt)
168-
print(result)
168+
print(result) # MD: Check this one ...
169169

170170

171171
async def sum_wallet_credits(

0 commit comments

Comments
 (0)