From 80b5982424bf3580ac835fe4dbabe30cf82e93ec Mon Sep 17 00:00:00 2001 From: Jedd Morgan <45512892+JR-Morgan@users.noreply.github.com> Date: Thu, 4 Sep 2025 16:17:41 +0100 Subject: [PATCH] feat(fic): Add Metrics tracking (#447) --- src/speckleifc/__main__.py | 9 ++++++++- src/speckleifc/importer.py | 1 + src/speckleifc/main.py | 17 +++++++++++------ 3 files changed, 20 insertions(+), 7 deletions(-) diff --git a/src/speckleifc/__main__.py b/src/speckleifc/__main__.py index bf8ea84..ea3e4bc 100644 --- a/src/speckleifc/__main__.py +++ b/src/speckleifc/__main__.py @@ -6,6 +6,7 @@ from os import getenv from speckleifc.main import open_and_convert_file from specklepy.core.api.client import SpeckleClient +from specklepy.logging import metrics def cmd_line_import() -> None: @@ -27,12 +28,18 @@ def cmd_line_import() -> None: assert TOKEN is not None SERVER_URL = getenv("SPECKLE_SERVER_URL") or "http://127.0.0.1:3000" + metrics.set_host_app( + "ifc", + ) + try: client = SpeckleClient(SERVER_URL, use_ssl=not SERVER_URL.startswith("http://")) client.authenticate_with_token(TOKEN) + project = client.project.get(args.project_id) + version = open_and_convert_file( args.file_path, - args.project_id, + project, args.version_message, args.model_id, client, diff --git a/src/speckleifc/importer.py b/src/speckleifc/importer.py index d68e76c..2bdfe4f 100644 --- a/src/speckleifc/importer.py +++ b/src/speckleifc/importer.py @@ -100,5 +100,6 @@ class ImportJob: tree["renderMaterialProxies"] = list( self._render_material_manager.render_material_proxies.values() ) + tree["version"] = 3 return tree diff --git a/src/speckleifc/main.py b/src/speckleifc/main.py index 165af75..6052e1d 100644 --- a/src/speckleifc/main.py +++ b/src/speckleifc/main.py @@ -4,18 +4,18 @@ from speckleifc.ifc_geometry_processing import open_ifc from speckleifc.importer import ImportJob from specklepy.core.api.client import SpeckleClient from specklepy.core.api.inputs.version_inputs import CreateVersionInput -from specklepy.core.api.models.current import Version +from specklepy.core.api.models.current import Project, Version from specklepy.core.api.operations import send +from specklepy.logging import metrics from specklepy.transports.server import ServerTransport def open_and_convert_file( file_path: str, - project_id: str, + project: Project, version_message: str | None, model_id: str, client: SpeckleClient, - # account: Account, ) -> Version: start = time.time() very_start = start @@ -23,7 +23,7 @@ def open_and_convert_file( account = client.account server_url = account.serverInfo.url assert server_url - remote_transport = ServerTransport(project_id, account=account) + remote_transport = ServerTransport(project.id, account=account) ifc_file = open_ifc(file_path) # pyright: ignore[reportUnknownVariableType] import_job = ImportJob(ifc_file) # pyright: ignore[reportUnknownArgumentType] @@ -41,9 +41,9 @@ def open_and_convert_file( create_version = CreateVersionInput( object_id=root_id, model_id=model_id, - project_id=project_id, + project_id=project.id, message=version_message, - source_application="IFC", + source_application="ifc", ) version = client.version.create(create_version) end = time.time() @@ -52,4 +52,9 @@ def open_and_convert_file( print(f"Total time (to commit): {(end - very_start) * 1000}ms") del ifc_file + custom_properties = {"ui": "dui3", "actionSource": "import"} + if project.workspace_id: + custom_properties["workspace_id"] = project.workspace_id + metrics.track(metrics.SEND, account, custom_properties) + return version