/Modules/PackageManagerUI/Editor/Services/Analytics/PackageManagerWindowAnalytics.cs

https://github.com/Unity-Technologies/UnityCsReference · C# · 57 lines · 46 code · 7 blank · 4 comment · 1 complexity · 570a0c9e45e10ce1ed1ce829b2b4ec7a MD5 · raw file

  1. // Unity C# reference source
  2. // Copyright (c) Unity Technologies. For terms of use, see
  3. // https://unity3d.com/legal/licenses/Unity_Reference_Only_License
  4. using System;
  5. using System.Text.RegularExpressions;
  6. namespace UnityEditor.PackageManager.UI
  7. {
  8. [Serializable]
  9. internal struct PackageManagerWindowAnalytics
  10. {
  11. public string action;
  12. public string package_id;
  13. public string search_text;
  14. public string filter_name;
  15. public bool window_docked;
  16. public bool dependencies_visible;
  17. public bool preview_visible;
  18. public long t_since_start; // in microseconds
  19. public long ts; // in milliseconds
  20. public static void Setup()
  21. {
  22. int maxEventsPerHour = 1000;
  23. int maxNumberOfElementInStruct = 100;
  24. string vendorKey = "unity.package-manager-ui";
  25. EditorAnalytics.RegisterEventWithLimit("packageManagerWindowUserAction", maxEventsPerHour, maxNumberOfElementInStruct, vendorKey);
  26. }
  27. public static void SendEvent(string action, string packageId = null)
  28. {
  29. // remove sensitive part of the id: file path or url is not tracked
  30. if (!string.IsNullOrEmpty(packageId))
  31. packageId = Regex.Replace(packageId, "(?<package>[^@]+)@(?<protocol>[^:]+):.+", "${package}@${protocol}");
  32. var packageFiltering = ServicesContainer.instance.Resolve<PackageFiltering>();
  33. var packageManagerPrefs = ServicesContainer.instance.Resolve<PackageManagerPrefs>();
  34. var settingsProxy = ServicesContainer.instance.Resolve<PackageManagerProjectSettingsProxy>();
  35. var parameters = new PackageManagerWindowAnalytics
  36. {
  37. action = action,
  38. package_id = packageId ?? string.Empty,
  39. search_text = packageFiltering.currentSearchText,
  40. filter_name = packageFiltering.currentFilterTab.ToString(),
  41. window_docked = EditorWindow.GetWindowDontShow<PackageManagerWindow>()?.docked ?? false,
  42. dependencies_visible = packageManagerPrefs.showPackageDependencies,
  43. preview_visible = settingsProxy.enablePreviewPackages,
  44. t_since_start = (long)(EditorApplication.timeSinceStartup * 1E6),
  45. ts = DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond
  46. };
  47. EditorAnalytics.SendEventWithLimit("packageManagerWindowUserAction", parameters);
  48. }
  49. }
  50. }