Analytics
Utility class to support analytics tracking.
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading.Tasks;
namespace Dynamo.Logging
{
public static class Analytics
{
private class Dummy : IDisposable
{
public void Dispose()
{
}
}
internal static IAnalyticsClient client;
public static bool DisableAnalytics { get; set; }
internal static bool IsEnabled => client != null;
public static bool ReportingAnalytics {
get {
if (client != null)
return client.ReportingAnalytics;
return false;
}
}
internal static void Start(IAnalyticsClient client)
{
Analytics.client = client;
client.Start();
}
internal static void ShutDown()
{
if (client != null)
client.ShutDown();
client = null;
}
public static void TrackStartupTime(string productName, TimeSpan time, string description = "")
{
if (client != null) {
string description2 = string.IsNullOrEmpty(description) ? productName : $"{productName}""{description}";
client.TrackTimedEvent(Categories.Performance, "Startup", time, description2);
}
}
public static void TrackEvent(Actions action, Categories category, string description = "", int? value = default(int?))
{
if (client != null)
client.TrackEvent(action, category, description, value);
}
public static void TrackPreference(string name, string stringValue, int? metricValue)
{
if (client != null)
client.TrackPreference(name, stringValue, metricValue);
}
public static void TrackTimedEvent(Categories category, string variable, TimeSpan time, string description = "")
{
if (client != null)
client.TrackTimedEvent(category, variable, time, description);
}
public static void TrackScreenView(string viewName)
{
if (client != null)
client.TrackScreenView(viewName);
}
public static void TrackActivityStatus(string activityType)
{
if (client != null)
client.TrackActivityStatus(activityType);
}
public static void TrackException(Exception ex, bool isFatal)
{
if (client != null)
client.TrackException(ex, isFatal);
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.AppendLine("Type: " + ex.GetType()?.ToString());
stringBuilder.AppendLine("Fatal: " + isFatal.ToString());
stringBuilder.AppendLine("Message: " + ex.Message);
stringBuilder.AppendLine("StackTrace: " + ex.StackTrace);
LogPiiInfo("Analytics.TrackException", stringBuilder.ToString());
}
public static IDisposable CreateTimedEvent(Categories category, string variable, string description = "", int? value = default(int?))
{
if (client == null)
return new Dummy();
return client.CreateTimedEvent(category, variable, description, value);
}
public static Task<IDisposable> CreateTaskTimedEvent(Categories category, string variable, string description = "", int? value = default(int?))
{
if (client == null)
return Task.FromResult((IDisposable)new Dummy());
return client.CreateTaskTimedEvent(category, variable, description, value);
}
public static IDisposable TrackCommandEvent(string name, string description = "", int? value = default(int?))
{
if (client == null)
return new Dummy();
return client.CreateCommandEvent(name, description, value);
}
public static Task<IDisposable> TrackTaskCommandEvent(string name, string description = "", int? value = default(int?), IDictionary<string, object> parameters = null)
{
if (client == null)
return Task.FromResult((IDisposable)new Dummy());
return client.CreateTaskCommandEvent(name, description, value, parameters);
}
public static void EndTaskCommandEvent(Task<IDisposable> taskEvent)
{
client?.EndEventTask(taskEvent);
}
public static IDisposable TrackFileOperationEvent(string filepath, Actions operation, int size, string description = "")
{
if (client == null)
return new Dummy();
return client.TrackFileOperationEvent(filepath, operation, size, description);
}
public static Task<IDisposable> TrackTaskFileOperationEvent(string filepath, Actions operation, int size, string description = "")
{
if (client == null)
return Task.FromResult((IDisposable)new Dummy());
return client.TrackTaskFileOperationEvent(filepath, operation, size, description);
}
[Obsolete("Function will be removed in Dynamo 3.0 as Dynamo will no longer support GA instrumentation.")]
public static void LogPiiInfo(string tag, string data)
{
if (client != null)
client.LogPiiInfo(tag, data);
}
}
}