Açıklama Yok
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

TelemetryMetricsInstanceWrapper.cs 2.5KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. using System;
  2. using Uniject;
  3. using Unity.Services.Core.Telemetry.Internal;
  4. namespace UnityEngine.Purchasing.Telemetry
  5. {
  6. class TelemetryMetricsInstanceWrapper : ITelemetryMetricsInstanceWrapper
  7. {
  8. IMetrics m_Instance;
  9. ILogger m_Logger;
  10. IUtil m_Util;
  11. readonly TelemetryQueue<TelemetryMetricParams> m_Queue;
  12. public TelemetryMetricsInstanceWrapper(ILogger logger, IUtil util)
  13. {
  14. m_Logger = logger;
  15. m_Util = util;
  16. m_Queue = new TelemetryQueue<TelemetryMetricParams>(SendMetricOnMainThread);
  17. }
  18. public void SetMetricsInstance(IMetrics metricsInstance)
  19. {
  20. m_Instance = metricsInstance;
  21. if (m_Instance != null)
  22. {
  23. m_Queue.SendQueuedEvents();
  24. }
  25. }
  26. public void SendMetric(TelemetryMetricTypes metricType, string metricName, double metricTimeSeconds)
  27. {
  28. var telemetryMetricParams = new TelemetryMetricParams(metricType, metricName, metricTimeSeconds);
  29. if (m_Instance != null)
  30. {
  31. SendMetricOnMainThread(telemetryMetricParams);
  32. }
  33. else
  34. {
  35. m_Queue.QueueEvent(telemetryMetricParams);
  36. }
  37. }
  38. void SendMetricOnMainThread(TelemetryMetricParams metricParams)
  39. {
  40. m_Util.RunOnMainThread(() => SendMetricByTypeAndCatchExceptions(metricParams));
  41. }
  42. void SendMetricByTypeAndCatchExceptions(TelemetryMetricParams metricParams)
  43. {
  44. try
  45. {
  46. SendMetricByType(metricParams);
  47. }
  48. catch (Exception exception)
  49. {
  50. m_Logger.LogIAPError($"An exception occurred when sending metric {metricParams.name} of type {metricParams.type}. Message: {exception.Message}");
  51. }
  52. }
  53. void SendMetricByType(TelemetryMetricParams metricParams)
  54. {
  55. switch (metricParams.type)
  56. {
  57. case TelemetryMetricTypes.Gauge:
  58. m_Instance.SendGaugeMetric(metricParams.name, metricParams.timeSeconds);
  59. break;
  60. case TelemetryMetricTypes.Histogram:
  61. m_Instance.SendHistogramMetric(metricParams.name, metricParams.timeSeconds);
  62. break;
  63. case TelemetryMetricTypes.Sum:
  64. m_Instance.SendSumMetric(metricParams.name, metricParams.timeSeconds);
  65. break;
  66. }
  67. }
  68. }
  69. }