Add support for custom time grain aggregation while fetching time series in MDM data provider. (#609)

This commit is contained in:
nmallick1 2020-11-25 10:10:33 -08:00 коммит произвёл GitHub
Родитель 9de0234853
Коммит b60d64e655
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 4AEE18F83AFDEB23
4 изменённых файлов: 63 добавлений и 1 удалений

Просмотреть файл

@ -150,6 +150,23 @@ namespace Diagnostics.DataProviders
return await GetMultipleTimeSeriesAsync(startTimeUtc, endTimeUtc, sampling, new List<Tuple<string, string, IEnumerable<KeyValuePair<string, string>>>> { definition });
}
/// <summary>
/// Gets the time series with specified time granularity.
/// </summary>
/// <param name="startTimeUtc">The start time UTC.</param>
/// <param name="endTimeUtc">The end time UTC.</param>
/// <param name="sampling">The sampling type.</param>
/// <param name="metricNamespace">The metric namespace.</param>
/// <param name="metricName">The metric name.</param>
/// <param name="seriesResolutionInMinutes">The resolution window used to reduce the resolution of the returned series.</param>
/// <param name="dimension">The dimension.</param>
/// <returns>The time series for the given definition.</returns>
public async Task<IEnumerable<DataTable>> GetTimeSeriesAsync(DateTime startTimeUtc, DateTime endTimeUtc, Sampling sampling, string metricNamespace, string metricName, int seriesResolutionInMinutes, IDictionary<string, string> dimension)
{
var definition = Tuple.Create<string, string, IEnumerable<KeyValuePair<string, string>>>(metricNamespace, metricName, dimension);
return await GetMultipleTimeSeriesAsync(startTimeUtc, endTimeUtc, sampling, seriesResolutionInMinutes, new List<Tuple<string, string, IEnumerable<KeyValuePair<string, string>>>> { definition });
}
/// <summary>
/// Gets a list of the time series.
/// </summary>

Просмотреть файл

@ -63,6 +63,19 @@ namespace Diagnostics.DataProviders.Interfaces
/// <returns>The time series for the given definition.</returns>
Task<IEnumerable<DataTable>> GetTimeSeriesAsync(DateTime startTimeUtc, DateTime endTimeUtc, Sampling sampling, string metricNamespace, string metricName, IDictionary<string, string> dimension);
/// <summary>
/// Gets the time series with specified time granularity.
/// </summary>
/// <param name="startTimeUtc">The start time UTC.</param>
/// <param name="endTimeUtc">The end time UTC.</param>
/// <param name="sampling">The sampling type.</param>
/// <param name="metricNamespace">The metric namespace.</param>
/// <param name="metricName">The metric name.</param>
/// <param name="seriesResolutionInMinutes">The resolution window used to reduce the resolution of the returned series.</param>
/// <param name="dimension">The dimension.</param>
/// <returns>The time series for the given definition.</returns>
Task<IEnumerable<DataTable>> GetTimeSeriesAsync(DateTime startTimeUtc, DateTime endTimeUtc, Sampling sampling, string metricNamespace, string metricName, int seriesResolutionInMinutes, IDictionary<string, string> dimension);
/// <summary>
/// Gets a list of the time series.
/// </summary>

Просмотреть файл

@ -45,7 +45,12 @@ namespace Diagnostics.DataProviders
return MakeDependencyCall(DataProvider.GetTimeSeriesAsync(startTimeUtc, endTimeUtc, sampling, metricNamespace, metricName, dimension));
}
public Task<IEnumerable<DataTable>> GetMultipleTimeSeriesAsync(DateTime startTimeUtc, DateTime endTimeUtc, Sampling sampling, int seriesResolutionInMinutes, IEnumerable<Tuple<string, string, IEnumerable<KeyValuePair<string, string>>>> definitions)
public Task<IEnumerable<DataTable>> GetTimeSeriesAsync(DateTime startTimeUtc, DateTime endTimeUtc, Sampling sampling, string metricNamespace, string metricName, int seriesResolutionInMinutes, IDictionary<string, string> dimension)
{
return MakeDependencyCall(DataProvider.GetTimeSeriesAsync(startTimeUtc, endTimeUtc, sampling, metricNamespace, metricName, seriesResolutionInMinutes, dimension));
}
public Task<IEnumerable<DataTable>> GetMultipleTimeSeriesAsync(DateTime startTimeUtc, DateTime endTimeUtc, Sampling sampling, int seriesResolutionInMinutes, IEnumerable<Tuple<string, string, IEnumerable<KeyValuePair<string, string>>>> definitions)
{
return MakeDependencyCall(DataProvider.GetMultipleTimeSeriesAsync(startTimeUtc, endTimeUtc, sampling, seriesResolutionInMinutes, definitions));
}

Просмотреть файл

@ -171,6 +171,33 @@ namespace Diagnostics.Tests.DataProviderTests
}
}
/// <summary>
/// Mdm data provider test for custom time grain aggregation
/// </summary>
[Fact]
public async void TestMdmGetTimeSeriesValuesCustomTimeGrainAsync()
{
var metadata = ScriptTestDataHelper.GetRandomMetadata();
metadata.ScriptText = @"
public async static Task<IEnumerable<DataTable>> Run(DataProviders dataProviders) {
var dimensions = new Dictionary<string, string> { { ""StampName"", ""kudu1"" } };
return await dataProviders.Mdm(MdmDataSource.Antares).GetTimeSeriesAsync(DateTime.UtcNow.AddMinutes(-10), DateTime.UtcNow, Sampling.Average | Sampling.Max | Sampling.Count, ""Microsoft/Web/WebApps"", ""CpuTime"", 5, dimensions);
}";
var configFactory = new MockDataProviderConfigurationFactory();
var config = configFactory.LoadConfigurations();
var dataProviders = new DataProviders.DataProviders(new DataProviderContext(config, Guid.NewGuid().ToString()));
using (EntityInvoker invoker = new EntityInvoker(metadata, ScriptHelper.GetFrameworkReferences(), ScriptHelper.GetFrameworkImports()))
{
await invoker.InitializeEntryPointAsync();
var result = await invoker.Invoke(new object[] { dataProviders }) as IEnumerable<DataTable>;
Assert.NotNull(result);
}
}
/// <summary>
/// Kusto data provider test
/// </summary>