File: Environment\TelemetryMessage.cs
Web Access
Project: src\src\Microsoft.ML.Core\Microsoft.ML.Core.csproj (Microsoft.ML.Core)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
 
using System;
using System.Collections.Generic;
using Microsoft.ML.Runtime;
 
namespace Microsoft.ML;
 
/// <summary>
/// A telemetry message.
/// </summary>
[BestFriend]
internal abstract class TelemetryMessage
{
    public static TelemetryMessage CreateCommand(string commandName, string commandText)
    {
        return new TelemetryTrace(commandText, commandName, "Command");
    }
    public static TelemetryMessage CreateTrainer(string trainerName, string trainerParams)
    {
        return new TelemetryTrace(trainerParams, trainerName, "Trainer");
    }
    public static TelemetryMessage CreateTransform(string transformName, string transformParams)
    {
        return new TelemetryTrace(transformParams, transformName, "Transform");
    }
    public static TelemetryMessage CreateMetric(string metricName, double metricValue, Dictionary<string, string> properties = null)
    {
        return new TelemetryMetric(metricName, metricValue, properties);
    }
    public static TelemetryMessage CreateException(Exception exception)
    {
        return new TelemetryException(exception);
    }
}
 
/// <summary>
/// Message with one long text and bunch of small properties (limit on value is ~1020 chars)
/// </summary>
[BestFriend]
internal sealed class TelemetryTrace : TelemetryMessage
{
    public readonly string Text;
    public readonly string Name;
    public readonly string Type;
 
    public TelemetryTrace(string text, string name, string type)
    {
        Text = text;
        Name = name;
        Type = type;
    }
}
 
/// <summary>
/// Message with exception
/// </summary>
[BestFriend]
internal sealed class TelemetryException : TelemetryMessage
{
    public readonly Exception Exception;
    public TelemetryException(Exception exception)
    {
        Contracts.AssertValue(exception);
        Exception = exception;
    }
}
 
/// <summary>
/// Message with metric value and it properites
/// </summary>
[BestFriend]
internal sealed class TelemetryMetric : TelemetryMessage
{
    public readonly string Name;
    public readonly double Value;
    public readonly IDictionary<string, string> Properties;
    public TelemetryMetric(string name, double value, IDictionary<string, string> properties = null)
    {
        Name = name;
        Value = value;
        Properties = properties;
    }
}