SumMetricFormatter
using Relativity.Telemetry.DataContracts.Shared;
using System;
using System.Collections.Generic;
namespace Monitoring.Sinks
{
public class SumMetricFormatter : ISumMetricFormatter
{
public List<MetricRef> GenerateSumMetrics(MetricBase metric)
{
Type type = metric.GetType();
if (!(type == typeof(MetricJobStarted))) {
if (!(type == typeof(MetricJobEndReport))) {
if (!(type == typeof(MetricAuthenticationType)))
return new List<MetricRef>();
return GenerateSumMetricAuthenticationType((MetricAuthenticationType)metric);
}
return GenerateSumMetricJobEndReport((MetricJobEndReport)metric);
}
return GenerateSumMetricJobStarted((MetricJobStarted)metric);
}
List<MetricRef> ISumMetricFormatter.GenerateSumMetrics(MetricBase metric)
{
return this.GenerateSumMetrics(metric);
}
private List<MetricRef> GenerateSumMetricJobStarted(MetricJobStarted metric)
{
List<MetricRef> list = new List<MetricRef>();
list.Add(new MetricRef(FormatSumBucketName("RDC.Performance.JobStartedCount", metric.TransferDirection, metric.TransferMode), (Guid?)IntegerToGuid(metric.WorkspaceID), metric.CorrelationID, 0, (object)1));
return list;
}
private List<MetricRef> GenerateSumMetricJobEndReport(MetricJobEndReport metric)
{
List<MetricRef> list = new List<MetricRef>();
list.Add(new MetricRef(FormatSumBucketName("RDC.Usage.TotalRecords", metric.TransferDirection, metric.TransferMode), (Guid?)IntegerToGuid(metric.WorkspaceID), metric.CorrelationID, 3, (object)metric.TotalRecords));
list.Add(new MetricRef(FormatSumBucketName("RDC.Usage.CompletedRecords", metric.TransferDirection, metric.TransferMode), (Guid?)IntegerToGuid(metric.WorkspaceID), metric.CorrelationID, 3, (object)metric.CompletedRecords));
list.Add(new MetricRef(FormatSumBucketName("RDC.Usage.JobSize", metric.TransferDirection, metric.TransferMode), (Guid?)IntegerToGuid(metric.WorkspaceID), metric.CorrelationID, 3, (object)metric.TotalSizeBytes));
list.Add(new MetricRef(FormatSumBucketName("RDC.Performance.Throughput", metric.TransferDirection, metric.TransferMode), (Guid?)IntegerToGuid(metric.WorkspaceID), metric.CorrelationID, 5, (object)metric.ThroughputRecordsPerSecond));
list.Add(new MetricRef(FormatSumBucketName("RDC.Performance.ThroughputBytes", metric.TransferDirection, metric.TransferMode), (Guid?)IntegerToGuid(metric.WorkspaceID), metric.CorrelationID, 5, (object)metric.ThroughputBytesPerSecond));
list.Add(new MetricRef(FormatSumBucketName(GetBucketPrefixFromJobStatus(metric.JobStatus), metric.TransferDirection, metric.TransferMode), (Guid?)IntegerToGuid(metric.WorkspaceID), metric.CorrelationID, 0, (object)1));
List<MetricRef> list2 = list;
if (metric.TransferDirection == TelemetryConstants.TransferDirection.Import)
list2.Add(new MetricRef(string.Format("{0}.{1}", "RDC.Performance.SqlBulkImportThroughput", metric.ImportObjectType), (Guid?)IntegerToGuid(metric.WorkspaceID), metric.CorrelationID, 5, (object)metric.SqlBulkLoadThroughputRecordsPerSecond));
if (metric.TransferDirection == TelemetryConstants.TransferDirection.Export) {
list2.Add(new MetricRef(FormatSumBucketName("RDC.Usage.CompletedFiles", metric.TransferMode, "Native"), (Guid?)IntegerToGuid(metric.WorkspaceID), metric.CorrelationID, 3, (object)metric.ExportedNativeCount));
list2.Add(new MetricRef(FormatSumBucketName("RDC.Usage.CompletedFiles", metric.TransferMode, "Pdf"), (Guid?)IntegerToGuid(metric.WorkspaceID), metric.CorrelationID, 3, (object)metric.ExportedPdfCount));
list2.Add(new MetricRef(FormatSumBucketName("RDC.Usage.CompletedFiles", metric.TransferMode, "Image"), (Guid?)IntegerToGuid(metric.WorkspaceID), metric.CorrelationID, 3, (object)metric.ExportedImageCount));
list2.Add(new MetricRef(FormatSumBucketName("RDC.Usage.CompletedFiles", metric.TransferMode, "LongText"), (Guid?)IntegerToGuid(metric.WorkspaceID), metric.CorrelationID, 3, (object)metric.ExportedLongTextCount));
}
return list2;
}
private List<MetricRef> GenerateSumMetricAuthenticationType(MetricAuthenticationType metric)
{
return new List<MetricRef> {
new MetricRef(string.Format("{0}.{1}.{2}", "RDC.IAPI.Authentication", metric.SystemType, metric.AuthenticationMethod), (Guid?)Guid.Empty, metric.CorrelationID, 0, (object)1)
};
}
private static string FormatSumBucketName(params object[] parts)
{
return string.Join(".", parts);
}
private Guid IntegerToGuid(int value)
{
return new Guid(checked((uint)value).ToString().PadRight(32, 'f').Substring(0, 32));
}
private string GetBucketPrefixFromJobStatus(TelemetryConstants.JobStatus jobStatus)
{
switch (jobStatus) {
case TelemetryConstants.JobStatus.Completed:
return "RDC.Performance.JobCompletedCount";
case TelemetryConstants.JobStatus.Failed:
return "RDC.Performance.JobFailedCount";
case TelemetryConstants.JobStatus.Cancelled:
return "RDC.Performance.JobCancelledCount";
default:
return jobStatus.ToString();
}
}
}
}