mirror of
https://github.com/Ultimaker/Cura.git
synced 2025-07-06 22:47:29 -06:00
Changed endpoint and (pre-)flatten/massage data to be more inline with db.
Move calculations out of server, into Cura. CURA-12262
This commit is contained in:
parent
dcbd40ca7d
commit
48bfed0643
1 changed files with 42 additions and 3 deletions
|
@ -1,11 +1,12 @@
|
||||||
# Copyright (c) 2023 UltiMaker
|
# Copyright (c) 2023 UltiMaker
|
||||||
# Cura is released under the terms of the LGPLv3 or higher.
|
# Cura is released under the terms of the LGPLv3 or higher.
|
||||||
|
import datetime
|
||||||
|
|
||||||
import json
|
import json
|
||||||
import os
|
import os
|
||||||
import platform
|
import platform
|
||||||
import time
|
import time
|
||||||
from typing import Optional, Set, TYPE_CHECKING
|
from typing import Any, Optional, Set, TYPE_CHECKING
|
||||||
|
|
||||||
from PyQt6.QtCore import pyqtSlot, QObject
|
from PyQt6.QtCore import pyqtSlot, QObject
|
||||||
from PyQt6.QtNetwork import QNetworkRequest
|
from PyQt6.QtNetwork import QNetworkRequest
|
||||||
|
@ -33,7 +34,18 @@ class SliceInfo(QObject, Extension):
|
||||||
no model files are being sent (Just a SHA256 hash of the model).
|
no model files are being sent (Just a SHA256 hash of the model).
|
||||||
"""
|
"""
|
||||||
|
|
||||||
info_url = "https://stats.ultimaker.com/api/cura"
|
info_url = "https://statistics.ultimaker.com/api/v2/cura/slice"
|
||||||
|
|
||||||
|
_adjust_flattened_names = {
|
||||||
|
"extruders_extruder": "extruders",
|
||||||
|
"extruders_settings": "extruders",
|
||||||
|
"models_model": "models",
|
||||||
|
"models_transformation_data": "models_transformation",
|
||||||
|
"print_settings_": "",
|
||||||
|
"print_times": "print_time",
|
||||||
|
"active_machine_": "",
|
||||||
|
"slice_uuid": "slice_id",
|
||||||
|
}
|
||||||
|
|
||||||
def __init__(self, parent = None):
|
def __init__(self, parent = None):
|
||||||
QObject.__init__(self, parent)
|
QObject.__init__(self, parent)
|
||||||
|
@ -112,6 +124,26 @@ class SliceInfo(QObject, Extension):
|
||||||
|
|
||||||
return list(sorted(user_modified_setting_keys))
|
return list(sorted(user_modified_setting_keys))
|
||||||
|
|
||||||
|
def _flattenData(self, data: Any, result: dict, current_flat_key: Optional[str] = None, lift_list: bool = False) -> None:
|
||||||
|
if isinstance(data, dict):
|
||||||
|
for key, value in data.items():
|
||||||
|
total_flat_key = key if current_flat_key is None else f"{current_flat_key}_{key}"
|
||||||
|
self._flattenData(value, result, total_flat_key, lift_list)
|
||||||
|
elif isinstance(data, list):
|
||||||
|
for item in data:
|
||||||
|
self._flattenData(item, result, current_flat_key, True)
|
||||||
|
else:
|
||||||
|
actual_flat_key = current_flat_key.lower()
|
||||||
|
for key, value in self._adjust_flattened_names.items():
|
||||||
|
if actual_flat_key.startswith(key):
|
||||||
|
actual_flat_key = actual_flat_key.replace(key, value)
|
||||||
|
if lift_list:
|
||||||
|
if actual_flat_key not in result:
|
||||||
|
result[actual_flat_key] = []
|
||||||
|
result[actual_flat_key].append(data)
|
||||||
|
else:
|
||||||
|
result[actual_flat_key] = data
|
||||||
|
|
||||||
def _onWriteStarted(self, output_device):
|
def _onWriteStarted(self, output_device):
|
||||||
try:
|
try:
|
||||||
if not self._application.getPreferences().getValue("info/send_slice_info"):
|
if not self._application.getPreferences().getValue("info/send_slice_info"):
|
||||||
|
@ -126,7 +158,7 @@ class SliceInfo(QObject, Extension):
|
||||||
|
|
||||||
data = dict() # The data that we're going to submit.
|
data = dict() # The data that we're going to submit.
|
||||||
data["time_stamp"] = time.time()
|
data["time_stamp"] = time.time()
|
||||||
data["schema_version"] = 0
|
data["schema_version"] = 1000
|
||||||
data["cura_version"] = self._application.getVersion()
|
data["cura_version"] = self._application.getVersion()
|
||||||
data["cura_build_type"] = ApplicationMetadata.CuraBuildType
|
data["cura_build_type"] = ApplicationMetadata.CuraBuildType
|
||||||
org_id = user_profile.get("organization_id", None) if user_profile else None
|
org_id = user_profile.get("organization_id", None) if user_profile else None
|
||||||
|
@ -298,6 +330,13 @@ class SliceInfo(QObject, Extension):
|
||||||
"time_backend": int(round(time_backend)),
|
"time_backend": int(round(time_backend)),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Massage data into format used in the DB:
|
||||||
|
flat_data = dict()
|
||||||
|
self._flattenData(data, flat_data)
|
||||||
|
data = flat_data
|
||||||
|
timestamp = datetime.datetime.utcfromtimestamp(float(data["time_stamp"]))
|
||||||
|
data["timestamp"] = f"{str(timestamp)} UTC"
|
||||||
|
|
||||||
# Convert data to bytes
|
# Convert data to bytes
|
||||||
binary_data = json.dumps(data).encode("utf-8")
|
binary_data = json.dumps(data).encode("utf-8")
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue