1010from flask import current_app
1111from sqlalchemy .sql .operators import is_
1212from sqlalchemy import inspect
13+ from sqlalchemy .sql import select , func
1314
1415from .models import MerginInfo , MerginStatistics , ServerCallhomeData
1516from ..celery import celery
@@ -22,21 +23,25 @@ def get_callhome_data(info: MerginInfo | None = None) -> ServerCallhomeData:
2223 """
2324 Get data about server to send to callhome service
2425 """
25- last_change_item = (
26- db . session . query (Project .updated ).order_by (Project .updated .desc ()). first ( )
27- )
26+ last_change = db . session . scalars (
27+ select (Project .updated ).order_by (Project .updated .desc ())
28+ ). first ()
2829 service_uuid = str (info .service_id ) if info else None
2930 data = ServerCallhomeData (
3031 service_uuid = service_uuid ,
3132 url = current_app .config ["MERGIN_BASE_URL" ],
3233 contact_email = current_app .config ["CONTACT_EMAIL" ],
3334 licence = current_app .config ["SERVER_TYPE" ],
34- projects_count = Project .query .filter (Project .removed_at .is_ (None )).count (),
35- users_count = User .query .filter (
36- is_ (User .username .ilike ("deleted_%" ), False )
37- ).count (),
35+ projects_count = db .session .scalar (
36+ select (func .count (Project .id )).where (is_ (Project .removed_at , None ))
37+ ),
38+ users_count = db .session .scalar (
39+ select (func .count (User .id )).where (
40+ is_ (User .username .ilike ("deleted_%" ), False )
41+ )
42+ ),
3843 workspaces_count = current_app .ws_handler .workspace_count (),
39- last_change = str (last_change_item . updated ) + "Z" if last_change_item else "" ,
44+ last_change = str (last_change ) + "Z" if last_change else "" ,
4045 server_version = current_app .config ["VERSION" ],
4146 monthly_contributors = current_app .ws_handler .monthly_contributors_count (),
4247 editors = current_app .ws_handler .server_editors_count (),
@@ -48,7 +53,7 @@ def get_callhome_data(info: MerginInfo | None = None) -> ServerCallhomeData:
4853@celery .task (ignore_result = True )
4954def save_statistics ():
5055 """Save statistics about usage."""
51- info = MerginInfo . query . first ()
56+ info = db . session . execute ( select ( MerginInfo )). scalar_one_or_none ()
5257 data = get_callhome_data (info )
5358 stat = MerginStatistics (data = data )
5459 db .session .add (stat )
@@ -77,7 +82,7 @@ def send_statistics():
7782 logging .warning ("Database not initialized" )
7883 return
7984
80- info = MerginInfo . query . first ()
85+ info = db . session . execute ( select ( MerginInfo )). scalar_one_or_none ()
8186 if not info :
8287 # create new info with random service id
8388 service_id = current_app .config .get ("SERVICE_ID" , None )
0 commit comments