From c5836e9efb7e9f2ded9855e6a82c58d9a7b77c5f Mon Sep 17 00:00:00 2001 From: qinyouzeng Date: Tue, 14 Jun 2022 16:47:56 +0800 Subject: [PATCH 01/48] feat: add promethus http api query client --- .../Enums/ResultStatuses.cs | 11 ++++++ .../Enums/ResultTypes.cs | 12 ++++++ .../IMasaPromethusClient.cs | 19 ++++++++++ .../Masa.Utils.Data.Promethus.csproj | 9 +++++ .../MasaPromethusClient.cs | 37 +++++++++++++++++++ .../Exemplar/ResponseExemplarResultModel.cs | 25 +++++++++++++ .../MetaData/ResponseLabelResultModel.cs | 9 +++++ .../MetaData/ResponseSerieResultModel.cs | 9 +++++ .../Query/ResponseQueryResultCommonModel.cs | 9 +++++ .../Query/ResponseQueryResultDataModel.cs | 25 +++++++++++++ .../Model/Reponse/ResponseResultBaseModel.cs | 15 ++++++++ .../Request/RequestMetaDataQueryModel.cs | 13 +++++++ .../Model/Request/RequestQueryModel.cs | 26 +++++++++++++ Masa.Utils.Data.Promethus/_import.cs | 5 +++ Masa.Utils.sln | 7 ++++ 15 files changed, 231 insertions(+) create mode 100644 Masa.Utils.Data.Promethus/Enums/ResultStatuses.cs create mode 100644 Masa.Utils.Data.Promethus/Enums/ResultTypes.cs create mode 100644 Masa.Utils.Data.Promethus/IMasaPromethusClient.cs create mode 100644 Masa.Utils.Data.Promethus/Masa.Utils.Data.Promethus.csproj create mode 100644 Masa.Utils.Data.Promethus/MasaPromethusClient.cs create mode 100644 Masa.Utils.Data.Promethus/Model/Reponse/Exemplar/ResponseExemplarResultModel.cs create mode 100644 Masa.Utils.Data.Promethus/Model/Reponse/MetaData/ResponseLabelResultModel.cs create mode 100644 Masa.Utils.Data.Promethus/Model/Reponse/MetaData/ResponseSerieResultModel.cs create mode 100644 Masa.Utils.Data.Promethus/Model/Reponse/Query/ResponseQueryResultCommonModel.cs create mode 100644 Masa.Utils.Data.Promethus/Model/Reponse/Query/ResponseQueryResultDataModel.cs create mode 100644 Masa.Utils.Data.Promethus/Model/Reponse/ResponseResultBaseModel.cs create mode 100644 Masa.Utils.Data.Promethus/Model/Request/RequestMetaDataQueryModel.cs create mode 100644 Masa.Utils.Data.Promethus/Model/Request/RequestQueryModel.cs create mode 100644 Masa.Utils.Data.Promethus/_import.cs diff --git a/Masa.Utils.Data.Promethus/Enums/ResultStatuses.cs b/Masa.Utils.Data.Promethus/Enums/ResultStatuses.cs new file mode 100644 index 0000000..10bea07 --- /dev/null +++ b/Masa.Utils.Data.Promethus/Enums/ResultStatuses.cs @@ -0,0 +1,11 @@ +// Copyright (c) MASA Stack All rights reserved. +// Licensed under the MIT License. See LICENSE.txt in the project root for license information. + +namespace Masa.Utils.Data.Promethus.Enums; + +public enum ResultStatuses +{ + Success, + + Error +} diff --git a/Masa.Utils.Data.Promethus/Enums/ResultTypes.cs b/Masa.Utils.Data.Promethus/Enums/ResultTypes.cs new file mode 100644 index 0000000..6d4a855 --- /dev/null +++ b/Masa.Utils.Data.Promethus/Enums/ResultTypes.cs @@ -0,0 +1,12 @@ +// Copyright (c) MASA Stack All rights reserved. +// Licensed under the MIT License. See LICENSE.txt in the project root for license information. + +namespace Masa.Utils.Data.Promethus.Enums; + +public enum ResultTypes +{ + Matrix, + Vector, + Scalar, + String +} diff --git a/Masa.Utils.Data.Promethus/IMasaPromethusClient.cs b/Masa.Utils.Data.Promethus/IMasaPromethusClient.cs new file mode 100644 index 0000000..f526f52 --- /dev/null +++ b/Masa.Utils.Data.Promethus/IMasaPromethusClient.cs @@ -0,0 +1,19 @@ +// Copyright (c) MASA Stack All rights reserved. +// Licensed under the MIT License. See LICENSE.txt in the project root for license information. + +namespace Masa.Utils.Data.Promethus; + +internal interface IMasaPromethusClient +{ + Task QueryAsync(RequestQueryModel query); + + Task QueryRangeAsync(RequestQueryRangeModel query); + + Task SeriesAsync(RequestMetaDataQueryModel query); + + Task LabelsQueryAsync(RequestMetaDataQueryModel query); + + Task LabelValuesQueryAsync(RequestMetaDataQueryModel query); + + Task ExemplarQueryAsync(RequestQueryModel query); +} diff --git a/Masa.Utils.Data.Promethus/Masa.Utils.Data.Promethus.csproj b/Masa.Utils.Data.Promethus/Masa.Utils.Data.Promethus.csproj new file mode 100644 index 0000000..132c02c --- /dev/null +++ b/Masa.Utils.Data.Promethus/Masa.Utils.Data.Promethus.csproj @@ -0,0 +1,9 @@ + + + + net6.0 + enable + enable + + + diff --git a/Masa.Utils.Data.Promethus/MasaPromethusClient.cs b/Masa.Utils.Data.Promethus/MasaPromethusClient.cs new file mode 100644 index 0000000..57ff4ce --- /dev/null +++ b/Masa.Utils.Data.Promethus/MasaPromethusClient.cs @@ -0,0 +1,37 @@ +// Copyright (c) MASA Stack All rights reserved. +// Licensed under the MIT License. See LICENSE.txt in the project root for license information. + +namespace Masa.Utils.Data.Promethus; + +internal class MasaPromethusClient : IMasaPromethusClient +{ + public Task ExemplarQueryAsync(RequestQueryModel query) + { + throw new NotImplementedException(); + } + + public Task LabelsQueryAsync(RequestMetaDataQueryModel query) + { + throw new NotImplementedException(); + } + + public Task LabelValuesQueryAsync(RequestMetaDataQueryModel query) + { + throw new NotImplementedException(); + } + + public Task QueryAsync(RequestQueryModel query) + { + throw new NotImplementedException(); + } + + public Task QueryRangeAsync(RequestQueryRangeModel query) + { + throw new NotImplementedException(); + } + + public Task SeriesAsync(RequestMetaDataQueryModel query) + { + throw new NotImplementedException(); + } +} diff --git a/Masa.Utils.Data.Promethus/Model/Reponse/Exemplar/ResponseExemplarResultModel.cs b/Masa.Utils.Data.Promethus/Model/Reponse/Exemplar/ResponseExemplarResultModel.cs new file mode 100644 index 0000000..ac20eb6 --- /dev/null +++ b/Masa.Utils.Data.Promethus/Model/Reponse/Exemplar/ResponseExemplarResultModel.cs @@ -0,0 +1,25 @@ +// Copyright (c) MASA Stack All rights reserved. +// Licensed under the MIT License. See LICENSE.txt in the project root for license information. + +namespace Masa.Utils.Data.Promethus.Model; + +public class ResponseExemplarResultModel : ResponseResultBaseModel +{ + public IEnumerable? Data { get; set; } +} + +public class ExemplarModel +{ + public IDictionary? Labels { get; set; } + + public string? Value { get; set; } + + public float TimeStamp { get; set; } +} + +public class ExemplarDataModel +{ + public IDictionary? SeriesLabels { get; set; } + + public IEnumerable? Exemplars { get; set; } +} diff --git a/Masa.Utils.Data.Promethus/Model/Reponse/MetaData/ResponseLabelResultModel.cs b/Masa.Utils.Data.Promethus/Model/Reponse/MetaData/ResponseLabelResultModel.cs new file mode 100644 index 0000000..b8441e6 --- /dev/null +++ b/Masa.Utils.Data.Promethus/Model/Reponse/MetaData/ResponseLabelResultModel.cs @@ -0,0 +1,9 @@ +// Copyright (c) MASA Stack All rights reserved. +// Licensed under the MIT License. See LICENSE.txt in the project root for license information. + +namespace Masa.Utils.Data.Promethus.Model; + +public class ResponseLabelResultModel : ResponseResultBaseModel +{ + public IEnumerable? Data { get; set; } +} diff --git a/Masa.Utils.Data.Promethus/Model/Reponse/MetaData/ResponseSerieResultModel.cs b/Masa.Utils.Data.Promethus/Model/Reponse/MetaData/ResponseSerieResultModel.cs new file mode 100644 index 0000000..57198a6 --- /dev/null +++ b/Masa.Utils.Data.Promethus/Model/Reponse/MetaData/ResponseSerieResultModel.cs @@ -0,0 +1,9 @@ +// Copyright (c) MASA Stack All rights reserved. +// Licensed under the MIT License. See LICENSE.txt in the project root for license information. + +namespace Masa.Utils.Data.Promethus.Model; + +public class ResponseSerieResultModel : ResponseResultBaseModel +{ + public IEnumerable>? Data { get; set; } +} diff --git a/Masa.Utils.Data.Promethus/Model/Reponse/Query/ResponseQueryResultCommonModel.cs b/Masa.Utils.Data.Promethus/Model/Reponse/Query/ResponseQueryResultCommonModel.cs new file mode 100644 index 0000000..af28041 --- /dev/null +++ b/Masa.Utils.Data.Promethus/Model/Reponse/Query/ResponseQueryResultCommonModel.cs @@ -0,0 +1,9 @@ +// Copyright (c) MASA Stack All rights reserved. +// Licensed under the MIT License. See LICENSE.txt in the project root for license information. + +namespace Masa.Utils.Data.Promethus.Model; + +public class ResponseQueryResultCommonModel: ResponseResultBaseModel +{ + public ResponseQueryResultDataModel? Data { get; set; } +} diff --git a/Masa.Utils.Data.Promethus/Model/Reponse/Query/ResponseQueryResultDataModel.cs b/Masa.Utils.Data.Promethus/Model/Reponse/Query/ResponseQueryResultDataModel.cs new file mode 100644 index 0000000..495e67d --- /dev/null +++ b/Masa.Utils.Data.Promethus/Model/Reponse/Query/ResponseQueryResultDataModel.cs @@ -0,0 +1,25 @@ +// Copyright (c) MASA Stack All rights reserved. +// Licensed under the MIT License. See LICENSE.txt in the project root for license information. + +namespace Masa.Utils.Data.Promethus.Model; + +public class ResponseQueryResultDataModel +{ + public ResultTypes ResultType { get; set; } + + public object[]? Result { get; set; } +} + +public class InstantVectorModel +{ + public IDictionary? Metric { get; set; } + + public object[]? Value { get; set; } +} + +public class MatrixRangeModel +{ + public IDictionary? Metric { get; set; } + + public IEnumerable? Values { get; set; } +} diff --git a/Masa.Utils.Data.Promethus/Model/Reponse/ResponseResultBaseModel.cs b/Masa.Utils.Data.Promethus/Model/Reponse/ResponseResultBaseModel.cs new file mode 100644 index 0000000..8262259 --- /dev/null +++ b/Masa.Utils.Data.Promethus/Model/Reponse/ResponseResultBaseModel.cs @@ -0,0 +1,15 @@ +// Copyright (c) MASA Stack All rights reserved. +// Licensed under the MIT License. See LICENSE.txt in the project root for license information. + +namespace Masa.Utils.Data.Promethus.Model; + +public class ResponseResultBaseModel +{ + public ResultStatuses Status { get; set; } + + public string? Error { get; set; } + + public string? ErrorType { get; set; } + + public IEnumerable? Warnings { get; set; } +} diff --git a/Masa.Utils.Data.Promethus/Model/Request/RequestMetaDataQueryModel.cs b/Masa.Utils.Data.Promethus/Model/Request/RequestMetaDataQueryModel.cs new file mode 100644 index 0000000..5d034d0 --- /dev/null +++ b/Masa.Utils.Data.Promethus/Model/Request/RequestMetaDataQueryModel.cs @@ -0,0 +1,13 @@ +// Copyright (c) MASA Stack All rights reserved. +// Licensed under the MIT License. See LICENSE.txt in the project root for license information. + +namespace Masa.Utils.Data.Promethus.Model; + +public class RequestMetaDataQueryModel +{ + public IEnumerable? Match { get; set; } + + public string? Start { get; set; } + + public string? End { get; set; } +} diff --git a/Masa.Utils.Data.Promethus/Model/Request/RequestQueryModel.cs b/Masa.Utils.Data.Promethus/Model/Request/RequestQueryModel.cs new file mode 100644 index 0000000..1a8163a --- /dev/null +++ b/Masa.Utils.Data.Promethus/Model/Request/RequestQueryModel.cs @@ -0,0 +1,26 @@ +// Copyright (c) MASA Stack All rights reserved. +// Licensed under the MIT License. See LICENSE.txt in the project root for license information. + +namespace Masa.Utils.Data.Promethus.Model; + +public class RequestQueryModel +{ + public string? Query { get; set; } + + public string? Time { get; set; } + + public string? TimeOut { get; set; } +} + +public class RequestQueryRangeModel +{ + public string? Query { get; set; } + + public string? Start { get; set; } + + public string? End { get; set; } + + public string? Step { get; set; } + + public string? TimeOut { get; set; } +} diff --git a/Masa.Utils.Data.Promethus/_import.cs b/Masa.Utils.Data.Promethus/_import.cs new file mode 100644 index 0000000..1297ecc --- /dev/null +++ b/Masa.Utils.Data.Promethus/_import.cs @@ -0,0 +1,5 @@ +// Copyright (c) MASA Stack All rights reserved. +// Licensed under the MIT License. See LICENSE.txt in the project root for license information. + +global using Masa.Utils.Data.Promethus.Enums; +global using Masa.Utils.Data.Promethus.Model; diff --git a/Masa.Utils.sln b/Masa.Utils.sln index cc2d590..136af3f 100644 --- a/Masa.Utils.sln +++ b/Masa.Utils.sln @@ -103,6 +103,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Masa.Utils.Extensions.Valid EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Masa.Utils.Security.Authentication.OpenIdConnect", "src\Security\Masa.Utils.Security.Authentication.OpenIdConnect\Masa.Utils.Security.Authentication.OpenIdConnect.csproj", "{D17B5B36-5773-4827-9D5D-44390DF666CA}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Masa.Utils.Data.Promethus", "Masa.Utils.Data.Promethus\Masa.Utils.Data.Promethus.csproj", "{577A7F40-A22E-466B-972B-BFE65F700B12}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -245,6 +247,10 @@ Global {B0E3CA19-C101-4E30-9401-C017B7088F4E}.Debug|Any CPU.Build.0 = Debug|Any CPU {B0E3CA19-C101-4E30-9401-C017B7088F4E}.Release|Any CPU.ActiveCfg = Release|Any CPU {B0E3CA19-C101-4E30-9401-C017B7088F4E}.Release|Any CPU.Build.0 = Release|Any CPU + {577A7F40-A22E-466B-972B-BFE65F700B12}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {577A7F40-A22E-466B-972B-BFE65F700B12}.Debug|Any CPU.Build.0 = Debug|Any CPU + {577A7F40-A22E-466B-972B-BFE65F700B12}.Release|Any CPU.ActiveCfg = Release|Any CPU + {577A7F40-A22E-466B-972B-BFE65F700B12}.Release|Any CPU.Build.0 = Release|Any CPU {D17B5B36-5773-4827-9D5D-44390DF666CA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {D17B5B36-5773-4827-9D5D-44390DF666CA}.Debug|Any CPU.Build.0 = Debug|Any CPU {D17B5B36-5773-4827-9D5D-44390DF666CA}.Release|Any CPU.ActiveCfg = Release|Any CPU @@ -298,6 +304,7 @@ Global {22643BF8-A5ED-48CA-BD1A-10BFEC075DBE} = {4F908878-0EB8-43E4-96E4-8B1F32E9B635} {533BCE80-61BC-443A-95D3-2C6328921ED8} = {B2DA607D-4A39-4F0C-A9B3-DD9A061B0B4E} {B0E3CA19-C101-4E30-9401-C017B7088F4E} = {533BCE80-61BC-443A-95D3-2C6328921ED8} + {577A7F40-A22E-466B-972B-BFE65F700B12} = {F844C2A1-C36D-400E-A0D8-7658EF9C3B93} {D17B5B36-5773-4827-9D5D-44390DF666CA} = {4FB3BD6D-D4C1-4BEF-AD62-8FD6EAEEB4DF} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution From c771526d822766f315034cb33094077ccaa7760c Mon Sep 17 00:00:00 2001 From: qinyouzeng Date: Tue, 14 Jun 2022 17:43:41 +0800 Subject: [PATCH 02/48] feat: add test project --- .../MasaPromethusClient.cs | 2 + Masa.Utils.Data.Promethus/_import.cs | 1 + Masa.Utils.sln | 7 ++ .../Masa.Utils.Data.Promethus.Test.csproj | 21 ++++++ .../MasaPromethusClientTests.cs | 68 +++++++++++++++++++ 5 files changed, 99 insertions(+) create mode 100644 test/Masa.Utils.Data.Promethus.Test/Masa.Utils.Data.Promethus.Test.csproj create mode 100644 test/Masa.Utils.Data.Promethus.Test/MasaPromethusClientTests.cs diff --git a/Masa.Utils.Data.Promethus/MasaPromethusClient.cs b/Masa.Utils.Data.Promethus/MasaPromethusClient.cs index 57ff4ce..ddc3149 100644 --- a/Masa.Utils.Data.Promethus/MasaPromethusClient.cs +++ b/Masa.Utils.Data.Promethus/MasaPromethusClient.cs @@ -1,6 +1,8 @@ // Copyright (c) MASA Stack All rights reserved. // Licensed under the MIT License. See LICENSE.txt in the project root for license information. +[assembly: InternalsVisibleTo("Masa.Utils.Data.Promethus.Test")] + namespace Masa.Utils.Data.Promethus; internal class MasaPromethusClient : IMasaPromethusClient diff --git a/Masa.Utils.Data.Promethus/_import.cs b/Masa.Utils.Data.Promethus/_import.cs index 1297ecc..3e9622c 100644 --- a/Masa.Utils.Data.Promethus/_import.cs +++ b/Masa.Utils.Data.Promethus/_import.cs @@ -3,3 +3,4 @@ global using Masa.Utils.Data.Promethus.Enums; global using Masa.Utils.Data.Promethus.Model; +global using System.Runtime.CompilerServices; diff --git a/Masa.Utils.sln b/Masa.Utils.sln index 136af3f..6947361 100644 --- a/Masa.Utils.sln +++ b/Masa.Utils.sln @@ -105,6 +105,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Masa.Utils.Security.Authent EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Masa.Utils.Data.Promethus", "Masa.Utils.Data.Promethus\Masa.Utils.Data.Promethus.csproj", "{577A7F40-A22E-466B-972B-BFE65F700B12}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Masa.Utils.Data.Promethus.Test", "test\Masa.Utils.Data.Promethus.Test\Masa.Utils.Data.Promethus.Test.csproj", "{AC19E221-D3CF-49E9-8E41-A7580C0736AA}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -255,6 +257,10 @@ Global {D17B5B36-5773-4827-9D5D-44390DF666CA}.Debug|Any CPU.Build.0 = Debug|Any CPU {D17B5B36-5773-4827-9D5D-44390DF666CA}.Release|Any CPU.ActiveCfg = Release|Any CPU {D17B5B36-5773-4827-9D5D-44390DF666CA}.Release|Any CPU.Build.0 = Release|Any CPU + {AC19E221-D3CF-49E9-8E41-A7580C0736AA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {AC19E221-D3CF-49E9-8E41-A7580C0736AA}.Debug|Any CPU.Build.0 = Debug|Any CPU + {AC19E221-D3CF-49E9-8E41-A7580C0736AA}.Release|Any CPU.ActiveCfg = Release|Any CPU + {AC19E221-D3CF-49E9-8E41-A7580C0736AA}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -305,6 +311,7 @@ Global {533BCE80-61BC-443A-95D3-2C6328921ED8} = {B2DA607D-4A39-4F0C-A9B3-DD9A061B0B4E} {B0E3CA19-C101-4E30-9401-C017B7088F4E} = {533BCE80-61BC-443A-95D3-2C6328921ED8} {577A7F40-A22E-466B-972B-BFE65F700B12} = {F844C2A1-C36D-400E-A0D8-7658EF9C3B93} + {AC19E221-D3CF-49E9-8E41-A7580C0736AA} = {4F908878-0EB8-43E4-96E4-8B1F32E9B635} {D17B5B36-5773-4827-9D5D-44390DF666CA} = {4FB3BD6D-D4C1-4BEF-AD62-8FD6EAEEB4DF} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution diff --git a/test/Masa.Utils.Data.Promethus.Test/Masa.Utils.Data.Promethus.Test.csproj b/test/Masa.Utils.Data.Promethus.Test/Masa.Utils.Data.Promethus.Test.csproj new file mode 100644 index 0000000..a5c8de0 --- /dev/null +++ b/test/Masa.Utils.Data.Promethus.Test/Masa.Utils.Data.Promethus.Test.csproj @@ -0,0 +1,21 @@ + + + + net6.0 + enable + + false + + + + + + + + + + + + + + diff --git a/test/Masa.Utils.Data.Promethus.Test/MasaPromethusClientTests.cs b/test/Masa.Utils.Data.Promethus.Test/MasaPromethusClientTests.cs new file mode 100644 index 0000000..9d31a59 --- /dev/null +++ b/test/Masa.Utils.Data.Promethus.Test/MasaPromethusClientTests.cs @@ -0,0 +1,68 @@ +using Masa.Utils.Data.Promethus.Enums; +using Microsoft.VisualStudio.TestTools.UnitTesting; +using System.Threading.Tasks; + +namespace Masa.Utils.Data.Promethus.Test +{ + [TestClass] + public class MasaPromethusClientTests + { + private MasaPromethusClient _client; + + [TestMethod] + public async Task TestSeriesAsync() + { + var data = await _client.SeriesAsync(new Model.RequestMetaDataQueryModel + { + Match = null, + + }); + Assert.IsNotNull(data); + } + + [TestMethod] + public async Task TestQueryAsync() + { + var data = await _client.SeriesAsync(new Model.RequestMetaDataQueryModel + { + Match = null, + + }); + Assert.IsNotNull(data); + } + + [TestMethod] + [DataRow()] + public async Task TestExemplarQueryAsync(string time, string timeOut, string query) + { + var param = new Model.RequestQueryModel + { + Query = query, + Time = time, + TimeOut = timeOut + }; + var data = await _client.ExemplarQueryAsync(param); + if (string.IsNullOrEmpty(query)) + Assert.AreEqual(ResultStatuses.Error, data.Status); + } + + [TestMethod] + public async Task TestLabelsQueryAsync() + { + await Task.CompletedTask; + } + + [TestMethod] + public async Task TestLabelValuesQueryAsync() + { + await Task.CompletedTask; + } + + + [TestMethod] + public async Task TestQueryRangeAsync() + { + await Task.CompletedTask; + } + } +} From e39384e13fcc5b8b1b79abc900ed3c8c0c9556b4 Mon Sep 17 00:00:00 2001 From: qinyouzeng Date: Thu, 16 Jun 2022 18:16:39 +0800 Subject: [PATCH 03/48] feat: api query add --- .../Extenistion/HttpClientExtensition.cs | 168 +++++++++++++++++ .../Masa.Utils.Data.Promethus.csproj | 4 + .../MasaPromethusClient.cs | 75 ++++++-- .../Request/RequestLableValueQueryModel.cs | 9 + .../MappingConst.cs | 13 ++ .../Response/Mapping/MappingResponse.cs | 15 ++ .../HttpClientExtensitionTests.cs | 171 ++++++++++++++++++ .../UserStruct.cs | 20 ++ .../Masa.Utils.Data.Promethus.Test/_import.cs | 10 + 9 files changed, 473 insertions(+), 12 deletions(-) create mode 100644 Masa.Utils.Data.Promethus/Extenistion/HttpClientExtensition.cs create mode 100644 Masa.Utils.Data.Promethus/Model/Request/RequestLableValueQueryModel.cs create mode 100644 src/Data/Masa.Utils.Data.Elasticsearch/MappingConst.cs create mode 100644 src/Data/Masa.Utils.Data.Elasticsearch/Response/Mapping/MappingResponse.cs create mode 100644 test/Masa.Utils.Data.Promethus.Test/HttpClientExtensitionTests.cs create mode 100644 test/Masa.Utils.Data.Promethus.Test/UserStruct.cs create mode 100644 test/Masa.Utils.Data.Promethus.Test/_import.cs diff --git a/Masa.Utils.Data.Promethus/Extenistion/HttpClientExtensition.cs b/Masa.Utils.Data.Promethus/Extenistion/HttpClientExtensition.cs new file mode 100644 index 0000000..5b89c2c --- /dev/null +++ b/Masa.Utils.Data.Promethus/Extenistion/HttpClientExtensition.cs @@ -0,0 +1,168 @@ +// Copyright (c) MASA Stack All rights reserved. +// Licensed under the MIT License. See LICENSE.txt in the project root for license information. +using Masa.Utils.Caller.Core; +using System.Collections; +using System.Reflection; +using System.Text; +using System.Web; + +[assembly: InternalsVisibleTo("Masa.Utils.Data.Promethus.Test")] + +namespace System.Net.Http; + +internal static class HttpClientExtensition +{ + public static async Task GetAsync(this ICallerProvider caller, string url,object data) + { + var request=new HttpRequestMessage(HttpMethod.Get, $"{url}?{data?.ToUrlParam()}"); + var response= await caller.SendAsync(request); + return await response.Content.ReadAsStringAsync(); + } + + /// + /// not support System.text.json + /// + /// + /// + /// + /// + /// + public static string? ToUrlParam(this object obj, bool isEnumString = true, bool isCamelCase = true, bool isUrlEncode = true) + { + return GetValue(obj, string.Empty, isEnumString, isCamelCase, isUrlEncode); + } + + private static string? GetValue(object obj, string preStr, bool isEnumString = false, bool isCamelCase = true, bool isUrlEncode = true) + { + if (obj == null) return null; + var type = obj.GetType(); + if (type == typeof(string))//string + { + var str = (string)obj; + return AppendValue(preStr, str, "=", isUrlEncode); + } + else if (type.IsValueType) + { + if (type.IsEnum)//enum + { + var str = isEnumString ? obj.ToString() : Convert.ToInt32(obj).ToString(); + return AppendValue(preStr, str, "=", isUrlEncode); + } + else if (!type.IsPrimitive) //struct + { + return GetObjValue(type, obj, preStr, isEnumString, isCamelCase, isUrlEncode); + } + else //sample value + { + var str = obj.ToString(); + return AppendValue(preStr, str, "=", isUrlEncode); + } + } + else if (type.IsArray || type.GetInterfaces().Any(t => t.Name.IndexOf("IEnumerable") == 0)) + { + return GetEnumerableValue(obj, preStr, isEnumString, isCamelCase, isUrlEncode); + } + else if (type.IsClass) + { + return GetObjValue(type, obj, preStr, isEnumString, isCamelCase, isUrlEncode); + } + else + { + // + return null; + } + } + + private static string GetObjValue(Type type, object obj, string preStr, bool isEnumString = false, bool isCamelCase = true, bool isUrlEncode = true) + { + var properties = type.GetProperties(BindingFlags.Instance | BindingFlags.Public | BindingFlags.GetProperty); + var fields = type.GetFields(BindingFlags.Instance | BindingFlags.Public | BindingFlags.GetField); + var list = new List(); + if (properties.Length > 0) + { + foreach (var item in properties) + { + var str = GetMemerInfoValue(item, item.GetValue(obj), preStr, isEnumString, isCamelCase, isUrlEncode); + if (string.IsNullOrEmpty(str)) + continue; + list.Add(str); + } + } + + if (fields.Length > 0) + { + foreach (var item in fields) + { + var str = GetMemerInfoValue(item, item.GetValue(obj), preStr, isEnumString, isCamelCase, isUrlEncode); + if (string.IsNullOrEmpty(str)) + continue; + list.Add(str); + } + } + + if (!list.Any()) + return default!; + list.Sort(); + return string.Join('&', list); + } + + private static string? GetMemerInfoValue(MemberInfo info, object? value, string preStr, bool isEnumString = false, bool isCamelCase = true, bool isUrlEncode = true) + { + if (value == null) + return null; + + var name = info.Name; + if (isCamelCase) + name = ToCamelCase(name); + + return GetValue(value, AppendValue(preStr, name, ".", isUrlEncode) ?? default!, isEnumString, isCamelCase, isUrlEncode); + } + + private static string? GetEnumerableValue(object obj, string preStr, bool isEnumString = false, bool isCamelCase = true, bool isUrlEncode = true) + { + StringBuilder builder = new StringBuilder(4096); + var list = new List(); + foreach (var item in (IEnumerable)obj) + { + if (item is KeyValuePair keyValue) + { + var name = keyValue.Key; + if (isCamelCase) + name = ToCamelCase(name); + var str = GetValue(keyValue.Value, AppendValue(preStr, name, ".", isUrlEncode) ?? default!, isEnumString, isCamelCase, isUrlEncode); + if (!string.IsNullOrEmpty(str)) + list.Add(str); + } + else + { + var str = GetValue(item, $"{preStr}{(isUrlEncode ? HttpUtility.UrlEncode("[]", Encoding.UTF8) : "[]")}", isEnumString, isCamelCase, isUrlEncode); + if (!string.IsNullOrEmpty(str)) + list.Add(str); + } + } + if (!list.Any()) + return default!; + list.Sort(); + return string.Join('&', list); + } + + private static string? AppendValue(string preStr, string? value, string splitChar, bool isUrlEncode) + { + if (string.IsNullOrEmpty(preStr) || string.IsNullOrEmpty(value)) + return value; + if (isUrlEncode) + return $"{preStr}{splitChar}{HttpUtility.UrlEncode(value, Encoding.UTF8)}"; + else + return $"{preStr}{splitChar}{value}"; + } + + public static string ToCamelCase(this string str) + { + if (string.IsNullOrEmpty(str)) return str; + var c = str[0]; + if (c - 'A' >= 0 && c - 'Z' <= 0) + return $"{(char)(c + 32)}{str.AsSpan().Slice(1)}"; + + return str; + } +} diff --git a/Masa.Utils.Data.Promethus/Masa.Utils.Data.Promethus.csproj b/Masa.Utils.Data.Promethus/Masa.Utils.Data.Promethus.csproj index 132c02c..e39dd8a 100644 --- a/Masa.Utils.Data.Promethus/Masa.Utils.Data.Promethus.csproj +++ b/Masa.Utils.Data.Promethus/Masa.Utils.Data.Promethus.csproj @@ -6,4 +6,8 @@ enable + + + + diff --git a/Masa.Utils.Data.Promethus/MasaPromethusClient.cs b/Masa.Utils.Data.Promethus/MasaPromethusClient.cs index ddc3149..22c7f4b 100644 --- a/Masa.Utils.Data.Promethus/MasaPromethusClient.cs +++ b/Masa.Utils.Data.Promethus/MasaPromethusClient.cs @@ -1,39 +1,90 @@ // Copyright (c) MASA Stack All rights reserved. // Licensed under the MIT License. See LICENSE.txt in the project root for license information. +using Masa.Utils.Caller.Core; +using System.Text.Json; + [assembly: InternalsVisibleTo("Masa.Utils.Data.Promethus.Test")] namespace Masa.Utils.Data.Promethus; internal class MasaPromethusClient : IMasaPromethusClient { - public Task ExemplarQueryAsync(RequestQueryModel query) + private readonly ICallerProvider _caller; + private static JsonSerializerOptions _jsonSerializerOptions = new JsonSerializerOptions + { + PropertyNameCaseInsensitive = true, + }; + + public MasaPromethusClient(ICallerProvider caller) + { + _caller = caller; + } + + public async Task ExemplarQueryAsync(RequestQueryModel query) { - throw new NotImplementedException(); + return await QueryDataAsync("/api/v1/query_exemplars", query); } - public Task LabelsQueryAsync(RequestMetaDataQueryModel query) + public async Task LabelsQueryAsync(RequestMetaDataQueryModel query) { - throw new NotImplementedException(); + return await QueryDataAsync("/api/v1/labels", query); } - public Task LabelValuesQueryAsync(RequestMetaDataQueryModel query) + public async Task LabelValuesQueryAsync(RequestMetaDataQueryModel query) { - throw new NotImplementedException(); + return await QueryDataAsync("/api/v1/label//values", query); } - public Task QueryAsync(RequestQueryModel query) + public async Task QueryAsync(RequestQueryModel query) { - throw new NotImplementedException(); + return await QueryDataAsync("/api/v1/query", query); } - public Task QueryRangeAsync(RequestQueryRangeModel query) + public async Task QueryRangeAsync(RequestQueryRangeModel query) { - throw new NotImplementedException(); + return await QueryDataAsync("/api/v1/query_range", query); } - public Task SeriesAsync(RequestMetaDataQueryModel query) + public async Task SeriesAsync(RequestMetaDataQueryModel query) { - throw new NotImplementedException(); + return await QueryDataAsync("/api/v1/series", query); + } + + private async Task QueryDataAsync(string url, object data) where T : ResponseResultBaseModel + { + var str = await _caller.GetAsync(url, data); + if (string.IsNullOrEmpty(str)) + return default!; + + var baseResult = JsonSerializer.Deserialize(str, _jsonSerializerOptions); + if (baseResult == null || baseResult.Status != ResultStatuses.Success) + { + return baseResult ?? default!; + } + + if (typeof(T) == typeof(ResponseQueryResultCommonModel)) + { + var result = baseResult as ResponseQueryResultCommonModel; + if (result == null || result.Data == null) + return baseResult; + switch (result.Data.ResultType) + { + case ResultTypes.Matrix: + { + var temp = JsonSerializer.Serialize(result.Data.Result, _jsonSerializerOptions); + result.Data.Result = JsonSerializer.Deserialize(temp, _jsonSerializerOptions); + return result as T ?? default!; + } + case ResultTypes.Vector: + { + var temp = JsonSerializer.Serialize(result.Data.Result, _jsonSerializerOptions); + result.Data.Result = JsonSerializer.Deserialize(temp, _jsonSerializerOptions); + return result as T ?? default!; + } + } + } + + return baseResult; } } diff --git a/Masa.Utils.Data.Promethus/Model/Request/RequestLableValueQueryModel.cs b/Masa.Utils.Data.Promethus/Model/Request/RequestLableValueQueryModel.cs new file mode 100644 index 0000000..33b9f84 --- /dev/null +++ b/Masa.Utils.Data.Promethus/Model/Request/RequestLableValueQueryModel.cs @@ -0,0 +1,9 @@ +// Copyright (c) MASA Stack All rights reserved. +// Licensed under the MIT License. See LICENSE.txt in the project root for license information. + +namespace Masa.Utils.Data.Promethus.Model; + +public class RequestLableValueQueryModel: RequestMetaDataQueryModel +{ + public string Lable { get; set; } = "__name__"; +} diff --git a/src/Data/Masa.Utils.Data.Elasticsearch/MappingConst.cs b/src/Data/Masa.Utils.Data.Elasticsearch/MappingConst.cs new file mode 100644 index 0000000..c53298f --- /dev/null +++ b/src/Data/Masa.Utils.Data.Elasticsearch/MappingConst.cs @@ -0,0 +1,13 @@ +// Copyright (c) MASA Stack All rights reserved. +// Licensed under the MIT License. See LICENSE.txt in the project root for license information. + +namespace Masa.Utils.Data.Elasticsearch; + +internal class MappingConst +{ + public const string PROPERTY = "properties"; + public const string TYPE = "type"; + public const string FIELD = "fields"; + public const string MAXLENGTH = "ignore_above"; + public const string KEYWORD = "keyword"; +} diff --git a/src/Data/Masa.Utils.Data.Elasticsearch/Response/Mapping/MappingResponse.cs b/src/Data/Masa.Utils.Data.Elasticsearch/Response/Mapping/MappingResponse.cs new file mode 100644 index 0000000..096ebb2 --- /dev/null +++ b/src/Data/Masa.Utils.Data.Elasticsearch/Response/Mapping/MappingResponse.cs @@ -0,0 +1,15 @@ +// Copyright (c) MASA Stack All rights reserved. +// Licensed under the MIT License. See LICENSE.txt in the project root for license information. + +namespace Masa.Utils.Data.Elasticsearch.Response; + +public class MappingResponse +{ + public string? Name { get; set; } + + public string? DataType { get; set; } + + public bool? IsKeyword { get; set; } + + public int? MaxLenth { get; set; } +} diff --git a/test/Masa.Utils.Data.Promethus.Test/HttpClientExtensitionTests.cs b/test/Masa.Utils.Data.Promethus.Test/HttpClientExtensitionTests.cs new file mode 100644 index 0000000..20a9866 --- /dev/null +++ b/test/Masa.Utils.Data.Promethus.Test/HttpClientExtensitionTests.cs @@ -0,0 +1,171 @@ +// Copyright (c) MASA Stack All rights reserved. +// Licensed under the MIT License. See LICENSE.txt in the project root for license information. + +namespace Masa.Utils.Data.Promethus.Test; + +[TestClass] +public class HttpClientExtensitionTests +{ + [TestMethod] + [DataRow(1)] + [DataRow((byte)1)] + [DataRow((char)2)] + [DataRow((uint)3)] + [DataRow((long)4)] + [DataRow((float)5.6789)] + [DataRow(5.6789)] + [DataRow("string")] + public void SampleValueTest(object value) + { + var result = value.ToUrlParam(); + var str = value.ToString(); + Assert.AreEqual(str, result); + } + + [TestMethod] + public void StructTest() + { + var user = new UserStruct + { + Name = "Bob", + Age = 30, + gender = "Male" + }; + + var result = user.ToUrlParam(); + var str = $"age={user.Age}&gender={user.gender}&name={user.Name}"; + Assert.AreEqual(str, result); + + user.Name = "王占山"; + str = $"age={user.Age}&gender={user.gender}&name={System.Web.HttpUtility.UrlEncode(user.Name, System.Text.Encoding.UTF8)}"; + result = user.ToUrlParam(); + Assert.AreEqual(str, result); + } + + [TestMethod] + public void ClassTest() + { + var obj = new + { + a = "test", + d = (float)34.56, + ch = "中文说明", + t = ResultTypes.Scalar + }; + + var result = obj.ToUrlParam(isEnumString: true); + var str = $"a={obj.a}&ch={System.Web.HttpUtility.UrlEncode(obj.ch, System.Text.Encoding.UTF8)}&d={obj.d}&t={obj.t}"; + Assert.AreEqual(str, result); + + result = obj.ToUrlParam(isEnumString: false); + str = $"a={obj.a}&ch={System.Web.HttpUtility.UrlEncode(obj.ch, System.Text.Encoding.UTF8)}&d={obj.d}&t={(int)obj.t}"; + Assert.AreEqual(str, result); + + result = obj.ToUrlParam(isEnumString: false, isUrlEncode: false); + str = $"a={obj.a}&ch={obj.ch}&d={obj.d}&t={(int)obj.t}"; + Assert.AreEqual(str, result); + } + + [TestMethod] + public void ArrayTest() + { + var array = new int[] { 1, 2, 3, 4, 5, 6, 7, 8 }; + var result = array.ToUrlParam(isUrlEncode: false); + var str = string.Join("&[]=", array); + str = $"[]={str}"; + Assert.AreEqual(str, result); + } + + [TestMethod] + public void ObjArrayTest() + { + var array = new RequestQueryModel[] { + new RequestQueryModel{ + Query="where1", + Time="2021-01-02", + TimeOut="5s" + }, + new RequestQueryModel{ + Query="where2", + Time="2021-01-01", + TimeOut="5s" + } + }; + + var result = array.ToUrlParam(isUrlEncode: false); + var str = $"[].query={array[0].Query}&[].time={array[0].Time}&[].timeOut={array[0].TimeOut}"; + str += $"&[].query={array[1].Query}&[].time={array[1].Time}&[].timeOut={array[1].TimeOut}"; + Assert.AreEqual(str, result); + + var obj = new + { + Values = array + }; + result = obj.ToUrlParam(isUrlEncode: false); + str = $"values[].query={array[0].Query}&values[].time={array[0].Time}&values[].timeOut={array[0].TimeOut}"; + str += $"&values[].query={array[1].Query}&values[].time={array[1].Time}&values[].timeOut={array[1].TimeOut}"; + Assert.AreEqual(str, result); + } + + [TestMethod] + public void IEnumberTest() + { + var list = new List { 1, 2, 3, 4, 5, 6, 7, 8 }; + var result = list.ToUrlParam(isUrlEncode: false); + var str = string.Join("&[]=", list); + str = $"[]={str}"; + Assert.AreEqual(str, result); + } + + [TestMethod] + public void ObjListTest() + { + var array = new List { + new RequestQueryModel{ + Query="where1", + Time="2021-01-02", + TimeOut="5s" + }, + new RequestQueryModel{ + Query="where2", + Time="2021-01-01", + TimeOut="5s" + } + }; + + var result = array.ToUrlParam(isUrlEncode: false); + var str = $"[].query={array[0].Query}&[].time={array[0].Time}&[].timeOut={array[0].TimeOut}"; + str += $"&[].query={array[1].Query}&[].time={array[1].Time}&[].timeOut={array[1].TimeOut}"; + Assert.AreEqual(str, result); + + var obj = new + { + Values = array + }; + result = obj.ToUrlParam(isUrlEncode: false); + str = $"values[].query={array[0].Query}&values[].time={array[0].Time}&values[].timeOut={array[0].TimeOut}"; + str += $"&values[].query={array[1].Query}&values[].time={array[1].Time}&values[].timeOut={array[1].TimeOut}"; + Assert.AreEqual(str, result); + } + + [TestMethod] + public void KeyValueTest() + { + var dic = new Dictionary { + { "Name","David"}, + {"Age",30 }, + {"Sex","Male" } + }; + + var result = dic.ToUrlParam(); + var builder = new StringBuilder(); + var keys = dic.Keys.ToList(); + keys.Sort(); + foreach (var key in keys) + { + builder.Append($"&{key.ToCamelCase()}={dic[key]}"); + } + builder.Remove(0, 1); + Assert.AreEqual(builder.ToString(), result); + } +} diff --git a/test/Masa.Utils.Data.Promethus.Test/UserStruct.cs b/test/Masa.Utils.Data.Promethus.Test/UserStruct.cs new file mode 100644 index 0000000..63009e5 --- /dev/null +++ b/test/Masa.Utils.Data.Promethus.Test/UserStruct.cs @@ -0,0 +1,20 @@ +// Copyright (c) MASA Stack All rights reserved. +// Licensed under the MIT License. See LICENSE.txt in the project root for license information. + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Masa.Utils.Data.Promethus.Test +{ + public struct UserStruct + { + public string Name { get; set; } + + public int Age { get; set; } + + public string gender { get; set; } + } +} diff --git a/test/Masa.Utils.Data.Promethus.Test/_import.cs b/test/Masa.Utils.Data.Promethus.Test/_import.cs new file mode 100644 index 0000000..e264f75 --- /dev/null +++ b/test/Masa.Utils.Data.Promethus.Test/_import.cs @@ -0,0 +1,10 @@ +// Copyright (c) MASA Stack All rights reserved. +// Licensed under the MIT License. See LICENSE.txt in the project root for license information. + +global using Masa.Utils.Data.Promethus.Enums; +global using Masa.Utils.Data.Promethus.Model; +global using Microsoft.VisualStudio.TestTools.UnitTesting; +global using System.Collections.Generic; +global using System.Linq; +global using System.Net.Http; +global using System.Text; From 2923da4dce1b81db3d857e8d8df14f2abbed6d81 Mon Sep 17 00:00:00 2001 From: qinyouzeng Date: Fri, 17 Jun 2022 11:26:38 +0800 Subject: [PATCH 04/48] feat: update code and add tests --- .../Extensions/HttpClientExtensions.cs | 16 +++ .../ObjectExtensions.cs} | 29 +---- .../Extensions/StringExtensions.cs | 20 ++++ .../IMasaPromethusClient.cs | 4 +- .../Masa.Utils.Data.Promethus.csproj | 1 + .../MasaPromethusClient.cs | 23 ++-- .../MetaData/ResponseSerieResultModel.cs | 2 +- .../Request/RequestQueryExemplarModel.cs | 14 +++ .../Model/Request/RequestQueryModel.cs | 13 --- .../Model/Request/RequestQueryRangeModel.cs | 17 +++ .../ServiceCollectionExtensions.cs | 30 +++++ Masa.Utils.Data.Promethus/_import.cs | 5 + .../ObjectExtensionsTests.cs} | 2 +- .../Extensions/StringExtensionsTests.cs | 30 +++++ .../MasaPromethusClientTests.cs | 108 +++++++++++++----- .../Masa.Utils.Data.Promethus.Test/_import.cs | 3 +- 16 files changed, 240 insertions(+), 77 deletions(-) create mode 100644 Masa.Utils.Data.Promethus/Extensions/HttpClientExtensions.cs rename Masa.Utils.Data.Promethus/{Extenistion/HttpClientExtensition.cs => Extensions/ObjectExtensions.cs} (86%) create mode 100644 Masa.Utils.Data.Promethus/Extensions/StringExtensions.cs create mode 100644 Masa.Utils.Data.Promethus/Model/Request/RequestQueryExemplarModel.cs create mode 100644 Masa.Utils.Data.Promethus/Model/Request/RequestQueryRangeModel.cs create mode 100644 Masa.Utils.Data.Promethus/ServiceCollectionExtensions.cs rename test/Masa.Utils.Data.Promethus.Test/{HttpClientExtensitionTests.cs => Extensions/ObjectExtensionsTests.cs} (99%) create mode 100644 test/Masa.Utils.Data.Promethus.Test/Extensions/StringExtensionsTests.cs diff --git a/Masa.Utils.Data.Promethus/Extensions/HttpClientExtensions.cs b/Masa.Utils.Data.Promethus/Extensions/HttpClientExtensions.cs new file mode 100644 index 0000000..322089a --- /dev/null +++ b/Masa.Utils.Data.Promethus/Extensions/HttpClientExtensions.cs @@ -0,0 +1,16 @@ +// Copyright (c) MASA Stack All rights reserved. +// Licensed under the MIT License. See LICENSE.txt in the project root for license information. + +[assembly: InternalsVisibleTo("Masa.Utils.Data.Promethus.Test")] + +namespace Masa.Utils.Data.Promethus; + +internal static class HttpClientExtensions +{ + public static async Task GetAsync(this ICallerProvider caller, string url,object data) + { + var request=new HttpRequestMessage(HttpMethod.Get, $"{url}?{data?.ToUrlParam()}"); + var response= await caller.SendAsync(request); + return await response.Content.ReadAsStringAsync(); + } +} diff --git a/Masa.Utils.Data.Promethus/Extenistion/HttpClientExtensition.cs b/Masa.Utils.Data.Promethus/Extensions/ObjectExtensions.cs similarity index 86% rename from Masa.Utils.Data.Promethus/Extenistion/HttpClientExtensition.cs rename to Masa.Utils.Data.Promethus/Extensions/ObjectExtensions.cs index 5b89c2c..e585b27 100644 --- a/Masa.Utils.Data.Promethus/Extenistion/HttpClientExtensition.cs +++ b/Masa.Utils.Data.Promethus/Extensions/ObjectExtensions.cs @@ -1,24 +1,15 @@ // Copyright (c) MASA Stack All rights reserved. // Licensed under the MIT License. See LICENSE.txt in the project root for license information. -using Masa.Utils.Caller.Core; + using System.Collections; using System.Reflection; using System.Text; using System.Web; -[assembly: InternalsVisibleTo("Masa.Utils.Data.Promethus.Test")] - -namespace System.Net.Http; +namespace Masa.Utils.Data.Promethus; -internal static class HttpClientExtensition +public static class ObjectExtensions { - public static async Task GetAsync(this ICallerProvider caller, string url,object data) - { - var request=new HttpRequestMessage(HttpMethod.Get, $"{url}?{data?.ToUrlParam()}"); - var response= await caller.SendAsync(request); - return await response.Content.ReadAsStringAsync(); - } - /// /// not support System.text.json /// @@ -113,7 +104,7 @@ private static string GetObjValue(Type type, object obj, string preStr, bool isE var name = info.Name; if (isCamelCase) - name = ToCamelCase(name); + name = name.ToCamelCase(); return GetValue(value, AppendValue(preStr, name, ".", isUrlEncode) ?? default!, isEnumString, isCamelCase, isUrlEncode); } @@ -128,7 +119,7 @@ private static string GetObjValue(Type type, object obj, string preStr, bool isE { var name = keyValue.Key; if (isCamelCase) - name = ToCamelCase(name); + name = name.ToCamelCase(); var str = GetValue(keyValue.Value, AppendValue(preStr, name, ".", isUrlEncode) ?? default!, isEnumString, isCamelCase, isUrlEncode); if (!string.IsNullOrEmpty(str)) list.Add(str); @@ -155,14 +146,4 @@ private static string GetObjValue(Type type, object obj, string preStr, bool isE else return $"{preStr}{splitChar}{value}"; } - - public static string ToCamelCase(this string str) - { - if (string.IsNullOrEmpty(str)) return str; - var c = str[0]; - if (c - 'A' >= 0 && c - 'Z' <= 0) - return $"{(char)(c + 32)}{str.AsSpan().Slice(1)}"; - - return str; - } } diff --git a/Masa.Utils.Data.Promethus/Extensions/StringExtensions.cs b/Masa.Utils.Data.Promethus/Extensions/StringExtensions.cs new file mode 100644 index 0000000..de3a405 --- /dev/null +++ b/Masa.Utils.Data.Promethus/Extensions/StringExtensions.cs @@ -0,0 +1,20 @@ +// Copyright (c) MASA Stack All rights reserved. +// Licensed under the MIT License. See LICENSE.txt in the project root for license information. + +namespace Masa.Utils.Data.Promethus; + +internal static class StringExtensions +{ + public static string ToCamelCase(this string str) + { + if (string.IsNullOrEmpty(str)) + return default!; + + var span = new ReadOnlySpan(str.ToArray()); + var c = span[0]; + if (c - 'A' >= 0 && c - 'Z' <= 0) + return $"{(char)(c + 32)}{span[1..]}"; + + return str; + } +} diff --git a/Masa.Utils.Data.Promethus/IMasaPromethusClient.cs b/Masa.Utils.Data.Promethus/IMasaPromethusClient.cs index f526f52..f393627 100644 --- a/Masa.Utils.Data.Promethus/IMasaPromethusClient.cs +++ b/Masa.Utils.Data.Promethus/IMasaPromethusClient.cs @@ -13,7 +13,7 @@ internal interface IMasaPromethusClient Task LabelsQueryAsync(RequestMetaDataQueryModel query); - Task LabelValuesQueryAsync(RequestMetaDataQueryModel query); + Task LabelValuesQueryAsync(RequestLableValueQueryModel query); - Task ExemplarQueryAsync(RequestQueryModel query); + Task ExemplarQueryAsync(RequestQueryExemplarModel query); } diff --git a/Masa.Utils.Data.Promethus/Masa.Utils.Data.Promethus.csproj b/Masa.Utils.Data.Promethus/Masa.Utils.Data.Promethus.csproj index e39dd8a..2a21f39 100644 --- a/Masa.Utils.Data.Promethus/Masa.Utils.Data.Promethus.csproj +++ b/Masa.Utils.Data.Promethus/Masa.Utils.Data.Promethus.csproj @@ -8,6 +8,7 @@ + diff --git a/Masa.Utils.Data.Promethus/MasaPromethusClient.cs b/Masa.Utils.Data.Promethus/MasaPromethusClient.cs index 22c7f4b..6fcb11d 100644 --- a/Masa.Utils.Data.Promethus/MasaPromethusClient.cs +++ b/Masa.Utils.Data.Promethus/MasaPromethusClient.cs @@ -1,9 +1,6 @@ // Copyright (c) MASA Stack All rights reserved. // Licensed under the MIT License. See LICENSE.txt in the project root for license information. -using Masa.Utils.Caller.Core; -using System.Text.Json; - [assembly: InternalsVisibleTo("Masa.Utils.Data.Promethus.Test")] namespace Masa.Utils.Data.Promethus; @@ -13,7 +10,7 @@ internal class MasaPromethusClient : IMasaPromethusClient private readonly ICallerProvider _caller; private static JsonSerializerOptions _jsonSerializerOptions = new JsonSerializerOptions { - PropertyNameCaseInsensitive = true, + PropertyNameCaseInsensitive = true }; public MasaPromethusClient(ICallerProvider caller) @@ -21,7 +18,7 @@ public MasaPromethusClient(ICallerProvider caller) _caller = caller; } - public async Task ExemplarQueryAsync(RequestQueryModel query) + public async Task ExemplarQueryAsync(RequestQueryExemplarModel query) { return await QueryDataAsync("/api/v1/query_exemplars", query); } @@ -31,9 +28,11 @@ public async Task LabelsQueryAsync(RequestMetaDataQuer return await QueryDataAsync("/api/v1/labels", query); } - public async Task LabelValuesQueryAsync(RequestMetaDataQueryModel query) + public async Task LabelValuesQueryAsync(RequestLableValueQueryModel query) { - return await QueryDataAsync("/api/v1/label//values", query); + var name = query.Lable; + query.Lable = null; + return await QueryDataAsync($"/api/v1/label/{name}/values", query); } public async Task QueryAsync(RequestQueryModel query) @@ -51,13 +50,23 @@ public async Task SeriesAsync(RequestMetaDataQueryMode return await QueryDataAsync("/api/v1/series", query); } + private void CheckOption() + { + if (_jsonSerializerOptions.Converters.Any(t => t.GetType() == typeof(JsonStringEnumConverter))) + return; + else + _jsonSerializerOptions.Converters.Add(new JsonStringEnumConverter()); + } + private async Task QueryDataAsync(string url, object data) where T : ResponseResultBaseModel { var str = await _caller.GetAsync(url, data); if (string.IsNullOrEmpty(str)) return default!; + CheckOption(); var baseResult = JsonSerializer.Deserialize(str, _jsonSerializerOptions); + if (baseResult == null || baseResult.Status != ResultStatuses.Success) { return baseResult ?? default!; diff --git a/Masa.Utils.Data.Promethus/Model/Reponse/MetaData/ResponseSerieResultModel.cs b/Masa.Utils.Data.Promethus/Model/Reponse/MetaData/ResponseSerieResultModel.cs index 57198a6..2b15b28 100644 --- a/Masa.Utils.Data.Promethus/Model/Reponse/MetaData/ResponseSerieResultModel.cs +++ b/Masa.Utils.Data.Promethus/Model/Reponse/MetaData/ResponseSerieResultModel.cs @@ -5,5 +5,5 @@ namespace Masa.Utils.Data.Promethus.Model; public class ResponseSerieResultModel : ResponseResultBaseModel { - public IEnumerable>? Data { get; set; } + public IEnumerable>? Data { get; set; } } diff --git a/Masa.Utils.Data.Promethus/Model/Request/RequestQueryExemplarModel.cs b/Masa.Utils.Data.Promethus/Model/Request/RequestQueryExemplarModel.cs new file mode 100644 index 0000000..98be977 --- /dev/null +++ b/Masa.Utils.Data.Promethus/Model/Request/RequestQueryExemplarModel.cs @@ -0,0 +1,14 @@ +// Copyright (c) MASA Stack All rights reserved. +// Licensed under the MIT License. See LICENSE.txt in the project root for license information. + +namespace Masa.Utils.Data.Promethus.Model; + +internal class RequestQueryExemplarModel +{ + public string? Query { get; set; } + + public string? Start { get; set; } + + public string? End { get; set; } +} + diff --git a/Masa.Utils.Data.Promethus/Model/Request/RequestQueryModel.cs b/Masa.Utils.Data.Promethus/Model/Request/RequestQueryModel.cs index 1a8163a..f243e13 100644 --- a/Masa.Utils.Data.Promethus/Model/Request/RequestQueryModel.cs +++ b/Masa.Utils.Data.Promethus/Model/Request/RequestQueryModel.cs @@ -11,16 +11,3 @@ public class RequestQueryModel public string? TimeOut { get; set; } } - -public class RequestQueryRangeModel -{ - public string? Query { get; set; } - - public string? Start { get; set; } - - public string? End { get; set; } - - public string? Step { get; set; } - - public string? TimeOut { get; set; } -} diff --git a/Masa.Utils.Data.Promethus/Model/Request/RequestQueryRangeModel.cs b/Masa.Utils.Data.Promethus/Model/Request/RequestQueryRangeModel.cs new file mode 100644 index 0000000..040e21f --- /dev/null +++ b/Masa.Utils.Data.Promethus/Model/Request/RequestQueryRangeModel.cs @@ -0,0 +1,17 @@ +// Copyright (c) MASA Stack All rights reserved. +// Licensed under the MIT License. See LICENSE.txt in the project root for license information. + +namespace Masa.Utils.Data.Promethus.Model; + +public class RequestQueryRangeModel +{ + public string? Query { get; set; } + + public string? Start { get; set; } + + public string? End { get; set; } + + public string? Step { get; set; } + + public string? TimeOut { get; set; } +} diff --git a/Masa.Utils.Data.Promethus/ServiceCollectionExtensions.cs b/Masa.Utils.Data.Promethus/ServiceCollectionExtensions.cs new file mode 100644 index 0000000..8968c6f --- /dev/null +++ b/Masa.Utils.Data.Promethus/ServiceCollectionExtensions.cs @@ -0,0 +1,30 @@ +// Copyright (c) MASA Stack All rights reserved. +// Licensed under the MIT License. See LICENSE.txt in the project root for license information. + +using Masa.Utils.Caller.Core; +using Masa.Utils.Caller.HttpClient; +using Microsoft.Extensions.DependencyInjection; + +namespace Masa.Utils.Data.Promethus; + +public static class ServiceCollectionExtensions +{ + private const string PROMETHUS_HTTP_CLIENT_NAME = "promethus_client_name"; + + public static IServiceCollection AddPromethusClient(this IServiceCollection services, string uri) + { + ArgumentNullException.ThrowIfNull(uri, nameof(uri)); + + services.AddCaller(builder => + { + builder.UseHttpClient(options => + { + options.BaseAddress = uri; + options.Name = PROMETHUS_HTTP_CLIENT_NAME; + }); + }); + + services.AddScoped(); + return services; + } +} diff --git a/Masa.Utils.Data.Promethus/_import.cs b/Masa.Utils.Data.Promethus/_import.cs index 3e9622c..31c1272 100644 --- a/Masa.Utils.Data.Promethus/_import.cs +++ b/Masa.Utils.Data.Promethus/_import.cs @@ -1,6 +1,11 @@ // Copyright (c) MASA Stack All rights reserved. // Licensed under the MIT License. See LICENSE.txt in the project root for license information. +global using Masa.Utils.Caller.Core; +global using Masa.Utils.Caller.HttpClient; global using Masa.Utils.Data.Promethus.Enums; global using Masa.Utils.Data.Promethus.Model; +global using Microsoft.Extensions.DependencyInjection; global using System.Runtime.CompilerServices; +global using System.Text.Json; +global using System.Text.Json.Serialization; diff --git a/test/Masa.Utils.Data.Promethus.Test/HttpClientExtensitionTests.cs b/test/Masa.Utils.Data.Promethus.Test/Extensions/ObjectExtensionsTests.cs similarity index 99% rename from test/Masa.Utils.Data.Promethus.Test/HttpClientExtensitionTests.cs rename to test/Masa.Utils.Data.Promethus.Test/Extensions/ObjectExtensionsTests.cs index 20a9866..4dee596 100644 --- a/test/Masa.Utils.Data.Promethus.Test/HttpClientExtensitionTests.cs +++ b/test/Masa.Utils.Data.Promethus.Test/Extensions/ObjectExtensionsTests.cs @@ -4,7 +4,7 @@ namespace Masa.Utils.Data.Promethus.Test; [TestClass] -public class HttpClientExtensitionTests +public class ObjectExtensionsTests { [TestMethod] [DataRow(1)] diff --git a/test/Masa.Utils.Data.Promethus.Test/Extensions/StringExtensionsTests.cs b/test/Masa.Utils.Data.Promethus.Test/Extensions/StringExtensionsTests.cs new file mode 100644 index 0000000..170df5e --- /dev/null +++ b/test/Masa.Utils.Data.Promethus.Test/Extensions/StringExtensionsTests.cs @@ -0,0 +1,30 @@ +// Copyright (c) MASA Stack All rights reserved. +// Licensed under the MIT License. See LICENSE.txt in the project root for license information. + +namespace Masa.Utils.Data.Promethus.Test; + +[TestClass] +public class StringExtensionsTests +{ + [TestMethod] + [DataRow(null)] + [DataRow("")] + [DataRow("name")] + [DataRow("Name")] + [DataRow("N")] + [DataRow("FirstName")] + public void CamelCaseTest(string str) + { + var result = str.ToCamelCase(); + if (string.IsNullOrEmpty(str)) + { + Assert.IsNull(result); + } + else + { + var camelStr = $"{str[0].ToString().ToLower()}{(str.Length - 1 > 0 ? str[1..] : "")}"; + Assert.AreEqual(camelStr, result); + } + + } +} diff --git a/test/Masa.Utils.Data.Promethus.Test/MasaPromethusClientTests.cs b/test/Masa.Utils.Data.Promethus.Test/MasaPromethusClientTests.cs index 9d31a59..3eb1bac 100644 --- a/test/Masa.Utils.Data.Promethus.Test/MasaPromethusClientTests.cs +++ b/test/Masa.Utils.Data.Promethus.Test/MasaPromethusClientTests.cs @@ -1,68 +1,120 @@ -using Masa.Utils.Data.Promethus.Enums; -using Microsoft.VisualStudio.TestTools.UnitTesting; -using System.Threading.Tasks; +// Copyright (c) MASA Stack All rights reserved. +// Licensed under the MIT License. See LICENSE.txt in the project root for license information. namespace Masa.Utils.Data.Promethus.Test { [TestClass] public class MasaPromethusClientTests { - private MasaPromethusClient _client; + private IMasaPromethusClient _client; + + [TestInitialize] + public void Initialize() + { + IServiceCollection service = new ServiceCollection(); + service.AddPromethusClient("http://localhost:9090"); + _client = service.BuildServiceProvider().GetService(); + } [TestMethod] - public async Task TestSeriesAsync() + public async Task TestQueryAsync() { - var data = await _client.SeriesAsync(new Model.RequestMetaDataQueryModel + var result = await _client.QueryAsync(new RequestQueryModel { - Match = null, - + Query = "up" }); - Assert.IsNotNull(data); + Assert.IsNotNull(result); + Assert.AreEqual(result.Status, ResultStatuses.Success); + Assert.IsNotNull(result.Data); } [TestMethod] - public async Task TestQueryAsync() + public async Task TestQueryVectorAsync() { - var data = await _client.SeriesAsync(new Model.RequestMetaDataQueryModel + var result = await _client.QueryAsync(new RequestQueryModel { - Match = null, + Query = "up" + }); + + if (result.Data.Result != null) + { + var data = result.Data.Result as InstantVectorModel[]; + + Assert.IsNotNull(data); + Assert.IsNotNull(data[0].Metric); + Assert.IsNotNull(data[0].Value); + Assert.IsNotNull(data[0].Metric.Keys); + Assert.AreEqual(2, data[0].Value.Length); + } + } + + [TestMethod] + public async Task TestQueryRangeAsync() + { + var result = await _client.QueryRangeAsync(new RequestQueryRangeModel + { + Query = "up", + Start = "2022-06-17T02:00:00.000Z", + End = "2022-06-17T02:30:00.000Z", + Step = "300s", }); - Assert.IsNotNull(data); + Assert.IsNotNull(result); + Assert.AreEqual(result.Status, ResultStatuses.Success); + Assert.IsNotNull(result.Data); + if (result.Data.ResultType == ResultTypes.Matrix) + { + var data = result.Data.Result as MatrixRangeModel[]; + Assert.IsNotNull(data); + Assert.IsNotNull(data[0].Metric); + Assert.IsNotNull(data[0].Values); + } } [TestMethod] - [DataRow()] - public async Task TestExemplarQueryAsync(string time, string timeOut, string query) + public async Task TestSeriesAsync() { - var param = new Model.RequestQueryModel + var result = await _client.SeriesAsync(new RequestMetaDataQueryModel { - Query = query, - Time = time, - TimeOut = timeOut - }; - var data = await _client.ExemplarQueryAsync(param); - if (string.IsNullOrEmpty(query)) - Assert.AreEqual(ResultStatuses.Error, data.Status); + Match = new string[] { "up" }, + Start = "2022-06-17T02:00:00.000Z", + End = "2022-06-17T02:30:00.000Z" + }); + Assert.IsNotNull(result); + Assert.AreEqual(result.Status, ResultStatuses.Success); } [TestMethod] public async Task TestLabelsQueryAsync() { - await Task.CompletedTask; + var result = await _client.LabelsQueryAsync(default!); + Assert.IsNotNull(result); + Assert.AreEqual(result.Status, ResultStatuses.Success); + Assert.IsTrue(result.Data.Count() > 0); } [TestMethod] public async Task TestLabelValuesQueryAsync() { - await Task.CompletedTask; + var result = await _client.LabelValuesQueryAsync(new RequestLableValueQueryModel()); + Assert.IsNotNull(result); + Assert.AreEqual(result.Status, ResultStatuses.Success); + Assert.IsTrue(result.Data.Count() > 0); } - [TestMethod] - public async Task TestQueryRangeAsync() + [DataRow()] + public async Task TestExemplarQueryAsync() { - await Task.CompletedTask; + var param = new RequestQueryExemplarModel + { + Query = "up", + Start = "2022-06-17T02:00:00.000Z", + End = "2022-06-17T02:30:00.000Z" + }; + var result = await _client.ExemplarQueryAsync(param); + Assert.IsNotNull(result); + Assert.AreEqual(result.Status, ResultStatuses.Success); } } } diff --git a/test/Masa.Utils.Data.Promethus.Test/_import.cs b/test/Masa.Utils.Data.Promethus.Test/_import.cs index e264f75..f6a2a12 100644 --- a/test/Masa.Utils.Data.Promethus.Test/_import.cs +++ b/test/Masa.Utils.Data.Promethus.Test/_import.cs @@ -3,8 +3,9 @@ global using Masa.Utils.Data.Promethus.Enums; global using Masa.Utils.Data.Promethus.Model; +global using Microsoft.Extensions.DependencyInjection; global using Microsoft.VisualStudio.TestTools.UnitTesting; global using System.Collections.Generic; global using System.Linq; -global using System.Net.Http; global using System.Text; +global using System.Threading.Tasks; From cbde367bed3afdb6d51c384d75b91cedd03a2244 Mon Sep 17 00:00:00 2001 From: qinyouzeng Date: Fri, 17 Jun 2022 12:02:08 +0800 Subject: [PATCH 05/48] docs: add docs --- Masa.Utils.Data.Promethus/README.md | 46 +++++++++++++++++++++++ Masa.Utils.Data.Promethus/README.zh-CN.md | 46 +++++++++++++++++++++++ 2 files changed, 92 insertions(+) create mode 100644 Masa.Utils.Data.Promethus/README.md create mode 100644 Masa.Utils.Data.Promethus/README.zh-CN.md diff --git a/Masa.Utils.Data.Promethus/README.md b/Masa.Utils.Data.Promethus/README.md new file mode 100644 index 0000000..20aa5b7 --- /dev/null +++ b/Masa.Utils.Data.Promethus/README.md @@ -0,0 +1,46 @@ +[中](README.zh-CN.md) | EN + +## Masa.Utils.Data.Promethus + +[Promethus Http Api](https://www.prometheus.io/docs/prometheus/latest/querying/api/) Client Library + +## Install: +```c# +Install-Package Masa.Utils.Data.Promethus +``` + +### Usage: + +1. Inject services + +```` C# +builder.Services.AddPromethusClient("http://127.0.0.1:9090"); +```` + +2. Call + +```C# + public class SampleService{ + + private IMasaPromethusClient _client; + + public SampleService(IMasaPromethusClient client) + { + _client=client; + } + + public async Task QueryAsync() + { + var result=await _client.QueryAsync(...); + } + } +``` + +### Current suports: + +- [query](https://www.prometheus.io/docs/prometheus/latest/querying/api/#instant-queries) +- [query_range](https://www.prometheus.io/docs/prometheus/latest/querying/api/#range-queries) +- [series](https://www.prometheus.io/docs/prometheus/latest/querying/api/#finding-series-by-label-matchers) +- [lables](https://www.prometheus.io/docs/prometheus/latest/querying/api/#getting-label-names) +- [lable value](https://www.prometheus.io/docs/prometheus/latest/querying/api/#querying-label-values) +- [exemplars](https://www.prometheus.io/docs/prometheus/latest/querying/api/#querying-exemplars) diff --git a/Masa.Utils.Data.Promethus/README.zh-CN.md b/Masa.Utils.Data.Promethus/README.zh-CN.md new file mode 100644 index 0000000..5994848 --- /dev/null +++ b/Masa.Utils.Data.Promethus/README.zh-CN.md @@ -0,0 +1,46 @@ +[EN](README.md) | 中 + +## Masa.Utils.Data.Promethus + +[Promethus Http Api](https://www.prometheus.io/docs/prometheus/latest/querying/api/) 客户端类库 + +## 安装: +```c# +Install-Package Masa.Utils.Data.Promethus +``` + +### 用法: + +1. 注入services + +```` C# +builder.Services.AddPromethusClient("http://127.0.0.1:9090"); +```` + +2. 调用 + +```C# + public class SampleService{ + + private IMasaPromethusClient _client; + + public SampleService(IMasaPromethusClient client) + { + _client=client; + } + + public async Task QueryAsync() + { + var result=await _client.QueryAsync(...); + } + } +``` + +### 目前只支持以下api: + +- [query](https://www.prometheus.io/docs/prometheus/latest/querying/api/#instant-queries) +- [query_range](https://www.prometheus.io/docs/prometheus/latest/querying/api/#range-queries) +- [series](https://www.prometheus.io/docs/prometheus/latest/querying/api/#finding-series-by-label-matchers) +- [lables](https://www.prometheus.io/docs/prometheus/latest/querying/api/#getting-label-names) +- [lable value](https://www.prometheus.io/docs/prometheus/latest/querying/api/#querying-label-values) +- [exemplars](https://www.prometheus.io/docs/prometheus/latest/querying/api/#querying-exemplars) From 3af77c1c57df40cccfaec4632637ccd5980346d5 Mon Sep 17 00:00:00 2001 From: qinyouzeng Date: Fri, 17 Jun 2022 14:54:22 +0800 Subject: [PATCH 06/48] feat: add convert json value to object --- .../MasaPromethusClient.cs | 40 +++++++++++++++++++ .../ServiceCollectionExtensions.cs | 4 -- 2 files changed, 40 insertions(+), 4 deletions(-) diff --git a/Masa.Utils.Data.Promethus/MasaPromethusClient.cs b/Masa.Utils.Data.Promethus/MasaPromethusClient.cs index 6fcb11d..7d23ff0 100644 --- a/Masa.Utils.Data.Promethus/MasaPromethusClient.cs +++ b/Masa.Utils.Data.Promethus/MasaPromethusClient.cs @@ -83,17 +83,57 @@ private async Task QueryDataAsync(string url, object data) where T : Respo { var temp = JsonSerializer.Serialize(result.Data.Result, _jsonSerializerOptions); result.Data.Result = JsonSerializer.Deserialize(temp, _jsonSerializerOptions); + if (result.Data.Result != null && result.Data.Result.Any()) + { + foreach (MatrixRangeModel item in result.Data.Result) + { + if (item.Values == null || !item.Values.Any()) + continue; + var array = item.Values.ToArray(); + int i = 0, max = array.Length - 1; + do + { + array[i] = ConvertJsonToObjValue(array[i]); + i++; + } + while (max - i >= 0); + item.Values = array; + } + } return result as T ?? default!; } case ResultTypes.Vector: { var temp = JsonSerializer.Serialize(result.Data.Result, _jsonSerializerOptions); result.Data.Result = JsonSerializer.Deserialize(temp, _jsonSerializerOptions); + if (result.Data.Result != null && result.Data.Result.Any()) + { + foreach (InstantVectorModel item in result.Data.Result) + { + item.Value = ConvertJsonToObjValue(item.Value); + } + } return result as T ?? default!; } + default: + { + if (result.Data.Result != null && result.Data.Result.Any()) + { + result.Data.Result = ConvertJsonToObjValue(result.Data.Result); + } + } + break; } } return baseResult; } + + private static object[] ConvertJsonToObjValue(object[]? values) + { + if (values == null || values.Length - 2 < 0) + return default!; + + return new object[] { Convert.ToDouble(values[0]), values[1]?.ToString() ?? default! }; + } } diff --git a/Masa.Utils.Data.Promethus/ServiceCollectionExtensions.cs b/Masa.Utils.Data.Promethus/ServiceCollectionExtensions.cs index 8968c6f..f271af4 100644 --- a/Masa.Utils.Data.Promethus/ServiceCollectionExtensions.cs +++ b/Masa.Utils.Data.Promethus/ServiceCollectionExtensions.cs @@ -1,10 +1,6 @@ // Copyright (c) MASA Stack All rights reserved. // Licensed under the MIT License. See LICENSE.txt in the project root for license information. -using Masa.Utils.Caller.Core; -using Masa.Utils.Caller.HttpClient; -using Microsoft.Extensions.DependencyInjection; - namespace Masa.Utils.Data.Promethus; public static class ServiceCollectionExtensions From 98cb7c9f0176b0fe6d8424c94ac4b262ffc37147 Mon Sep 17 00:00:00 2001 From: qinyouzeng Date: Mon, 20 Jun 2022 16:33:47 +0800 Subject: [PATCH 07/48] feat: fix enume and comments --- .../Enums/ResultStatuses.cs | 2 +- .../Enums/ResultTypes.cs | 1 + .../Extensions/ObjectExtensions.cs | 40 +++++++++---------- 3 files changed, 20 insertions(+), 23 deletions(-) diff --git a/Masa.Utils.Data.Promethus/Enums/ResultStatuses.cs b/Masa.Utils.Data.Promethus/Enums/ResultStatuses.cs index 10bea07..d9516f2 100644 --- a/Masa.Utils.Data.Promethus/Enums/ResultStatuses.cs +++ b/Masa.Utils.Data.Promethus/Enums/ResultStatuses.cs @@ -5,7 +5,7 @@ namespace Masa.Utils.Data.Promethus.Enums; public enum ResultStatuses { + None, Success, - Error } diff --git a/Masa.Utils.Data.Promethus/Enums/ResultTypes.cs b/Masa.Utils.Data.Promethus/Enums/ResultTypes.cs index 6d4a855..bb0064e 100644 --- a/Masa.Utils.Data.Promethus/Enums/ResultTypes.cs +++ b/Masa.Utils.Data.Promethus/Enums/ResultTypes.cs @@ -5,6 +5,7 @@ namespace Masa.Utils.Data.Promethus.Enums; public enum ResultTypes { + None, Matrix, Vector, Scalar, diff --git a/Masa.Utils.Data.Promethus/Extensions/ObjectExtensions.cs b/Masa.Utils.Data.Promethus/Extensions/ObjectExtensions.cs index e585b27..adc94dc 100644 --- a/Masa.Utils.Data.Promethus/Extensions/ObjectExtensions.cs +++ b/Masa.Utils.Data.Promethus/Extensions/ObjectExtensions.cs @@ -27,23 +27,25 @@ public static class ObjectExtensions { if (obj == null) return null; var type = obj.GetType(); - if (type == typeof(string))//string + if (type == typeof(string)) { var str = (string)obj; return AppendValue(preStr, str, "=", isUrlEncode); } else if (type.IsValueType) { - if (type.IsEnum)//enum + if (type.IsEnum) { var str = isEnumString ? obj.ToString() : Convert.ToInt32(obj).ToString(); return AppendValue(preStr, str, "=", isUrlEncode); } - else if (!type.IsPrimitive) //struct + //struct + else if (!type.IsPrimitive) { return GetObjValue(type, obj, preStr, isEnumString, isCamelCase, isUrlEncode); } - else //sample value + //sample value + else { var str = obj.ToString(); return AppendValue(preStr, str, "=", isUrlEncode); @@ -57,9 +59,9 @@ public static class ObjectExtensions { return GetObjValue(type, obj, preStr, isEnumString, isCamelCase, isUrlEncode); } + //current not suport else { - // return null; } } @@ -69,26 +71,21 @@ private static string GetObjValue(Type type, object obj, string preStr, bool isE var properties = type.GetProperties(BindingFlags.Instance | BindingFlags.Public | BindingFlags.GetProperty); var fields = type.GetFields(BindingFlags.Instance | BindingFlags.Public | BindingFlags.GetField); var list = new List(); - if (properties.Length > 0) + + foreach (var item in properties) { - foreach (var item in properties) - { - var str = GetMemerInfoValue(item, item.GetValue(obj), preStr, isEnumString, isCamelCase, isUrlEncode); - if (string.IsNullOrEmpty(str)) - continue; - list.Add(str); - } + var str = GetMemerInfoValue(item, item.GetValue(obj), preStr, isEnumString, isCamelCase, isUrlEncode); + if (string.IsNullOrEmpty(str)) + continue; + list.Add(str); } - if (fields.Length > 0) + foreach (var item in fields) { - foreach (var item in fields) - { - var str = GetMemerInfoValue(item, item.GetValue(obj), preStr, isEnumString, isCamelCase, isUrlEncode); - if (string.IsNullOrEmpty(str)) - continue; - list.Add(str); - } + var str = GetMemerInfoValue(item, item.GetValue(obj), preStr, isEnumString, isCamelCase, isUrlEncode); + if (string.IsNullOrEmpty(str)) + continue; + list.Add(str); } if (!list.Any()) @@ -111,7 +108,6 @@ private static string GetObjValue(Type type, object obj, string preStr, bool isE private static string? GetEnumerableValue(object obj, string preStr, bool isEnumString = false, bool isCamelCase = true, bool isUrlEncode = true) { - StringBuilder builder = new StringBuilder(4096); var list = new List(); foreach (var item in (IEnumerable)obj) { From b6597397788fc6b5157de89bf705b0960535ff4f Mon Sep 17 00:00:00 2001 From: qinyouzeng Date: Tue, 21 Jun 2022 14:25:43 +0800 Subject: [PATCH 08/48] feat: code styles and other specifications update --- .../Enums/ResultTypes.cs | 3 ++ ...ensions.cs => CallerProviderExtensions.cs} | 12 ++--- .../Extensions/ObjectExtensions.cs | 51 +++++++++--------- .../Extensions/StringExtensions.cs | 4 +- .../IMasaPromethusClient.cs | 12 ++--- .../MasaPromethusClient.cs | 54 +++++++++---------- ...sultModel.cs => ExemplarResultResponse.cs} | 2 +- ...lResultModel.cs => LabelResultResponse.cs} | 2 +- ...eResultModel.cs => SerieResultResponse.cs} | 2 +- ...nModel.cs => QueryResultCommonResponse.cs} | 4 +- .../Reponse/Query/QueryResultDataResponse.cs | 11 ++++ .../Query/QueryResultInstantVectorResponse.cs | 11 ++++ .../Query/QueryResultMatrixRangeResponse.cs | 11 ++++ .../Query/ResponseQueryResultDataModel.cs | 25 --------- ...sultBaseModel.cs => ResultBaseResponse.cs} | 2 +- ...ueryModel.cs => LableValueQueryRequest.cs} | 2 +- ...aQueryModel.cs => MetaDataQueryRequest.cs} | 2 +- ...emplarModel.cs => QueryExemplarRequest.cs} | 2 +- ...ueryRangeModel.cs => QueryRangeRequest.cs} | 2 +- .../{RequestQueryModel.cs => QueryRequest.cs} | 2 +- Masa.Utils.Data.Promethus/_import.cs | 4 ++ .../Extensions/ObjectExtensionsTests.cs | 12 ++--- .../MasaPromethusClientTests.cs | 16 +++--- .../Masa.Utils.Data.Promethus.Test/_import.cs | 1 + 24 files changed, 130 insertions(+), 119 deletions(-) rename Masa.Utils.Data.Promethus/Extensions/{HttpClientExtensions.cs => CallerProviderExtensions.cs} (56%) rename Masa.Utils.Data.Promethus/Model/Reponse/Exemplar/{ResponseExemplarResultModel.cs => ExemplarResultResponse.cs} (89%) rename Masa.Utils.Data.Promethus/Model/Reponse/MetaData/{ResponseLabelResultModel.cs => LabelResultResponse.cs} (79%) rename Masa.Utils.Data.Promethus/Model/Reponse/MetaData/{ResponseSerieResultModel.cs => SerieResultResponse.cs} (80%) rename Masa.Utils.Data.Promethus/Model/Reponse/Query/{ResponseQueryResultCommonModel.cs => QueryResultCommonResponse.cs} (60%) create mode 100644 Masa.Utils.Data.Promethus/Model/Reponse/Query/QueryResultDataResponse.cs create mode 100644 Masa.Utils.Data.Promethus/Model/Reponse/Query/QueryResultInstantVectorResponse.cs create mode 100644 Masa.Utils.Data.Promethus/Model/Reponse/Query/QueryResultMatrixRangeResponse.cs delete mode 100644 Masa.Utils.Data.Promethus/Model/Reponse/Query/ResponseQueryResultDataModel.cs rename Masa.Utils.Data.Promethus/Model/Reponse/{ResponseResultBaseModel.cs => ResultBaseResponse.cs} (91%) rename Masa.Utils.Data.Promethus/Model/Request/{RequestLableValueQueryModel.cs => LableValueQueryRequest.cs} (78%) rename Masa.Utils.Data.Promethus/Model/Request/{RequestMetaDataQueryModel.cs => MetaDataQueryRequest.cs} (89%) rename Masa.Utils.Data.Promethus/Model/Request/{RequestQueryExemplarModel.cs => QueryExemplarRequest.cs} (88%) rename Masa.Utils.Data.Promethus/Model/Request/{RequestQueryRangeModel.cs => QueryRangeRequest.cs} (91%) rename Masa.Utils.Data.Promethus/Model/Request/{RequestQueryModel.cs => QueryRequest.cs} (91%) diff --git a/Masa.Utils.Data.Promethus/Enums/ResultTypes.cs b/Masa.Utils.Data.Promethus/Enums/ResultTypes.cs index bb0064e..d857163 100644 --- a/Masa.Utils.Data.Promethus/Enums/ResultTypes.cs +++ b/Masa.Utils.Data.Promethus/Enums/ResultTypes.cs @@ -3,6 +3,9 @@ namespace Masa.Utils.Data.Promethus.Enums; +/// +/// reference https://prometheus.io/docs/prometheus/latest/querying/api/#expression-query-result-formats +/// public enum ResultTypes { None, diff --git a/Masa.Utils.Data.Promethus/Extensions/HttpClientExtensions.cs b/Masa.Utils.Data.Promethus/Extensions/CallerProviderExtensions.cs similarity index 56% rename from Masa.Utils.Data.Promethus/Extensions/HttpClientExtensions.cs rename to Masa.Utils.Data.Promethus/Extensions/CallerProviderExtensions.cs index 322089a..8791bfe 100644 --- a/Masa.Utils.Data.Promethus/Extensions/HttpClientExtensions.cs +++ b/Masa.Utils.Data.Promethus/Extensions/CallerProviderExtensions.cs @@ -3,14 +3,14 @@ [assembly: InternalsVisibleTo("Masa.Utils.Data.Promethus.Test")] -namespace Masa.Utils.Data.Promethus; +namespace Masa.Utils.Caller.Core; -internal static class HttpClientExtensions +internal static class CallerProviderExtensions { - public static async Task GetAsync(this ICallerProvider caller, string url,object data) + public static async Task GetAsync(this ICallerProvider caller, string url, object data) { - var request=new HttpRequestMessage(HttpMethod.Get, $"{url}?{data?.ToUrlParam()}"); - var response= await caller.SendAsync(request); + var request = new HttpRequestMessage(HttpMethod.Get, $"{url}?{data.ToUrlParam()}"); + var response = await caller.SendAsync(request); return await response.Content.ReadAsStringAsync(); - } + } } diff --git a/Masa.Utils.Data.Promethus/Extensions/ObjectExtensions.cs b/Masa.Utils.Data.Promethus/Extensions/ObjectExtensions.cs index adc94dc..8fc5323 100644 --- a/Masa.Utils.Data.Promethus/Extensions/ObjectExtensions.cs +++ b/Masa.Utils.Data.Promethus/Extensions/ObjectExtensions.cs @@ -1,29 +1,27 @@ // Copyright (c) MASA Stack All rights reserved. // Licensed under the MIT License. See LICENSE.txt in the project root for license information. -using System.Collections; -using System.Reflection; -using System.Text; -using System.Web; - -namespace Masa.Utils.Data.Promethus; +namespace System; public static class ObjectExtensions { /// - /// not support System.text.json + /// 当前支持类型:class、struct和实现IEnumerable接口的类型, + /// struct默认和class 使用公开get属性和字段, + /// IEnumerable类型直接转化为:key[]=value1&key[]=value2 + /// enum 默认使用字符串,如果需要使用数值,请设置isEnumString=false /// /// /// /// /// /// - public static string? ToUrlParam(this object obj, bool isEnumString = true, bool isCamelCase = true, bool isUrlEncode = true) + public static string? ToUrlParam(this object? obj, bool isEnumString = true, bool isCamelCase = true, bool isUrlEncode = true) { return GetValue(obj, string.Empty, isEnumString, isCamelCase, isUrlEncode); } - private static string? GetValue(object obj, string preStr, bool isEnumString = false, bool isCamelCase = true, bool isUrlEncode = true) + private static string? GetValue(object? obj, string preStr, bool isEnumString = false, bool isCamelCase = true, bool isUrlEncode = true) { if (obj == null) return null; var type = obj.GetType(); @@ -32,38 +30,34 @@ public static class ObjectExtensions var str = (string)obj; return AppendValue(preStr, str, "=", isUrlEncode); } - else if (type.IsValueType) + + if (type.IsValueType) { if (type.IsEnum) { var str = isEnumString ? obj.ToString() : Convert.ToInt32(obj).ToString(); return AppendValue(preStr, str, "=", isUrlEncode); } - //struct - else if (!type.IsPrimitive) - { - return GetObjValue(type, obj, preStr, isEnumString, isCamelCase, isUrlEncode); - } + //sample value - else + if (type.IsPrimitive) { var str = obj.ToString(); return AppendValue(preStr, str, "=", isUrlEncode); } + + //struct + return GetObjValue(type, obj, preStr, isEnumString, isCamelCase, isUrlEncode); } - else if (type.IsArray || type.GetInterfaces().Any(t => t.Name.IndexOf("IEnumerable") == 0)) - { + + if (type.IsArray || type.GetInterfaces().Any(t => t.Name.IndexOf("IEnumerable") == 0)) return GetEnumerableValue(obj, preStr, isEnumString, isCamelCase, isUrlEncode); - } - else if (type.IsClass) - { + + if (type.IsClass) return GetObjValue(type, obj, preStr, isEnumString, isCamelCase, isUrlEncode); - } - //current not suport - else - { - return null; - } + + //current type not suport + return null; } private static string GetObjValue(Type type, object obj, string preStr, bool isEnumString = false, bool isCamelCase = true, bool isUrlEncode = true) @@ -90,6 +84,7 @@ private static string GetObjValue(Type type, object obj, string preStr, bool isE if (!list.Any()) return default!; + list.Sort(); return string.Join('&', list); } @@ -129,6 +124,7 @@ private static string GetObjValue(Type type, object obj, string preStr, bool isE } if (!list.Any()) return default!; + list.Sort(); return string.Join('&', list); } @@ -137,6 +133,7 @@ private static string GetObjValue(Type type, object obj, string preStr, bool isE { if (string.IsNullOrEmpty(preStr) || string.IsNullOrEmpty(value)) return value; + if (isUrlEncode) return $"{preStr}{splitChar}{HttpUtility.UrlEncode(value, Encoding.UTF8)}"; else diff --git a/Masa.Utils.Data.Promethus/Extensions/StringExtensions.cs b/Masa.Utils.Data.Promethus/Extensions/StringExtensions.cs index de3a405..a484b7f 100644 --- a/Masa.Utils.Data.Promethus/Extensions/StringExtensions.cs +++ b/Masa.Utils.Data.Promethus/Extensions/StringExtensions.cs @@ -1,7 +1,7 @@ // Copyright (c) MASA Stack All rights reserved. // Licensed under the MIT License. See LICENSE.txt in the project root for license information. -namespace Masa.Utils.Data.Promethus; +namespace System; internal static class StringExtensions { @@ -10,7 +10,7 @@ public static string ToCamelCase(this string str) if (string.IsNullOrEmpty(str)) return default!; - var span = new ReadOnlySpan(str.ToArray()); + var span = new ReadOnlySpan(str.ToArray()); var c = span[0]; if (c - 'A' >= 0 && c - 'Z' <= 0) return $"{(char)(c + 32)}{span[1..]}"; diff --git a/Masa.Utils.Data.Promethus/IMasaPromethusClient.cs b/Masa.Utils.Data.Promethus/IMasaPromethusClient.cs index f393627..2461208 100644 --- a/Masa.Utils.Data.Promethus/IMasaPromethusClient.cs +++ b/Masa.Utils.Data.Promethus/IMasaPromethusClient.cs @@ -5,15 +5,15 @@ namespace Masa.Utils.Data.Promethus; internal interface IMasaPromethusClient { - Task QueryAsync(RequestQueryModel query); + Task QueryAsync(QueryRequest query); - Task QueryRangeAsync(RequestQueryRangeModel query); + Task QueryRangeAsync(QueryRangeRequest query); - Task SeriesAsync(RequestMetaDataQueryModel query); + Task SeriesAsync(MetaDataQueryRequest query); - Task LabelsQueryAsync(RequestMetaDataQueryModel query); + Task LabelsQueryAsync(MetaDataQueryRequest query); - Task LabelValuesQueryAsync(RequestLableValueQueryModel query); + Task LabelValuesQueryAsync(LableValueQueryRequest query); - Task ExemplarQueryAsync(RequestQueryExemplarModel query); + Task ExemplarQueryAsync(QueryExemplarRequest query); } diff --git a/Masa.Utils.Data.Promethus/MasaPromethusClient.cs b/Masa.Utils.Data.Promethus/MasaPromethusClient.cs index 7d23ff0..67ec987 100644 --- a/Masa.Utils.Data.Promethus/MasaPromethusClient.cs +++ b/Masa.Utils.Data.Promethus/MasaPromethusClient.cs @@ -8,7 +8,7 @@ namespace Masa.Utils.Data.Promethus; internal class MasaPromethusClient : IMasaPromethusClient { private readonly ICallerProvider _caller; - private static JsonSerializerOptions _jsonSerializerOptions = new JsonSerializerOptions + private static JsonSerializerOptions _jsonSerializerOptions = new() { PropertyNameCaseInsensitive = true }; @@ -18,47 +18,39 @@ public MasaPromethusClient(ICallerProvider caller) _caller = caller; } - public async Task ExemplarQueryAsync(RequestQueryExemplarModel query) + public async Task ExemplarQueryAsync(QueryExemplarRequest query) { - return await QueryDataAsync("/api/v1/query_exemplars", query); + return await QueryDataAsync("/api/v1/query_exemplars", query); } - public async Task LabelsQueryAsync(RequestMetaDataQueryModel query) + public async Task LabelsQueryAsync(MetaDataQueryRequest query) { - return await QueryDataAsync("/api/v1/labels", query); + return await QueryDataAsync("/api/v1/labels", query); } - public async Task LabelValuesQueryAsync(RequestLableValueQueryModel query) + public async Task LabelValuesQueryAsync(LableValueQueryRequest query) { var name = query.Lable; query.Lable = null; - return await QueryDataAsync($"/api/v1/label/{name}/values", query); + return await QueryDataAsync($"/api/v1/label/{name}/values", query); } - public async Task QueryAsync(RequestQueryModel query) + public async Task QueryAsync(QueryRequest query) { - return await QueryDataAsync("/api/v1/query", query); + return await QueryDataAsync("/api/v1/query", query); } - public async Task QueryRangeAsync(RequestQueryRangeModel query) + public async Task QueryRangeAsync(QueryRangeRequest query) { - return await QueryDataAsync("/api/v1/query_range", query); + return await QueryDataAsync("/api/v1/query_range", query); } - public async Task SeriesAsync(RequestMetaDataQueryModel query) + public async Task SeriesAsync(MetaDataQueryRequest query) { - return await QueryDataAsync("/api/v1/series", query); + return await QueryDataAsync("/api/v1/series", query); } - private void CheckOption() - { - if (_jsonSerializerOptions.Converters.Any(t => t.GetType() == typeof(JsonStringEnumConverter))) - return; - else - _jsonSerializerOptions.Converters.Add(new JsonStringEnumConverter()); - } - - private async Task QueryDataAsync(string url, object data) where T : ResponseResultBaseModel + private async Task QueryDataAsync(string url, object data) where T : ResultBaseResponse { var str = await _caller.GetAsync(url, data); if (string.IsNullOrEmpty(str)) @@ -72,9 +64,9 @@ private async Task QueryDataAsync(string url, object data) where T : Respo return baseResult ?? default!; } - if (typeof(T) == typeof(ResponseQueryResultCommonModel)) + if (typeof(T) == typeof(QueryResultCommonResponse)) { - var result = baseResult as ResponseQueryResultCommonModel; + var result = baseResult as QueryResultCommonResponse; if (result == null || result.Data == null) return baseResult; switch (result.Data.ResultType) @@ -82,10 +74,10 @@ private async Task QueryDataAsync(string url, object data) where T : Respo case ResultTypes.Matrix: { var temp = JsonSerializer.Serialize(result.Data.Result, _jsonSerializerOptions); - result.Data.Result = JsonSerializer.Deserialize(temp, _jsonSerializerOptions); + result.Data.Result = JsonSerializer.Deserialize(temp, _jsonSerializerOptions); if (result.Data.Result != null && result.Data.Result.Any()) { - foreach (MatrixRangeModel item in result.Data.Result) + foreach (QueryResultMatrixRangeResponse item in result.Data.Result) { if (item.Values == null || !item.Values.Any()) continue; @@ -105,10 +97,10 @@ private async Task QueryDataAsync(string url, object data) where T : Respo case ResultTypes.Vector: { var temp = JsonSerializer.Serialize(result.Data.Result, _jsonSerializerOptions); - result.Data.Result = JsonSerializer.Deserialize(temp, _jsonSerializerOptions); + result.Data.Result = JsonSerializer.Deserialize(temp, _jsonSerializerOptions); if (result.Data.Result != null && result.Data.Result.Any()) { - foreach (InstantVectorModel item in result.Data.Result) + foreach (QueryResultInstantVectorResponse item in result.Data.Result) { item.Value = ConvertJsonToObjValue(item.Value); } @@ -129,6 +121,12 @@ private async Task QueryDataAsync(string url, object data) where T : Respo return baseResult; } + private static void CheckOption() + { + if (!_jsonSerializerOptions.Converters.Any(t => t.GetType() == typeof(JsonStringEnumConverter))) + _jsonSerializerOptions.Converters.Add(new JsonStringEnumConverter()); + } + private static object[] ConvertJsonToObjValue(object[]? values) { if (values == null || values.Length - 2 < 0) diff --git a/Masa.Utils.Data.Promethus/Model/Reponse/Exemplar/ResponseExemplarResultModel.cs b/Masa.Utils.Data.Promethus/Model/Reponse/Exemplar/ExemplarResultResponse.cs similarity index 89% rename from Masa.Utils.Data.Promethus/Model/Reponse/Exemplar/ResponseExemplarResultModel.cs rename to Masa.Utils.Data.Promethus/Model/Reponse/Exemplar/ExemplarResultResponse.cs index ac20eb6..f3a83c8 100644 --- a/Masa.Utils.Data.Promethus/Model/Reponse/Exemplar/ResponseExemplarResultModel.cs +++ b/Masa.Utils.Data.Promethus/Model/Reponse/Exemplar/ExemplarResultResponse.cs @@ -3,7 +3,7 @@ namespace Masa.Utils.Data.Promethus.Model; -public class ResponseExemplarResultModel : ResponseResultBaseModel +public class ExemplarResultResponse : ResultBaseResponse { public IEnumerable? Data { get; set; } } diff --git a/Masa.Utils.Data.Promethus/Model/Reponse/MetaData/ResponseLabelResultModel.cs b/Masa.Utils.Data.Promethus/Model/Reponse/MetaData/LabelResultResponse.cs similarity index 79% rename from Masa.Utils.Data.Promethus/Model/Reponse/MetaData/ResponseLabelResultModel.cs rename to Masa.Utils.Data.Promethus/Model/Reponse/MetaData/LabelResultResponse.cs index b8441e6..928a8ff 100644 --- a/Masa.Utils.Data.Promethus/Model/Reponse/MetaData/ResponseLabelResultModel.cs +++ b/Masa.Utils.Data.Promethus/Model/Reponse/MetaData/LabelResultResponse.cs @@ -3,7 +3,7 @@ namespace Masa.Utils.Data.Promethus.Model; -public class ResponseLabelResultModel : ResponseResultBaseModel +public class LabelResultResponse : ResultBaseResponse { public IEnumerable? Data { get; set; } } diff --git a/Masa.Utils.Data.Promethus/Model/Reponse/MetaData/ResponseSerieResultModel.cs b/Masa.Utils.Data.Promethus/Model/Reponse/MetaData/SerieResultResponse.cs similarity index 80% rename from Masa.Utils.Data.Promethus/Model/Reponse/MetaData/ResponseSerieResultModel.cs rename to Masa.Utils.Data.Promethus/Model/Reponse/MetaData/SerieResultResponse.cs index 2b15b28..979103c 100644 --- a/Masa.Utils.Data.Promethus/Model/Reponse/MetaData/ResponseSerieResultModel.cs +++ b/Masa.Utils.Data.Promethus/Model/Reponse/MetaData/SerieResultResponse.cs @@ -3,7 +3,7 @@ namespace Masa.Utils.Data.Promethus.Model; -public class ResponseSerieResultModel : ResponseResultBaseModel +public class SerieResultResponse : ResultBaseResponse { public IEnumerable>? Data { get; set; } } diff --git a/Masa.Utils.Data.Promethus/Model/Reponse/Query/ResponseQueryResultCommonModel.cs b/Masa.Utils.Data.Promethus/Model/Reponse/Query/QueryResultCommonResponse.cs similarity index 60% rename from Masa.Utils.Data.Promethus/Model/Reponse/Query/ResponseQueryResultCommonModel.cs rename to Masa.Utils.Data.Promethus/Model/Reponse/Query/QueryResultCommonResponse.cs index af28041..da20b58 100644 --- a/Masa.Utils.Data.Promethus/Model/Reponse/Query/ResponseQueryResultCommonModel.cs +++ b/Masa.Utils.Data.Promethus/Model/Reponse/Query/QueryResultCommonResponse.cs @@ -3,7 +3,7 @@ namespace Masa.Utils.Data.Promethus.Model; -public class ResponseQueryResultCommonModel: ResponseResultBaseModel +public class QueryResultCommonResponse: ResultBaseResponse { - public ResponseQueryResultDataModel? Data { get; set; } + public QueryResultDataResponse? Data { get; set; } } diff --git a/Masa.Utils.Data.Promethus/Model/Reponse/Query/QueryResultDataResponse.cs b/Masa.Utils.Data.Promethus/Model/Reponse/Query/QueryResultDataResponse.cs new file mode 100644 index 0000000..e4ef8d7 --- /dev/null +++ b/Masa.Utils.Data.Promethus/Model/Reponse/Query/QueryResultDataResponse.cs @@ -0,0 +1,11 @@ +// Copyright (c) MASA Stack All rights reserved. +// Licensed under the MIT License. See LICENSE.txt in the project root for license information. + +namespace Masa.Utils.Data.Promethus.Model; + +public class QueryResultDataResponse +{ + public ResultTypes ResultType { get; set; } + + public object[]? Result { get; set; } +} diff --git a/Masa.Utils.Data.Promethus/Model/Reponse/Query/QueryResultInstantVectorResponse.cs b/Masa.Utils.Data.Promethus/Model/Reponse/Query/QueryResultInstantVectorResponse.cs new file mode 100644 index 0000000..e14ffe2 --- /dev/null +++ b/Masa.Utils.Data.Promethus/Model/Reponse/Query/QueryResultInstantVectorResponse.cs @@ -0,0 +1,11 @@ +// Copyright (c) MASA Stack All rights reserved. +// Licensed under the MIT License. See LICENSE.txt in the project root for license information. + +namespace Masa.Utils.Data.Promethus.Model; + +public class QueryResultInstantVectorResponse +{ + public IDictionary? Metric { get; set; } + + public object[]? Value { get; set; } +} diff --git a/Masa.Utils.Data.Promethus/Model/Reponse/Query/QueryResultMatrixRangeResponse.cs b/Masa.Utils.Data.Promethus/Model/Reponse/Query/QueryResultMatrixRangeResponse.cs new file mode 100644 index 0000000..d67c464 --- /dev/null +++ b/Masa.Utils.Data.Promethus/Model/Reponse/Query/QueryResultMatrixRangeResponse.cs @@ -0,0 +1,11 @@ +// Copyright (c) MASA Stack All rights reserved. +// Licensed under the MIT License. See LICENSE.txt in the project root for license information. + +namespace Masa.Utils.Data.Promethus.Model; + +public class QueryResultMatrixRangeResponse +{ + public IDictionary? Metric { get; set; } + + public IEnumerable? Values { get; set; } +} diff --git a/Masa.Utils.Data.Promethus/Model/Reponse/Query/ResponseQueryResultDataModel.cs b/Masa.Utils.Data.Promethus/Model/Reponse/Query/ResponseQueryResultDataModel.cs deleted file mode 100644 index 495e67d..0000000 --- a/Masa.Utils.Data.Promethus/Model/Reponse/Query/ResponseQueryResultDataModel.cs +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright (c) MASA Stack All rights reserved. -// Licensed under the MIT License. See LICENSE.txt in the project root for license information. - -namespace Masa.Utils.Data.Promethus.Model; - -public class ResponseQueryResultDataModel -{ - public ResultTypes ResultType { get; set; } - - public object[]? Result { get; set; } -} - -public class InstantVectorModel -{ - public IDictionary? Metric { get; set; } - - public object[]? Value { get; set; } -} - -public class MatrixRangeModel -{ - public IDictionary? Metric { get; set; } - - public IEnumerable? Values { get; set; } -} diff --git a/Masa.Utils.Data.Promethus/Model/Reponse/ResponseResultBaseModel.cs b/Masa.Utils.Data.Promethus/Model/Reponse/ResultBaseResponse.cs similarity index 91% rename from Masa.Utils.Data.Promethus/Model/Reponse/ResponseResultBaseModel.cs rename to Masa.Utils.Data.Promethus/Model/Reponse/ResultBaseResponse.cs index 8262259..df8b2fe 100644 --- a/Masa.Utils.Data.Promethus/Model/Reponse/ResponseResultBaseModel.cs +++ b/Masa.Utils.Data.Promethus/Model/Reponse/ResultBaseResponse.cs @@ -3,7 +3,7 @@ namespace Masa.Utils.Data.Promethus.Model; -public class ResponseResultBaseModel +public class ResultBaseResponse { public ResultStatuses Status { get; set; } diff --git a/Masa.Utils.Data.Promethus/Model/Request/RequestLableValueQueryModel.cs b/Masa.Utils.Data.Promethus/Model/Request/LableValueQueryRequest.cs similarity index 78% rename from Masa.Utils.Data.Promethus/Model/Request/RequestLableValueQueryModel.cs rename to Masa.Utils.Data.Promethus/Model/Request/LableValueQueryRequest.cs index 33b9f84..ae331e1 100644 --- a/Masa.Utils.Data.Promethus/Model/Request/RequestLableValueQueryModel.cs +++ b/Masa.Utils.Data.Promethus/Model/Request/LableValueQueryRequest.cs @@ -3,7 +3,7 @@ namespace Masa.Utils.Data.Promethus.Model; -public class RequestLableValueQueryModel: RequestMetaDataQueryModel +public class LableValueQueryRequest: MetaDataQueryRequest { public string Lable { get; set; } = "__name__"; } diff --git a/Masa.Utils.Data.Promethus/Model/Request/RequestMetaDataQueryModel.cs b/Masa.Utils.Data.Promethus/Model/Request/MetaDataQueryRequest.cs similarity index 89% rename from Masa.Utils.Data.Promethus/Model/Request/RequestMetaDataQueryModel.cs rename to Masa.Utils.Data.Promethus/Model/Request/MetaDataQueryRequest.cs index 5d034d0..6e6b062 100644 --- a/Masa.Utils.Data.Promethus/Model/Request/RequestMetaDataQueryModel.cs +++ b/Masa.Utils.Data.Promethus/Model/Request/MetaDataQueryRequest.cs @@ -3,7 +3,7 @@ namespace Masa.Utils.Data.Promethus.Model; -public class RequestMetaDataQueryModel +public class MetaDataQueryRequest { public IEnumerable? Match { get; set; } diff --git a/Masa.Utils.Data.Promethus/Model/Request/RequestQueryExemplarModel.cs b/Masa.Utils.Data.Promethus/Model/Request/QueryExemplarRequest.cs similarity index 88% rename from Masa.Utils.Data.Promethus/Model/Request/RequestQueryExemplarModel.cs rename to Masa.Utils.Data.Promethus/Model/Request/QueryExemplarRequest.cs index 98be977..921593a 100644 --- a/Masa.Utils.Data.Promethus/Model/Request/RequestQueryExemplarModel.cs +++ b/Masa.Utils.Data.Promethus/Model/Request/QueryExemplarRequest.cs @@ -3,7 +3,7 @@ namespace Masa.Utils.Data.Promethus.Model; -internal class RequestQueryExemplarModel +internal class QueryExemplarRequest { public string? Query { get; set; } diff --git a/Masa.Utils.Data.Promethus/Model/Request/RequestQueryRangeModel.cs b/Masa.Utils.Data.Promethus/Model/Request/QueryRangeRequest.cs similarity index 91% rename from Masa.Utils.Data.Promethus/Model/Request/RequestQueryRangeModel.cs rename to Masa.Utils.Data.Promethus/Model/Request/QueryRangeRequest.cs index 040e21f..f13773f 100644 --- a/Masa.Utils.Data.Promethus/Model/Request/RequestQueryRangeModel.cs +++ b/Masa.Utils.Data.Promethus/Model/Request/QueryRangeRequest.cs @@ -3,7 +3,7 @@ namespace Masa.Utils.Data.Promethus.Model; -public class RequestQueryRangeModel +public class QueryRangeRequest { public string? Query { get; set; } diff --git a/Masa.Utils.Data.Promethus/Model/Request/RequestQueryModel.cs b/Masa.Utils.Data.Promethus/Model/Request/QueryRequest.cs similarity index 91% rename from Masa.Utils.Data.Promethus/Model/Request/RequestQueryModel.cs rename to Masa.Utils.Data.Promethus/Model/Request/QueryRequest.cs index f243e13..d6b2f83 100644 --- a/Masa.Utils.Data.Promethus/Model/Request/RequestQueryModel.cs +++ b/Masa.Utils.Data.Promethus/Model/Request/QueryRequest.cs @@ -3,7 +3,7 @@ namespace Masa.Utils.Data.Promethus.Model; -public class RequestQueryModel +public class QueryRequest { public string? Query { get; set; } diff --git a/Masa.Utils.Data.Promethus/_import.cs b/Masa.Utils.Data.Promethus/_import.cs index 31c1272..e49bded 100644 --- a/Masa.Utils.Data.Promethus/_import.cs +++ b/Masa.Utils.Data.Promethus/_import.cs @@ -6,6 +6,10 @@ global using Masa.Utils.Data.Promethus.Enums; global using Masa.Utils.Data.Promethus.Model; global using Microsoft.Extensions.DependencyInjection; +global using System.Collections; +global using System.Reflection; global using System.Runtime.CompilerServices; +global using System.Text; global using System.Text.Json; global using System.Text.Json.Serialization; +global using System.Web; diff --git a/test/Masa.Utils.Data.Promethus.Test/Extensions/ObjectExtensionsTests.cs b/test/Masa.Utils.Data.Promethus.Test/Extensions/ObjectExtensionsTests.cs index 4dee596..40f42d0 100644 --- a/test/Masa.Utils.Data.Promethus.Test/Extensions/ObjectExtensionsTests.cs +++ b/test/Masa.Utils.Data.Promethus.Test/Extensions/ObjectExtensionsTests.cs @@ -79,13 +79,13 @@ public void ArrayTest() [TestMethod] public void ObjArrayTest() { - var array = new RequestQueryModel[] { - new RequestQueryModel{ + var array = new QueryRequest[] { + new QueryRequest{ Query="where1", Time="2021-01-02", TimeOut="5s" }, - new RequestQueryModel{ + new QueryRequest{ Query="where2", Time="2021-01-01", TimeOut="5s" @@ -120,13 +120,13 @@ public void IEnumberTest() [TestMethod] public void ObjListTest() { - var array = new List { - new RequestQueryModel{ + var array = new List { + new QueryRequest{ Query="where1", Time="2021-01-02", TimeOut="5s" }, - new RequestQueryModel{ + new QueryRequest{ Query="where2", Time="2021-01-01", TimeOut="5s" diff --git a/test/Masa.Utils.Data.Promethus.Test/MasaPromethusClientTests.cs b/test/Masa.Utils.Data.Promethus.Test/MasaPromethusClientTests.cs index 3eb1bac..426bb97 100644 --- a/test/Masa.Utils.Data.Promethus.Test/MasaPromethusClientTests.cs +++ b/test/Masa.Utils.Data.Promethus.Test/MasaPromethusClientTests.cs @@ -19,7 +19,7 @@ public void Initialize() [TestMethod] public async Task TestQueryAsync() { - var result = await _client.QueryAsync(new RequestQueryModel + var result = await _client.QueryAsync(new QueryRequest { Query = "up" }); @@ -31,14 +31,14 @@ public async Task TestQueryAsync() [TestMethod] public async Task TestQueryVectorAsync() { - var result = await _client.QueryAsync(new RequestQueryModel + var result = await _client.QueryAsync(new QueryRequest { Query = "up" }); if (result.Data.Result != null) { - var data = result.Data.Result as InstantVectorModel[]; + var data = result.Data.Result as QueryResultInstantVectorResponse[]; Assert.IsNotNull(data); Assert.IsNotNull(data[0].Metric); @@ -52,7 +52,7 @@ public async Task TestQueryVectorAsync() [TestMethod] public async Task TestQueryRangeAsync() { - var result = await _client.QueryRangeAsync(new RequestQueryRangeModel + var result = await _client.QueryRangeAsync(new QueryRangeRequest { Query = "up", Start = "2022-06-17T02:00:00.000Z", @@ -64,7 +64,7 @@ public async Task TestQueryRangeAsync() Assert.IsNotNull(result.Data); if (result.Data.ResultType == ResultTypes.Matrix) { - var data = result.Data.Result as MatrixRangeModel[]; + var data = result.Data.Result as QueryResultMatrixRangeResponse[]; Assert.IsNotNull(data); Assert.IsNotNull(data[0].Metric); Assert.IsNotNull(data[0].Values); @@ -74,7 +74,7 @@ public async Task TestQueryRangeAsync() [TestMethod] public async Task TestSeriesAsync() { - var result = await _client.SeriesAsync(new RequestMetaDataQueryModel + var result = await _client.SeriesAsync(new MetaDataQueryRequest { Match = new string[] { "up" }, Start = "2022-06-17T02:00:00.000Z", @@ -96,7 +96,7 @@ public async Task TestLabelsQueryAsync() [TestMethod] public async Task TestLabelValuesQueryAsync() { - var result = await _client.LabelValuesQueryAsync(new RequestLableValueQueryModel()); + var result = await _client.LabelValuesQueryAsync(new LableValueQueryRequest()); Assert.IsNotNull(result); Assert.AreEqual(result.Status, ResultStatuses.Success); Assert.IsTrue(result.Data.Count() > 0); @@ -106,7 +106,7 @@ public async Task TestLabelValuesQueryAsync() [DataRow()] public async Task TestExemplarQueryAsync() { - var param = new RequestQueryExemplarModel + var param = new QueryExemplarRequest { Query = "up", Start = "2022-06-17T02:00:00.000Z", diff --git a/test/Masa.Utils.Data.Promethus.Test/_import.cs b/test/Masa.Utils.Data.Promethus.Test/_import.cs index f6a2a12..6b0e0fe 100644 --- a/test/Masa.Utils.Data.Promethus.Test/_import.cs +++ b/test/Masa.Utils.Data.Promethus.Test/_import.cs @@ -5,6 +5,7 @@ global using Masa.Utils.Data.Promethus.Model; global using Microsoft.Extensions.DependencyInjection; global using Microsoft.VisualStudio.TestTools.UnitTesting; +global using System; global using System.Collections.Generic; global using System.Linq; global using System.Text; From 743b82d916aefaa3bd8a45801cf743efd728b55f Mon Sep 17 00:00:00 2001 From: qinyouzeng Date: Tue, 21 Jun 2022 15:12:40 +0800 Subject: [PATCH 09/48] feat: update callerprovider inject --- Masa.Utils.Data.Promethus/MasaPromethusClient.cs | 15 +++------------ .../ServiceCollectionExtensions.cs | 14 +++++++++++++- 2 files changed, 16 insertions(+), 13 deletions(-) diff --git a/Masa.Utils.Data.Promethus/MasaPromethusClient.cs b/Masa.Utils.Data.Promethus/MasaPromethusClient.cs index 67ec987..a37d798 100644 --- a/Masa.Utils.Data.Promethus/MasaPromethusClient.cs +++ b/Masa.Utils.Data.Promethus/MasaPromethusClient.cs @@ -8,14 +8,12 @@ namespace Masa.Utils.Data.Promethus; internal class MasaPromethusClient : IMasaPromethusClient { private readonly ICallerProvider _caller; - private static JsonSerializerOptions _jsonSerializerOptions = new() - { - PropertyNameCaseInsensitive = true - }; + private readonly JsonSerializerOptions _jsonSerializerOptions; - public MasaPromethusClient(ICallerProvider caller) + public MasaPromethusClient(ICallerProvider caller, JsonSerializerOptions jsonSerializerOptions) { _caller = caller; + _jsonSerializerOptions = jsonSerializerOptions; } public async Task ExemplarQueryAsync(QueryExemplarRequest query) @@ -56,7 +54,6 @@ private async Task QueryDataAsync(string url, object data) where T : Resul if (string.IsNullOrEmpty(str)) return default!; - CheckOption(); var baseResult = JsonSerializer.Deserialize(str, _jsonSerializerOptions); if (baseResult == null || baseResult.Status != ResultStatuses.Success) @@ -121,12 +118,6 @@ private async Task QueryDataAsync(string url, object data) where T : Resul return baseResult; } - private static void CheckOption() - { - if (!_jsonSerializerOptions.Converters.Any(t => t.GetType() == typeof(JsonStringEnumConverter))) - _jsonSerializerOptions.Converters.Add(new JsonStringEnumConverter()); - } - private static object[] ConvertJsonToObjValue(object[]? values) { if (values == null || values.Length - 2 < 0) diff --git a/Masa.Utils.Data.Promethus/ServiceCollectionExtensions.cs b/Masa.Utils.Data.Promethus/ServiceCollectionExtensions.cs index f271af4..bbad527 100644 --- a/Masa.Utils.Data.Promethus/ServiceCollectionExtensions.cs +++ b/Masa.Utils.Data.Promethus/ServiceCollectionExtensions.cs @@ -20,7 +20,19 @@ public static IServiceCollection AddPromethusClient(this IServiceCollection serv }); }); - services.AddScoped(); + var jsonOptions = new JsonSerializerOptions + { + PropertyNameCaseInsensitive = true + }; + jsonOptions.Converters.Add(new JsonStringEnumConverter()); + + services.AddScoped(ServiceProvider => + { + var callerFactory = ServiceProvider.GetService(); + if (callerFactory == null) + return default!; + return new MasaPromethusClient(callerFactory.CreateClient(PROMETHUS_HTTP_CLIENT_NAME), jsonOptions); + }); return services; } } From 477691b92d0f1043134c1061e6ff6977880fc881 Mon Sep 17 00:00:00 2001 From: qinyouzeng Date: Tue, 21 Jun 2022 15:41:33 +0800 Subject: [PATCH 10/48] feat: update jsonelement convert to obj --- Masa.Utils.Data.Promethus/MasaPromethusClient.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Masa.Utils.Data.Promethus/MasaPromethusClient.cs b/Masa.Utils.Data.Promethus/MasaPromethusClient.cs index a37d798..65f2f4f 100644 --- a/Masa.Utils.Data.Promethus/MasaPromethusClient.cs +++ b/Masa.Utils.Data.Promethus/MasaPromethusClient.cs @@ -123,6 +123,6 @@ private static object[] ConvertJsonToObjValue(object[]? values) if (values == null || values.Length - 2 < 0) return default!; - return new object[] { Convert.ToDouble(values[0]), values[1]?.ToString() ?? default! }; + return new object[] { ((JsonElement)values[0]).GetDouble(), ((JsonElement)values[1]).GetString() ?? default! }; } } From 89ed2eb3469d472f23331021ed2255149b3438d1 Mon Sep 17 00:00:00 2001 From: qinyouzeng Date: Wed, 22 Jun 2022 14:40:03 +0800 Subject: [PATCH 11/48] feat: update extensions --- Masa.Utils.Data.Promethus/ServiceCollectionExtensions.cs | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/Masa.Utils.Data.Promethus/ServiceCollectionExtensions.cs b/Masa.Utils.Data.Promethus/ServiceCollectionExtensions.cs index bbad527..f1bc316 100644 --- a/Masa.Utils.Data.Promethus/ServiceCollectionExtensions.cs +++ b/Masa.Utils.Data.Promethus/ServiceCollectionExtensions.cs @@ -11,6 +11,9 @@ public static IServiceCollection AddPromethusClient(this IServiceCollection serv { ArgumentNullException.ThrowIfNull(uri, nameof(uri)); + if (services.Any(service => service.GetType() == typeof(IMasaPromethusClient))) + return services; + services.AddCaller(builder => { builder.UseHttpClient(options => @@ -28,10 +31,8 @@ public static IServiceCollection AddPromethusClient(this IServiceCollection serv services.AddScoped(ServiceProvider => { - var callerFactory = ServiceProvider.GetService(); - if (callerFactory == null) - return default!; - return new MasaPromethusClient(callerFactory.CreateClient(PROMETHUS_HTTP_CLIENT_NAME), jsonOptions); + var caller = ServiceProvider.GetRequiredService().CreateClient(PROMETHUS_HTTP_CLIENT_NAME); + return new MasaPromethusClient(caller, jsonOptions); }); return services; } From b21d1633908de2eb23dbe8d253d1062a1ece210c Mon Sep 17 00:00:00 2001 From: qinyouzeng Date: Wed, 22 Jun 2022 14:54:03 +0800 Subject: [PATCH 12/48] feat: update internal to public --- Masa.Utils.Data.Promethus/IMasaPromethusClient.cs | 2 +- Masa.Utils.Data.Promethus/Model/Request/QueryExemplarRequest.cs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Masa.Utils.Data.Promethus/IMasaPromethusClient.cs b/Masa.Utils.Data.Promethus/IMasaPromethusClient.cs index 2461208..e6776fd 100644 --- a/Masa.Utils.Data.Promethus/IMasaPromethusClient.cs +++ b/Masa.Utils.Data.Promethus/IMasaPromethusClient.cs @@ -3,7 +3,7 @@ namespace Masa.Utils.Data.Promethus; -internal interface IMasaPromethusClient +public interface IMasaPromethusClient { Task QueryAsync(QueryRequest query); diff --git a/Masa.Utils.Data.Promethus/Model/Request/QueryExemplarRequest.cs b/Masa.Utils.Data.Promethus/Model/Request/QueryExemplarRequest.cs index 921593a..5e1b45b 100644 --- a/Masa.Utils.Data.Promethus/Model/Request/QueryExemplarRequest.cs +++ b/Masa.Utils.Data.Promethus/Model/Request/QueryExemplarRequest.cs @@ -3,7 +3,7 @@ namespace Masa.Utils.Data.Promethus.Model; -internal class QueryExemplarRequest +public class QueryExemplarRequest { public string? Query { get; set; } From b57c46849a4e742ee6f0387b5d3e65c339c61e1f Mon Sep 17 00:00:00 2001 From: qinyouzeng Date: Thu, 23 Jun 2022 18:55:26 +0800 Subject: [PATCH 13/48] feat: update directory --- Masa.Utils.sln | 11 ++++++++--- .../Enums/ResultStatuses.cs | 0 .../Masa.Utils.Data.Promethus}/Enums/ResultTypes.cs | 0 .../Extensions/CallerProviderExtensions.cs | 0 .../Extensions/ObjectExtensions.cs | 0 .../Extensions/StringExtensions.cs | 0 .../IMasaPromethusClient.cs | 0 .../Masa.Utils.Data.Promethus.csproj | 4 ++-- .../Masa.Utils.Data.Promethus}/MasaPromethusClient.cs | 0 .../Model/Reponse/Exemplar/ExemplarResultResponse.cs | 0 .../Model/Reponse/MetaData/LabelResultResponse.cs | 0 .../Model/Reponse/MetaData/SerieResultResponse.cs | 0 .../Model/Reponse/Query/QueryResultCommonResponse.cs | 0 .../Model/Reponse/Query/QueryResultDataResponse.cs | 0 .../Reponse/Query/QueryResultInstantVectorResponse.cs | 0 .../Reponse/Query/QueryResultMatrixRangeResponse.cs | 0 .../Model/Reponse/ResultBaseResponse.cs | 0 .../Model/Request/LableValueQueryRequest.cs | 0 .../Model/Request/MetaDataQueryRequest.cs | 0 .../Model/Request/QueryExemplarRequest.cs | 0 .../Model/Request/QueryRangeRequest.cs | 0 .../Model/Request/QueryRequest.cs | 0 .../Data/Masa.Utils.Data.Promethus}/README.md | 0 .../Data/Masa.Utils.Data.Promethus}/README.zh-CN.md | 0 .../ServiceCollectionExtensions.cs | 0 .../Data/Masa.Utils.Data.Promethus}/_import.cs | 0 .../Masa.Utils.Data.Promethus.Test.csproj | 4 ---- 27 files changed, 10 insertions(+), 9 deletions(-) rename {Masa.Utils.Data.Promethus => src/Data/Masa.Utils.Data.Promethus}/Enums/ResultStatuses.cs (100%) rename {Masa.Utils.Data.Promethus => src/Data/Masa.Utils.Data.Promethus}/Enums/ResultTypes.cs (100%) rename {Masa.Utils.Data.Promethus => src/Data/Masa.Utils.Data.Promethus}/Extensions/CallerProviderExtensions.cs (100%) rename {Masa.Utils.Data.Promethus => src/Data/Masa.Utils.Data.Promethus}/Extensions/ObjectExtensions.cs (100%) rename {Masa.Utils.Data.Promethus => src/Data/Masa.Utils.Data.Promethus}/Extensions/StringExtensions.cs (100%) rename {Masa.Utils.Data.Promethus => src/Data/Masa.Utils.Data.Promethus}/IMasaPromethusClient.cs (100%) rename {Masa.Utils.Data.Promethus => src/Data/Masa.Utils.Data.Promethus}/Masa.Utils.Data.Promethus.csproj (52%) rename {Masa.Utils.Data.Promethus => src/Data/Masa.Utils.Data.Promethus}/MasaPromethusClient.cs (100%) rename {Masa.Utils.Data.Promethus => src/Data/Masa.Utils.Data.Promethus}/Model/Reponse/Exemplar/ExemplarResultResponse.cs (100%) rename {Masa.Utils.Data.Promethus => src/Data/Masa.Utils.Data.Promethus}/Model/Reponse/MetaData/LabelResultResponse.cs (100%) rename {Masa.Utils.Data.Promethus => src/Data/Masa.Utils.Data.Promethus}/Model/Reponse/MetaData/SerieResultResponse.cs (100%) rename {Masa.Utils.Data.Promethus => src/Data/Masa.Utils.Data.Promethus}/Model/Reponse/Query/QueryResultCommonResponse.cs (100%) rename {Masa.Utils.Data.Promethus => src/Data/Masa.Utils.Data.Promethus}/Model/Reponse/Query/QueryResultDataResponse.cs (100%) rename {Masa.Utils.Data.Promethus => src/Data/Masa.Utils.Data.Promethus}/Model/Reponse/Query/QueryResultInstantVectorResponse.cs (100%) rename {Masa.Utils.Data.Promethus => src/Data/Masa.Utils.Data.Promethus}/Model/Reponse/Query/QueryResultMatrixRangeResponse.cs (100%) rename {Masa.Utils.Data.Promethus => src/Data/Masa.Utils.Data.Promethus}/Model/Reponse/ResultBaseResponse.cs (100%) rename {Masa.Utils.Data.Promethus => src/Data/Masa.Utils.Data.Promethus}/Model/Request/LableValueQueryRequest.cs (100%) rename {Masa.Utils.Data.Promethus => src/Data/Masa.Utils.Data.Promethus}/Model/Request/MetaDataQueryRequest.cs (100%) rename {Masa.Utils.Data.Promethus => src/Data/Masa.Utils.Data.Promethus}/Model/Request/QueryExemplarRequest.cs (100%) rename {Masa.Utils.Data.Promethus => src/Data/Masa.Utils.Data.Promethus}/Model/Request/QueryRangeRequest.cs (100%) rename {Masa.Utils.Data.Promethus => src/Data/Masa.Utils.Data.Promethus}/Model/Request/QueryRequest.cs (100%) rename {Masa.Utils.Data.Promethus => src/Data/Masa.Utils.Data.Promethus}/README.md (100%) rename {Masa.Utils.Data.Promethus => src/Data/Masa.Utils.Data.Promethus}/README.zh-CN.md (100%) rename {Masa.Utils.Data.Promethus => src/Data/Masa.Utils.Data.Promethus}/ServiceCollectionExtensions.cs (100%) rename {Masa.Utils.Data.Promethus => src/Data/Masa.Utils.Data.Promethus}/_import.cs (100%) diff --git a/Masa.Utils.sln b/Masa.Utils.sln index 6947361..a149d8c 100644 --- a/Masa.Utils.sln +++ b/Masa.Utils.sln @@ -101,11 +101,11 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Validations", "Validations" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Masa.Utils.Extensions.Validations.FluentValidation", "src\Extensions\Validations\Masa.Utils.Extensions.Validations.FluentValidation\Masa.Utils.Extensions.Validations.FluentValidation.csproj", "{B0E3CA19-C101-4E30-9401-C017B7088F4E}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Masa.Utils.Security.Authentication.OpenIdConnect", "src\Security\Masa.Utils.Security.Authentication.OpenIdConnect\Masa.Utils.Security.Authentication.OpenIdConnect.csproj", "{D17B5B36-5773-4827-9D5D-44390DF666CA}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Masa.Utils.Security.Authentication.OpenIdConnect", "src\Security\Masa.Utils.Security.Authentication.OpenIdConnect\Masa.Utils.Security.Authentication.OpenIdConnect.csproj", "{D17B5B36-5773-4827-9D5D-44390DF666CA}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Masa.Utils.Data.Promethus", "Masa.Utils.Data.Promethus\Masa.Utils.Data.Promethus.csproj", "{577A7F40-A22E-466B-972B-BFE65F700B12}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Masa.Utils.Data.Promethus.Test", "test\Masa.Utils.Data.Promethus.Test\Masa.Utils.Data.Promethus.Test.csproj", "{AC19E221-D3CF-49E9-8E41-A7580C0736AA}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Masa.Utils.Data.Promethus.Test", "test\Masa.Utils.Data.Promethus.Test\Masa.Utils.Data.Promethus.Test.csproj", "{AC19E221-D3CF-49E9-8E41-A7580C0736AA}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Masa.Utils.Data.Promethus", "src\Data\Masa.Utils.Data.Promethus\Masa.Utils.Data.Promethus.csproj", "{B108BA38-AC93-4983-8361-43BF819985C7}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -261,6 +261,10 @@ Global {AC19E221-D3CF-49E9-8E41-A7580C0736AA}.Debug|Any CPU.Build.0 = Debug|Any CPU {AC19E221-D3CF-49E9-8E41-A7580C0736AA}.Release|Any CPU.ActiveCfg = Release|Any CPU {AC19E221-D3CF-49E9-8E41-A7580C0736AA}.Release|Any CPU.Build.0 = Release|Any CPU + {B108BA38-AC93-4983-8361-43BF819985C7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B108BA38-AC93-4983-8361-43BF819985C7}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B108BA38-AC93-4983-8361-43BF819985C7}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B108BA38-AC93-4983-8361-43BF819985C7}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -313,6 +317,7 @@ Global {577A7F40-A22E-466B-972B-BFE65F700B12} = {F844C2A1-C36D-400E-A0D8-7658EF9C3B93} {AC19E221-D3CF-49E9-8E41-A7580C0736AA} = {4F908878-0EB8-43E4-96E4-8B1F32E9B635} {D17B5B36-5773-4827-9D5D-44390DF666CA} = {4FB3BD6D-D4C1-4BEF-AD62-8FD6EAEEB4DF} + {B108BA38-AC93-4983-8361-43BF819985C7} = {F844C2A1-C36D-400E-A0D8-7658EF9C3B93} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {D7DAA0E6-098F-4B18-8775-64FDA96F1FF0} diff --git a/Masa.Utils.Data.Promethus/Enums/ResultStatuses.cs b/src/Data/Masa.Utils.Data.Promethus/Enums/ResultStatuses.cs similarity index 100% rename from Masa.Utils.Data.Promethus/Enums/ResultStatuses.cs rename to src/Data/Masa.Utils.Data.Promethus/Enums/ResultStatuses.cs diff --git a/Masa.Utils.Data.Promethus/Enums/ResultTypes.cs b/src/Data/Masa.Utils.Data.Promethus/Enums/ResultTypes.cs similarity index 100% rename from Masa.Utils.Data.Promethus/Enums/ResultTypes.cs rename to src/Data/Masa.Utils.Data.Promethus/Enums/ResultTypes.cs diff --git a/Masa.Utils.Data.Promethus/Extensions/CallerProviderExtensions.cs b/src/Data/Masa.Utils.Data.Promethus/Extensions/CallerProviderExtensions.cs similarity index 100% rename from Masa.Utils.Data.Promethus/Extensions/CallerProviderExtensions.cs rename to src/Data/Masa.Utils.Data.Promethus/Extensions/CallerProviderExtensions.cs diff --git a/Masa.Utils.Data.Promethus/Extensions/ObjectExtensions.cs b/src/Data/Masa.Utils.Data.Promethus/Extensions/ObjectExtensions.cs similarity index 100% rename from Masa.Utils.Data.Promethus/Extensions/ObjectExtensions.cs rename to src/Data/Masa.Utils.Data.Promethus/Extensions/ObjectExtensions.cs diff --git a/Masa.Utils.Data.Promethus/Extensions/StringExtensions.cs b/src/Data/Masa.Utils.Data.Promethus/Extensions/StringExtensions.cs similarity index 100% rename from Masa.Utils.Data.Promethus/Extensions/StringExtensions.cs rename to src/Data/Masa.Utils.Data.Promethus/Extensions/StringExtensions.cs diff --git a/Masa.Utils.Data.Promethus/IMasaPromethusClient.cs b/src/Data/Masa.Utils.Data.Promethus/IMasaPromethusClient.cs similarity index 100% rename from Masa.Utils.Data.Promethus/IMasaPromethusClient.cs rename to src/Data/Masa.Utils.Data.Promethus/IMasaPromethusClient.cs diff --git a/Masa.Utils.Data.Promethus/Masa.Utils.Data.Promethus.csproj b/src/Data/Masa.Utils.Data.Promethus/Masa.Utils.Data.Promethus.csproj similarity index 52% rename from Masa.Utils.Data.Promethus/Masa.Utils.Data.Promethus.csproj rename to src/Data/Masa.Utils.Data.Promethus/Masa.Utils.Data.Promethus.csproj index 2a21f39..d3bd13a 100644 --- a/Masa.Utils.Data.Promethus/Masa.Utils.Data.Promethus.csproj +++ b/src/Data/Masa.Utils.Data.Promethus/Masa.Utils.Data.Promethus.csproj @@ -7,8 +7,8 @@ - - + + diff --git a/Masa.Utils.Data.Promethus/MasaPromethusClient.cs b/src/Data/Masa.Utils.Data.Promethus/MasaPromethusClient.cs similarity index 100% rename from Masa.Utils.Data.Promethus/MasaPromethusClient.cs rename to src/Data/Masa.Utils.Data.Promethus/MasaPromethusClient.cs diff --git a/Masa.Utils.Data.Promethus/Model/Reponse/Exemplar/ExemplarResultResponse.cs b/src/Data/Masa.Utils.Data.Promethus/Model/Reponse/Exemplar/ExemplarResultResponse.cs similarity index 100% rename from Masa.Utils.Data.Promethus/Model/Reponse/Exemplar/ExemplarResultResponse.cs rename to src/Data/Masa.Utils.Data.Promethus/Model/Reponse/Exemplar/ExemplarResultResponse.cs diff --git a/Masa.Utils.Data.Promethus/Model/Reponse/MetaData/LabelResultResponse.cs b/src/Data/Masa.Utils.Data.Promethus/Model/Reponse/MetaData/LabelResultResponse.cs similarity index 100% rename from Masa.Utils.Data.Promethus/Model/Reponse/MetaData/LabelResultResponse.cs rename to src/Data/Masa.Utils.Data.Promethus/Model/Reponse/MetaData/LabelResultResponse.cs diff --git a/Masa.Utils.Data.Promethus/Model/Reponse/MetaData/SerieResultResponse.cs b/src/Data/Masa.Utils.Data.Promethus/Model/Reponse/MetaData/SerieResultResponse.cs similarity index 100% rename from Masa.Utils.Data.Promethus/Model/Reponse/MetaData/SerieResultResponse.cs rename to src/Data/Masa.Utils.Data.Promethus/Model/Reponse/MetaData/SerieResultResponse.cs diff --git a/Masa.Utils.Data.Promethus/Model/Reponse/Query/QueryResultCommonResponse.cs b/src/Data/Masa.Utils.Data.Promethus/Model/Reponse/Query/QueryResultCommonResponse.cs similarity index 100% rename from Masa.Utils.Data.Promethus/Model/Reponse/Query/QueryResultCommonResponse.cs rename to src/Data/Masa.Utils.Data.Promethus/Model/Reponse/Query/QueryResultCommonResponse.cs diff --git a/Masa.Utils.Data.Promethus/Model/Reponse/Query/QueryResultDataResponse.cs b/src/Data/Masa.Utils.Data.Promethus/Model/Reponse/Query/QueryResultDataResponse.cs similarity index 100% rename from Masa.Utils.Data.Promethus/Model/Reponse/Query/QueryResultDataResponse.cs rename to src/Data/Masa.Utils.Data.Promethus/Model/Reponse/Query/QueryResultDataResponse.cs diff --git a/Masa.Utils.Data.Promethus/Model/Reponse/Query/QueryResultInstantVectorResponse.cs b/src/Data/Masa.Utils.Data.Promethus/Model/Reponse/Query/QueryResultInstantVectorResponse.cs similarity index 100% rename from Masa.Utils.Data.Promethus/Model/Reponse/Query/QueryResultInstantVectorResponse.cs rename to src/Data/Masa.Utils.Data.Promethus/Model/Reponse/Query/QueryResultInstantVectorResponse.cs diff --git a/Masa.Utils.Data.Promethus/Model/Reponse/Query/QueryResultMatrixRangeResponse.cs b/src/Data/Masa.Utils.Data.Promethus/Model/Reponse/Query/QueryResultMatrixRangeResponse.cs similarity index 100% rename from Masa.Utils.Data.Promethus/Model/Reponse/Query/QueryResultMatrixRangeResponse.cs rename to src/Data/Masa.Utils.Data.Promethus/Model/Reponse/Query/QueryResultMatrixRangeResponse.cs diff --git a/Masa.Utils.Data.Promethus/Model/Reponse/ResultBaseResponse.cs b/src/Data/Masa.Utils.Data.Promethus/Model/Reponse/ResultBaseResponse.cs similarity index 100% rename from Masa.Utils.Data.Promethus/Model/Reponse/ResultBaseResponse.cs rename to src/Data/Masa.Utils.Data.Promethus/Model/Reponse/ResultBaseResponse.cs diff --git a/Masa.Utils.Data.Promethus/Model/Request/LableValueQueryRequest.cs b/src/Data/Masa.Utils.Data.Promethus/Model/Request/LableValueQueryRequest.cs similarity index 100% rename from Masa.Utils.Data.Promethus/Model/Request/LableValueQueryRequest.cs rename to src/Data/Masa.Utils.Data.Promethus/Model/Request/LableValueQueryRequest.cs diff --git a/Masa.Utils.Data.Promethus/Model/Request/MetaDataQueryRequest.cs b/src/Data/Masa.Utils.Data.Promethus/Model/Request/MetaDataQueryRequest.cs similarity index 100% rename from Masa.Utils.Data.Promethus/Model/Request/MetaDataQueryRequest.cs rename to src/Data/Masa.Utils.Data.Promethus/Model/Request/MetaDataQueryRequest.cs diff --git a/Masa.Utils.Data.Promethus/Model/Request/QueryExemplarRequest.cs b/src/Data/Masa.Utils.Data.Promethus/Model/Request/QueryExemplarRequest.cs similarity index 100% rename from Masa.Utils.Data.Promethus/Model/Request/QueryExemplarRequest.cs rename to src/Data/Masa.Utils.Data.Promethus/Model/Request/QueryExemplarRequest.cs diff --git a/Masa.Utils.Data.Promethus/Model/Request/QueryRangeRequest.cs b/src/Data/Masa.Utils.Data.Promethus/Model/Request/QueryRangeRequest.cs similarity index 100% rename from Masa.Utils.Data.Promethus/Model/Request/QueryRangeRequest.cs rename to src/Data/Masa.Utils.Data.Promethus/Model/Request/QueryRangeRequest.cs diff --git a/Masa.Utils.Data.Promethus/Model/Request/QueryRequest.cs b/src/Data/Masa.Utils.Data.Promethus/Model/Request/QueryRequest.cs similarity index 100% rename from Masa.Utils.Data.Promethus/Model/Request/QueryRequest.cs rename to src/Data/Masa.Utils.Data.Promethus/Model/Request/QueryRequest.cs diff --git a/Masa.Utils.Data.Promethus/README.md b/src/Data/Masa.Utils.Data.Promethus/README.md similarity index 100% rename from Masa.Utils.Data.Promethus/README.md rename to src/Data/Masa.Utils.Data.Promethus/README.md diff --git a/Masa.Utils.Data.Promethus/README.zh-CN.md b/src/Data/Masa.Utils.Data.Promethus/README.zh-CN.md similarity index 100% rename from Masa.Utils.Data.Promethus/README.zh-CN.md rename to src/Data/Masa.Utils.Data.Promethus/README.zh-CN.md diff --git a/Masa.Utils.Data.Promethus/ServiceCollectionExtensions.cs b/src/Data/Masa.Utils.Data.Promethus/ServiceCollectionExtensions.cs similarity index 100% rename from Masa.Utils.Data.Promethus/ServiceCollectionExtensions.cs rename to src/Data/Masa.Utils.Data.Promethus/ServiceCollectionExtensions.cs diff --git a/Masa.Utils.Data.Promethus/_import.cs b/src/Data/Masa.Utils.Data.Promethus/_import.cs similarity index 100% rename from Masa.Utils.Data.Promethus/_import.cs rename to src/Data/Masa.Utils.Data.Promethus/_import.cs diff --git a/test/Masa.Utils.Data.Promethus.Test/Masa.Utils.Data.Promethus.Test.csproj b/test/Masa.Utils.Data.Promethus.Test/Masa.Utils.Data.Promethus.Test.csproj index a5c8de0..f72bee8 100644 --- a/test/Masa.Utils.Data.Promethus.Test/Masa.Utils.Data.Promethus.Test.csproj +++ b/test/Masa.Utils.Data.Promethus.Test/Masa.Utils.Data.Promethus.Test.csproj @@ -14,8 +14,4 @@ - - - - From 4496cea76cf1d29b5a6d99baab3e2a09302a358c Mon Sep 17 00:00:00 2001 From: qinyouzeng Date: Fri, 24 Jun 2022 11:24:29 +0800 Subject: [PATCH 14/48] feat: test refrence update --- .../Masa.Utils.Data.Promethus.Test.csproj | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/test/Masa.Utils.Data.Promethus.Test/Masa.Utils.Data.Promethus.Test.csproj b/test/Masa.Utils.Data.Promethus.Test/Masa.Utils.Data.Promethus.Test.csproj index f72bee8..cea9b29 100644 --- a/test/Masa.Utils.Data.Promethus.Test/Masa.Utils.Data.Promethus.Test.csproj +++ b/test/Masa.Utils.Data.Promethus.Test/Masa.Utils.Data.Promethus.Test.csproj @@ -14,4 +14,8 @@ + + + + From e2f583561140478a61688c51afe0068ee0863aed Mon Sep 17 00:00:00 2001 From: qinyouzeng Date: Fri, 24 Jun 2022 15:29:00 +0800 Subject: [PATCH 15/48] chore: comments and filename update --- .../Extensions/ObjectExtensions.cs | 8 ++++---- .../Masa.Utils.Data.Promethus/{_import.cs => _Imports.cs} | 0 2 files changed, 4 insertions(+), 4 deletions(-) rename src/Data/Masa.Utils.Data.Promethus/{_import.cs => _Imports.cs} (100%) diff --git a/src/Data/Masa.Utils.Data.Promethus/Extensions/ObjectExtensions.cs b/src/Data/Masa.Utils.Data.Promethus/Extensions/ObjectExtensions.cs index 8fc5323..040a876 100644 --- a/src/Data/Masa.Utils.Data.Promethus/Extensions/ObjectExtensions.cs +++ b/src/Data/Masa.Utils.Data.Promethus/Extensions/ObjectExtensions.cs @@ -6,10 +6,10 @@ namespace System; public static class ObjectExtensions { /// - /// 当前支持类型:class、struct和实现IEnumerable接口的类型, - /// struct默认和class 使用公开get属性和字段, - /// IEnumerable类型直接转化为:key[]=value1&key[]=value2 - /// enum 默认使用字符串,如果需要使用数值,请设置isEnumString=false + /// Currently supported types: class, struct and types implementing the IEnumerable interface, + /// struct and class use public get properties and fields by default, + /// The IEnumerable type is directly converted to: key[]=value1&key[]=value2 + /// enum uses strings by default. If you need to use numeric values, please set isEnumString=false /// /// /// diff --git a/src/Data/Masa.Utils.Data.Promethus/_import.cs b/src/Data/Masa.Utils.Data.Promethus/_Imports.cs similarity index 100% rename from src/Data/Masa.Utils.Data.Promethus/_import.cs rename to src/Data/Masa.Utils.Data.Promethus/_Imports.cs From 5c2d7982d8c3c07c4caf9358059fe1bb636b04e1 Mon Sep 17 00:00:00 2001 From: qinyouzeng Date: Tue, 28 Jun 2022 11:23:14 +0800 Subject: [PATCH 16/48] chore: remove not exists project id --- Masa.Utils.sln | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/Masa.Utils.sln b/Masa.Utils.sln index a149d8c..38847a1 100644 --- a/Masa.Utils.sln +++ b/Masa.Utils.sln @@ -248,11 +248,7 @@ Global {B0E3CA19-C101-4E30-9401-C017B7088F4E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {B0E3CA19-C101-4E30-9401-C017B7088F4E}.Debug|Any CPU.Build.0 = Debug|Any CPU {B0E3CA19-C101-4E30-9401-C017B7088F4E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B0E3CA19-C101-4E30-9401-C017B7088F4E}.Release|Any CPU.Build.0 = Release|Any CPU - {577A7F40-A22E-466B-972B-BFE65F700B12}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {577A7F40-A22E-466B-972B-BFE65F700B12}.Debug|Any CPU.Build.0 = Debug|Any CPU - {577A7F40-A22E-466B-972B-BFE65F700B12}.Release|Any CPU.ActiveCfg = Release|Any CPU - {577A7F40-A22E-466B-972B-BFE65F700B12}.Release|Any CPU.Build.0 = Release|Any CPU + {B0E3CA19-C101-4E30-9401-C017B7088F4E}.Release|Any CPU.Build.0 = Release|Any CPU {D17B5B36-5773-4827-9D5D-44390DF666CA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {D17B5B36-5773-4827-9D5D-44390DF666CA}.Debug|Any CPU.Build.0 = Debug|Any CPU {D17B5B36-5773-4827-9D5D-44390DF666CA}.Release|Any CPU.ActiveCfg = Release|Any CPU @@ -314,7 +310,6 @@ Global {22643BF8-A5ED-48CA-BD1A-10BFEC075DBE} = {4F908878-0EB8-43E4-96E4-8B1F32E9B635} {533BCE80-61BC-443A-95D3-2C6328921ED8} = {B2DA607D-4A39-4F0C-A9B3-DD9A061B0B4E} {B0E3CA19-C101-4E30-9401-C017B7088F4E} = {533BCE80-61BC-443A-95D3-2C6328921ED8} - {577A7F40-A22E-466B-972B-BFE65F700B12} = {F844C2A1-C36D-400E-A0D8-7658EF9C3B93} {AC19E221-D3CF-49E9-8E41-A7580C0736AA} = {4F908878-0EB8-43E4-96E4-8B1F32E9B635} {D17B5B36-5773-4827-9D5D-44390DF666CA} = {4FB3BD6D-D4C1-4BEF-AD62-8FD6EAEEB4DF} {B108BA38-AC93-4983-8361-43BF819985C7} = {F844C2A1-C36D-400E-A0D8-7658EF9C3B93} From d22d39c063379e1d413598b1f769f12e98cea264 Mon Sep 17 00:00:00 2001 From: qinyouzeng Date: Tue, 28 Jun 2022 13:43:57 +0800 Subject: [PATCH 17/48] chore: update docs and code style --- .../Extensions/CallerProviderExtensions.cs | 1 - .../MasaPromethusClient.cs | 1 - src/Data/Masa.Utils.Data.Promethus/README.md | 28 ++- .../Masa.Utils.Data.Promethus/README.zh-CN.md | 30 ++- .../Masa.Utils.Data.Promethus.Test.csproj | 8 +- .../MasaPromethusClientTests.cs | 189 +++++++++--------- .../UserStruct.cs | 17 +- .../{_import.cs => _Imports.cs} | 0 8 files changed, 158 insertions(+), 116 deletions(-) rename test/Masa.Utils.Data.Promethus.Test/{_import.cs => _Imports.cs} (100%) diff --git a/src/Data/Masa.Utils.Data.Promethus/Extensions/CallerProviderExtensions.cs b/src/Data/Masa.Utils.Data.Promethus/Extensions/CallerProviderExtensions.cs index 8791bfe..00e79c8 100644 --- a/src/Data/Masa.Utils.Data.Promethus/Extensions/CallerProviderExtensions.cs +++ b/src/Data/Masa.Utils.Data.Promethus/Extensions/CallerProviderExtensions.cs @@ -2,7 +2,6 @@ // Licensed under the MIT License. See LICENSE.txt in the project root for license information. [assembly: InternalsVisibleTo("Masa.Utils.Data.Promethus.Test")] - namespace Masa.Utils.Caller.Core; internal static class CallerProviderExtensions diff --git a/src/Data/Masa.Utils.Data.Promethus/MasaPromethusClient.cs b/src/Data/Masa.Utils.Data.Promethus/MasaPromethusClient.cs index 65f2f4f..7b89ecd 100644 --- a/src/Data/Masa.Utils.Data.Promethus/MasaPromethusClient.cs +++ b/src/Data/Masa.Utils.Data.Promethus/MasaPromethusClient.cs @@ -2,7 +2,6 @@ // Licensed under the MIT License. See LICENSE.txt in the project root for license information. [assembly: InternalsVisibleTo("Masa.Utils.Data.Promethus.Test")] - namespace Masa.Utils.Data.Promethus; internal class MasaPromethusClient : IMasaPromethusClient diff --git a/src/Data/Masa.Utils.Data.Promethus/README.md b/src/Data/Masa.Utils.Data.Promethus/README.md index 20aa5b7..796dbc1 100644 --- a/src/Data/Masa.Utils.Data.Promethus/README.md +++ b/src/Data/Masa.Utils.Data.Promethus/README.md @@ -31,7 +31,33 @@ builder.Services.AddPromethusClient("http://127.0.0.1:9090"); public async Task QueryAsync() { - var result=await _client.QueryAsync(...); + var query= new QueryRequest { + Query = "up", //metric name + Time = "2022-06-01T09:00:00.000Z" //standard time format or unix timestamp, such as: 1654045200 or 1654045200.000 + }; + var result = await _client.QueryAsync(query); + if(result.Status == ResultStatuses.Success){ + switch(result.Data.ResultType){ + case ResultTypes.Vector: + { + var data=result.Data.Result as QueryResultInstantVectorResponse[]; + ... + } + break; + case ResultTypes.Matrix: + { + var data=result.Data.Result as QueryResultMatrixRangeResponse[]; + ... + } + break; + default: + { + var timeSpan=(double)result.Data.Result[0]; + var value=(string)result.Data.Result[1]; + } + break; + } + } } } ``` diff --git a/src/Data/Masa.Utils.Data.Promethus/README.zh-CN.md b/src/Data/Masa.Utils.Data.Promethus/README.zh-CN.md index 5994848..bcdbd21 100644 --- a/src/Data/Masa.Utils.Data.Promethus/README.zh-CN.md +++ b/src/Data/Masa.Utils.Data.Promethus/README.zh-CN.md @@ -11,7 +11,7 @@ Install-Package Masa.Utils.Data.Promethus ### 用法: -1. 注入services +1. 注册services ```` C# builder.Services.AddPromethusClient("http://127.0.0.1:9090"); @@ -31,7 +31,33 @@ builder.Services.AddPromethusClient("http://127.0.0.1:9090"); public async Task QueryAsync() { - var result=await _client.QueryAsync(...); + var query= new QueryRequest { + Query = "up", //metric name + Time = "2022-06-01T09:00:00.000Z" //标准时间格式或unix时间戳,如:1654045200或1654045200.000 + }; + var result = await _client.QueryAsync(query); + if(result.Status == ResultStatuses.Success){ + switch(result.Data.ResultType){ + case ResultTypes.Vector: + { + var data=result.Data.Result as QueryResultInstantVectorResponse[]; + ... + } + break; + case ResultTypes.Matrix: + { + var data=result.Data.Result as QueryResultMatrixRangeResponse[]; + ... + } + break; + default: + { + var timeSpan=(double)result.Data.Result[0]; + var value=(string)result.Data.Result[1]; + } + break; + } + } } } ``` diff --git a/test/Masa.Utils.Data.Promethus.Test/Masa.Utils.Data.Promethus.Test.csproj b/test/Masa.Utils.Data.Promethus.Test/Masa.Utils.Data.Promethus.Test.csproj index cea9b29..48d683d 100644 --- a/test/Masa.Utils.Data.Promethus.Test/Masa.Utils.Data.Promethus.Test.csproj +++ b/test/Masa.Utils.Data.Promethus.Test/Masa.Utils.Data.Promethus.Test.csproj @@ -8,10 +8,10 @@ - - - - + + + + diff --git a/test/Masa.Utils.Data.Promethus.Test/MasaPromethusClientTests.cs b/test/Masa.Utils.Data.Promethus.Test/MasaPromethusClientTests.cs index 426bb97..39950df 100644 --- a/test/Masa.Utils.Data.Promethus.Test/MasaPromethusClientTests.cs +++ b/test/Masa.Utils.Data.Promethus.Test/MasaPromethusClientTests.cs @@ -1,120 +1,119 @@ // Copyright (c) MASA Stack All rights reserved. // Licensed under the MIT License. See LICENSE.txt in the project root for license information. -namespace Masa.Utils.Data.Promethus.Test +namespace Masa.Utils.Data.Promethus.Test; + +[TestClass] +public class MasaPromethusClientTests { - [TestClass] - public class MasaPromethusClientTests + private IMasaPromethusClient _client; + + [TestInitialize] + public void Initialize() { - private IMasaPromethusClient _client; + IServiceCollection service = new ServiceCollection(); + service.AddPromethusClient("http://localhost:9090"); + _client = service.BuildServiceProvider().GetService(); + } - [TestInitialize] - public void Initialize() + [TestMethod] + public async Task TestQueryAsync() + { + var result = await _client.QueryAsync(new QueryRequest { - IServiceCollection service = new ServiceCollection(); - service.AddPromethusClient("http://localhost:9090"); - _client = service.BuildServiceProvider().GetService(); - } + Query = "up" + }); + Assert.IsNotNull(result); + Assert.AreEqual(result.Status, ResultStatuses.Success); + Assert.IsNotNull(result.Data); + } - [TestMethod] - public async Task TestQueryAsync() + [TestMethod] + public async Task TestQueryVectorAsync() + { + var result = await _client.QueryAsync(new QueryRequest { - var result = await _client.QueryAsync(new QueryRequest - { - Query = "up" - }); - Assert.IsNotNull(result); - Assert.AreEqual(result.Status, ResultStatuses.Success); - Assert.IsNotNull(result.Data); - } + Query = "up" + }); - [TestMethod] - public async Task TestQueryVectorAsync() + if (result.Data.Result != null) { - var result = await _client.QueryAsync(new QueryRequest - { - Query = "up" - }); - - if (result.Data.Result != null) - { - var data = result.Data.Result as QueryResultInstantVectorResponse[]; + var data = result.Data.Result as QueryResultInstantVectorResponse[]; - Assert.IsNotNull(data); - Assert.IsNotNull(data[0].Metric); - Assert.IsNotNull(data[0].Value); + Assert.IsNotNull(data); + Assert.IsNotNull(data[0].Metric); + Assert.IsNotNull(data[0].Value); - Assert.IsNotNull(data[0].Metric.Keys); - Assert.AreEqual(2, data[0].Value.Length); - } + Assert.IsNotNull(data[0].Metric.Keys); + Assert.AreEqual(2, data[0].Value.Length); } + } - [TestMethod] - public async Task TestQueryRangeAsync() + [TestMethod] + public async Task TestQueryRangeAsync() + { + var result = await _client.QueryRangeAsync(new QueryRangeRequest { - var result = await _client.QueryRangeAsync(new QueryRangeRequest - { - Query = "up", - Start = "2022-06-17T02:00:00.000Z", - End = "2022-06-17T02:30:00.000Z", - Step = "300s", - }); - Assert.IsNotNull(result); - Assert.AreEqual(result.Status, ResultStatuses.Success); - Assert.IsNotNull(result.Data); - if (result.Data.ResultType == ResultTypes.Matrix) - { - var data = result.Data.Result as QueryResultMatrixRangeResponse[]; - Assert.IsNotNull(data); - Assert.IsNotNull(data[0].Metric); - Assert.IsNotNull(data[0].Values); - } - } - - [TestMethod] - public async Task TestSeriesAsync() + Query = "up", + Start = "2022-06-17T02:00:00.000Z", + End = "2022-06-17T02:30:00.000Z", + Step = "300s", + }); + Assert.IsNotNull(result); + Assert.AreEqual(result.Status, ResultStatuses.Success); + Assert.IsNotNull(result.Data); + if (result.Data.ResultType == ResultTypes.Matrix) { - var result = await _client.SeriesAsync(new MetaDataQueryRequest - { - Match = new string[] { "up" }, - Start = "2022-06-17T02:00:00.000Z", - End = "2022-06-17T02:30:00.000Z" - }); - Assert.IsNotNull(result); - Assert.AreEqual(result.Status, ResultStatuses.Success); + var data = result.Data.Result as QueryResultMatrixRangeResponse[]; + Assert.IsNotNull(data); + Assert.IsNotNull(data[0].Metric); + Assert.IsNotNull(data[0].Values); } + } - [TestMethod] - public async Task TestLabelsQueryAsync() + [TestMethod] + public async Task TestSeriesAsync() + { + var result = await _client.SeriesAsync(new MetaDataQueryRequest { - var result = await _client.LabelsQueryAsync(default!); - Assert.IsNotNull(result); - Assert.AreEqual(result.Status, ResultStatuses.Success); - Assert.IsTrue(result.Data.Count() > 0); - } + Match = new string[] { "up" }, + Start = "2022-06-17T02:00:00.000Z", + End = "2022-06-17T02:30:00.000Z" + }); + Assert.IsNotNull(result); + Assert.AreEqual(result.Status, ResultStatuses.Success); + } - [TestMethod] - public async Task TestLabelValuesQueryAsync() - { - var result = await _client.LabelValuesQueryAsync(new LableValueQueryRequest()); - Assert.IsNotNull(result); - Assert.AreEqual(result.Status, ResultStatuses.Success); - Assert.IsTrue(result.Data.Count() > 0); - } + [TestMethod] + public async Task TestLabelsQueryAsync() + { + var result = await _client.LabelsQueryAsync(default!); + Assert.IsNotNull(result); + Assert.AreEqual(result.Status, ResultStatuses.Success); + Assert.IsTrue(result.Data.Count() > 0); + } + + [TestMethod] + public async Task TestLabelValuesQueryAsync() + { + var result = await _client.LabelValuesQueryAsync(new LableValueQueryRequest()); + Assert.IsNotNull(result); + Assert.AreEqual(result.Status, ResultStatuses.Success); + Assert.IsTrue(result.Data.Count() > 0); + } - [TestMethod] - [DataRow()] - public async Task TestExemplarQueryAsync() + [TestMethod] + [DataRow()] + public async Task TestExemplarQueryAsync() + { + var param = new QueryExemplarRequest { - var param = new QueryExemplarRequest - { - Query = "up", - Start = "2022-06-17T02:00:00.000Z", - End = "2022-06-17T02:30:00.000Z" - }; - var result = await _client.ExemplarQueryAsync(param); - Assert.IsNotNull(result); - Assert.AreEqual(result.Status, ResultStatuses.Success); - } + Query = "up", + Start = "2022-06-17T02:00:00.000Z", + End = "2022-06-17T02:30:00.000Z" + }; + var result = await _client.ExemplarQueryAsync(param); + Assert.IsNotNull(result); + Assert.AreEqual(result.Status, ResultStatuses.Success); } } diff --git a/test/Masa.Utils.Data.Promethus.Test/UserStruct.cs b/test/Masa.Utils.Data.Promethus.Test/UserStruct.cs index 63009e5..f1c35d1 100644 --- a/test/Masa.Utils.Data.Promethus.Test/UserStruct.cs +++ b/test/Masa.Utils.Data.Promethus.Test/UserStruct.cs @@ -1,20 +1,13 @@ // Copyright (c) MASA Stack All rights reserved. // Licensed under the MIT License. See LICENSE.txt in the project root for license information. -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; +namespace Masa.Utils.Data.Promethus.Test; -namespace Masa.Utils.Data.Promethus.Test +public struct UserStruct { - public struct UserStruct - { - public string Name { get; set; } + public string Name { get; set; } - public int Age { get; set; } + public int Age { get; set; } - public string gender { get; set; } - } + public string gender { get; set; } } diff --git a/test/Masa.Utils.Data.Promethus.Test/_import.cs b/test/Masa.Utils.Data.Promethus.Test/_Imports.cs similarity index 100% rename from test/Masa.Utils.Data.Promethus.Test/_import.cs rename to test/Masa.Utils.Data.Promethus.Test/_Imports.cs From 9a747bbe5bddb159de88820f179a7795f99bbc81 Mon Sep 17 00:00:00 2001 From: qinyouzeng Date: Tue, 28 Jun 2022 14:36:36 +0800 Subject: [PATCH 18/48] chore: enums update --- src/Data/Masa.Utils.Data.Promethus/Enums/ResultStatuses.cs | 3 +-- src/Data/Masa.Utils.Data.Promethus/Enums/ResultTypes.cs | 3 +-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/src/Data/Masa.Utils.Data.Promethus/Enums/ResultStatuses.cs b/src/Data/Masa.Utils.Data.Promethus/Enums/ResultStatuses.cs index d9516f2..c18e9f4 100644 --- a/src/Data/Masa.Utils.Data.Promethus/Enums/ResultStatuses.cs +++ b/src/Data/Masa.Utils.Data.Promethus/Enums/ResultStatuses.cs @@ -5,7 +5,6 @@ namespace Masa.Utils.Data.Promethus.Enums; public enum ResultStatuses { - None, - Success, + Success=1, Error } diff --git a/src/Data/Masa.Utils.Data.Promethus/Enums/ResultTypes.cs b/src/Data/Masa.Utils.Data.Promethus/Enums/ResultTypes.cs index d857163..710fe9c 100644 --- a/src/Data/Masa.Utils.Data.Promethus/Enums/ResultTypes.cs +++ b/src/Data/Masa.Utils.Data.Promethus/Enums/ResultTypes.cs @@ -8,8 +8,7 @@ namespace Masa.Utils.Data.Promethus.Enums; /// public enum ResultTypes { - None, - Matrix, + Matrix = 1, Vector, Scalar, String From d942218dddd28dcde207770539636e25537822c8 Mon Sep 17 00:00:00 2001 From: qinyouzeng Date: Thu, 30 Jun 2022 09:43:09 +0800 Subject: [PATCH 19/48] chore: doc code style update --- src/Data/Masa.Utils.Data.Promethus/README.md | 42 ++++++++++--------- .../Masa.Utils.Data.Promethus/README.zh-CN.md | 42 ++++++++++--------- 2 files changed, 44 insertions(+), 40 deletions(-) diff --git a/src/Data/Masa.Utils.Data.Promethus/README.md b/src/Data/Masa.Utils.Data.Promethus/README.md index 796dbc1..d59b5ce 100644 --- a/src/Data/Masa.Utils.Data.Promethus/README.md +++ b/src/Data/Masa.Utils.Data.Promethus/README.md @@ -11,55 +11,57 @@ Install-Package Masa.Utils.Data.Promethus ### Usage: -1. Inject services +1. Inject ```` C# builder.Services.AddPromethusClient("http://127.0.0.1:9090"); ```` -2. Call +2. Example ```C# - public class SampleService{ +public class SampleService{ - private IMasaPromethusClient _client; + private IMasaPromethusClient _client; - public SampleService(IMasaPromethusClient client) - { - _client=client; - } + public SampleService(IMasaPromethusClient client) + { + _client=client; + } - public async Task QueryAsync() + public async Task QueryAsync() + { + var query= new QueryRequest { + Query = "up", //metric name + Time = "2022-06-01T09:00:00.000Z" //standard time format or unix timestamp, such as: 1654045200 or 1654045200.000 + }; + var result = await _client.QueryAsync(query); + if(result.Status == ResultStatuses.Success) { - var query= new QueryRequest { - Query = "up", //metric name - Time = "2022-06-01T09:00:00.000Z" //standard time format or unix timestamp, such as: 1654045200 or 1654045200.000 - }; - var result = await _client.QueryAsync(query); - if(result.Status == ResultStatuses.Success){ - switch(result.Data.ResultType){ - case ResultTypes.Vector: + switch(result.Data.ResultType) + { + case ResultTypes.Vector: { var data=result.Data.Result as QueryResultInstantVectorResponse[]; ... } break; - case ResultTypes.Matrix: + case ResultTypes.Matrix: { var data=result.Data.Result as QueryResultMatrixRangeResponse[]; ... } break; - default: + default: { var timeSpan=(double)result.Data.Result[0]; var value=(string)result.Data.Result[1]; } break; - } } } } +} ``` ### Current suports: diff --git a/src/Data/Masa.Utils.Data.Promethus/README.zh-CN.md b/src/Data/Masa.Utils.Data.Promethus/README.zh-CN.md index bcdbd21..a64f4dd 100644 --- a/src/Data/Masa.Utils.Data.Promethus/README.zh-CN.md +++ b/src/Data/Masa.Utils.Data.Promethus/README.zh-CN.md @@ -11,55 +11,57 @@ Install-Package Masa.Utils.Data.Promethus ### 用法: -1. 注册services +1. 注册 ```` C# builder.Services.AddPromethusClient("http://127.0.0.1:9090"); ```` -2. 调用 +2. 示例 ```C# - public class SampleService{ +public class SampleService{ - private IMasaPromethusClient _client; + private IMasaPromethusClient _client; - public SampleService(IMasaPromethusClient client) - { - _client=client; - } + public SampleService(IMasaPromethusClient client) + { + _client=client; + } - public async Task QueryAsync() + public async Task QueryAsync() + { + var query= new QueryRequest { + Query = "up", //metric name + Time = "2022-06-01T09:00:00.000Z" //标准时间格式或unix时间戳,如:1654045200或1654045200.000 + }; + var result = await _client.QueryAsync(query); + if(result.Status == ResultStatuses.Success) { - var query= new QueryRequest { - Query = "up", //metric name - Time = "2022-06-01T09:00:00.000Z" //标准时间格式或unix时间戳,如:1654045200或1654045200.000 - }; - var result = await _client.QueryAsync(query); - if(result.Status == ResultStatuses.Success){ - switch(result.Data.ResultType){ - case ResultTypes.Vector: + switch(result.Data.ResultType) + { + case ResultTypes.Vector: { var data=result.Data.Result as QueryResultInstantVectorResponse[]; ... } break; - case ResultTypes.Matrix: + case ResultTypes.Matrix: { var data=result.Data.Result as QueryResultMatrixRangeResponse[]; ... } break; - default: + default: { var timeSpan=(double)result.Data.Result[0]; var value=(string)result.Data.Result[1]; } break; - } } } } +} ``` ### 目前只支持以下api: From 39246f3031f72df2a02ba5a08d37740e0186f7f7 Mon Sep 17 00:00:00 2001 From: qinyouzeng Date: Thu, 30 Jun 2022 09:52:52 +0800 Subject: [PATCH 20/48] chore: dosc update --- src/Data/Masa.Utils.Data.Promethus/README.md | 4 ++-- src/Data/Masa.Utils.Data.Promethus/README.zh-CN.md | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Data/Masa.Utils.Data.Promethus/README.md b/src/Data/Masa.Utils.Data.Promethus/README.md index d59b5ce..9d1ad38 100644 --- a/src/Data/Masa.Utils.Data.Promethus/README.md +++ b/src/Data/Masa.Utils.Data.Promethus/README.md @@ -9,7 +9,7 @@ Install-Package Masa.Utils.Data.Promethus ``` -### Usage: +### Example: 1. Inject @@ -17,7 +17,7 @@ Install-Package Masa.Utils.Data.Promethus builder.Services.AddPromethusClient("http://127.0.0.1:9090"); ```` -2. Example +2. Query Example ```C# public class SampleService{ diff --git a/src/Data/Masa.Utils.Data.Promethus/README.zh-CN.md b/src/Data/Masa.Utils.Data.Promethus/README.zh-CN.md index a64f4dd..7163ea7 100644 --- a/src/Data/Masa.Utils.Data.Promethus/README.zh-CN.md +++ b/src/Data/Masa.Utils.Data.Promethus/README.zh-CN.md @@ -9,7 +9,7 @@ Install-Package Masa.Utils.Data.Promethus ``` -### 用法: +### 示例: 1. 注册 @@ -17,7 +17,7 @@ Install-Package Masa.Utils.Data.Promethus builder.Services.AddPromethusClient("http://127.0.0.1:9090"); ```` -2. 示例 +2. 查询样例 ```C# public class SampleService{ From 5a9314091cc176269bb5ab9cf6f8074756cd0c76 Mon Sep 17 00:00:00 2001 From: qinyouzeng Date: Thu, 30 Jun 2022 13:25:07 +0800 Subject: [PATCH 21/48] chore: docs update --- src/Data/Masa.Utils.Data.Promethus/README.md | 3 ++- src/Data/Masa.Utils.Data.Promethus/README.zh-CN.md | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/Data/Masa.Utils.Data.Promethus/README.md b/src/Data/Masa.Utils.Data.Promethus/README.md index 9d1ad38..2f44ce7 100644 --- a/src/Data/Masa.Utils.Data.Promethus/README.md +++ b/src/Data/Masa.Utils.Data.Promethus/README.md @@ -20,7 +20,8 @@ builder.Services.AddPromethusClient("http://127.0.0.1:9090"); 2. Query Example ```C# -public class SampleService{ +public class SampleService +{ private IMasaPromethusClient _client; diff --git a/src/Data/Masa.Utils.Data.Promethus/README.zh-CN.md b/src/Data/Masa.Utils.Data.Promethus/README.zh-CN.md index 7163ea7..06c3dd4 100644 --- a/src/Data/Masa.Utils.Data.Promethus/README.zh-CN.md +++ b/src/Data/Masa.Utils.Data.Promethus/README.zh-CN.md @@ -20,7 +20,8 @@ builder.Services.AddPromethusClient("http://127.0.0.1:9090"); 2. 查询样例 ```C# -public class SampleService{ +public class SampleService +{ private IMasaPromethusClient _client; From 8e1c4b0c5153f1af661c9c966b457385534f9911 Mon Sep 17 00:00:00 2001 From: qinyouzeng Date: Tue, 14 Jun 2022 16:47:56 +0800 Subject: [PATCH 22/48] feat: add promethus http api query client --- .../Enums/ResultStatuses.cs | 11 ++++++ .../Enums/ResultTypes.cs | 12 ++++++ .../IMasaPromethusClient.cs | 19 ++++++++++ .../Masa.Utils.Data.Promethus.csproj | 9 +++++ .../MasaPromethusClient.cs | 37 +++++++++++++++++++ .../Exemplar/ResponseExemplarResultModel.cs | 25 +++++++++++++ .../MetaData/ResponseLabelResultModel.cs | 9 +++++ .../MetaData/ResponseSerieResultModel.cs | 9 +++++ .../Query/ResponseQueryResultCommonModel.cs | 9 +++++ .../Query/ResponseQueryResultDataModel.cs | 25 +++++++++++++ .../Model/Reponse/ResponseResultBaseModel.cs | 15 ++++++++ .../Request/RequestMetaDataQueryModel.cs | 13 +++++++ .../Model/Request/RequestQueryModel.cs | 26 +++++++++++++ Masa.Utils.Data.Promethus/_import.cs | 5 +++ Masa.Utils.sln | 7 ++++ 15 files changed, 231 insertions(+) create mode 100644 Masa.Utils.Data.Promethus/Enums/ResultStatuses.cs create mode 100644 Masa.Utils.Data.Promethus/Enums/ResultTypes.cs create mode 100644 Masa.Utils.Data.Promethus/IMasaPromethusClient.cs create mode 100644 Masa.Utils.Data.Promethus/Masa.Utils.Data.Promethus.csproj create mode 100644 Masa.Utils.Data.Promethus/MasaPromethusClient.cs create mode 100644 Masa.Utils.Data.Promethus/Model/Reponse/Exemplar/ResponseExemplarResultModel.cs create mode 100644 Masa.Utils.Data.Promethus/Model/Reponse/MetaData/ResponseLabelResultModel.cs create mode 100644 Masa.Utils.Data.Promethus/Model/Reponse/MetaData/ResponseSerieResultModel.cs create mode 100644 Masa.Utils.Data.Promethus/Model/Reponse/Query/ResponseQueryResultCommonModel.cs create mode 100644 Masa.Utils.Data.Promethus/Model/Reponse/Query/ResponseQueryResultDataModel.cs create mode 100644 Masa.Utils.Data.Promethus/Model/Reponse/ResponseResultBaseModel.cs create mode 100644 Masa.Utils.Data.Promethus/Model/Request/RequestMetaDataQueryModel.cs create mode 100644 Masa.Utils.Data.Promethus/Model/Request/RequestQueryModel.cs create mode 100644 Masa.Utils.Data.Promethus/_import.cs diff --git a/Masa.Utils.Data.Promethus/Enums/ResultStatuses.cs b/Masa.Utils.Data.Promethus/Enums/ResultStatuses.cs new file mode 100644 index 0000000..10bea07 --- /dev/null +++ b/Masa.Utils.Data.Promethus/Enums/ResultStatuses.cs @@ -0,0 +1,11 @@ +// Copyright (c) MASA Stack All rights reserved. +// Licensed under the MIT License. See LICENSE.txt in the project root for license information. + +namespace Masa.Utils.Data.Promethus.Enums; + +public enum ResultStatuses +{ + Success, + + Error +} diff --git a/Masa.Utils.Data.Promethus/Enums/ResultTypes.cs b/Masa.Utils.Data.Promethus/Enums/ResultTypes.cs new file mode 100644 index 0000000..6d4a855 --- /dev/null +++ b/Masa.Utils.Data.Promethus/Enums/ResultTypes.cs @@ -0,0 +1,12 @@ +// Copyright (c) MASA Stack All rights reserved. +// Licensed under the MIT License. See LICENSE.txt in the project root for license information. + +namespace Masa.Utils.Data.Promethus.Enums; + +public enum ResultTypes +{ + Matrix, + Vector, + Scalar, + String +} diff --git a/Masa.Utils.Data.Promethus/IMasaPromethusClient.cs b/Masa.Utils.Data.Promethus/IMasaPromethusClient.cs new file mode 100644 index 0000000..f526f52 --- /dev/null +++ b/Masa.Utils.Data.Promethus/IMasaPromethusClient.cs @@ -0,0 +1,19 @@ +// Copyright (c) MASA Stack All rights reserved. +// Licensed under the MIT License. See LICENSE.txt in the project root for license information. + +namespace Masa.Utils.Data.Promethus; + +internal interface IMasaPromethusClient +{ + Task QueryAsync(RequestQueryModel query); + + Task QueryRangeAsync(RequestQueryRangeModel query); + + Task SeriesAsync(RequestMetaDataQueryModel query); + + Task LabelsQueryAsync(RequestMetaDataQueryModel query); + + Task LabelValuesQueryAsync(RequestMetaDataQueryModel query); + + Task ExemplarQueryAsync(RequestQueryModel query); +} diff --git a/Masa.Utils.Data.Promethus/Masa.Utils.Data.Promethus.csproj b/Masa.Utils.Data.Promethus/Masa.Utils.Data.Promethus.csproj new file mode 100644 index 0000000..132c02c --- /dev/null +++ b/Masa.Utils.Data.Promethus/Masa.Utils.Data.Promethus.csproj @@ -0,0 +1,9 @@ + + + + net6.0 + enable + enable + + + diff --git a/Masa.Utils.Data.Promethus/MasaPromethusClient.cs b/Masa.Utils.Data.Promethus/MasaPromethusClient.cs new file mode 100644 index 0000000..57ff4ce --- /dev/null +++ b/Masa.Utils.Data.Promethus/MasaPromethusClient.cs @@ -0,0 +1,37 @@ +// Copyright (c) MASA Stack All rights reserved. +// Licensed under the MIT License. See LICENSE.txt in the project root for license information. + +namespace Masa.Utils.Data.Promethus; + +internal class MasaPromethusClient : IMasaPromethusClient +{ + public Task ExemplarQueryAsync(RequestQueryModel query) + { + throw new NotImplementedException(); + } + + public Task LabelsQueryAsync(RequestMetaDataQueryModel query) + { + throw new NotImplementedException(); + } + + public Task LabelValuesQueryAsync(RequestMetaDataQueryModel query) + { + throw new NotImplementedException(); + } + + public Task QueryAsync(RequestQueryModel query) + { + throw new NotImplementedException(); + } + + public Task QueryRangeAsync(RequestQueryRangeModel query) + { + throw new NotImplementedException(); + } + + public Task SeriesAsync(RequestMetaDataQueryModel query) + { + throw new NotImplementedException(); + } +} diff --git a/Masa.Utils.Data.Promethus/Model/Reponse/Exemplar/ResponseExemplarResultModel.cs b/Masa.Utils.Data.Promethus/Model/Reponse/Exemplar/ResponseExemplarResultModel.cs new file mode 100644 index 0000000..ac20eb6 --- /dev/null +++ b/Masa.Utils.Data.Promethus/Model/Reponse/Exemplar/ResponseExemplarResultModel.cs @@ -0,0 +1,25 @@ +// Copyright (c) MASA Stack All rights reserved. +// Licensed under the MIT License. See LICENSE.txt in the project root for license information. + +namespace Masa.Utils.Data.Promethus.Model; + +public class ResponseExemplarResultModel : ResponseResultBaseModel +{ + public IEnumerable? Data { get; set; } +} + +public class ExemplarModel +{ + public IDictionary? Labels { get; set; } + + public string? Value { get; set; } + + public float TimeStamp { get; set; } +} + +public class ExemplarDataModel +{ + public IDictionary? SeriesLabels { get; set; } + + public IEnumerable? Exemplars { get; set; } +} diff --git a/Masa.Utils.Data.Promethus/Model/Reponse/MetaData/ResponseLabelResultModel.cs b/Masa.Utils.Data.Promethus/Model/Reponse/MetaData/ResponseLabelResultModel.cs new file mode 100644 index 0000000..b8441e6 --- /dev/null +++ b/Masa.Utils.Data.Promethus/Model/Reponse/MetaData/ResponseLabelResultModel.cs @@ -0,0 +1,9 @@ +// Copyright (c) MASA Stack All rights reserved. +// Licensed under the MIT License. See LICENSE.txt in the project root for license information. + +namespace Masa.Utils.Data.Promethus.Model; + +public class ResponseLabelResultModel : ResponseResultBaseModel +{ + public IEnumerable? Data { get; set; } +} diff --git a/Masa.Utils.Data.Promethus/Model/Reponse/MetaData/ResponseSerieResultModel.cs b/Masa.Utils.Data.Promethus/Model/Reponse/MetaData/ResponseSerieResultModel.cs new file mode 100644 index 0000000..57198a6 --- /dev/null +++ b/Masa.Utils.Data.Promethus/Model/Reponse/MetaData/ResponseSerieResultModel.cs @@ -0,0 +1,9 @@ +// Copyright (c) MASA Stack All rights reserved. +// Licensed under the MIT License. See LICENSE.txt in the project root for license information. + +namespace Masa.Utils.Data.Promethus.Model; + +public class ResponseSerieResultModel : ResponseResultBaseModel +{ + public IEnumerable>? Data { get; set; } +} diff --git a/Masa.Utils.Data.Promethus/Model/Reponse/Query/ResponseQueryResultCommonModel.cs b/Masa.Utils.Data.Promethus/Model/Reponse/Query/ResponseQueryResultCommonModel.cs new file mode 100644 index 0000000..af28041 --- /dev/null +++ b/Masa.Utils.Data.Promethus/Model/Reponse/Query/ResponseQueryResultCommonModel.cs @@ -0,0 +1,9 @@ +// Copyright (c) MASA Stack All rights reserved. +// Licensed under the MIT License. See LICENSE.txt in the project root for license information. + +namespace Masa.Utils.Data.Promethus.Model; + +public class ResponseQueryResultCommonModel: ResponseResultBaseModel +{ + public ResponseQueryResultDataModel? Data { get; set; } +} diff --git a/Masa.Utils.Data.Promethus/Model/Reponse/Query/ResponseQueryResultDataModel.cs b/Masa.Utils.Data.Promethus/Model/Reponse/Query/ResponseQueryResultDataModel.cs new file mode 100644 index 0000000..495e67d --- /dev/null +++ b/Masa.Utils.Data.Promethus/Model/Reponse/Query/ResponseQueryResultDataModel.cs @@ -0,0 +1,25 @@ +// Copyright (c) MASA Stack All rights reserved. +// Licensed under the MIT License. See LICENSE.txt in the project root for license information. + +namespace Masa.Utils.Data.Promethus.Model; + +public class ResponseQueryResultDataModel +{ + public ResultTypes ResultType { get; set; } + + public object[]? Result { get; set; } +} + +public class InstantVectorModel +{ + public IDictionary? Metric { get; set; } + + public object[]? Value { get; set; } +} + +public class MatrixRangeModel +{ + public IDictionary? Metric { get; set; } + + public IEnumerable? Values { get; set; } +} diff --git a/Masa.Utils.Data.Promethus/Model/Reponse/ResponseResultBaseModel.cs b/Masa.Utils.Data.Promethus/Model/Reponse/ResponseResultBaseModel.cs new file mode 100644 index 0000000..8262259 --- /dev/null +++ b/Masa.Utils.Data.Promethus/Model/Reponse/ResponseResultBaseModel.cs @@ -0,0 +1,15 @@ +// Copyright (c) MASA Stack All rights reserved. +// Licensed under the MIT License. See LICENSE.txt in the project root for license information. + +namespace Masa.Utils.Data.Promethus.Model; + +public class ResponseResultBaseModel +{ + public ResultStatuses Status { get; set; } + + public string? Error { get; set; } + + public string? ErrorType { get; set; } + + public IEnumerable? Warnings { get; set; } +} diff --git a/Masa.Utils.Data.Promethus/Model/Request/RequestMetaDataQueryModel.cs b/Masa.Utils.Data.Promethus/Model/Request/RequestMetaDataQueryModel.cs new file mode 100644 index 0000000..5d034d0 --- /dev/null +++ b/Masa.Utils.Data.Promethus/Model/Request/RequestMetaDataQueryModel.cs @@ -0,0 +1,13 @@ +// Copyright (c) MASA Stack All rights reserved. +// Licensed under the MIT License. See LICENSE.txt in the project root for license information. + +namespace Masa.Utils.Data.Promethus.Model; + +public class RequestMetaDataQueryModel +{ + public IEnumerable? Match { get; set; } + + public string? Start { get; set; } + + public string? End { get; set; } +} diff --git a/Masa.Utils.Data.Promethus/Model/Request/RequestQueryModel.cs b/Masa.Utils.Data.Promethus/Model/Request/RequestQueryModel.cs new file mode 100644 index 0000000..1a8163a --- /dev/null +++ b/Masa.Utils.Data.Promethus/Model/Request/RequestQueryModel.cs @@ -0,0 +1,26 @@ +// Copyright (c) MASA Stack All rights reserved. +// Licensed under the MIT License. See LICENSE.txt in the project root for license information. + +namespace Masa.Utils.Data.Promethus.Model; + +public class RequestQueryModel +{ + public string? Query { get; set; } + + public string? Time { get; set; } + + public string? TimeOut { get; set; } +} + +public class RequestQueryRangeModel +{ + public string? Query { get; set; } + + public string? Start { get; set; } + + public string? End { get; set; } + + public string? Step { get; set; } + + public string? TimeOut { get; set; } +} diff --git a/Masa.Utils.Data.Promethus/_import.cs b/Masa.Utils.Data.Promethus/_import.cs new file mode 100644 index 0000000..1297ecc --- /dev/null +++ b/Masa.Utils.Data.Promethus/_import.cs @@ -0,0 +1,5 @@ +// Copyright (c) MASA Stack All rights reserved. +// Licensed under the MIT License. See LICENSE.txt in the project root for license information. + +global using Masa.Utils.Data.Promethus.Enums; +global using Masa.Utils.Data.Promethus.Model; diff --git a/Masa.Utils.sln b/Masa.Utils.sln index cc2d590..136af3f 100644 --- a/Masa.Utils.sln +++ b/Masa.Utils.sln @@ -103,6 +103,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Masa.Utils.Extensions.Valid EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Masa.Utils.Security.Authentication.OpenIdConnect", "src\Security\Masa.Utils.Security.Authentication.OpenIdConnect\Masa.Utils.Security.Authentication.OpenIdConnect.csproj", "{D17B5B36-5773-4827-9D5D-44390DF666CA}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Masa.Utils.Data.Promethus", "Masa.Utils.Data.Promethus\Masa.Utils.Data.Promethus.csproj", "{577A7F40-A22E-466B-972B-BFE65F700B12}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -245,6 +247,10 @@ Global {B0E3CA19-C101-4E30-9401-C017B7088F4E}.Debug|Any CPU.Build.0 = Debug|Any CPU {B0E3CA19-C101-4E30-9401-C017B7088F4E}.Release|Any CPU.ActiveCfg = Release|Any CPU {B0E3CA19-C101-4E30-9401-C017B7088F4E}.Release|Any CPU.Build.0 = Release|Any CPU + {577A7F40-A22E-466B-972B-BFE65F700B12}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {577A7F40-A22E-466B-972B-BFE65F700B12}.Debug|Any CPU.Build.0 = Debug|Any CPU + {577A7F40-A22E-466B-972B-BFE65F700B12}.Release|Any CPU.ActiveCfg = Release|Any CPU + {577A7F40-A22E-466B-972B-BFE65F700B12}.Release|Any CPU.Build.0 = Release|Any CPU {D17B5B36-5773-4827-9D5D-44390DF666CA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {D17B5B36-5773-4827-9D5D-44390DF666CA}.Debug|Any CPU.Build.0 = Debug|Any CPU {D17B5B36-5773-4827-9D5D-44390DF666CA}.Release|Any CPU.ActiveCfg = Release|Any CPU @@ -298,6 +304,7 @@ Global {22643BF8-A5ED-48CA-BD1A-10BFEC075DBE} = {4F908878-0EB8-43E4-96E4-8B1F32E9B635} {533BCE80-61BC-443A-95D3-2C6328921ED8} = {B2DA607D-4A39-4F0C-A9B3-DD9A061B0B4E} {B0E3CA19-C101-4E30-9401-C017B7088F4E} = {533BCE80-61BC-443A-95D3-2C6328921ED8} + {577A7F40-A22E-466B-972B-BFE65F700B12} = {F844C2A1-C36D-400E-A0D8-7658EF9C3B93} {D17B5B36-5773-4827-9D5D-44390DF666CA} = {4FB3BD6D-D4C1-4BEF-AD62-8FD6EAEEB4DF} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution From 782fa15fa621b85f9ea60a36688e26d32b593fd0 Mon Sep 17 00:00:00 2001 From: qinyouzeng Date: Tue, 14 Jun 2022 17:43:41 +0800 Subject: [PATCH 23/48] feat: add test project --- .../MasaPromethusClient.cs | 2 + Masa.Utils.Data.Promethus/_import.cs | 1 + Masa.Utils.sln | 7 ++ .../Masa.Utils.Data.Promethus.Test.csproj | 21 ++++++ .../MasaPromethusClientTests.cs | 68 +++++++++++++++++++ 5 files changed, 99 insertions(+) create mode 100644 test/Masa.Utils.Data.Promethus.Test/Masa.Utils.Data.Promethus.Test.csproj create mode 100644 test/Masa.Utils.Data.Promethus.Test/MasaPromethusClientTests.cs diff --git a/Masa.Utils.Data.Promethus/MasaPromethusClient.cs b/Masa.Utils.Data.Promethus/MasaPromethusClient.cs index 57ff4ce..ddc3149 100644 --- a/Masa.Utils.Data.Promethus/MasaPromethusClient.cs +++ b/Masa.Utils.Data.Promethus/MasaPromethusClient.cs @@ -1,6 +1,8 @@ // Copyright (c) MASA Stack All rights reserved. // Licensed under the MIT License. See LICENSE.txt in the project root for license information. +[assembly: InternalsVisibleTo("Masa.Utils.Data.Promethus.Test")] + namespace Masa.Utils.Data.Promethus; internal class MasaPromethusClient : IMasaPromethusClient diff --git a/Masa.Utils.Data.Promethus/_import.cs b/Masa.Utils.Data.Promethus/_import.cs index 1297ecc..3e9622c 100644 --- a/Masa.Utils.Data.Promethus/_import.cs +++ b/Masa.Utils.Data.Promethus/_import.cs @@ -3,3 +3,4 @@ global using Masa.Utils.Data.Promethus.Enums; global using Masa.Utils.Data.Promethus.Model; +global using System.Runtime.CompilerServices; diff --git a/Masa.Utils.sln b/Masa.Utils.sln index 136af3f..6947361 100644 --- a/Masa.Utils.sln +++ b/Masa.Utils.sln @@ -105,6 +105,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Masa.Utils.Security.Authent EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Masa.Utils.Data.Promethus", "Masa.Utils.Data.Promethus\Masa.Utils.Data.Promethus.csproj", "{577A7F40-A22E-466B-972B-BFE65F700B12}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Masa.Utils.Data.Promethus.Test", "test\Masa.Utils.Data.Promethus.Test\Masa.Utils.Data.Promethus.Test.csproj", "{AC19E221-D3CF-49E9-8E41-A7580C0736AA}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -255,6 +257,10 @@ Global {D17B5B36-5773-4827-9D5D-44390DF666CA}.Debug|Any CPU.Build.0 = Debug|Any CPU {D17B5B36-5773-4827-9D5D-44390DF666CA}.Release|Any CPU.ActiveCfg = Release|Any CPU {D17B5B36-5773-4827-9D5D-44390DF666CA}.Release|Any CPU.Build.0 = Release|Any CPU + {AC19E221-D3CF-49E9-8E41-A7580C0736AA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {AC19E221-D3CF-49E9-8E41-A7580C0736AA}.Debug|Any CPU.Build.0 = Debug|Any CPU + {AC19E221-D3CF-49E9-8E41-A7580C0736AA}.Release|Any CPU.ActiveCfg = Release|Any CPU + {AC19E221-D3CF-49E9-8E41-A7580C0736AA}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -305,6 +311,7 @@ Global {533BCE80-61BC-443A-95D3-2C6328921ED8} = {B2DA607D-4A39-4F0C-A9B3-DD9A061B0B4E} {B0E3CA19-C101-4E30-9401-C017B7088F4E} = {533BCE80-61BC-443A-95D3-2C6328921ED8} {577A7F40-A22E-466B-972B-BFE65F700B12} = {F844C2A1-C36D-400E-A0D8-7658EF9C3B93} + {AC19E221-D3CF-49E9-8E41-A7580C0736AA} = {4F908878-0EB8-43E4-96E4-8B1F32E9B635} {D17B5B36-5773-4827-9D5D-44390DF666CA} = {4FB3BD6D-D4C1-4BEF-AD62-8FD6EAEEB4DF} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution diff --git a/test/Masa.Utils.Data.Promethus.Test/Masa.Utils.Data.Promethus.Test.csproj b/test/Masa.Utils.Data.Promethus.Test/Masa.Utils.Data.Promethus.Test.csproj new file mode 100644 index 0000000..a5c8de0 --- /dev/null +++ b/test/Masa.Utils.Data.Promethus.Test/Masa.Utils.Data.Promethus.Test.csproj @@ -0,0 +1,21 @@ + + + + net6.0 + enable + + false + + + + + + + + + + + + + + diff --git a/test/Masa.Utils.Data.Promethus.Test/MasaPromethusClientTests.cs b/test/Masa.Utils.Data.Promethus.Test/MasaPromethusClientTests.cs new file mode 100644 index 0000000..9d31a59 --- /dev/null +++ b/test/Masa.Utils.Data.Promethus.Test/MasaPromethusClientTests.cs @@ -0,0 +1,68 @@ +using Masa.Utils.Data.Promethus.Enums; +using Microsoft.VisualStudio.TestTools.UnitTesting; +using System.Threading.Tasks; + +namespace Masa.Utils.Data.Promethus.Test +{ + [TestClass] + public class MasaPromethusClientTests + { + private MasaPromethusClient _client; + + [TestMethod] + public async Task TestSeriesAsync() + { + var data = await _client.SeriesAsync(new Model.RequestMetaDataQueryModel + { + Match = null, + + }); + Assert.IsNotNull(data); + } + + [TestMethod] + public async Task TestQueryAsync() + { + var data = await _client.SeriesAsync(new Model.RequestMetaDataQueryModel + { + Match = null, + + }); + Assert.IsNotNull(data); + } + + [TestMethod] + [DataRow()] + public async Task TestExemplarQueryAsync(string time, string timeOut, string query) + { + var param = new Model.RequestQueryModel + { + Query = query, + Time = time, + TimeOut = timeOut + }; + var data = await _client.ExemplarQueryAsync(param); + if (string.IsNullOrEmpty(query)) + Assert.AreEqual(ResultStatuses.Error, data.Status); + } + + [TestMethod] + public async Task TestLabelsQueryAsync() + { + await Task.CompletedTask; + } + + [TestMethod] + public async Task TestLabelValuesQueryAsync() + { + await Task.CompletedTask; + } + + + [TestMethod] + public async Task TestQueryRangeAsync() + { + await Task.CompletedTask; + } + } +} From 6a4ff0f5e886956c28a658f90941592883e58bea Mon Sep 17 00:00:00 2001 From: qinyouzeng Date: Thu, 16 Jun 2022 18:16:39 +0800 Subject: [PATCH 24/48] feat: api query add --- .../Extenistion/HttpClientExtensition.cs | 168 +++++++++++++++++ .../Masa.Utils.Data.Promethus.csproj | 4 + .../MasaPromethusClient.cs | 75 ++++++-- .../Request/RequestLableValueQueryModel.cs | 9 + .../MappingConst.cs | 13 ++ .../Response/Mapping/MappingResponse.cs | 15 ++ .../HttpClientExtensitionTests.cs | 171 ++++++++++++++++++ .../UserStruct.cs | 20 ++ .../Masa.Utils.Data.Promethus.Test/_import.cs | 10 + 9 files changed, 473 insertions(+), 12 deletions(-) create mode 100644 Masa.Utils.Data.Promethus/Extenistion/HttpClientExtensition.cs create mode 100644 Masa.Utils.Data.Promethus/Model/Request/RequestLableValueQueryModel.cs create mode 100644 src/Data/Masa.Utils.Data.Elasticsearch/MappingConst.cs create mode 100644 src/Data/Masa.Utils.Data.Elasticsearch/Response/Mapping/MappingResponse.cs create mode 100644 test/Masa.Utils.Data.Promethus.Test/HttpClientExtensitionTests.cs create mode 100644 test/Masa.Utils.Data.Promethus.Test/UserStruct.cs create mode 100644 test/Masa.Utils.Data.Promethus.Test/_import.cs diff --git a/Masa.Utils.Data.Promethus/Extenistion/HttpClientExtensition.cs b/Masa.Utils.Data.Promethus/Extenistion/HttpClientExtensition.cs new file mode 100644 index 0000000..5b89c2c --- /dev/null +++ b/Masa.Utils.Data.Promethus/Extenistion/HttpClientExtensition.cs @@ -0,0 +1,168 @@ +// Copyright (c) MASA Stack All rights reserved. +// Licensed under the MIT License. See LICENSE.txt in the project root for license information. +using Masa.Utils.Caller.Core; +using System.Collections; +using System.Reflection; +using System.Text; +using System.Web; + +[assembly: InternalsVisibleTo("Masa.Utils.Data.Promethus.Test")] + +namespace System.Net.Http; + +internal static class HttpClientExtensition +{ + public static async Task GetAsync(this ICallerProvider caller, string url,object data) + { + var request=new HttpRequestMessage(HttpMethod.Get, $"{url}?{data?.ToUrlParam()}"); + var response= await caller.SendAsync(request); + return await response.Content.ReadAsStringAsync(); + } + + /// + /// not support System.text.json + /// + /// + /// + /// + /// + /// + public static string? ToUrlParam(this object obj, bool isEnumString = true, bool isCamelCase = true, bool isUrlEncode = true) + { + return GetValue(obj, string.Empty, isEnumString, isCamelCase, isUrlEncode); + } + + private static string? GetValue(object obj, string preStr, bool isEnumString = false, bool isCamelCase = true, bool isUrlEncode = true) + { + if (obj == null) return null; + var type = obj.GetType(); + if (type == typeof(string))//string + { + var str = (string)obj; + return AppendValue(preStr, str, "=", isUrlEncode); + } + else if (type.IsValueType) + { + if (type.IsEnum)//enum + { + var str = isEnumString ? obj.ToString() : Convert.ToInt32(obj).ToString(); + return AppendValue(preStr, str, "=", isUrlEncode); + } + else if (!type.IsPrimitive) //struct + { + return GetObjValue(type, obj, preStr, isEnumString, isCamelCase, isUrlEncode); + } + else //sample value + { + var str = obj.ToString(); + return AppendValue(preStr, str, "=", isUrlEncode); + } + } + else if (type.IsArray || type.GetInterfaces().Any(t => t.Name.IndexOf("IEnumerable") == 0)) + { + return GetEnumerableValue(obj, preStr, isEnumString, isCamelCase, isUrlEncode); + } + else if (type.IsClass) + { + return GetObjValue(type, obj, preStr, isEnumString, isCamelCase, isUrlEncode); + } + else + { + // + return null; + } + } + + private static string GetObjValue(Type type, object obj, string preStr, bool isEnumString = false, bool isCamelCase = true, bool isUrlEncode = true) + { + var properties = type.GetProperties(BindingFlags.Instance | BindingFlags.Public | BindingFlags.GetProperty); + var fields = type.GetFields(BindingFlags.Instance | BindingFlags.Public | BindingFlags.GetField); + var list = new List(); + if (properties.Length > 0) + { + foreach (var item in properties) + { + var str = GetMemerInfoValue(item, item.GetValue(obj), preStr, isEnumString, isCamelCase, isUrlEncode); + if (string.IsNullOrEmpty(str)) + continue; + list.Add(str); + } + } + + if (fields.Length > 0) + { + foreach (var item in fields) + { + var str = GetMemerInfoValue(item, item.GetValue(obj), preStr, isEnumString, isCamelCase, isUrlEncode); + if (string.IsNullOrEmpty(str)) + continue; + list.Add(str); + } + } + + if (!list.Any()) + return default!; + list.Sort(); + return string.Join('&', list); + } + + private static string? GetMemerInfoValue(MemberInfo info, object? value, string preStr, bool isEnumString = false, bool isCamelCase = true, bool isUrlEncode = true) + { + if (value == null) + return null; + + var name = info.Name; + if (isCamelCase) + name = ToCamelCase(name); + + return GetValue(value, AppendValue(preStr, name, ".", isUrlEncode) ?? default!, isEnumString, isCamelCase, isUrlEncode); + } + + private static string? GetEnumerableValue(object obj, string preStr, bool isEnumString = false, bool isCamelCase = true, bool isUrlEncode = true) + { + StringBuilder builder = new StringBuilder(4096); + var list = new List(); + foreach (var item in (IEnumerable)obj) + { + if (item is KeyValuePair keyValue) + { + var name = keyValue.Key; + if (isCamelCase) + name = ToCamelCase(name); + var str = GetValue(keyValue.Value, AppendValue(preStr, name, ".", isUrlEncode) ?? default!, isEnumString, isCamelCase, isUrlEncode); + if (!string.IsNullOrEmpty(str)) + list.Add(str); + } + else + { + var str = GetValue(item, $"{preStr}{(isUrlEncode ? HttpUtility.UrlEncode("[]", Encoding.UTF8) : "[]")}", isEnumString, isCamelCase, isUrlEncode); + if (!string.IsNullOrEmpty(str)) + list.Add(str); + } + } + if (!list.Any()) + return default!; + list.Sort(); + return string.Join('&', list); + } + + private static string? AppendValue(string preStr, string? value, string splitChar, bool isUrlEncode) + { + if (string.IsNullOrEmpty(preStr) || string.IsNullOrEmpty(value)) + return value; + if (isUrlEncode) + return $"{preStr}{splitChar}{HttpUtility.UrlEncode(value, Encoding.UTF8)}"; + else + return $"{preStr}{splitChar}{value}"; + } + + public static string ToCamelCase(this string str) + { + if (string.IsNullOrEmpty(str)) return str; + var c = str[0]; + if (c - 'A' >= 0 && c - 'Z' <= 0) + return $"{(char)(c + 32)}{str.AsSpan().Slice(1)}"; + + return str; + } +} diff --git a/Masa.Utils.Data.Promethus/Masa.Utils.Data.Promethus.csproj b/Masa.Utils.Data.Promethus/Masa.Utils.Data.Promethus.csproj index 132c02c..e39dd8a 100644 --- a/Masa.Utils.Data.Promethus/Masa.Utils.Data.Promethus.csproj +++ b/Masa.Utils.Data.Promethus/Masa.Utils.Data.Promethus.csproj @@ -6,4 +6,8 @@ enable + + + + diff --git a/Masa.Utils.Data.Promethus/MasaPromethusClient.cs b/Masa.Utils.Data.Promethus/MasaPromethusClient.cs index ddc3149..22c7f4b 100644 --- a/Masa.Utils.Data.Promethus/MasaPromethusClient.cs +++ b/Masa.Utils.Data.Promethus/MasaPromethusClient.cs @@ -1,39 +1,90 @@ // Copyright (c) MASA Stack All rights reserved. // Licensed under the MIT License. See LICENSE.txt in the project root for license information. +using Masa.Utils.Caller.Core; +using System.Text.Json; + [assembly: InternalsVisibleTo("Masa.Utils.Data.Promethus.Test")] namespace Masa.Utils.Data.Promethus; internal class MasaPromethusClient : IMasaPromethusClient { - public Task ExemplarQueryAsync(RequestQueryModel query) + private readonly ICallerProvider _caller; + private static JsonSerializerOptions _jsonSerializerOptions = new JsonSerializerOptions + { + PropertyNameCaseInsensitive = true, + }; + + public MasaPromethusClient(ICallerProvider caller) + { + _caller = caller; + } + + public async Task ExemplarQueryAsync(RequestQueryModel query) { - throw new NotImplementedException(); + return await QueryDataAsync("/api/v1/query_exemplars", query); } - public Task LabelsQueryAsync(RequestMetaDataQueryModel query) + public async Task LabelsQueryAsync(RequestMetaDataQueryModel query) { - throw new NotImplementedException(); + return await QueryDataAsync("/api/v1/labels", query); } - public Task LabelValuesQueryAsync(RequestMetaDataQueryModel query) + public async Task LabelValuesQueryAsync(RequestMetaDataQueryModel query) { - throw new NotImplementedException(); + return await QueryDataAsync("/api/v1/label//values", query); } - public Task QueryAsync(RequestQueryModel query) + public async Task QueryAsync(RequestQueryModel query) { - throw new NotImplementedException(); + return await QueryDataAsync("/api/v1/query", query); } - public Task QueryRangeAsync(RequestQueryRangeModel query) + public async Task QueryRangeAsync(RequestQueryRangeModel query) { - throw new NotImplementedException(); + return await QueryDataAsync("/api/v1/query_range", query); } - public Task SeriesAsync(RequestMetaDataQueryModel query) + public async Task SeriesAsync(RequestMetaDataQueryModel query) { - throw new NotImplementedException(); + return await QueryDataAsync("/api/v1/series", query); + } + + private async Task QueryDataAsync(string url, object data) where T : ResponseResultBaseModel + { + var str = await _caller.GetAsync(url, data); + if (string.IsNullOrEmpty(str)) + return default!; + + var baseResult = JsonSerializer.Deserialize(str, _jsonSerializerOptions); + if (baseResult == null || baseResult.Status != ResultStatuses.Success) + { + return baseResult ?? default!; + } + + if (typeof(T) == typeof(ResponseQueryResultCommonModel)) + { + var result = baseResult as ResponseQueryResultCommonModel; + if (result == null || result.Data == null) + return baseResult; + switch (result.Data.ResultType) + { + case ResultTypes.Matrix: + { + var temp = JsonSerializer.Serialize(result.Data.Result, _jsonSerializerOptions); + result.Data.Result = JsonSerializer.Deserialize(temp, _jsonSerializerOptions); + return result as T ?? default!; + } + case ResultTypes.Vector: + { + var temp = JsonSerializer.Serialize(result.Data.Result, _jsonSerializerOptions); + result.Data.Result = JsonSerializer.Deserialize(temp, _jsonSerializerOptions); + return result as T ?? default!; + } + } + } + + return baseResult; } } diff --git a/Masa.Utils.Data.Promethus/Model/Request/RequestLableValueQueryModel.cs b/Masa.Utils.Data.Promethus/Model/Request/RequestLableValueQueryModel.cs new file mode 100644 index 0000000..33b9f84 --- /dev/null +++ b/Masa.Utils.Data.Promethus/Model/Request/RequestLableValueQueryModel.cs @@ -0,0 +1,9 @@ +// Copyright (c) MASA Stack All rights reserved. +// Licensed under the MIT License. See LICENSE.txt in the project root for license information. + +namespace Masa.Utils.Data.Promethus.Model; + +public class RequestLableValueQueryModel: RequestMetaDataQueryModel +{ + public string Lable { get; set; } = "__name__"; +} diff --git a/src/Data/Masa.Utils.Data.Elasticsearch/MappingConst.cs b/src/Data/Masa.Utils.Data.Elasticsearch/MappingConst.cs new file mode 100644 index 0000000..c53298f --- /dev/null +++ b/src/Data/Masa.Utils.Data.Elasticsearch/MappingConst.cs @@ -0,0 +1,13 @@ +// Copyright (c) MASA Stack All rights reserved. +// Licensed under the MIT License. See LICENSE.txt in the project root for license information. + +namespace Masa.Utils.Data.Elasticsearch; + +internal class MappingConst +{ + public const string PROPERTY = "properties"; + public const string TYPE = "type"; + public const string FIELD = "fields"; + public const string MAXLENGTH = "ignore_above"; + public const string KEYWORD = "keyword"; +} diff --git a/src/Data/Masa.Utils.Data.Elasticsearch/Response/Mapping/MappingResponse.cs b/src/Data/Masa.Utils.Data.Elasticsearch/Response/Mapping/MappingResponse.cs new file mode 100644 index 0000000..096ebb2 --- /dev/null +++ b/src/Data/Masa.Utils.Data.Elasticsearch/Response/Mapping/MappingResponse.cs @@ -0,0 +1,15 @@ +// Copyright (c) MASA Stack All rights reserved. +// Licensed under the MIT License. See LICENSE.txt in the project root for license information. + +namespace Masa.Utils.Data.Elasticsearch.Response; + +public class MappingResponse +{ + public string? Name { get; set; } + + public string? DataType { get; set; } + + public bool? IsKeyword { get; set; } + + public int? MaxLenth { get; set; } +} diff --git a/test/Masa.Utils.Data.Promethus.Test/HttpClientExtensitionTests.cs b/test/Masa.Utils.Data.Promethus.Test/HttpClientExtensitionTests.cs new file mode 100644 index 0000000..20a9866 --- /dev/null +++ b/test/Masa.Utils.Data.Promethus.Test/HttpClientExtensitionTests.cs @@ -0,0 +1,171 @@ +// Copyright (c) MASA Stack All rights reserved. +// Licensed under the MIT License. See LICENSE.txt in the project root for license information. + +namespace Masa.Utils.Data.Promethus.Test; + +[TestClass] +public class HttpClientExtensitionTests +{ + [TestMethod] + [DataRow(1)] + [DataRow((byte)1)] + [DataRow((char)2)] + [DataRow((uint)3)] + [DataRow((long)4)] + [DataRow((float)5.6789)] + [DataRow(5.6789)] + [DataRow("string")] + public void SampleValueTest(object value) + { + var result = value.ToUrlParam(); + var str = value.ToString(); + Assert.AreEqual(str, result); + } + + [TestMethod] + public void StructTest() + { + var user = new UserStruct + { + Name = "Bob", + Age = 30, + gender = "Male" + }; + + var result = user.ToUrlParam(); + var str = $"age={user.Age}&gender={user.gender}&name={user.Name}"; + Assert.AreEqual(str, result); + + user.Name = "王占山"; + str = $"age={user.Age}&gender={user.gender}&name={System.Web.HttpUtility.UrlEncode(user.Name, System.Text.Encoding.UTF8)}"; + result = user.ToUrlParam(); + Assert.AreEqual(str, result); + } + + [TestMethod] + public void ClassTest() + { + var obj = new + { + a = "test", + d = (float)34.56, + ch = "中文说明", + t = ResultTypes.Scalar + }; + + var result = obj.ToUrlParam(isEnumString: true); + var str = $"a={obj.a}&ch={System.Web.HttpUtility.UrlEncode(obj.ch, System.Text.Encoding.UTF8)}&d={obj.d}&t={obj.t}"; + Assert.AreEqual(str, result); + + result = obj.ToUrlParam(isEnumString: false); + str = $"a={obj.a}&ch={System.Web.HttpUtility.UrlEncode(obj.ch, System.Text.Encoding.UTF8)}&d={obj.d}&t={(int)obj.t}"; + Assert.AreEqual(str, result); + + result = obj.ToUrlParam(isEnumString: false, isUrlEncode: false); + str = $"a={obj.a}&ch={obj.ch}&d={obj.d}&t={(int)obj.t}"; + Assert.AreEqual(str, result); + } + + [TestMethod] + public void ArrayTest() + { + var array = new int[] { 1, 2, 3, 4, 5, 6, 7, 8 }; + var result = array.ToUrlParam(isUrlEncode: false); + var str = string.Join("&[]=", array); + str = $"[]={str}"; + Assert.AreEqual(str, result); + } + + [TestMethod] + public void ObjArrayTest() + { + var array = new RequestQueryModel[] { + new RequestQueryModel{ + Query="where1", + Time="2021-01-02", + TimeOut="5s" + }, + new RequestQueryModel{ + Query="where2", + Time="2021-01-01", + TimeOut="5s" + } + }; + + var result = array.ToUrlParam(isUrlEncode: false); + var str = $"[].query={array[0].Query}&[].time={array[0].Time}&[].timeOut={array[0].TimeOut}"; + str += $"&[].query={array[1].Query}&[].time={array[1].Time}&[].timeOut={array[1].TimeOut}"; + Assert.AreEqual(str, result); + + var obj = new + { + Values = array + }; + result = obj.ToUrlParam(isUrlEncode: false); + str = $"values[].query={array[0].Query}&values[].time={array[0].Time}&values[].timeOut={array[0].TimeOut}"; + str += $"&values[].query={array[1].Query}&values[].time={array[1].Time}&values[].timeOut={array[1].TimeOut}"; + Assert.AreEqual(str, result); + } + + [TestMethod] + public void IEnumberTest() + { + var list = new List { 1, 2, 3, 4, 5, 6, 7, 8 }; + var result = list.ToUrlParam(isUrlEncode: false); + var str = string.Join("&[]=", list); + str = $"[]={str}"; + Assert.AreEqual(str, result); + } + + [TestMethod] + public void ObjListTest() + { + var array = new List { + new RequestQueryModel{ + Query="where1", + Time="2021-01-02", + TimeOut="5s" + }, + new RequestQueryModel{ + Query="where2", + Time="2021-01-01", + TimeOut="5s" + } + }; + + var result = array.ToUrlParam(isUrlEncode: false); + var str = $"[].query={array[0].Query}&[].time={array[0].Time}&[].timeOut={array[0].TimeOut}"; + str += $"&[].query={array[1].Query}&[].time={array[1].Time}&[].timeOut={array[1].TimeOut}"; + Assert.AreEqual(str, result); + + var obj = new + { + Values = array + }; + result = obj.ToUrlParam(isUrlEncode: false); + str = $"values[].query={array[0].Query}&values[].time={array[0].Time}&values[].timeOut={array[0].TimeOut}"; + str += $"&values[].query={array[1].Query}&values[].time={array[1].Time}&values[].timeOut={array[1].TimeOut}"; + Assert.AreEqual(str, result); + } + + [TestMethod] + public void KeyValueTest() + { + var dic = new Dictionary { + { "Name","David"}, + {"Age",30 }, + {"Sex","Male" } + }; + + var result = dic.ToUrlParam(); + var builder = new StringBuilder(); + var keys = dic.Keys.ToList(); + keys.Sort(); + foreach (var key in keys) + { + builder.Append($"&{key.ToCamelCase()}={dic[key]}"); + } + builder.Remove(0, 1); + Assert.AreEqual(builder.ToString(), result); + } +} diff --git a/test/Masa.Utils.Data.Promethus.Test/UserStruct.cs b/test/Masa.Utils.Data.Promethus.Test/UserStruct.cs new file mode 100644 index 0000000..63009e5 --- /dev/null +++ b/test/Masa.Utils.Data.Promethus.Test/UserStruct.cs @@ -0,0 +1,20 @@ +// Copyright (c) MASA Stack All rights reserved. +// Licensed under the MIT License. See LICENSE.txt in the project root for license information. + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Masa.Utils.Data.Promethus.Test +{ + public struct UserStruct + { + public string Name { get; set; } + + public int Age { get; set; } + + public string gender { get; set; } + } +} diff --git a/test/Masa.Utils.Data.Promethus.Test/_import.cs b/test/Masa.Utils.Data.Promethus.Test/_import.cs new file mode 100644 index 0000000..e264f75 --- /dev/null +++ b/test/Masa.Utils.Data.Promethus.Test/_import.cs @@ -0,0 +1,10 @@ +// Copyright (c) MASA Stack All rights reserved. +// Licensed under the MIT License. See LICENSE.txt in the project root for license information. + +global using Masa.Utils.Data.Promethus.Enums; +global using Masa.Utils.Data.Promethus.Model; +global using Microsoft.VisualStudio.TestTools.UnitTesting; +global using System.Collections.Generic; +global using System.Linq; +global using System.Net.Http; +global using System.Text; From 99a0e1a29e50d4da434c55635688d4662d53e07d Mon Sep 17 00:00:00 2001 From: qinyouzeng Date: Fri, 17 Jun 2022 11:26:38 +0800 Subject: [PATCH 25/48] feat: update code and add tests --- .../Extensions/HttpClientExtensions.cs | 16 +++ .../ObjectExtensions.cs} | 29 +---- .../Extensions/StringExtensions.cs | 20 ++++ .../IMasaPromethusClient.cs | 4 +- .../Masa.Utils.Data.Promethus.csproj | 1 + .../MasaPromethusClient.cs | 23 ++-- .../MetaData/ResponseSerieResultModel.cs | 2 +- .../Request/RequestQueryExemplarModel.cs | 14 +++ .../Model/Request/RequestQueryModel.cs | 13 --- .../Model/Request/RequestQueryRangeModel.cs | 17 +++ .../ServiceCollectionExtensions.cs | 30 +++++ Masa.Utils.Data.Promethus/_import.cs | 5 + .../ObjectExtensionsTests.cs} | 2 +- .../Extensions/StringExtensionsTests.cs | 30 +++++ .../MasaPromethusClientTests.cs | 108 +++++++++++++----- .../Masa.Utils.Data.Promethus.Test/_import.cs | 3 +- 16 files changed, 240 insertions(+), 77 deletions(-) create mode 100644 Masa.Utils.Data.Promethus/Extensions/HttpClientExtensions.cs rename Masa.Utils.Data.Promethus/{Extenistion/HttpClientExtensition.cs => Extensions/ObjectExtensions.cs} (86%) create mode 100644 Masa.Utils.Data.Promethus/Extensions/StringExtensions.cs create mode 100644 Masa.Utils.Data.Promethus/Model/Request/RequestQueryExemplarModel.cs create mode 100644 Masa.Utils.Data.Promethus/Model/Request/RequestQueryRangeModel.cs create mode 100644 Masa.Utils.Data.Promethus/ServiceCollectionExtensions.cs rename test/Masa.Utils.Data.Promethus.Test/{HttpClientExtensitionTests.cs => Extensions/ObjectExtensionsTests.cs} (99%) create mode 100644 test/Masa.Utils.Data.Promethus.Test/Extensions/StringExtensionsTests.cs diff --git a/Masa.Utils.Data.Promethus/Extensions/HttpClientExtensions.cs b/Masa.Utils.Data.Promethus/Extensions/HttpClientExtensions.cs new file mode 100644 index 0000000..322089a --- /dev/null +++ b/Masa.Utils.Data.Promethus/Extensions/HttpClientExtensions.cs @@ -0,0 +1,16 @@ +// Copyright (c) MASA Stack All rights reserved. +// Licensed under the MIT License. See LICENSE.txt in the project root for license information. + +[assembly: InternalsVisibleTo("Masa.Utils.Data.Promethus.Test")] + +namespace Masa.Utils.Data.Promethus; + +internal static class HttpClientExtensions +{ + public static async Task GetAsync(this ICallerProvider caller, string url,object data) + { + var request=new HttpRequestMessage(HttpMethod.Get, $"{url}?{data?.ToUrlParam()}"); + var response= await caller.SendAsync(request); + return await response.Content.ReadAsStringAsync(); + } +} diff --git a/Masa.Utils.Data.Promethus/Extenistion/HttpClientExtensition.cs b/Masa.Utils.Data.Promethus/Extensions/ObjectExtensions.cs similarity index 86% rename from Masa.Utils.Data.Promethus/Extenistion/HttpClientExtensition.cs rename to Masa.Utils.Data.Promethus/Extensions/ObjectExtensions.cs index 5b89c2c..e585b27 100644 --- a/Masa.Utils.Data.Promethus/Extenistion/HttpClientExtensition.cs +++ b/Masa.Utils.Data.Promethus/Extensions/ObjectExtensions.cs @@ -1,24 +1,15 @@ // Copyright (c) MASA Stack All rights reserved. // Licensed under the MIT License. See LICENSE.txt in the project root for license information. -using Masa.Utils.Caller.Core; + using System.Collections; using System.Reflection; using System.Text; using System.Web; -[assembly: InternalsVisibleTo("Masa.Utils.Data.Promethus.Test")] - -namespace System.Net.Http; +namespace Masa.Utils.Data.Promethus; -internal static class HttpClientExtensition +public static class ObjectExtensions { - public static async Task GetAsync(this ICallerProvider caller, string url,object data) - { - var request=new HttpRequestMessage(HttpMethod.Get, $"{url}?{data?.ToUrlParam()}"); - var response= await caller.SendAsync(request); - return await response.Content.ReadAsStringAsync(); - } - /// /// not support System.text.json /// @@ -113,7 +104,7 @@ private static string GetObjValue(Type type, object obj, string preStr, bool isE var name = info.Name; if (isCamelCase) - name = ToCamelCase(name); + name = name.ToCamelCase(); return GetValue(value, AppendValue(preStr, name, ".", isUrlEncode) ?? default!, isEnumString, isCamelCase, isUrlEncode); } @@ -128,7 +119,7 @@ private static string GetObjValue(Type type, object obj, string preStr, bool isE { var name = keyValue.Key; if (isCamelCase) - name = ToCamelCase(name); + name = name.ToCamelCase(); var str = GetValue(keyValue.Value, AppendValue(preStr, name, ".", isUrlEncode) ?? default!, isEnumString, isCamelCase, isUrlEncode); if (!string.IsNullOrEmpty(str)) list.Add(str); @@ -155,14 +146,4 @@ private static string GetObjValue(Type type, object obj, string preStr, bool isE else return $"{preStr}{splitChar}{value}"; } - - public static string ToCamelCase(this string str) - { - if (string.IsNullOrEmpty(str)) return str; - var c = str[0]; - if (c - 'A' >= 0 && c - 'Z' <= 0) - return $"{(char)(c + 32)}{str.AsSpan().Slice(1)}"; - - return str; - } } diff --git a/Masa.Utils.Data.Promethus/Extensions/StringExtensions.cs b/Masa.Utils.Data.Promethus/Extensions/StringExtensions.cs new file mode 100644 index 0000000..de3a405 --- /dev/null +++ b/Masa.Utils.Data.Promethus/Extensions/StringExtensions.cs @@ -0,0 +1,20 @@ +// Copyright (c) MASA Stack All rights reserved. +// Licensed under the MIT License. See LICENSE.txt in the project root for license information. + +namespace Masa.Utils.Data.Promethus; + +internal static class StringExtensions +{ + public static string ToCamelCase(this string str) + { + if (string.IsNullOrEmpty(str)) + return default!; + + var span = new ReadOnlySpan(str.ToArray()); + var c = span[0]; + if (c - 'A' >= 0 && c - 'Z' <= 0) + return $"{(char)(c + 32)}{span[1..]}"; + + return str; + } +} diff --git a/Masa.Utils.Data.Promethus/IMasaPromethusClient.cs b/Masa.Utils.Data.Promethus/IMasaPromethusClient.cs index f526f52..f393627 100644 --- a/Masa.Utils.Data.Promethus/IMasaPromethusClient.cs +++ b/Masa.Utils.Data.Promethus/IMasaPromethusClient.cs @@ -13,7 +13,7 @@ internal interface IMasaPromethusClient Task LabelsQueryAsync(RequestMetaDataQueryModel query); - Task LabelValuesQueryAsync(RequestMetaDataQueryModel query); + Task LabelValuesQueryAsync(RequestLableValueQueryModel query); - Task ExemplarQueryAsync(RequestQueryModel query); + Task ExemplarQueryAsync(RequestQueryExemplarModel query); } diff --git a/Masa.Utils.Data.Promethus/Masa.Utils.Data.Promethus.csproj b/Masa.Utils.Data.Promethus/Masa.Utils.Data.Promethus.csproj index e39dd8a..2a21f39 100644 --- a/Masa.Utils.Data.Promethus/Masa.Utils.Data.Promethus.csproj +++ b/Masa.Utils.Data.Promethus/Masa.Utils.Data.Promethus.csproj @@ -8,6 +8,7 @@ + diff --git a/Masa.Utils.Data.Promethus/MasaPromethusClient.cs b/Masa.Utils.Data.Promethus/MasaPromethusClient.cs index 22c7f4b..6fcb11d 100644 --- a/Masa.Utils.Data.Promethus/MasaPromethusClient.cs +++ b/Masa.Utils.Data.Promethus/MasaPromethusClient.cs @@ -1,9 +1,6 @@ // Copyright (c) MASA Stack All rights reserved. // Licensed under the MIT License. See LICENSE.txt in the project root for license information. -using Masa.Utils.Caller.Core; -using System.Text.Json; - [assembly: InternalsVisibleTo("Masa.Utils.Data.Promethus.Test")] namespace Masa.Utils.Data.Promethus; @@ -13,7 +10,7 @@ internal class MasaPromethusClient : IMasaPromethusClient private readonly ICallerProvider _caller; private static JsonSerializerOptions _jsonSerializerOptions = new JsonSerializerOptions { - PropertyNameCaseInsensitive = true, + PropertyNameCaseInsensitive = true }; public MasaPromethusClient(ICallerProvider caller) @@ -21,7 +18,7 @@ public MasaPromethusClient(ICallerProvider caller) _caller = caller; } - public async Task ExemplarQueryAsync(RequestQueryModel query) + public async Task ExemplarQueryAsync(RequestQueryExemplarModel query) { return await QueryDataAsync("/api/v1/query_exemplars", query); } @@ -31,9 +28,11 @@ public async Task LabelsQueryAsync(RequestMetaDataQuer return await QueryDataAsync("/api/v1/labels", query); } - public async Task LabelValuesQueryAsync(RequestMetaDataQueryModel query) + public async Task LabelValuesQueryAsync(RequestLableValueQueryModel query) { - return await QueryDataAsync("/api/v1/label//values", query); + var name = query.Lable; + query.Lable = null; + return await QueryDataAsync($"/api/v1/label/{name}/values", query); } public async Task QueryAsync(RequestQueryModel query) @@ -51,13 +50,23 @@ public async Task SeriesAsync(RequestMetaDataQueryMode return await QueryDataAsync("/api/v1/series", query); } + private void CheckOption() + { + if (_jsonSerializerOptions.Converters.Any(t => t.GetType() == typeof(JsonStringEnumConverter))) + return; + else + _jsonSerializerOptions.Converters.Add(new JsonStringEnumConverter()); + } + private async Task QueryDataAsync(string url, object data) where T : ResponseResultBaseModel { var str = await _caller.GetAsync(url, data); if (string.IsNullOrEmpty(str)) return default!; + CheckOption(); var baseResult = JsonSerializer.Deserialize(str, _jsonSerializerOptions); + if (baseResult == null || baseResult.Status != ResultStatuses.Success) { return baseResult ?? default!; diff --git a/Masa.Utils.Data.Promethus/Model/Reponse/MetaData/ResponseSerieResultModel.cs b/Masa.Utils.Data.Promethus/Model/Reponse/MetaData/ResponseSerieResultModel.cs index 57198a6..2b15b28 100644 --- a/Masa.Utils.Data.Promethus/Model/Reponse/MetaData/ResponseSerieResultModel.cs +++ b/Masa.Utils.Data.Promethus/Model/Reponse/MetaData/ResponseSerieResultModel.cs @@ -5,5 +5,5 @@ namespace Masa.Utils.Data.Promethus.Model; public class ResponseSerieResultModel : ResponseResultBaseModel { - public IEnumerable>? Data { get; set; } + public IEnumerable>? Data { get; set; } } diff --git a/Masa.Utils.Data.Promethus/Model/Request/RequestQueryExemplarModel.cs b/Masa.Utils.Data.Promethus/Model/Request/RequestQueryExemplarModel.cs new file mode 100644 index 0000000..98be977 --- /dev/null +++ b/Masa.Utils.Data.Promethus/Model/Request/RequestQueryExemplarModel.cs @@ -0,0 +1,14 @@ +// Copyright (c) MASA Stack All rights reserved. +// Licensed under the MIT License. See LICENSE.txt in the project root for license information. + +namespace Masa.Utils.Data.Promethus.Model; + +internal class RequestQueryExemplarModel +{ + public string? Query { get; set; } + + public string? Start { get; set; } + + public string? End { get; set; } +} + diff --git a/Masa.Utils.Data.Promethus/Model/Request/RequestQueryModel.cs b/Masa.Utils.Data.Promethus/Model/Request/RequestQueryModel.cs index 1a8163a..f243e13 100644 --- a/Masa.Utils.Data.Promethus/Model/Request/RequestQueryModel.cs +++ b/Masa.Utils.Data.Promethus/Model/Request/RequestQueryModel.cs @@ -11,16 +11,3 @@ public class RequestQueryModel public string? TimeOut { get; set; } } - -public class RequestQueryRangeModel -{ - public string? Query { get; set; } - - public string? Start { get; set; } - - public string? End { get; set; } - - public string? Step { get; set; } - - public string? TimeOut { get; set; } -} diff --git a/Masa.Utils.Data.Promethus/Model/Request/RequestQueryRangeModel.cs b/Masa.Utils.Data.Promethus/Model/Request/RequestQueryRangeModel.cs new file mode 100644 index 0000000..040e21f --- /dev/null +++ b/Masa.Utils.Data.Promethus/Model/Request/RequestQueryRangeModel.cs @@ -0,0 +1,17 @@ +// Copyright (c) MASA Stack All rights reserved. +// Licensed under the MIT License. See LICENSE.txt in the project root for license information. + +namespace Masa.Utils.Data.Promethus.Model; + +public class RequestQueryRangeModel +{ + public string? Query { get; set; } + + public string? Start { get; set; } + + public string? End { get; set; } + + public string? Step { get; set; } + + public string? TimeOut { get; set; } +} diff --git a/Masa.Utils.Data.Promethus/ServiceCollectionExtensions.cs b/Masa.Utils.Data.Promethus/ServiceCollectionExtensions.cs new file mode 100644 index 0000000..8968c6f --- /dev/null +++ b/Masa.Utils.Data.Promethus/ServiceCollectionExtensions.cs @@ -0,0 +1,30 @@ +// Copyright (c) MASA Stack All rights reserved. +// Licensed under the MIT License. See LICENSE.txt in the project root for license information. + +using Masa.Utils.Caller.Core; +using Masa.Utils.Caller.HttpClient; +using Microsoft.Extensions.DependencyInjection; + +namespace Masa.Utils.Data.Promethus; + +public static class ServiceCollectionExtensions +{ + private const string PROMETHUS_HTTP_CLIENT_NAME = "promethus_client_name"; + + public static IServiceCollection AddPromethusClient(this IServiceCollection services, string uri) + { + ArgumentNullException.ThrowIfNull(uri, nameof(uri)); + + services.AddCaller(builder => + { + builder.UseHttpClient(options => + { + options.BaseAddress = uri; + options.Name = PROMETHUS_HTTP_CLIENT_NAME; + }); + }); + + services.AddScoped(); + return services; + } +} diff --git a/Masa.Utils.Data.Promethus/_import.cs b/Masa.Utils.Data.Promethus/_import.cs index 3e9622c..31c1272 100644 --- a/Masa.Utils.Data.Promethus/_import.cs +++ b/Masa.Utils.Data.Promethus/_import.cs @@ -1,6 +1,11 @@ // Copyright (c) MASA Stack All rights reserved. // Licensed under the MIT License. See LICENSE.txt in the project root for license information. +global using Masa.Utils.Caller.Core; +global using Masa.Utils.Caller.HttpClient; global using Masa.Utils.Data.Promethus.Enums; global using Masa.Utils.Data.Promethus.Model; +global using Microsoft.Extensions.DependencyInjection; global using System.Runtime.CompilerServices; +global using System.Text.Json; +global using System.Text.Json.Serialization; diff --git a/test/Masa.Utils.Data.Promethus.Test/HttpClientExtensitionTests.cs b/test/Masa.Utils.Data.Promethus.Test/Extensions/ObjectExtensionsTests.cs similarity index 99% rename from test/Masa.Utils.Data.Promethus.Test/HttpClientExtensitionTests.cs rename to test/Masa.Utils.Data.Promethus.Test/Extensions/ObjectExtensionsTests.cs index 20a9866..4dee596 100644 --- a/test/Masa.Utils.Data.Promethus.Test/HttpClientExtensitionTests.cs +++ b/test/Masa.Utils.Data.Promethus.Test/Extensions/ObjectExtensionsTests.cs @@ -4,7 +4,7 @@ namespace Masa.Utils.Data.Promethus.Test; [TestClass] -public class HttpClientExtensitionTests +public class ObjectExtensionsTests { [TestMethod] [DataRow(1)] diff --git a/test/Masa.Utils.Data.Promethus.Test/Extensions/StringExtensionsTests.cs b/test/Masa.Utils.Data.Promethus.Test/Extensions/StringExtensionsTests.cs new file mode 100644 index 0000000..170df5e --- /dev/null +++ b/test/Masa.Utils.Data.Promethus.Test/Extensions/StringExtensionsTests.cs @@ -0,0 +1,30 @@ +// Copyright (c) MASA Stack All rights reserved. +// Licensed under the MIT License. See LICENSE.txt in the project root for license information. + +namespace Masa.Utils.Data.Promethus.Test; + +[TestClass] +public class StringExtensionsTests +{ + [TestMethod] + [DataRow(null)] + [DataRow("")] + [DataRow("name")] + [DataRow("Name")] + [DataRow("N")] + [DataRow("FirstName")] + public void CamelCaseTest(string str) + { + var result = str.ToCamelCase(); + if (string.IsNullOrEmpty(str)) + { + Assert.IsNull(result); + } + else + { + var camelStr = $"{str[0].ToString().ToLower()}{(str.Length - 1 > 0 ? str[1..] : "")}"; + Assert.AreEqual(camelStr, result); + } + + } +} diff --git a/test/Masa.Utils.Data.Promethus.Test/MasaPromethusClientTests.cs b/test/Masa.Utils.Data.Promethus.Test/MasaPromethusClientTests.cs index 9d31a59..3eb1bac 100644 --- a/test/Masa.Utils.Data.Promethus.Test/MasaPromethusClientTests.cs +++ b/test/Masa.Utils.Data.Promethus.Test/MasaPromethusClientTests.cs @@ -1,68 +1,120 @@ -using Masa.Utils.Data.Promethus.Enums; -using Microsoft.VisualStudio.TestTools.UnitTesting; -using System.Threading.Tasks; +// Copyright (c) MASA Stack All rights reserved. +// Licensed under the MIT License. See LICENSE.txt in the project root for license information. namespace Masa.Utils.Data.Promethus.Test { [TestClass] public class MasaPromethusClientTests { - private MasaPromethusClient _client; + private IMasaPromethusClient _client; + + [TestInitialize] + public void Initialize() + { + IServiceCollection service = new ServiceCollection(); + service.AddPromethusClient("http://localhost:9090"); + _client = service.BuildServiceProvider().GetService(); + } [TestMethod] - public async Task TestSeriesAsync() + public async Task TestQueryAsync() { - var data = await _client.SeriesAsync(new Model.RequestMetaDataQueryModel + var result = await _client.QueryAsync(new RequestQueryModel { - Match = null, - + Query = "up" }); - Assert.IsNotNull(data); + Assert.IsNotNull(result); + Assert.AreEqual(result.Status, ResultStatuses.Success); + Assert.IsNotNull(result.Data); } [TestMethod] - public async Task TestQueryAsync() + public async Task TestQueryVectorAsync() { - var data = await _client.SeriesAsync(new Model.RequestMetaDataQueryModel + var result = await _client.QueryAsync(new RequestQueryModel { - Match = null, + Query = "up" + }); + + if (result.Data.Result != null) + { + var data = result.Data.Result as InstantVectorModel[]; + + Assert.IsNotNull(data); + Assert.IsNotNull(data[0].Metric); + Assert.IsNotNull(data[0].Value); + Assert.IsNotNull(data[0].Metric.Keys); + Assert.AreEqual(2, data[0].Value.Length); + } + } + + [TestMethod] + public async Task TestQueryRangeAsync() + { + var result = await _client.QueryRangeAsync(new RequestQueryRangeModel + { + Query = "up", + Start = "2022-06-17T02:00:00.000Z", + End = "2022-06-17T02:30:00.000Z", + Step = "300s", }); - Assert.IsNotNull(data); + Assert.IsNotNull(result); + Assert.AreEqual(result.Status, ResultStatuses.Success); + Assert.IsNotNull(result.Data); + if (result.Data.ResultType == ResultTypes.Matrix) + { + var data = result.Data.Result as MatrixRangeModel[]; + Assert.IsNotNull(data); + Assert.IsNotNull(data[0].Metric); + Assert.IsNotNull(data[0].Values); + } } [TestMethod] - [DataRow()] - public async Task TestExemplarQueryAsync(string time, string timeOut, string query) + public async Task TestSeriesAsync() { - var param = new Model.RequestQueryModel + var result = await _client.SeriesAsync(new RequestMetaDataQueryModel { - Query = query, - Time = time, - TimeOut = timeOut - }; - var data = await _client.ExemplarQueryAsync(param); - if (string.IsNullOrEmpty(query)) - Assert.AreEqual(ResultStatuses.Error, data.Status); + Match = new string[] { "up" }, + Start = "2022-06-17T02:00:00.000Z", + End = "2022-06-17T02:30:00.000Z" + }); + Assert.IsNotNull(result); + Assert.AreEqual(result.Status, ResultStatuses.Success); } [TestMethod] public async Task TestLabelsQueryAsync() { - await Task.CompletedTask; + var result = await _client.LabelsQueryAsync(default!); + Assert.IsNotNull(result); + Assert.AreEqual(result.Status, ResultStatuses.Success); + Assert.IsTrue(result.Data.Count() > 0); } [TestMethod] public async Task TestLabelValuesQueryAsync() { - await Task.CompletedTask; + var result = await _client.LabelValuesQueryAsync(new RequestLableValueQueryModel()); + Assert.IsNotNull(result); + Assert.AreEqual(result.Status, ResultStatuses.Success); + Assert.IsTrue(result.Data.Count() > 0); } - [TestMethod] - public async Task TestQueryRangeAsync() + [DataRow()] + public async Task TestExemplarQueryAsync() { - await Task.CompletedTask; + var param = new RequestQueryExemplarModel + { + Query = "up", + Start = "2022-06-17T02:00:00.000Z", + End = "2022-06-17T02:30:00.000Z" + }; + var result = await _client.ExemplarQueryAsync(param); + Assert.IsNotNull(result); + Assert.AreEqual(result.Status, ResultStatuses.Success); } } } diff --git a/test/Masa.Utils.Data.Promethus.Test/_import.cs b/test/Masa.Utils.Data.Promethus.Test/_import.cs index e264f75..f6a2a12 100644 --- a/test/Masa.Utils.Data.Promethus.Test/_import.cs +++ b/test/Masa.Utils.Data.Promethus.Test/_import.cs @@ -3,8 +3,9 @@ global using Masa.Utils.Data.Promethus.Enums; global using Masa.Utils.Data.Promethus.Model; +global using Microsoft.Extensions.DependencyInjection; global using Microsoft.VisualStudio.TestTools.UnitTesting; global using System.Collections.Generic; global using System.Linq; -global using System.Net.Http; global using System.Text; +global using System.Threading.Tasks; From f7a571f35f368e6f565bcc7a8f61c87063f3bfdc Mon Sep 17 00:00:00 2001 From: qinyouzeng Date: Fri, 17 Jun 2022 12:02:08 +0800 Subject: [PATCH 26/48] docs: add docs --- Masa.Utils.Data.Promethus/README.md | 46 +++++++++++++++++++++++ Masa.Utils.Data.Promethus/README.zh-CN.md | 46 +++++++++++++++++++++++ 2 files changed, 92 insertions(+) create mode 100644 Masa.Utils.Data.Promethus/README.md create mode 100644 Masa.Utils.Data.Promethus/README.zh-CN.md diff --git a/Masa.Utils.Data.Promethus/README.md b/Masa.Utils.Data.Promethus/README.md new file mode 100644 index 0000000..20aa5b7 --- /dev/null +++ b/Masa.Utils.Data.Promethus/README.md @@ -0,0 +1,46 @@ +[中](README.zh-CN.md) | EN + +## Masa.Utils.Data.Promethus + +[Promethus Http Api](https://www.prometheus.io/docs/prometheus/latest/querying/api/) Client Library + +## Install: +```c# +Install-Package Masa.Utils.Data.Promethus +``` + +### Usage: + +1. Inject services + +```` C# +builder.Services.AddPromethusClient("http://127.0.0.1:9090"); +```` + +2. Call + +```C# + public class SampleService{ + + private IMasaPromethusClient _client; + + public SampleService(IMasaPromethusClient client) + { + _client=client; + } + + public async Task QueryAsync() + { + var result=await _client.QueryAsync(...); + } + } +``` + +### Current suports: + +- [query](https://www.prometheus.io/docs/prometheus/latest/querying/api/#instant-queries) +- [query_range](https://www.prometheus.io/docs/prometheus/latest/querying/api/#range-queries) +- [series](https://www.prometheus.io/docs/prometheus/latest/querying/api/#finding-series-by-label-matchers) +- [lables](https://www.prometheus.io/docs/prometheus/latest/querying/api/#getting-label-names) +- [lable value](https://www.prometheus.io/docs/prometheus/latest/querying/api/#querying-label-values) +- [exemplars](https://www.prometheus.io/docs/prometheus/latest/querying/api/#querying-exemplars) diff --git a/Masa.Utils.Data.Promethus/README.zh-CN.md b/Masa.Utils.Data.Promethus/README.zh-CN.md new file mode 100644 index 0000000..5994848 --- /dev/null +++ b/Masa.Utils.Data.Promethus/README.zh-CN.md @@ -0,0 +1,46 @@ +[EN](README.md) | 中 + +## Masa.Utils.Data.Promethus + +[Promethus Http Api](https://www.prometheus.io/docs/prometheus/latest/querying/api/) 客户端类库 + +## 安装: +```c# +Install-Package Masa.Utils.Data.Promethus +``` + +### 用法: + +1. 注入services + +```` C# +builder.Services.AddPromethusClient("http://127.0.0.1:9090"); +```` + +2. 调用 + +```C# + public class SampleService{ + + private IMasaPromethusClient _client; + + public SampleService(IMasaPromethusClient client) + { + _client=client; + } + + public async Task QueryAsync() + { + var result=await _client.QueryAsync(...); + } + } +``` + +### 目前只支持以下api: + +- [query](https://www.prometheus.io/docs/prometheus/latest/querying/api/#instant-queries) +- [query_range](https://www.prometheus.io/docs/prometheus/latest/querying/api/#range-queries) +- [series](https://www.prometheus.io/docs/prometheus/latest/querying/api/#finding-series-by-label-matchers) +- [lables](https://www.prometheus.io/docs/prometheus/latest/querying/api/#getting-label-names) +- [lable value](https://www.prometheus.io/docs/prometheus/latest/querying/api/#querying-label-values) +- [exemplars](https://www.prometheus.io/docs/prometheus/latest/querying/api/#querying-exemplars) From 64676e094bb84d46d50b9b5a62087f45ed68d697 Mon Sep 17 00:00:00 2001 From: qinyouzeng Date: Fri, 17 Jun 2022 14:54:22 +0800 Subject: [PATCH 27/48] feat: add convert json value to object --- .../MasaPromethusClient.cs | 40 +++++++++++++++++++ .../ServiceCollectionExtensions.cs | 4 -- 2 files changed, 40 insertions(+), 4 deletions(-) diff --git a/Masa.Utils.Data.Promethus/MasaPromethusClient.cs b/Masa.Utils.Data.Promethus/MasaPromethusClient.cs index 6fcb11d..7d23ff0 100644 --- a/Masa.Utils.Data.Promethus/MasaPromethusClient.cs +++ b/Masa.Utils.Data.Promethus/MasaPromethusClient.cs @@ -83,17 +83,57 @@ private async Task QueryDataAsync(string url, object data) where T : Respo { var temp = JsonSerializer.Serialize(result.Data.Result, _jsonSerializerOptions); result.Data.Result = JsonSerializer.Deserialize(temp, _jsonSerializerOptions); + if (result.Data.Result != null && result.Data.Result.Any()) + { + foreach (MatrixRangeModel item in result.Data.Result) + { + if (item.Values == null || !item.Values.Any()) + continue; + var array = item.Values.ToArray(); + int i = 0, max = array.Length - 1; + do + { + array[i] = ConvertJsonToObjValue(array[i]); + i++; + } + while (max - i >= 0); + item.Values = array; + } + } return result as T ?? default!; } case ResultTypes.Vector: { var temp = JsonSerializer.Serialize(result.Data.Result, _jsonSerializerOptions); result.Data.Result = JsonSerializer.Deserialize(temp, _jsonSerializerOptions); + if (result.Data.Result != null && result.Data.Result.Any()) + { + foreach (InstantVectorModel item in result.Data.Result) + { + item.Value = ConvertJsonToObjValue(item.Value); + } + } return result as T ?? default!; } + default: + { + if (result.Data.Result != null && result.Data.Result.Any()) + { + result.Data.Result = ConvertJsonToObjValue(result.Data.Result); + } + } + break; } } return baseResult; } + + private static object[] ConvertJsonToObjValue(object[]? values) + { + if (values == null || values.Length - 2 < 0) + return default!; + + return new object[] { Convert.ToDouble(values[0]), values[1]?.ToString() ?? default! }; + } } diff --git a/Masa.Utils.Data.Promethus/ServiceCollectionExtensions.cs b/Masa.Utils.Data.Promethus/ServiceCollectionExtensions.cs index 8968c6f..f271af4 100644 --- a/Masa.Utils.Data.Promethus/ServiceCollectionExtensions.cs +++ b/Masa.Utils.Data.Promethus/ServiceCollectionExtensions.cs @@ -1,10 +1,6 @@ // Copyright (c) MASA Stack All rights reserved. // Licensed under the MIT License. See LICENSE.txt in the project root for license information. -using Masa.Utils.Caller.Core; -using Masa.Utils.Caller.HttpClient; -using Microsoft.Extensions.DependencyInjection; - namespace Masa.Utils.Data.Promethus; public static class ServiceCollectionExtensions From fac487041ea2f7581d7d491966008feeda8bd5da Mon Sep 17 00:00:00 2001 From: qinyouzeng Date: Mon, 20 Jun 2022 16:33:47 +0800 Subject: [PATCH 28/48] feat: fix enume and comments --- .../Enums/ResultStatuses.cs | 2 +- .../Enums/ResultTypes.cs | 1 + .../Extensions/ObjectExtensions.cs | 40 +++++++++---------- 3 files changed, 20 insertions(+), 23 deletions(-) diff --git a/Masa.Utils.Data.Promethus/Enums/ResultStatuses.cs b/Masa.Utils.Data.Promethus/Enums/ResultStatuses.cs index 10bea07..d9516f2 100644 --- a/Masa.Utils.Data.Promethus/Enums/ResultStatuses.cs +++ b/Masa.Utils.Data.Promethus/Enums/ResultStatuses.cs @@ -5,7 +5,7 @@ namespace Masa.Utils.Data.Promethus.Enums; public enum ResultStatuses { + None, Success, - Error } diff --git a/Masa.Utils.Data.Promethus/Enums/ResultTypes.cs b/Masa.Utils.Data.Promethus/Enums/ResultTypes.cs index 6d4a855..bb0064e 100644 --- a/Masa.Utils.Data.Promethus/Enums/ResultTypes.cs +++ b/Masa.Utils.Data.Promethus/Enums/ResultTypes.cs @@ -5,6 +5,7 @@ namespace Masa.Utils.Data.Promethus.Enums; public enum ResultTypes { + None, Matrix, Vector, Scalar, diff --git a/Masa.Utils.Data.Promethus/Extensions/ObjectExtensions.cs b/Masa.Utils.Data.Promethus/Extensions/ObjectExtensions.cs index e585b27..adc94dc 100644 --- a/Masa.Utils.Data.Promethus/Extensions/ObjectExtensions.cs +++ b/Masa.Utils.Data.Promethus/Extensions/ObjectExtensions.cs @@ -27,23 +27,25 @@ public static class ObjectExtensions { if (obj == null) return null; var type = obj.GetType(); - if (type == typeof(string))//string + if (type == typeof(string)) { var str = (string)obj; return AppendValue(preStr, str, "=", isUrlEncode); } else if (type.IsValueType) { - if (type.IsEnum)//enum + if (type.IsEnum) { var str = isEnumString ? obj.ToString() : Convert.ToInt32(obj).ToString(); return AppendValue(preStr, str, "=", isUrlEncode); } - else if (!type.IsPrimitive) //struct + //struct + else if (!type.IsPrimitive) { return GetObjValue(type, obj, preStr, isEnumString, isCamelCase, isUrlEncode); } - else //sample value + //sample value + else { var str = obj.ToString(); return AppendValue(preStr, str, "=", isUrlEncode); @@ -57,9 +59,9 @@ public static class ObjectExtensions { return GetObjValue(type, obj, preStr, isEnumString, isCamelCase, isUrlEncode); } + //current not suport else { - // return null; } } @@ -69,26 +71,21 @@ private static string GetObjValue(Type type, object obj, string preStr, bool isE var properties = type.GetProperties(BindingFlags.Instance | BindingFlags.Public | BindingFlags.GetProperty); var fields = type.GetFields(BindingFlags.Instance | BindingFlags.Public | BindingFlags.GetField); var list = new List(); - if (properties.Length > 0) + + foreach (var item in properties) { - foreach (var item in properties) - { - var str = GetMemerInfoValue(item, item.GetValue(obj), preStr, isEnumString, isCamelCase, isUrlEncode); - if (string.IsNullOrEmpty(str)) - continue; - list.Add(str); - } + var str = GetMemerInfoValue(item, item.GetValue(obj), preStr, isEnumString, isCamelCase, isUrlEncode); + if (string.IsNullOrEmpty(str)) + continue; + list.Add(str); } - if (fields.Length > 0) + foreach (var item in fields) { - foreach (var item in fields) - { - var str = GetMemerInfoValue(item, item.GetValue(obj), preStr, isEnumString, isCamelCase, isUrlEncode); - if (string.IsNullOrEmpty(str)) - continue; - list.Add(str); - } + var str = GetMemerInfoValue(item, item.GetValue(obj), preStr, isEnumString, isCamelCase, isUrlEncode); + if (string.IsNullOrEmpty(str)) + continue; + list.Add(str); } if (!list.Any()) @@ -111,7 +108,6 @@ private static string GetObjValue(Type type, object obj, string preStr, bool isE private static string? GetEnumerableValue(object obj, string preStr, bool isEnumString = false, bool isCamelCase = true, bool isUrlEncode = true) { - StringBuilder builder = new StringBuilder(4096); var list = new List(); foreach (var item in (IEnumerable)obj) { From d32c669c7930b99f73346974a7ebaf971bd6130c Mon Sep 17 00:00:00 2001 From: qinyouzeng Date: Tue, 21 Jun 2022 14:25:43 +0800 Subject: [PATCH 29/48] feat: code styles and other specifications update --- .../Enums/ResultTypes.cs | 3 ++ ...ensions.cs => CallerProviderExtensions.cs} | 12 ++--- .../Extensions/ObjectExtensions.cs | 51 +++++++++--------- .../Extensions/StringExtensions.cs | 4 +- .../IMasaPromethusClient.cs | 12 ++--- .../MasaPromethusClient.cs | 54 +++++++++---------- ...sultModel.cs => ExemplarResultResponse.cs} | 2 +- ...lResultModel.cs => LabelResultResponse.cs} | 2 +- ...eResultModel.cs => SerieResultResponse.cs} | 2 +- ...nModel.cs => QueryResultCommonResponse.cs} | 4 +- .../Reponse/Query/QueryResultDataResponse.cs | 11 ++++ .../Query/QueryResultInstantVectorResponse.cs | 11 ++++ .../Query/QueryResultMatrixRangeResponse.cs | 11 ++++ .../Query/ResponseQueryResultDataModel.cs | 25 --------- ...sultBaseModel.cs => ResultBaseResponse.cs} | 2 +- ...ueryModel.cs => LableValueQueryRequest.cs} | 2 +- ...aQueryModel.cs => MetaDataQueryRequest.cs} | 2 +- ...emplarModel.cs => QueryExemplarRequest.cs} | 2 +- ...ueryRangeModel.cs => QueryRangeRequest.cs} | 2 +- .../{RequestQueryModel.cs => QueryRequest.cs} | 2 +- Masa.Utils.Data.Promethus/_import.cs | 4 ++ .../Extensions/ObjectExtensionsTests.cs | 12 ++--- .../MasaPromethusClientTests.cs | 16 +++--- .../Masa.Utils.Data.Promethus.Test/_import.cs | 1 + 24 files changed, 130 insertions(+), 119 deletions(-) rename Masa.Utils.Data.Promethus/Extensions/{HttpClientExtensions.cs => CallerProviderExtensions.cs} (56%) rename Masa.Utils.Data.Promethus/Model/Reponse/Exemplar/{ResponseExemplarResultModel.cs => ExemplarResultResponse.cs} (89%) rename Masa.Utils.Data.Promethus/Model/Reponse/MetaData/{ResponseLabelResultModel.cs => LabelResultResponse.cs} (79%) rename Masa.Utils.Data.Promethus/Model/Reponse/MetaData/{ResponseSerieResultModel.cs => SerieResultResponse.cs} (80%) rename Masa.Utils.Data.Promethus/Model/Reponse/Query/{ResponseQueryResultCommonModel.cs => QueryResultCommonResponse.cs} (60%) create mode 100644 Masa.Utils.Data.Promethus/Model/Reponse/Query/QueryResultDataResponse.cs create mode 100644 Masa.Utils.Data.Promethus/Model/Reponse/Query/QueryResultInstantVectorResponse.cs create mode 100644 Masa.Utils.Data.Promethus/Model/Reponse/Query/QueryResultMatrixRangeResponse.cs delete mode 100644 Masa.Utils.Data.Promethus/Model/Reponse/Query/ResponseQueryResultDataModel.cs rename Masa.Utils.Data.Promethus/Model/Reponse/{ResponseResultBaseModel.cs => ResultBaseResponse.cs} (91%) rename Masa.Utils.Data.Promethus/Model/Request/{RequestLableValueQueryModel.cs => LableValueQueryRequest.cs} (78%) rename Masa.Utils.Data.Promethus/Model/Request/{RequestMetaDataQueryModel.cs => MetaDataQueryRequest.cs} (89%) rename Masa.Utils.Data.Promethus/Model/Request/{RequestQueryExemplarModel.cs => QueryExemplarRequest.cs} (88%) rename Masa.Utils.Data.Promethus/Model/Request/{RequestQueryRangeModel.cs => QueryRangeRequest.cs} (91%) rename Masa.Utils.Data.Promethus/Model/Request/{RequestQueryModel.cs => QueryRequest.cs} (91%) diff --git a/Masa.Utils.Data.Promethus/Enums/ResultTypes.cs b/Masa.Utils.Data.Promethus/Enums/ResultTypes.cs index bb0064e..d857163 100644 --- a/Masa.Utils.Data.Promethus/Enums/ResultTypes.cs +++ b/Masa.Utils.Data.Promethus/Enums/ResultTypes.cs @@ -3,6 +3,9 @@ namespace Masa.Utils.Data.Promethus.Enums; +/// +/// reference https://prometheus.io/docs/prometheus/latest/querying/api/#expression-query-result-formats +/// public enum ResultTypes { None, diff --git a/Masa.Utils.Data.Promethus/Extensions/HttpClientExtensions.cs b/Masa.Utils.Data.Promethus/Extensions/CallerProviderExtensions.cs similarity index 56% rename from Masa.Utils.Data.Promethus/Extensions/HttpClientExtensions.cs rename to Masa.Utils.Data.Promethus/Extensions/CallerProviderExtensions.cs index 322089a..8791bfe 100644 --- a/Masa.Utils.Data.Promethus/Extensions/HttpClientExtensions.cs +++ b/Masa.Utils.Data.Promethus/Extensions/CallerProviderExtensions.cs @@ -3,14 +3,14 @@ [assembly: InternalsVisibleTo("Masa.Utils.Data.Promethus.Test")] -namespace Masa.Utils.Data.Promethus; +namespace Masa.Utils.Caller.Core; -internal static class HttpClientExtensions +internal static class CallerProviderExtensions { - public static async Task GetAsync(this ICallerProvider caller, string url,object data) + public static async Task GetAsync(this ICallerProvider caller, string url, object data) { - var request=new HttpRequestMessage(HttpMethod.Get, $"{url}?{data?.ToUrlParam()}"); - var response= await caller.SendAsync(request); + var request = new HttpRequestMessage(HttpMethod.Get, $"{url}?{data.ToUrlParam()}"); + var response = await caller.SendAsync(request); return await response.Content.ReadAsStringAsync(); - } + } } diff --git a/Masa.Utils.Data.Promethus/Extensions/ObjectExtensions.cs b/Masa.Utils.Data.Promethus/Extensions/ObjectExtensions.cs index adc94dc..8fc5323 100644 --- a/Masa.Utils.Data.Promethus/Extensions/ObjectExtensions.cs +++ b/Masa.Utils.Data.Promethus/Extensions/ObjectExtensions.cs @@ -1,29 +1,27 @@ // Copyright (c) MASA Stack All rights reserved. // Licensed under the MIT License. See LICENSE.txt in the project root for license information. -using System.Collections; -using System.Reflection; -using System.Text; -using System.Web; - -namespace Masa.Utils.Data.Promethus; +namespace System; public static class ObjectExtensions { /// - /// not support System.text.json + /// 当前支持类型:class、struct和实现IEnumerable接口的类型, + /// struct默认和class 使用公开get属性和字段, + /// IEnumerable类型直接转化为:key[]=value1&key[]=value2 + /// enum 默认使用字符串,如果需要使用数值,请设置isEnumString=false /// /// /// /// /// /// - public static string? ToUrlParam(this object obj, bool isEnumString = true, bool isCamelCase = true, bool isUrlEncode = true) + public static string? ToUrlParam(this object? obj, bool isEnumString = true, bool isCamelCase = true, bool isUrlEncode = true) { return GetValue(obj, string.Empty, isEnumString, isCamelCase, isUrlEncode); } - private static string? GetValue(object obj, string preStr, bool isEnumString = false, bool isCamelCase = true, bool isUrlEncode = true) + private static string? GetValue(object? obj, string preStr, bool isEnumString = false, bool isCamelCase = true, bool isUrlEncode = true) { if (obj == null) return null; var type = obj.GetType(); @@ -32,38 +30,34 @@ public static class ObjectExtensions var str = (string)obj; return AppendValue(preStr, str, "=", isUrlEncode); } - else if (type.IsValueType) + + if (type.IsValueType) { if (type.IsEnum) { var str = isEnumString ? obj.ToString() : Convert.ToInt32(obj).ToString(); return AppendValue(preStr, str, "=", isUrlEncode); } - //struct - else if (!type.IsPrimitive) - { - return GetObjValue(type, obj, preStr, isEnumString, isCamelCase, isUrlEncode); - } + //sample value - else + if (type.IsPrimitive) { var str = obj.ToString(); return AppendValue(preStr, str, "=", isUrlEncode); } + + //struct + return GetObjValue(type, obj, preStr, isEnumString, isCamelCase, isUrlEncode); } - else if (type.IsArray || type.GetInterfaces().Any(t => t.Name.IndexOf("IEnumerable") == 0)) - { + + if (type.IsArray || type.GetInterfaces().Any(t => t.Name.IndexOf("IEnumerable") == 0)) return GetEnumerableValue(obj, preStr, isEnumString, isCamelCase, isUrlEncode); - } - else if (type.IsClass) - { + + if (type.IsClass) return GetObjValue(type, obj, preStr, isEnumString, isCamelCase, isUrlEncode); - } - //current not suport - else - { - return null; - } + + //current type not suport + return null; } private static string GetObjValue(Type type, object obj, string preStr, bool isEnumString = false, bool isCamelCase = true, bool isUrlEncode = true) @@ -90,6 +84,7 @@ private static string GetObjValue(Type type, object obj, string preStr, bool isE if (!list.Any()) return default!; + list.Sort(); return string.Join('&', list); } @@ -129,6 +124,7 @@ private static string GetObjValue(Type type, object obj, string preStr, bool isE } if (!list.Any()) return default!; + list.Sort(); return string.Join('&', list); } @@ -137,6 +133,7 @@ private static string GetObjValue(Type type, object obj, string preStr, bool isE { if (string.IsNullOrEmpty(preStr) || string.IsNullOrEmpty(value)) return value; + if (isUrlEncode) return $"{preStr}{splitChar}{HttpUtility.UrlEncode(value, Encoding.UTF8)}"; else diff --git a/Masa.Utils.Data.Promethus/Extensions/StringExtensions.cs b/Masa.Utils.Data.Promethus/Extensions/StringExtensions.cs index de3a405..a484b7f 100644 --- a/Masa.Utils.Data.Promethus/Extensions/StringExtensions.cs +++ b/Masa.Utils.Data.Promethus/Extensions/StringExtensions.cs @@ -1,7 +1,7 @@ // Copyright (c) MASA Stack All rights reserved. // Licensed under the MIT License. See LICENSE.txt in the project root for license information. -namespace Masa.Utils.Data.Promethus; +namespace System; internal static class StringExtensions { @@ -10,7 +10,7 @@ public static string ToCamelCase(this string str) if (string.IsNullOrEmpty(str)) return default!; - var span = new ReadOnlySpan(str.ToArray()); + var span = new ReadOnlySpan(str.ToArray()); var c = span[0]; if (c - 'A' >= 0 && c - 'Z' <= 0) return $"{(char)(c + 32)}{span[1..]}"; diff --git a/Masa.Utils.Data.Promethus/IMasaPromethusClient.cs b/Masa.Utils.Data.Promethus/IMasaPromethusClient.cs index f393627..2461208 100644 --- a/Masa.Utils.Data.Promethus/IMasaPromethusClient.cs +++ b/Masa.Utils.Data.Promethus/IMasaPromethusClient.cs @@ -5,15 +5,15 @@ namespace Masa.Utils.Data.Promethus; internal interface IMasaPromethusClient { - Task QueryAsync(RequestQueryModel query); + Task QueryAsync(QueryRequest query); - Task QueryRangeAsync(RequestQueryRangeModel query); + Task QueryRangeAsync(QueryRangeRequest query); - Task SeriesAsync(RequestMetaDataQueryModel query); + Task SeriesAsync(MetaDataQueryRequest query); - Task LabelsQueryAsync(RequestMetaDataQueryModel query); + Task LabelsQueryAsync(MetaDataQueryRequest query); - Task LabelValuesQueryAsync(RequestLableValueQueryModel query); + Task LabelValuesQueryAsync(LableValueQueryRequest query); - Task ExemplarQueryAsync(RequestQueryExemplarModel query); + Task ExemplarQueryAsync(QueryExemplarRequest query); } diff --git a/Masa.Utils.Data.Promethus/MasaPromethusClient.cs b/Masa.Utils.Data.Promethus/MasaPromethusClient.cs index 7d23ff0..67ec987 100644 --- a/Masa.Utils.Data.Promethus/MasaPromethusClient.cs +++ b/Masa.Utils.Data.Promethus/MasaPromethusClient.cs @@ -8,7 +8,7 @@ namespace Masa.Utils.Data.Promethus; internal class MasaPromethusClient : IMasaPromethusClient { private readonly ICallerProvider _caller; - private static JsonSerializerOptions _jsonSerializerOptions = new JsonSerializerOptions + private static JsonSerializerOptions _jsonSerializerOptions = new() { PropertyNameCaseInsensitive = true }; @@ -18,47 +18,39 @@ public MasaPromethusClient(ICallerProvider caller) _caller = caller; } - public async Task ExemplarQueryAsync(RequestQueryExemplarModel query) + public async Task ExemplarQueryAsync(QueryExemplarRequest query) { - return await QueryDataAsync("/api/v1/query_exemplars", query); + return await QueryDataAsync("/api/v1/query_exemplars", query); } - public async Task LabelsQueryAsync(RequestMetaDataQueryModel query) + public async Task LabelsQueryAsync(MetaDataQueryRequest query) { - return await QueryDataAsync("/api/v1/labels", query); + return await QueryDataAsync("/api/v1/labels", query); } - public async Task LabelValuesQueryAsync(RequestLableValueQueryModel query) + public async Task LabelValuesQueryAsync(LableValueQueryRequest query) { var name = query.Lable; query.Lable = null; - return await QueryDataAsync($"/api/v1/label/{name}/values", query); + return await QueryDataAsync($"/api/v1/label/{name}/values", query); } - public async Task QueryAsync(RequestQueryModel query) + public async Task QueryAsync(QueryRequest query) { - return await QueryDataAsync("/api/v1/query", query); + return await QueryDataAsync("/api/v1/query", query); } - public async Task QueryRangeAsync(RequestQueryRangeModel query) + public async Task QueryRangeAsync(QueryRangeRequest query) { - return await QueryDataAsync("/api/v1/query_range", query); + return await QueryDataAsync("/api/v1/query_range", query); } - public async Task SeriesAsync(RequestMetaDataQueryModel query) + public async Task SeriesAsync(MetaDataQueryRequest query) { - return await QueryDataAsync("/api/v1/series", query); + return await QueryDataAsync("/api/v1/series", query); } - private void CheckOption() - { - if (_jsonSerializerOptions.Converters.Any(t => t.GetType() == typeof(JsonStringEnumConverter))) - return; - else - _jsonSerializerOptions.Converters.Add(new JsonStringEnumConverter()); - } - - private async Task QueryDataAsync(string url, object data) where T : ResponseResultBaseModel + private async Task QueryDataAsync(string url, object data) where T : ResultBaseResponse { var str = await _caller.GetAsync(url, data); if (string.IsNullOrEmpty(str)) @@ -72,9 +64,9 @@ private async Task QueryDataAsync(string url, object data) where T : Respo return baseResult ?? default!; } - if (typeof(T) == typeof(ResponseQueryResultCommonModel)) + if (typeof(T) == typeof(QueryResultCommonResponse)) { - var result = baseResult as ResponseQueryResultCommonModel; + var result = baseResult as QueryResultCommonResponse; if (result == null || result.Data == null) return baseResult; switch (result.Data.ResultType) @@ -82,10 +74,10 @@ private async Task QueryDataAsync(string url, object data) where T : Respo case ResultTypes.Matrix: { var temp = JsonSerializer.Serialize(result.Data.Result, _jsonSerializerOptions); - result.Data.Result = JsonSerializer.Deserialize(temp, _jsonSerializerOptions); + result.Data.Result = JsonSerializer.Deserialize(temp, _jsonSerializerOptions); if (result.Data.Result != null && result.Data.Result.Any()) { - foreach (MatrixRangeModel item in result.Data.Result) + foreach (QueryResultMatrixRangeResponse item in result.Data.Result) { if (item.Values == null || !item.Values.Any()) continue; @@ -105,10 +97,10 @@ private async Task QueryDataAsync(string url, object data) where T : Respo case ResultTypes.Vector: { var temp = JsonSerializer.Serialize(result.Data.Result, _jsonSerializerOptions); - result.Data.Result = JsonSerializer.Deserialize(temp, _jsonSerializerOptions); + result.Data.Result = JsonSerializer.Deserialize(temp, _jsonSerializerOptions); if (result.Data.Result != null && result.Data.Result.Any()) { - foreach (InstantVectorModel item in result.Data.Result) + foreach (QueryResultInstantVectorResponse item in result.Data.Result) { item.Value = ConvertJsonToObjValue(item.Value); } @@ -129,6 +121,12 @@ private async Task QueryDataAsync(string url, object data) where T : Respo return baseResult; } + private static void CheckOption() + { + if (!_jsonSerializerOptions.Converters.Any(t => t.GetType() == typeof(JsonStringEnumConverter))) + _jsonSerializerOptions.Converters.Add(new JsonStringEnumConverter()); + } + private static object[] ConvertJsonToObjValue(object[]? values) { if (values == null || values.Length - 2 < 0) diff --git a/Masa.Utils.Data.Promethus/Model/Reponse/Exemplar/ResponseExemplarResultModel.cs b/Masa.Utils.Data.Promethus/Model/Reponse/Exemplar/ExemplarResultResponse.cs similarity index 89% rename from Masa.Utils.Data.Promethus/Model/Reponse/Exemplar/ResponseExemplarResultModel.cs rename to Masa.Utils.Data.Promethus/Model/Reponse/Exemplar/ExemplarResultResponse.cs index ac20eb6..f3a83c8 100644 --- a/Masa.Utils.Data.Promethus/Model/Reponse/Exemplar/ResponseExemplarResultModel.cs +++ b/Masa.Utils.Data.Promethus/Model/Reponse/Exemplar/ExemplarResultResponse.cs @@ -3,7 +3,7 @@ namespace Masa.Utils.Data.Promethus.Model; -public class ResponseExemplarResultModel : ResponseResultBaseModel +public class ExemplarResultResponse : ResultBaseResponse { public IEnumerable? Data { get; set; } } diff --git a/Masa.Utils.Data.Promethus/Model/Reponse/MetaData/ResponseLabelResultModel.cs b/Masa.Utils.Data.Promethus/Model/Reponse/MetaData/LabelResultResponse.cs similarity index 79% rename from Masa.Utils.Data.Promethus/Model/Reponse/MetaData/ResponseLabelResultModel.cs rename to Masa.Utils.Data.Promethus/Model/Reponse/MetaData/LabelResultResponse.cs index b8441e6..928a8ff 100644 --- a/Masa.Utils.Data.Promethus/Model/Reponse/MetaData/ResponseLabelResultModel.cs +++ b/Masa.Utils.Data.Promethus/Model/Reponse/MetaData/LabelResultResponse.cs @@ -3,7 +3,7 @@ namespace Masa.Utils.Data.Promethus.Model; -public class ResponseLabelResultModel : ResponseResultBaseModel +public class LabelResultResponse : ResultBaseResponse { public IEnumerable? Data { get; set; } } diff --git a/Masa.Utils.Data.Promethus/Model/Reponse/MetaData/ResponseSerieResultModel.cs b/Masa.Utils.Data.Promethus/Model/Reponse/MetaData/SerieResultResponse.cs similarity index 80% rename from Masa.Utils.Data.Promethus/Model/Reponse/MetaData/ResponseSerieResultModel.cs rename to Masa.Utils.Data.Promethus/Model/Reponse/MetaData/SerieResultResponse.cs index 2b15b28..979103c 100644 --- a/Masa.Utils.Data.Promethus/Model/Reponse/MetaData/ResponseSerieResultModel.cs +++ b/Masa.Utils.Data.Promethus/Model/Reponse/MetaData/SerieResultResponse.cs @@ -3,7 +3,7 @@ namespace Masa.Utils.Data.Promethus.Model; -public class ResponseSerieResultModel : ResponseResultBaseModel +public class SerieResultResponse : ResultBaseResponse { public IEnumerable>? Data { get; set; } } diff --git a/Masa.Utils.Data.Promethus/Model/Reponse/Query/ResponseQueryResultCommonModel.cs b/Masa.Utils.Data.Promethus/Model/Reponse/Query/QueryResultCommonResponse.cs similarity index 60% rename from Masa.Utils.Data.Promethus/Model/Reponse/Query/ResponseQueryResultCommonModel.cs rename to Masa.Utils.Data.Promethus/Model/Reponse/Query/QueryResultCommonResponse.cs index af28041..da20b58 100644 --- a/Masa.Utils.Data.Promethus/Model/Reponse/Query/ResponseQueryResultCommonModel.cs +++ b/Masa.Utils.Data.Promethus/Model/Reponse/Query/QueryResultCommonResponse.cs @@ -3,7 +3,7 @@ namespace Masa.Utils.Data.Promethus.Model; -public class ResponseQueryResultCommonModel: ResponseResultBaseModel +public class QueryResultCommonResponse: ResultBaseResponse { - public ResponseQueryResultDataModel? Data { get; set; } + public QueryResultDataResponse? Data { get; set; } } diff --git a/Masa.Utils.Data.Promethus/Model/Reponse/Query/QueryResultDataResponse.cs b/Masa.Utils.Data.Promethus/Model/Reponse/Query/QueryResultDataResponse.cs new file mode 100644 index 0000000..e4ef8d7 --- /dev/null +++ b/Masa.Utils.Data.Promethus/Model/Reponse/Query/QueryResultDataResponse.cs @@ -0,0 +1,11 @@ +// Copyright (c) MASA Stack All rights reserved. +// Licensed under the MIT License. See LICENSE.txt in the project root for license information. + +namespace Masa.Utils.Data.Promethus.Model; + +public class QueryResultDataResponse +{ + public ResultTypes ResultType { get; set; } + + public object[]? Result { get; set; } +} diff --git a/Masa.Utils.Data.Promethus/Model/Reponse/Query/QueryResultInstantVectorResponse.cs b/Masa.Utils.Data.Promethus/Model/Reponse/Query/QueryResultInstantVectorResponse.cs new file mode 100644 index 0000000..e14ffe2 --- /dev/null +++ b/Masa.Utils.Data.Promethus/Model/Reponse/Query/QueryResultInstantVectorResponse.cs @@ -0,0 +1,11 @@ +// Copyright (c) MASA Stack All rights reserved. +// Licensed under the MIT License. See LICENSE.txt in the project root for license information. + +namespace Masa.Utils.Data.Promethus.Model; + +public class QueryResultInstantVectorResponse +{ + public IDictionary? Metric { get; set; } + + public object[]? Value { get; set; } +} diff --git a/Masa.Utils.Data.Promethus/Model/Reponse/Query/QueryResultMatrixRangeResponse.cs b/Masa.Utils.Data.Promethus/Model/Reponse/Query/QueryResultMatrixRangeResponse.cs new file mode 100644 index 0000000..d67c464 --- /dev/null +++ b/Masa.Utils.Data.Promethus/Model/Reponse/Query/QueryResultMatrixRangeResponse.cs @@ -0,0 +1,11 @@ +// Copyright (c) MASA Stack All rights reserved. +// Licensed under the MIT License. See LICENSE.txt in the project root for license information. + +namespace Masa.Utils.Data.Promethus.Model; + +public class QueryResultMatrixRangeResponse +{ + public IDictionary? Metric { get; set; } + + public IEnumerable? Values { get; set; } +} diff --git a/Masa.Utils.Data.Promethus/Model/Reponse/Query/ResponseQueryResultDataModel.cs b/Masa.Utils.Data.Promethus/Model/Reponse/Query/ResponseQueryResultDataModel.cs deleted file mode 100644 index 495e67d..0000000 --- a/Masa.Utils.Data.Promethus/Model/Reponse/Query/ResponseQueryResultDataModel.cs +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright (c) MASA Stack All rights reserved. -// Licensed under the MIT License. See LICENSE.txt in the project root for license information. - -namespace Masa.Utils.Data.Promethus.Model; - -public class ResponseQueryResultDataModel -{ - public ResultTypes ResultType { get; set; } - - public object[]? Result { get; set; } -} - -public class InstantVectorModel -{ - public IDictionary? Metric { get; set; } - - public object[]? Value { get; set; } -} - -public class MatrixRangeModel -{ - public IDictionary? Metric { get; set; } - - public IEnumerable? Values { get; set; } -} diff --git a/Masa.Utils.Data.Promethus/Model/Reponse/ResponseResultBaseModel.cs b/Masa.Utils.Data.Promethus/Model/Reponse/ResultBaseResponse.cs similarity index 91% rename from Masa.Utils.Data.Promethus/Model/Reponse/ResponseResultBaseModel.cs rename to Masa.Utils.Data.Promethus/Model/Reponse/ResultBaseResponse.cs index 8262259..df8b2fe 100644 --- a/Masa.Utils.Data.Promethus/Model/Reponse/ResponseResultBaseModel.cs +++ b/Masa.Utils.Data.Promethus/Model/Reponse/ResultBaseResponse.cs @@ -3,7 +3,7 @@ namespace Masa.Utils.Data.Promethus.Model; -public class ResponseResultBaseModel +public class ResultBaseResponse { public ResultStatuses Status { get; set; } diff --git a/Masa.Utils.Data.Promethus/Model/Request/RequestLableValueQueryModel.cs b/Masa.Utils.Data.Promethus/Model/Request/LableValueQueryRequest.cs similarity index 78% rename from Masa.Utils.Data.Promethus/Model/Request/RequestLableValueQueryModel.cs rename to Masa.Utils.Data.Promethus/Model/Request/LableValueQueryRequest.cs index 33b9f84..ae331e1 100644 --- a/Masa.Utils.Data.Promethus/Model/Request/RequestLableValueQueryModel.cs +++ b/Masa.Utils.Data.Promethus/Model/Request/LableValueQueryRequest.cs @@ -3,7 +3,7 @@ namespace Masa.Utils.Data.Promethus.Model; -public class RequestLableValueQueryModel: RequestMetaDataQueryModel +public class LableValueQueryRequest: MetaDataQueryRequest { public string Lable { get; set; } = "__name__"; } diff --git a/Masa.Utils.Data.Promethus/Model/Request/RequestMetaDataQueryModel.cs b/Masa.Utils.Data.Promethus/Model/Request/MetaDataQueryRequest.cs similarity index 89% rename from Masa.Utils.Data.Promethus/Model/Request/RequestMetaDataQueryModel.cs rename to Masa.Utils.Data.Promethus/Model/Request/MetaDataQueryRequest.cs index 5d034d0..6e6b062 100644 --- a/Masa.Utils.Data.Promethus/Model/Request/RequestMetaDataQueryModel.cs +++ b/Masa.Utils.Data.Promethus/Model/Request/MetaDataQueryRequest.cs @@ -3,7 +3,7 @@ namespace Masa.Utils.Data.Promethus.Model; -public class RequestMetaDataQueryModel +public class MetaDataQueryRequest { public IEnumerable? Match { get; set; } diff --git a/Masa.Utils.Data.Promethus/Model/Request/RequestQueryExemplarModel.cs b/Masa.Utils.Data.Promethus/Model/Request/QueryExemplarRequest.cs similarity index 88% rename from Masa.Utils.Data.Promethus/Model/Request/RequestQueryExemplarModel.cs rename to Masa.Utils.Data.Promethus/Model/Request/QueryExemplarRequest.cs index 98be977..921593a 100644 --- a/Masa.Utils.Data.Promethus/Model/Request/RequestQueryExemplarModel.cs +++ b/Masa.Utils.Data.Promethus/Model/Request/QueryExemplarRequest.cs @@ -3,7 +3,7 @@ namespace Masa.Utils.Data.Promethus.Model; -internal class RequestQueryExemplarModel +internal class QueryExemplarRequest { public string? Query { get; set; } diff --git a/Masa.Utils.Data.Promethus/Model/Request/RequestQueryRangeModel.cs b/Masa.Utils.Data.Promethus/Model/Request/QueryRangeRequest.cs similarity index 91% rename from Masa.Utils.Data.Promethus/Model/Request/RequestQueryRangeModel.cs rename to Masa.Utils.Data.Promethus/Model/Request/QueryRangeRequest.cs index 040e21f..f13773f 100644 --- a/Masa.Utils.Data.Promethus/Model/Request/RequestQueryRangeModel.cs +++ b/Masa.Utils.Data.Promethus/Model/Request/QueryRangeRequest.cs @@ -3,7 +3,7 @@ namespace Masa.Utils.Data.Promethus.Model; -public class RequestQueryRangeModel +public class QueryRangeRequest { public string? Query { get; set; } diff --git a/Masa.Utils.Data.Promethus/Model/Request/RequestQueryModel.cs b/Masa.Utils.Data.Promethus/Model/Request/QueryRequest.cs similarity index 91% rename from Masa.Utils.Data.Promethus/Model/Request/RequestQueryModel.cs rename to Masa.Utils.Data.Promethus/Model/Request/QueryRequest.cs index f243e13..d6b2f83 100644 --- a/Masa.Utils.Data.Promethus/Model/Request/RequestQueryModel.cs +++ b/Masa.Utils.Data.Promethus/Model/Request/QueryRequest.cs @@ -3,7 +3,7 @@ namespace Masa.Utils.Data.Promethus.Model; -public class RequestQueryModel +public class QueryRequest { public string? Query { get; set; } diff --git a/Masa.Utils.Data.Promethus/_import.cs b/Masa.Utils.Data.Promethus/_import.cs index 31c1272..e49bded 100644 --- a/Masa.Utils.Data.Promethus/_import.cs +++ b/Masa.Utils.Data.Promethus/_import.cs @@ -6,6 +6,10 @@ global using Masa.Utils.Data.Promethus.Enums; global using Masa.Utils.Data.Promethus.Model; global using Microsoft.Extensions.DependencyInjection; +global using System.Collections; +global using System.Reflection; global using System.Runtime.CompilerServices; +global using System.Text; global using System.Text.Json; global using System.Text.Json.Serialization; +global using System.Web; diff --git a/test/Masa.Utils.Data.Promethus.Test/Extensions/ObjectExtensionsTests.cs b/test/Masa.Utils.Data.Promethus.Test/Extensions/ObjectExtensionsTests.cs index 4dee596..40f42d0 100644 --- a/test/Masa.Utils.Data.Promethus.Test/Extensions/ObjectExtensionsTests.cs +++ b/test/Masa.Utils.Data.Promethus.Test/Extensions/ObjectExtensionsTests.cs @@ -79,13 +79,13 @@ public void ArrayTest() [TestMethod] public void ObjArrayTest() { - var array = new RequestQueryModel[] { - new RequestQueryModel{ + var array = new QueryRequest[] { + new QueryRequest{ Query="where1", Time="2021-01-02", TimeOut="5s" }, - new RequestQueryModel{ + new QueryRequest{ Query="where2", Time="2021-01-01", TimeOut="5s" @@ -120,13 +120,13 @@ public void IEnumberTest() [TestMethod] public void ObjListTest() { - var array = new List { - new RequestQueryModel{ + var array = new List { + new QueryRequest{ Query="where1", Time="2021-01-02", TimeOut="5s" }, - new RequestQueryModel{ + new QueryRequest{ Query="where2", Time="2021-01-01", TimeOut="5s" diff --git a/test/Masa.Utils.Data.Promethus.Test/MasaPromethusClientTests.cs b/test/Masa.Utils.Data.Promethus.Test/MasaPromethusClientTests.cs index 3eb1bac..426bb97 100644 --- a/test/Masa.Utils.Data.Promethus.Test/MasaPromethusClientTests.cs +++ b/test/Masa.Utils.Data.Promethus.Test/MasaPromethusClientTests.cs @@ -19,7 +19,7 @@ public void Initialize() [TestMethod] public async Task TestQueryAsync() { - var result = await _client.QueryAsync(new RequestQueryModel + var result = await _client.QueryAsync(new QueryRequest { Query = "up" }); @@ -31,14 +31,14 @@ public async Task TestQueryAsync() [TestMethod] public async Task TestQueryVectorAsync() { - var result = await _client.QueryAsync(new RequestQueryModel + var result = await _client.QueryAsync(new QueryRequest { Query = "up" }); if (result.Data.Result != null) { - var data = result.Data.Result as InstantVectorModel[]; + var data = result.Data.Result as QueryResultInstantVectorResponse[]; Assert.IsNotNull(data); Assert.IsNotNull(data[0].Metric); @@ -52,7 +52,7 @@ public async Task TestQueryVectorAsync() [TestMethod] public async Task TestQueryRangeAsync() { - var result = await _client.QueryRangeAsync(new RequestQueryRangeModel + var result = await _client.QueryRangeAsync(new QueryRangeRequest { Query = "up", Start = "2022-06-17T02:00:00.000Z", @@ -64,7 +64,7 @@ public async Task TestQueryRangeAsync() Assert.IsNotNull(result.Data); if (result.Data.ResultType == ResultTypes.Matrix) { - var data = result.Data.Result as MatrixRangeModel[]; + var data = result.Data.Result as QueryResultMatrixRangeResponse[]; Assert.IsNotNull(data); Assert.IsNotNull(data[0].Metric); Assert.IsNotNull(data[0].Values); @@ -74,7 +74,7 @@ public async Task TestQueryRangeAsync() [TestMethod] public async Task TestSeriesAsync() { - var result = await _client.SeriesAsync(new RequestMetaDataQueryModel + var result = await _client.SeriesAsync(new MetaDataQueryRequest { Match = new string[] { "up" }, Start = "2022-06-17T02:00:00.000Z", @@ -96,7 +96,7 @@ public async Task TestLabelsQueryAsync() [TestMethod] public async Task TestLabelValuesQueryAsync() { - var result = await _client.LabelValuesQueryAsync(new RequestLableValueQueryModel()); + var result = await _client.LabelValuesQueryAsync(new LableValueQueryRequest()); Assert.IsNotNull(result); Assert.AreEqual(result.Status, ResultStatuses.Success); Assert.IsTrue(result.Data.Count() > 0); @@ -106,7 +106,7 @@ public async Task TestLabelValuesQueryAsync() [DataRow()] public async Task TestExemplarQueryAsync() { - var param = new RequestQueryExemplarModel + var param = new QueryExemplarRequest { Query = "up", Start = "2022-06-17T02:00:00.000Z", diff --git a/test/Masa.Utils.Data.Promethus.Test/_import.cs b/test/Masa.Utils.Data.Promethus.Test/_import.cs index f6a2a12..6b0e0fe 100644 --- a/test/Masa.Utils.Data.Promethus.Test/_import.cs +++ b/test/Masa.Utils.Data.Promethus.Test/_import.cs @@ -5,6 +5,7 @@ global using Masa.Utils.Data.Promethus.Model; global using Microsoft.Extensions.DependencyInjection; global using Microsoft.VisualStudio.TestTools.UnitTesting; +global using System; global using System.Collections.Generic; global using System.Linq; global using System.Text; From 7fa91686b4171dbe543337ec215963197e90cf0a Mon Sep 17 00:00:00 2001 From: qinyouzeng Date: Tue, 21 Jun 2022 15:12:40 +0800 Subject: [PATCH 30/48] feat: update callerprovider inject --- Masa.Utils.Data.Promethus/MasaPromethusClient.cs | 15 +++------------ .../ServiceCollectionExtensions.cs | 14 +++++++++++++- 2 files changed, 16 insertions(+), 13 deletions(-) diff --git a/Masa.Utils.Data.Promethus/MasaPromethusClient.cs b/Masa.Utils.Data.Promethus/MasaPromethusClient.cs index 67ec987..a37d798 100644 --- a/Masa.Utils.Data.Promethus/MasaPromethusClient.cs +++ b/Masa.Utils.Data.Promethus/MasaPromethusClient.cs @@ -8,14 +8,12 @@ namespace Masa.Utils.Data.Promethus; internal class MasaPromethusClient : IMasaPromethusClient { private readonly ICallerProvider _caller; - private static JsonSerializerOptions _jsonSerializerOptions = new() - { - PropertyNameCaseInsensitive = true - }; + private readonly JsonSerializerOptions _jsonSerializerOptions; - public MasaPromethusClient(ICallerProvider caller) + public MasaPromethusClient(ICallerProvider caller, JsonSerializerOptions jsonSerializerOptions) { _caller = caller; + _jsonSerializerOptions = jsonSerializerOptions; } public async Task ExemplarQueryAsync(QueryExemplarRequest query) @@ -56,7 +54,6 @@ private async Task QueryDataAsync(string url, object data) where T : Resul if (string.IsNullOrEmpty(str)) return default!; - CheckOption(); var baseResult = JsonSerializer.Deserialize(str, _jsonSerializerOptions); if (baseResult == null || baseResult.Status != ResultStatuses.Success) @@ -121,12 +118,6 @@ private async Task QueryDataAsync(string url, object data) where T : Resul return baseResult; } - private static void CheckOption() - { - if (!_jsonSerializerOptions.Converters.Any(t => t.GetType() == typeof(JsonStringEnumConverter))) - _jsonSerializerOptions.Converters.Add(new JsonStringEnumConverter()); - } - private static object[] ConvertJsonToObjValue(object[]? values) { if (values == null || values.Length - 2 < 0) diff --git a/Masa.Utils.Data.Promethus/ServiceCollectionExtensions.cs b/Masa.Utils.Data.Promethus/ServiceCollectionExtensions.cs index f271af4..bbad527 100644 --- a/Masa.Utils.Data.Promethus/ServiceCollectionExtensions.cs +++ b/Masa.Utils.Data.Promethus/ServiceCollectionExtensions.cs @@ -20,7 +20,19 @@ public static IServiceCollection AddPromethusClient(this IServiceCollection serv }); }); - services.AddScoped(); + var jsonOptions = new JsonSerializerOptions + { + PropertyNameCaseInsensitive = true + }; + jsonOptions.Converters.Add(new JsonStringEnumConverter()); + + services.AddScoped(ServiceProvider => + { + var callerFactory = ServiceProvider.GetService(); + if (callerFactory == null) + return default!; + return new MasaPromethusClient(callerFactory.CreateClient(PROMETHUS_HTTP_CLIENT_NAME), jsonOptions); + }); return services; } } From 5d8a1eb6028c87d08b5dfe98c861f01acc5c21c3 Mon Sep 17 00:00:00 2001 From: qinyouzeng Date: Tue, 21 Jun 2022 15:41:33 +0800 Subject: [PATCH 31/48] feat: update jsonelement convert to obj --- Masa.Utils.Data.Promethus/MasaPromethusClient.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Masa.Utils.Data.Promethus/MasaPromethusClient.cs b/Masa.Utils.Data.Promethus/MasaPromethusClient.cs index a37d798..65f2f4f 100644 --- a/Masa.Utils.Data.Promethus/MasaPromethusClient.cs +++ b/Masa.Utils.Data.Promethus/MasaPromethusClient.cs @@ -123,6 +123,6 @@ private static object[] ConvertJsonToObjValue(object[]? values) if (values == null || values.Length - 2 < 0) return default!; - return new object[] { Convert.ToDouble(values[0]), values[1]?.ToString() ?? default! }; + return new object[] { ((JsonElement)values[0]).GetDouble(), ((JsonElement)values[1]).GetString() ?? default! }; } } From 6c011e82a9b0516082e3957580d5a8bb6425b3dd Mon Sep 17 00:00:00 2001 From: qinyouzeng Date: Wed, 22 Jun 2022 14:40:03 +0800 Subject: [PATCH 32/48] feat: update extensions --- Masa.Utils.Data.Promethus/ServiceCollectionExtensions.cs | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/Masa.Utils.Data.Promethus/ServiceCollectionExtensions.cs b/Masa.Utils.Data.Promethus/ServiceCollectionExtensions.cs index bbad527..f1bc316 100644 --- a/Masa.Utils.Data.Promethus/ServiceCollectionExtensions.cs +++ b/Masa.Utils.Data.Promethus/ServiceCollectionExtensions.cs @@ -11,6 +11,9 @@ public static IServiceCollection AddPromethusClient(this IServiceCollection serv { ArgumentNullException.ThrowIfNull(uri, nameof(uri)); + if (services.Any(service => service.GetType() == typeof(IMasaPromethusClient))) + return services; + services.AddCaller(builder => { builder.UseHttpClient(options => @@ -28,10 +31,8 @@ public static IServiceCollection AddPromethusClient(this IServiceCollection serv services.AddScoped(ServiceProvider => { - var callerFactory = ServiceProvider.GetService(); - if (callerFactory == null) - return default!; - return new MasaPromethusClient(callerFactory.CreateClient(PROMETHUS_HTTP_CLIENT_NAME), jsonOptions); + var caller = ServiceProvider.GetRequiredService().CreateClient(PROMETHUS_HTTP_CLIENT_NAME); + return new MasaPromethusClient(caller, jsonOptions); }); return services; } From ed59bfb515fd0b7d1f90bed47850d6fd2f0bf321 Mon Sep 17 00:00:00 2001 From: qinyouzeng Date: Wed, 22 Jun 2022 14:54:03 +0800 Subject: [PATCH 33/48] feat: update internal to public --- Masa.Utils.Data.Promethus/IMasaPromethusClient.cs | 2 +- Masa.Utils.Data.Promethus/Model/Request/QueryExemplarRequest.cs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Masa.Utils.Data.Promethus/IMasaPromethusClient.cs b/Masa.Utils.Data.Promethus/IMasaPromethusClient.cs index 2461208..e6776fd 100644 --- a/Masa.Utils.Data.Promethus/IMasaPromethusClient.cs +++ b/Masa.Utils.Data.Promethus/IMasaPromethusClient.cs @@ -3,7 +3,7 @@ namespace Masa.Utils.Data.Promethus; -internal interface IMasaPromethusClient +public interface IMasaPromethusClient { Task QueryAsync(QueryRequest query); diff --git a/Masa.Utils.Data.Promethus/Model/Request/QueryExemplarRequest.cs b/Masa.Utils.Data.Promethus/Model/Request/QueryExemplarRequest.cs index 921593a..5e1b45b 100644 --- a/Masa.Utils.Data.Promethus/Model/Request/QueryExemplarRequest.cs +++ b/Masa.Utils.Data.Promethus/Model/Request/QueryExemplarRequest.cs @@ -3,7 +3,7 @@ namespace Masa.Utils.Data.Promethus.Model; -internal class QueryExemplarRequest +public class QueryExemplarRequest { public string? Query { get; set; } From 00fb2bc3ead12eaa8f254df6ba7de2e283f5fb79 Mon Sep 17 00:00:00 2001 From: qinyouzeng Date: Thu, 23 Jun 2022 18:55:26 +0800 Subject: [PATCH 34/48] feat: update directory --- Masa.Utils.sln | 11 ++++++++--- .../Enums/ResultStatuses.cs | 0 .../Masa.Utils.Data.Promethus}/Enums/ResultTypes.cs | 0 .../Extensions/CallerProviderExtensions.cs | 0 .../Extensions/ObjectExtensions.cs | 0 .../Extensions/StringExtensions.cs | 0 .../IMasaPromethusClient.cs | 0 .../Masa.Utils.Data.Promethus.csproj | 4 ++-- .../Masa.Utils.Data.Promethus}/MasaPromethusClient.cs | 0 .../Model/Reponse/Exemplar/ExemplarResultResponse.cs | 0 .../Model/Reponse/MetaData/LabelResultResponse.cs | 0 .../Model/Reponse/MetaData/SerieResultResponse.cs | 0 .../Model/Reponse/Query/QueryResultCommonResponse.cs | 0 .../Model/Reponse/Query/QueryResultDataResponse.cs | 0 .../Reponse/Query/QueryResultInstantVectorResponse.cs | 0 .../Reponse/Query/QueryResultMatrixRangeResponse.cs | 0 .../Model/Reponse/ResultBaseResponse.cs | 0 .../Model/Request/LableValueQueryRequest.cs | 0 .../Model/Request/MetaDataQueryRequest.cs | 0 .../Model/Request/QueryExemplarRequest.cs | 0 .../Model/Request/QueryRangeRequest.cs | 0 .../Model/Request/QueryRequest.cs | 0 .../Data/Masa.Utils.Data.Promethus}/README.md | 0 .../Data/Masa.Utils.Data.Promethus}/README.zh-CN.md | 0 .../ServiceCollectionExtensions.cs | 0 .../Data/Masa.Utils.Data.Promethus}/_import.cs | 0 .../Masa.Utils.Data.Promethus.Test.csproj | 4 ---- 27 files changed, 10 insertions(+), 9 deletions(-) rename {Masa.Utils.Data.Promethus => src/Data/Masa.Utils.Data.Promethus}/Enums/ResultStatuses.cs (100%) rename {Masa.Utils.Data.Promethus => src/Data/Masa.Utils.Data.Promethus}/Enums/ResultTypes.cs (100%) rename {Masa.Utils.Data.Promethus => src/Data/Masa.Utils.Data.Promethus}/Extensions/CallerProviderExtensions.cs (100%) rename {Masa.Utils.Data.Promethus => src/Data/Masa.Utils.Data.Promethus}/Extensions/ObjectExtensions.cs (100%) rename {Masa.Utils.Data.Promethus => src/Data/Masa.Utils.Data.Promethus}/Extensions/StringExtensions.cs (100%) rename {Masa.Utils.Data.Promethus => src/Data/Masa.Utils.Data.Promethus}/IMasaPromethusClient.cs (100%) rename {Masa.Utils.Data.Promethus => src/Data/Masa.Utils.Data.Promethus}/Masa.Utils.Data.Promethus.csproj (52%) rename {Masa.Utils.Data.Promethus => src/Data/Masa.Utils.Data.Promethus}/MasaPromethusClient.cs (100%) rename {Masa.Utils.Data.Promethus => src/Data/Masa.Utils.Data.Promethus}/Model/Reponse/Exemplar/ExemplarResultResponse.cs (100%) rename {Masa.Utils.Data.Promethus => src/Data/Masa.Utils.Data.Promethus}/Model/Reponse/MetaData/LabelResultResponse.cs (100%) rename {Masa.Utils.Data.Promethus => src/Data/Masa.Utils.Data.Promethus}/Model/Reponse/MetaData/SerieResultResponse.cs (100%) rename {Masa.Utils.Data.Promethus => src/Data/Masa.Utils.Data.Promethus}/Model/Reponse/Query/QueryResultCommonResponse.cs (100%) rename {Masa.Utils.Data.Promethus => src/Data/Masa.Utils.Data.Promethus}/Model/Reponse/Query/QueryResultDataResponse.cs (100%) rename {Masa.Utils.Data.Promethus => src/Data/Masa.Utils.Data.Promethus}/Model/Reponse/Query/QueryResultInstantVectorResponse.cs (100%) rename {Masa.Utils.Data.Promethus => src/Data/Masa.Utils.Data.Promethus}/Model/Reponse/Query/QueryResultMatrixRangeResponse.cs (100%) rename {Masa.Utils.Data.Promethus => src/Data/Masa.Utils.Data.Promethus}/Model/Reponse/ResultBaseResponse.cs (100%) rename {Masa.Utils.Data.Promethus => src/Data/Masa.Utils.Data.Promethus}/Model/Request/LableValueQueryRequest.cs (100%) rename {Masa.Utils.Data.Promethus => src/Data/Masa.Utils.Data.Promethus}/Model/Request/MetaDataQueryRequest.cs (100%) rename {Masa.Utils.Data.Promethus => src/Data/Masa.Utils.Data.Promethus}/Model/Request/QueryExemplarRequest.cs (100%) rename {Masa.Utils.Data.Promethus => src/Data/Masa.Utils.Data.Promethus}/Model/Request/QueryRangeRequest.cs (100%) rename {Masa.Utils.Data.Promethus => src/Data/Masa.Utils.Data.Promethus}/Model/Request/QueryRequest.cs (100%) rename {Masa.Utils.Data.Promethus => src/Data/Masa.Utils.Data.Promethus}/README.md (100%) rename {Masa.Utils.Data.Promethus => src/Data/Masa.Utils.Data.Promethus}/README.zh-CN.md (100%) rename {Masa.Utils.Data.Promethus => src/Data/Masa.Utils.Data.Promethus}/ServiceCollectionExtensions.cs (100%) rename {Masa.Utils.Data.Promethus => src/Data/Masa.Utils.Data.Promethus}/_import.cs (100%) diff --git a/Masa.Utils.sln b/Masa.Utils.sln index 6947361..a149d8c 100644 --- a/Masa.Utils.sln +++ b/Masa.Utils.sln @@ -101,11 +101,11 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Validations", "Validations" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Masa.Utils.Extensions.Validations.FluentValidation", "src\Extensions\Validations\Masa.Utils.Extensions.Validations.FluentValidation\Masa.Utils.Extensions.Validations.FluentValidation.csproj", "{B0E3CA19-C101-4E30-9401-C017B7088F4E}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Masa.Utils.Security.Authentication.OpenIdConnect", "src\Security\Masa.Utils.Security.Authentication.OpenIdConnect\Masa.Utils.Security.Authentication.OpenIdConnect.csproj", "{D17B5B36-5773-4827-9D5D-44390DF666CA}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Masa.Utils.Security.Authentication.OpenIdConnect", "src\Security\Masa.Utils.Security.Authentication.OpenIdConnect\Masa.Utils.Security.Authentication.OpenIdConnect.csproj", "{D17B5B36-5773-4827-9D5D-44390DF666CA}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Masa.Utils.Data.Promethus", "Masa.Utils.Data.Promethus\Masa.Utils.Data.Promethus.csproj", "{577A7F40-A22E-466B-972B-BFE65F700B12}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Masa.Utils.Data.Promethus.Test", "test\Masa.Utils.Data.Promethus.Test\Masa.Utils.Data.Promethus.Test.csproj", "{AC19E221-D3CF-49E9-8E41-A7580C0736AA}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Masa.Utils.Data.Promethus.Test", "test\Masa.Utils.Data.Promethus.Test\Masa.Utils.Data.Promethus.Test.csproj", "{AC19E221-D3CF-49E9-8E41-A7580C0736AA}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Masa.Utils.Data.Promethus", "src\Data\Masa.Utils.Data.Promethus\Masa.Utils.Data.Promethus.csproj", "{B108BA38-AC93-4983-8361-43BF819985C7}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -261,6 +261,10 @@ Global {AC19E221-D3CF-49E9-8E41-A7580C0736AA}.Debug|Any CPU.Build.0 = Debug|Any CPU {AC19E221-D3CF-49E9-8E41-A7580C0736AA}.Release|Any CPU.ActiveCfg = Release|Any CPU {AC19E221-D3CF-49E9-8E41-A7580C0736AA}.Release|Any CPU.Build.0 = Release|Any CPU + {B108BA38-AC93-4983-8361-43BF819985C7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B108BA38-AC93-4983-8361-43BF819985C7}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B108BA38-AC93-4983-8361-43BF819985C7}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B108BA38-AC93-4983-8361-43BF819985C7}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -313,6 +317,7 @@ Global {577A7F40-A22E-466B-972B-BFE65F700B12} = {F844C2A1-C36D-400E-A0D8-7658EF9C3B93} {AC19E221-D3CF-49E9-8E41-A7580C0736AA} = {4F908878-0EB8-43E4-96E4-8B1F32E9B635} {D17B5B36-5773-4827-9D5D-44390DF666CA} = {4FB3BD6D-D4C1-4BEF-AD62-8FD6EAEEB4DF} + {B108BA38-AC93-4983-8361-43BF819985C7} = {F844C2A1-C36D-400E-A0D8-7658EF9C3B93} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {D7DAA0E6-098F-4B18-8775-64FDA96F1FF0} diff --git a/Masa.Utils.Data.Promethus/Enums/ResultStatuses.cs b/src/Data/Masa.Utils.Data.Promethus/Enums/ResultStatuses.cs similarity index 100% rename from Masa.Utils.Data.Promethus/Enums/ResultStatuses.cs rename to src/Data/Masa.Utils.Data.Promethus/Enums/ResultStatuses.cs diff --git a/Masa.Utils.Data.Promethus/Enums/ResultTypes.cs b/src/Data/Masa.Utils.Data.Promethus/Enums/ResultTypes.cs similarity index 100% rename from Masa.Utils.Data.Promethus/Enums/ResultTypes.cs rename to src/Data/Masa.Utils.Data.Promethus/Enums/ResultTypes.cs diff --git a/Masa.Utils.Data.Promethus/Extensions/CallerProviderExtensions.cs b/src/Data/Masa.Utils.Data.Promethus/Extensions/CallerProviderExtensions.cs similarity index 100% rename from Masa.Utils.Data.Promethus/Extensions/CallerProviderExtensions.cs rename to src/Data/Masa.Utils.Data.Promethus/Extensions/CallerProviderExtensions.cs diff --git a/Masa.Utils.Data.Promethus/Extensions/ObjectExtensions.cs b/src/Data/Masa.Utils.Data.Promethus/Extensions/ObjectExtensions.cs similarity index 100% rename from Masa.Utils.Data.Promethus/Extensions/ObjectExtensions.cs rename to src/Data/Masa.Utils.Data.Promethus/Extensions/ObjectExtensions.cs diff --git a/Masa.Utils.Data.Promethus/Extensions/StringExtensions.cs b/src/Data/Masa.Utils.Data.Promethus/Extensions/StringExtensions.cs similarity index 100% rename from Masa.Utils.Data.Promethus/Extensions/StringExtensions.cs rename to src/Data/Masa.Utils.Data.Promethus/Extensions/StringExtensions.cs diff --git a/Masa.Utils.Data.Promethus/IMasaPromethusClient.cs b/src/Data/Masa.Utils.Data.Promethus/IMasaPromethusClient.cs similarity index 100% rename from Masa.Utils.Data.Promethus/IMasaPromethusClient.cs rename to src/Data/Masa.Utils.Data.Promethus/IMasaPromethusClient.cs diff --git a/Masa.Utils.Data.Promethus/Masa.Utils.Data.Promethus.csproj b/src/Data/Masa.Utils.Data.Promethus/Masa.Utils.Data.Promethus.csproj similarity index 52% rename from Masa.Utils.Data.Promethus/Masa.Utils.Data.Promethus.csproj rename to src/Data/Masa.Utils.Data.Promethus/Masa.Utils.Data.Promethus.csproj index 2a21f39..d3bd13a 100644 --- a/Masa.Utils.Data.Promethus/Masa.Utils.Data.Promethus.csproj +++ b/src/Data/Masa.Utils.Data.Promethus/Masa.Utils.Data.Promethus.csproj @@ -7,8 +7,8 @@ - - + + diff --git a/Masa.Utils.Data.Promethus/MasaPromethusClient.cs b/src/Data/Masa.Utils.Data.Promethus/MasaPromethusClient.cs similarity index 100% rename from Masa.Utils.Data.Promethus/MasaPromethusClient.cs rename to src/Data/Masa.Utils.Data.Promethus/MasaPromethusClient.cs diff --git a/Masa.Utils.Data.Promethus/Model/Reponse/Exemplar/ExemplarResultResponse.cs b/src/Data/Masa.Utils.Data.Promethus/Model/Reponse/Exemplar/ExemplarResultResponse.cs similarity index 100% rename from Masa.Utils.Data.Promethus/Model/Reponse/Exemplar/ExemplarResultResponse.cs rename to src/Data/Masa.Utils.Data.Promethus/Model/Reponse/Exemplar/ExemplarResultResponse.cs diff --git a/Masa.Utils.Data.Promethus/Model/Reponse/MetaData/LabelResultResponse.cs b/src/Data/Masa.Utils.Data.Promethus/Model/Reponse/MetaData/LabelResultResponse.cs similarity index 100% rename from Masa.Utils.Data.Promethus/Model/Reponse/MetaData/LabelResultResponse.cs rename to src/Data/Masa.Utils.Data.Promethus/Model/Reponse/MetaData/LabelResultResponse.cs diff --git a/Masa.Utils.Data.Promethus/Model/Reponse/MetaData/SerieResultResponse.cs b/src/Data/Masa.Utils.Data.Promethus/Model/Reponse/MetaData/SerieResultResponse.cs similarity index 100% rename from Masa.Utils.Data.Promethus/Model/Reponse/MetaData/SerieResultResponse.cs rename to src/Data/Masa.Utils.Data.Promethus/Model/Reponse/MetaData/SerieResultResponse.cs diff --git a/Masa.Utils.Data.Promethus/Model/Reponse/Query/QueryResultCommonResponse.cs b/src/Data/Masa.Utils.Data.Promethus/Model/Reponse/Query/QueryResultCommonResponse.cs similarity index 100% rename from Masa.Utils.Data.Promethus/Model/Reponse/Query/QueryResultCommonResponse.cs rename to src/Data/Masa.Utils.Data.Promethus/Model/Reponse/Query/QueryResultCommonResponse.cs diff --git a/Masa.Utils.Data.Promethus/Model/Reponse/Query/QueryResultDataResponse.cs b/src/Data/Masa.Utils.Data.Promethus/Model/Reponse/Query/QueryResultDataResponse.cs similarity index 100% rename from Masa.Utils.Data.Promethus/Model/Reponse/Query/QueryResultDataResponse.cs rename to src/Data/Masa.Utils.Data.Promethus/Model/Reponse/Query/QueryResultDataResponse.cs diff --git a/Masa.Utils.Data.Promethus/Model/Reponse/Query/QueryResultInstantVectorResponse.cs b/src/Data/Masa.Utils.Data.Promethus/Model/Reponse/Query/QueryResultInstantVectorResponse.cs similarity index 100% rename from Masa.Utils.Data.Promethus/Model/Reponse/Query/QueryResultInstantVectorResponse.cs rename to src/Data/Masa.Utils.Data.Promethus/Model/Reponse/Query/QueryResultInstantVectorResponse.cs diff --git a/Masa.Utils.Data.Promethus/Model/Reponse/Query/QueryResultMatrixRangeResponse.cs b/src/Data/Masa.Utils.Data.Promethus/Model/Reponse/Query/QueryResultMatrixRangeResponse.cs similarity index 100% rename from Masa.Utils.Data.Promethus/Model/Reponse/Query/QueryResultMatrixRangeResponse.cs rename to src/Data/Masa.Utils.Data.Promethus/Model/Reponse/Query/QueryResultMatrixRangeResponse.cs diff --git a/Masa.Utils.Data.Promethus/Model/Reponse/ResultBaseResponse.cs b/src/Data/Masa.Utils.Data.Promethus/Model/Reponse/ResultBaseResponse.cs similarity index 100% rename from Masa.Utils.Data.Promethus/Model/Reponse/ResultBaseResponse.cs rename to src/Data/Masa.Utils.Data.Promethus/Model/Reponse/ResultBaseResponse.cs diff --git a/Masa.Utils.Data.Promethus/Model/Request/LableValueQueryRequest.cs b/src/Data/Masa.Utils.Data.Promethus/Model/Request/LableValueQueryRequest.cs similarity index 100% rename from Masa.Utils.Data.Promethus/Model/Request/LableValueQueryRequest.cs rename to src/Data/Masa.Utils.Data.Promethus/Model/Request/LableValueQueryRequest.cs diff --git a/Masa.Utils.Data.Promethus/Model/Request/MetaDataQueryRequest.cs b/src/Data/Masa.Utils.Data.Promethus/Model/Request/MetaDataQueryRequest.cs similarity index 100% rename from Masa.Utils.Data.Promethus/Model/Request/MetaDataQueryRequest.cs rename to src/Data/Masa.Utils.Data.Promethus/Model/Request/MetaDataQueryRequest.cs diff --git a/Masa.Utils.Data.Promethus/Model/Request/QueryExemplarRequest.cs b/src/Data/Masa.Utils.Data.Promethus/Model/Request/QueryExemplarRequest.cs similarity index 100% rename from Masa.Utils.Data.Promethus/Model/Request/QueryExemplarRequest.cs rename to src/Data/Masa.Utils.Data.Promethus/Model/Request/QueryExemplarRequest.cs diff --git a/Masa.Utils.Data.Promethus/Model/Request/QueryRangeRequest.cs b/src/Data/Masa.Utils.Data.Promethus/Model/Request/QueryRangeRequest.cs similarity index 100% rename from Masa.Utils.Data.Promethus/Model/Request/QueryRangeRequest.cs rename to src/Data/Masa.Utils.Data.Promethus/Model/Request/QueryRangeRequest.cs diff --git a/Masa.Utils.Data.Promethus/Model/Request/QueryRequest.cs b/src/Data/Masa.Utils.Data.Promethus/Model/Request/QueryRequest.cs similarity index 100% rename from Masa.Utils.Data.Promethus/Model/Request/QueryRequest.cs rename to src/Data/Masa.Utils.Data.Promethus/Model/Request/QueryRequest.cs diff --git a/Masa.Utils.Data.Promethus/README.md b/src/Data/Masa.Utils.Data.Promethus/README.md similarity index 100% rename from Masa.Utils.Data.Promethus/README.md rename to src/Data/Masa.Utils.Data.Promethus/README.md diff --git a/Masa.Utils.Data.Promethus/README.zh-CN.md b/src/Data/Masa.Utils.Data.Promethus/README.zh-CN.md similarity index 100% rename from Masa.Utils.Data.Promethus/README.zh-CN.md rename to src/Data/Masa.Utils.Data.Promethus/README.zh-CN.md diff --git a/Masa.Utils.Data.Promethus/ServiceCollectionExtensions.cs b/src/Data/Masa.Utils.Data.Promethus/ServiceCollectionExtensions.cs similarity index 100% rename from Masa.Utils.Data.Promethus/ServiceCollectionExtensions.cs rename to src/Data/Masa.Utils.Data.Promethus/ServiceCollectionExtensions.cs diff --git a/Masa.Utils.Data.Promethus/_import.cs b/src/Data/Masa.Utils.Data.Promethus/_import.cs similarity index 100% rename from Masa.Utils.Data.Promethus/_import.cs rename to src/Data/Masa.Utils.Data.Promethus/_import.cs diff --git a/test/Masa.Utils.Data.Promethus.Test/Masa.Utils.Data.Promethus.Test.csproj b/test/Masa.Utils.Data.Promethus.Test/Masa.Utils.Data.Promethus.Test.csproj index a5c8de0..f72bee8 100644 --- a/test/Masa.Utils.Data.Promethus.Test/Masa.Utils.Data.Promethus.Test.csproj +++ b/test/Masa.Utils.Data.Promethus.Test/Masa.Utils.Data.Promethus.Test.csproj @@ -14,8 +14,4 @@ - - - - From 90b5e6f1d22d382017371ceb7eecc7156af2899f Mon Sep 17 00:00:00 2001 From: qinyouzeng Date: Fri, 24 Jun 2022 11:24:29 +0800 Subject: [PATCH 35/48] feat: test refrence update --- .../Masa.Utils.Data.Promethus.Test.csproj | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/test/Masa.Utils.Data.Promethus.Test/Masa.Utils.Data.Promethus.Test.csproj b/test/Masa.Utils.Data.Promethus.Test/Masa.Utils.Data.Promethus.Test.csproj index f72bee8..cea9b29 100644 --- a/test/Masa.Utils.Data.Promethus.Test/Masa.Utils.Data.Promethus.Test.csproj +++ b/test/Masa.Utils.Data.Promethus.Test/Masa.Utils.Data.Promethus.Test.csproj @@ -14,4 +14,8 @@ + + + + From fef4606efc81f91f1bbb8ebfeadd8ad236e6ec92 Mon Sep 17 00:00:00 2001 From: qinyouzeng Date: Fri, 24 Jun 2022 15:29:00 +0800 Subject: [PATCH 36/48] chore: comments and filename update --- .../Extensions/ObjectExtensions.cs | 8 ++++---- .../Masa.Utils.Data.Promethus/{_import.cs => _Imports.cs} | 0 2 files changed, 4 insertions(+), 4 deletions(-) rename src/Data/Masa.Utils.Data.Promethus/{_import.cs => _Imports.cs} (100%) diff --git a/src/Data/Masa.Utils.Data.Promethus/Extensions/ObjectExtensions.cs b/src/Data/Masa.Utils.Data.Promethus/Extensions/ObjectExtensions.cs index 8fc5323..040a876 100644 --- a/src/Data/Masa.Utils.Data.Promethus/Extensions/ObjectExtensions.cs +++ b/src/Data/Masa.Utils.Data.Promethus/Extensions/ObjectExtensions.cs @@ -6,10 +6,10 @@ namespace System; public static class ObjectExtensions { /// - /// 当前支持类型:class、struct和实现IEnumerable接口的类型, - /// struct默认和class 使用公开get属性和字段, - /// IEnumerable类型直接转化为:key[]=value1&key[]=value2 - /// enum 默认使用字符串,如果需要使用数值,请设置isEnumString=false + /// Currently supported types: class, struct and types implementing the IEnumerable interface, + /// struct and class use public get properties and fields by default, + /// The IEnumerable type is directly converted to: key[]=value1&key[]=value2 + /// enum uses strings by default. If you need to use numeric values, please set isEnumString=false /// /// /// diff --git a/src/Data/Masa.Utils.Data.Promethus/_import.cs b/src/Data/Masa.Utils.Data.Promethus/_Imports.cs similarity index 100% rename from src/Data/Masa.Utils.Data.Promethus/_import.cs rename to src/Data/Masa.Utils.Data.Promethus/_Imports.cs From 7b33de86213470f52203f427d11ca3805c5d3b09 Mon Sep 17 00:00:00 2001 From: qinyouzeng Date: Tue, 28 Jun 2022 11:23:14 +0800 Subject: [PATCH 37/48] chore: remove not exists project id --- Masa.Utils.sln | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/Masa.Utils.sln b/Masa.Utils.sln index a149d8c..38847a1 100644 --- a/Masa.Utils.sln +++ b/Masa.Utils.sln @@ -248,11 +248,7 @@ Global {B0E3CA19-C101-4E30-9401-C017B7088F4E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {B0E3CA19-C101-4E30-9401-C017B7088F4E}.Debug|Any CPU.Build.0 = Debug|Any CPU {B0E3CA19-C101-4E30-9401-C017B7088F4E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B0E3CA19-C101-4E30-9401-C017B7088F4E}.Release|Any CPU.Build.0 = Release|Any CPU - {577A7F40-A22E-466B-972B-BFE65F700B12}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {577A7F40-A22E-466B-972B-BFE65F700B12}.Debug|Any CPU.Build.0 = Debug|Any CPU - {577A7F40-A22E-466B-972B-BFE65F700B12}.Release|Any CPU.ActiveCfg = Release|Any CPU - {577A7F40-A22E-466B-972B-BFE65F700B12}.Release|Any CPU.Build.0 = Release|Any CPU + {B0E3CA19-C101-4E30-9401-C017B7088F4E}.Release|Any CPU.Build.0 = Release|Any CPU {D17B5B36-5773-4827-9D5D-44390DF666CA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {D17B5B36-5773-4827-9D5D-44390DF666CA}.Debug|Any CPU.Build.0 = Debug|Any CPU {D17B5B36-5773-4827-9D5D-44390DF666CA}.Release|Any CPU.ActiveCfg = Release|Any CPU @@ -314,7 +310,6 @@ Global {22643BF8-A5ED-48CA-BD1A-10BFEC075DBE} = {4F908878-0EB8-43E4-96E4-8B1F32E9B635} {533BCE80-61BC-443A-95D3-2C6328921ED8} = {B2DA607D-4A39-4F0C-A9B3-DD9A061B0B4E} {B0E3CA19-C101-4E30-9401-C017B7088F4E} = {533BCE80-61BC-443A-95D3-2C6328921ED8} - {577A7F40-A22E-466B-972B-BFE65F700B12} = {F844C2A1-C36D-400E-A0D8-7658EF9C3B93} {AC19E221-D3CF-49E9-8E41-A7580C0736AA} = {4F908878-0EB8-43E4-96E4-8B1F32E9B635} {D17B5B36-5773-4827-9D5D-44390DF666CA} = {4FB3BD6D-D4C1-4BEF-AD62-8FD6EAEEB4DF} {B108BA38-AC93-4983-8361-43BF819985C7} = {F844C2A1-C36D-400E-A0D8-7658EF9C3B93} From 9952add6635e78b9446e9fcd54a4cc67f5e33aa9 Mon Sep 17 00:00:00 2001 From: qinyouzeng Date: Tue, 28 Jun 2022 13:43:57 +0800 Subject: [PATCH 38/48] chore: update docs and code style --- .../Extensions/CallerProviderExtensions.cs | 1 - .../MasaPromethusClient.cs | 1 - src/Data/Masa.Utils.Data.Promethus/README.md | 28 ++- .../Masa.Utils.Data.Promethus/README.zh-CN.md | 30 ++- .../Masa.Utils.Data.Promethus.Test.csproj | 8 +- .../MasaPromethusClientTests.cs | 189 +++++++++--------- .../UserStruct.cs | 17 +- .../{_import.cs => _Imports.cs} | 0 8 files changed, 158 insertions(+), 116 deletions(-) rename test/Masa.Utils.Data.Promethus.Test/{_import.cs => _Imports.cs} (100%) diff --git a/src/Data/Masa.Utils.Data.Promethus/Extensions/CallerProviderExtensions.cs b/src/Data/Masa.Utils.Data.Promethus/Extensions/CallerProviderExtensions.cs index 8791bfe..00e79c8 100644 --- a/src/Data/Masa.Utils.Data.Promethus/Extensions/CallerProviderExtensions.cs +++ b/src/Data/Masa.Utils.Data.Promethus/Extensions/CallerProviderExtensions.cs @@ -2,7 +2,6 @@ // Licensed under the MIT License. See LICENSE.txt in the project root for license information. [assembly: InternalsVisibleTo("Masa.Utils.Data.Promethus.Test")] - namespace Masa.Utils.Caller.Core; internal static class CallerProviderExtensions diff --git a/src/Data/Masa.Utils.Data.Promethus/MasaPromethusClient.cs b/src/Data/Masa.Utils.Data.Promethus/MasaPromethusClient.cs index 65f2f4f..7b89ecd 100644 --- a/src/Data/Masa.Utils.Data.Promethus/MasaPromethusClient.cs +++ b/src/Data/Masa.Utils.Data.Promethus/MasaPromethusClient.cs @@ -2,7 +2,6 @@ // Licensed under the MIT License. See LICENSE.txt in the project root for license information. [assembly: InternalsVisibleTo("Masa.Utils.Data.Promethus.Test")] - namespace Masa.Utils.Data.Promethus; internal class MasaPromethusClient : IMasaPromethusClient diff --git a/src/Data/Masa.Utils.Data.Promethus/README.md b/src/Data/Masa.Utils.Data.Promethus/README.md index 20aa5b7..796dbc1 100644 --- a/src/Data/Masa.Utils.Data.Promethus/README.md +++ b/src/Data/Masa.Utils.Data.Promethus/README.md @@ -31,7 +31,33 @@ builder.Services.AddPromethusClient("http://127.0.0.1:9090"); public async Task QueryAsync() { - var result=await _client.QueryAsync(...); + var query= new QueryRequest { + Query = "up", //metric name + Time = "2022-06-01T09:00:00.000Z" //standard time format or unix timestamp, such as: 1654045200 or 1654045200.000 + }; + var result = await _client.QueryAsync(query); + if(result.Status == ResultStatuses.Success){ + switch(result.Data.ResultType){ + case ResultTypes.Vector: + { + var data=result.Data.Result as QueryResultInstantVectorResponse[]; + ... + } + break; + case ResultTypes.Matrix: + { + var data=result.Data.Result as QueryResultMatrixRangeResponse[]; + ... + } + break; + default: + { + var timeSpan=(double)result.Data.Result[0]; + var value=(string)result.Data.Result[1]; + } + break; + } + } } } ``` diff --git a/src/Data/Masa.Utils.Data.Promethus/README.zh-CN.md b/src/Data/Masa.Utils.Data.Promethus/README.zh-CN.md index 5994848..bcdbd21 100644 --- a/src/Data/Masa.Utils.Data.Promethus/README.zh-CN.md +++ b/src/Data/Masa.Utils.Data.Promethus/README.zh-CN.md @@ -11,7 +11,7 @@ Install-Package Masa.Utils.Data.Promethus ### 用法: -1. 注入services +1. 注册services ```` C# builder.Services.AddPromethusClient("http://127.0.0.1:9090"); @@ -31,7 +31,33 @@ builder.Services.AddPromethusClient("http://127.0.0.1:9090"); public async Task QueryAsync() { - var result=await _client.QueryAsync(...); + var query= new QueryRequest { + Query = "up", //metric name + Time = "2022-06-01T09:00:00.000Z" //标准时间格式或unix时间戳,如:1654045200或1654045200.000 + }; + var result = await _client.QueryAsync(query); + if(result.Status == ResultStatuses.Success){ + switch(result.Data.ResultType){ + case ResultTypes.Vector: + { + var data=result.Data.Result as QueryResultInstantVectorResponse[]; + ... + } + break; + case ResultTypes.Matrix: + { + var data=result.Data.Result as QueryResultMatrixRangeResponse[]; + ... + } + break; + default: + { + var timeSpan=(double)result.Data.Result[0]; + var value=(string)result.Data.Result[1]; + } + break; + } + } } } ``` diff --git a/test/Masa.Utils.Data.Promethus.Test/Masa.Utils.Data.Promethus.Test.csproj b/test/Masa.Utils.Data.Promethus.Test/Masa.Utils.Data.Promethus.Test.csproj index cea9b29..48d683d 100644 --- a/test/Masa.Utils.Data.Promethus.Test/Masa.Utils.Data.Promethus.Test.csproj +++ b/test/Masa.Utils.Data.Promethus.Test/Masa.Utils.Data.Promethus.Test.csproj @@ -8,10 +8,10 @@ - - - - + + + + diff --git a/test/Masa.Utils.Data.Promethus.Test/MasaPromethusClientTests.cs b/test/Masa.Utils.Data.Promethus.Test/MasaPromethusClientTests.cs index 426bb97..39950df 100644 --- a/test/Masa.Utils.Data.Promethus.Test/MasaPromethusClientTests.cs +++ b/test/Masa.Utils.Data.Promethus.Test/MasaPromethusClientTests.cs @@ -1,120 +1,119 @@ // Copyright (c) MASA Stack All rights reserved. // Licensed under the MIT License. See LICENSE.txt in the project root for license information. -namespace Masa.Utils.Data.Promethus.Test +namespace Masa.Utils.Data.Promethus.Test; + +[TestClass] +public class MasaPromethusClientTests { - [TestClass] - public class MasaPromethusClientTests + private IMasaPromethusClient _client; + + [TestInitialize] + public void Initialize() { - private IMasaPromethusClient _client; + IServiceCollection service = new ServiceCollection(); + service.AddPromethusClient("http://localhost:9090"); + _client = service.BuildServiceProvider().GetService(); + } - [TestInitialize] - public void Initialize() + [TestMethod] + public async Task TestQueryAsync() + { + var result = await _client.QueryAsync(new QueryRequest { - IServiceCollection service = new ServiceCollection(); - service.AddPromethusClient("http://localhost:9090"); - _client = service.BuildServiceProvider().GetService(); - } + Query = "up" + }); + Assert.IsNotNull(result); + Assert.AreEqual(result.Status, ResultStatuses.Success); + Assert.IsNotNull(result.Data); + } - [TestMethod] - public async Task TestQueryAsync() + [TestMethod] + public async Task TestQueryVectorAsync() + { + var result = await _client.QueryAsync(new QueryRequest { - var result = await _client.QueryAsync(new QueryRequest - { - Query = "up" - }); - Assert.IsNotNull(result); - Assert.AreEqual(result.Status, ResultStatuses.Success); - Assert.IsNotNull(result.Data); - } + Query = "up" + }); - [TestMethod] - public async Task TestQueryVectorAsync() + if (result.Data.Result != null) { - var result = await _client.QueryAsync(new QueryRequest - { - Query = "up" - }); - - if (result.Data.Result != null) - { - var data = result.Data.Result as QueryResultInstantVectorResponse[]; + var data = result.Data.Result as QueryResultInstantVectorResponse[]; - Assert.IsNotNull(data); - Assert.IsNotNull(data[0].Metric); - Assert.IsNotNull(data[0].Value); + Assert.IsNotNull(data); + Assert.IsNotNull(data[0].Metric); + Assert.IsNotNull(data[0].Value); - Assert.IsNotNull(data[0].Metric.Keys); - Assert.AreEqual(2, data[0].Value.Length); - } + Assert.IsNotNull(data[0].Metric.Keys); + Assert.AreEqual(2, data[0].Value.Length); } + } - [TestMethod] - public async Task TestQueryRangeAsync() + [TestMethod] + public async Task TestQueryRangeAsync() + { + var result = await _client.QueryRangeAsync(new QueryRangeRequest { - var result = await _client.QueryRangeAsync(new QueryRangeRequest - { - Query = "up", - Start = "2022-06-17T02:00:00.000Z", - End = "2022-06-17T02:30:00.000Z", - Step = "300s", - }); - Assert.IsNotNull(result); - Assert.AreEqual(result.Status, ResultStatuses.Success); - Assert.IsNotNull(result.Data); - if (result.Data.ResultType == ResultTypes.Matrix) - { - var data = result.Data.Result as QueryResultMatrixRangeResponse[]; - Assert.IsNotNull(data); - Assert.IsNotNull(data[0].Metric); - Assert.IsNotNull(data[0].Values); - } - } - - [TestMethod] - public async Task TestSeriesAsync() + Query = "up", + Start = "2022-06-17T02:00:00.000Z", + End = "2022-06-17T02:30:00.000Z", + Step = "300s", + }); + Assert.IsNotNull(result); + Assert.AreEqual(result.Status, ResultStatuses.Success); + Assert.IsNotNull(result.Data); + if (result.Data.ResultType == ResultTypes.Matrix) { - var result = await _client.SeriesAsync(new MetaDataQueryRequest - { - Match = new string[] { "up" }, - Start = "2022-06-17T02:00:00.000Z", - End = "2022-06-17T02:30:00.000Z" - }); - Assert.IsNotNull(result); - Assert.AreEqual(result.Status, ResultStatuses.Success); + var data = result.Data.Result as QueryResultMatrixRangeResponse[]; + Assert.IsNotNull(data); + Assert.IsNotNull(data[0].Metric); + Assert.IsNotNull(data[0].Values); } + } - [TestMethod] - public async Task TestLabelsQueryAsync() + [TestMethod] + public async Task TestSeriesAsync() + { + var result = await _client.SeriesAsync(new MetaDataQueryRequest { - var result = await _client.LabelsQueryAsync(default!); - Assert.IsNotNull(result); - Assert.AreEqual(result.Status, ResultStatuses.Success); - Assert.IsTrue(result.Data.Count() > 0); - } + Match = new string[] { "up" }, + Start = "2022-06-17T02:00:00.000Z", + End = "2022-06-17T02:30:00.000Z" + }); + Assert.IsNotNull(result); + Assert.AreEqual(result.Status, ResultStatuses.Success); + } - [TestMethod] - public async Task TestLabelValuesQueryAsync() - { - var result = await _client.LabelValuesQueryAsync(new LableValueQueryRequest()); - Assert.IsNotNull(result); - Assert.AreEqual(result.Status, ResultStatuses.Success); - Assert.IsTrue(result.Data.Count() > 0); - } + [TestMethod] + public async Task TestLabelsQueryAsync() + { + var result = await _client.LabelsQueryAsync(default!); + Assert.IsNotNull(result); + Assert.AreEqual(result.Status, ResultStatuses.Success); + Assert.IsTrue(result.Data.Count() > 0); + } + + [TestMethod] + public async Task TestLabelValuesQueryAsync() + { + var result = await _client.LabelValuesQueryAsync(new LableValueQueryRequest()); + Assert.IsNotNull(result); + Assert.AreEqual(result.Status, ResultStatuses.Success); + Assert.IsTrue(result.Data.Count() > 0); + } - [TestMethod] - [DataRow()] - public async Task TestExemplarQueryAsync() + [TestMethod] + [DataRow()] + public async Task TestExemplarQueryAsync() + { + var param = new QueryExemplarRequest { - var param = new QueryExemplarRequest - { - Query = "up", - Start = "2022-06-17T02:00:00.000Z", - End = "2022-06-17T02:30:00.000Z" - }; - var result = await _client.ExemplarQueryAsync(param); - Assert.IsNotNull(result); - Assert.AreEqual(result.Status, ResultStatuses.Success); - } + Query = "up", + Start = "2022-06-17T02:00:00.000Z", + End = "2022-06-17T02:30:00.000Z" + }; + var result = await _client.ExemplarQueryAsync(param); + Assert.IsNotNull(result); + Assert.AreEqual(result.Status, ResultStatuses.Success); } } diff --git a/test/Masa.Utils.Data.Promethus.Test/UserStruct.cs b/test/Masa.Utils.Data.Promethus.Test/UserStruct.cs index 63009e5..f1c35d1 100644 --- a/test/Masa.Utils.Data.Promethus.Test/UserStruct.cs +++ b/test/Masa.Utils.Data.Promethus.Test/UserStruct.cs @@ -1,20 +1,13 @@ // Copyright (c) MASA Stack All rights reserved. // Licensed under the MIT License. See LICENSE.txt in the project root for license information. -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; +namespace Masa.Utils.Data.Promethus.Test; -namespace Masa.Utils.Data.Promethus.Test +public struct UserStruct { - public struct UserStruct - { - public string Name { get; set; } + public string Name { get; set; } - public int Age { get; set; } + public int Age { get; set; } - public string gender { get; set; } - } + public string gender { get; set; } } diff --git a/test/Masa.Utils.Data.Promethus.Test/_import.cs b/test/Masa.Utils.Data.Promethus.Test/_Imports.cs similarity index 100% rename from test/Masa.Utils.Data.Promethus.Test/_import.cs rename to test/Masa.Utils.Data.Promethus.Test/_Imports.cs From 9847a88d9ab07867450099a969e96f32c37b9609 Mon Sep 17 00:00:00 2001 From: qinyouzeng Date: Tue, 28 Jun 2022 14:36:36 +0800 Subject: [PATCH 39/48] chore: enums update --- src/Data/Masa.Utils.Data.Promethus/Enums/ResultStatuses.cs | 3 +-- src/Data/Masa.Utils.Data.Promethus/Enums/ResultTypes.cs | 3 +-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/src/Data/Masa.Utils.Data.Promethus/Enums/ResultStatuses.cs b/src/Data/Masa.Utils.Data.Promethus/Enums/ResultStatuses.cs index d9516f2..c18e9f4 100644 --- a/src/Data/Masa.Utils.Data.Promethus/Enums/ResultStatuses.cs +++ b/src/Data/Masa.Utils.Data.Promethus/Enums/ResultStatuses.cs @@ -5,7 +5,6 @@ namespace Masa.Utils.Data.Promethus.Enums; public enum ResultStatuses { - None, - Success, + Success=1, Error } diff --git a/src/Data/Masa.Utils.Data.Promethus/Enums/ResultTypes.cs b/src/Data/Masa.Utils.Data.Promethus/Enums/ResultTypes.cs index d857163..710fe9c 100644 --- a/src/Data/Masa.Utils.Data.Promethus/Enums/ResultTypes.cs +++ b/src/Data/Masa.Utils.Data.Promethus/Enums/ResultTypes.cs @@ -8,8 +8,7 @@ namespace Masa.Utils.Data.Promethus.Enums; /// public enum ResultTypes { - None, - Matrix, + Matrix = 1, Vector, Scalar, String From 5c4dfe701aa9b40cb1c9267f9d759e877f724cf3 Mon Sep 17 00:00:00 2001 From: qinyouzeng Date: Thu, 30 Jun 2022 09:43:09 +0800 Subject: [PATCH 40/48] chore: doc code style update --- src/Data/Masa.Utils.Data.Promethus/README.md | 42 ++++++++++--------- .../Masa.Utils.Data.Promethus/README.zh-CN.md | 42 ++++++++++--------- 2 files changed, 44 insertions(+), 40 deletions(-) diff --git a/src/Data/Masa.Utils.Data.Promethus/README.md b/src/Data/Masa.Utils.Data.Promethus/README.md index 796dbc1..d59b5ce 100644 --- a/src/Data/Masa.Utils.Data.Promethus/README.md +++ b/src/Data/Masa.Utils.Data.Promethus/README.md @@ -11,55 +11,57 @@ Install-Package Masa.Utils.Data.Promethus ### Usage: -1. Inject services +1. Inject ```` C# builder.Services.AddPromethusClient("http://127.0.0.1:9090"); ```` -2. Call +2. Example ```C# - public class SampleService{ +public class SampleService{ - private IMasaPromethusClient _client; + private IMasaPromethusClient _client; - public SampleService(IMasaPromethusClient client) - { - _client=client; - } + public SampleService(IMasaPromethusClient client) + { + _client=client; + } - public async Task QueryAsync() + public async Task QueryAsync() + { + var query= new QueryRequest { + Query = "up", //metric name + Time = "2022-06-01T09:00:00.000Z" //standard time format or unix timestamp, such as: 1654045200 or 1654045200.000 + }; + var result = await _client.QueryAsync(query); + if(result.Status == ResultStatuses.Success) { - var query= new QueryRequest { - Query = "up", //metric name - Time = "2022-06-01T09:00:00.000Z" //standard time format or unix timestamp, such as: 1654045200 or 1654045200.000 - }; - var result = await _client.QueryAsync(query); - if(result.Status == ResultStatuses.Success){ - switch(result.Data.ResultType){ - case ResultTypes.Vector: + switch(result.Data.ResultType) + { + case ResultTypes.Vector: { var data=result.Data.Result as QueryResultInstantVectorResponse[]; ... } break; - case ResultTypes.Matrix: + case ResultTypes.Matrix: { var data=result.Data.Result as QueryResultMatrixRangeResponse[]; ... } break; - default: + default: { var timeSpan=(double)result.Data.Result[0]; var value=(string)result.Data.Result[1]; } break; - } } } } +} ``` ### Current suports: diff --git a/src/Data/Masa.Utils.Data.Promethus/README.zh-CN.md b/src/Data/Masa.Utils.Data.Promethus/README.zh-CN.md index bcdbd21..a64f4dd 100644 --- a/src/Data/Masa.Utils.Data.Promethus/README.zh-CN.md +++ b/src/Data/Masa.Utils.Data.Promethus/README.zh-CN.md @@ -11,55 +11,57 @@ Install-Package Masa.Utils.Data.Promethus ### 用法: -1. 注册services +1. 注册 ```` C# builder.Services.AddPromethusClient("http://127.0.0.1:9090"); ```` -2. 调用 +2. 示例 ```C# - public class SampleService{ +public class SampleService{ - private IMasaPromethusClient _client; + private IMasaPromethusClient _client; - public SampleService(IMasaPromethusClient client) - { - _client=client; - } + public SampleService(IMasaPromethusClient client) + { + _client=client; + } - public async Task QueryAsync() + public async Task QueryAsync() + { + var query= new QueryRequest { + Query = "up", //metric name + Time = "2022-06-01T09:00:00.000Z" //标准时间格式或unix时间戳,如:1654045200或1654045200.000 + }; + var result = await _client.QueryAsync(query); + if(result.Status == ResultStatuses.Success) { - var query= new QueryRequest { - Query = "up", //metric name - Time = "2022-06-01T09:00:00.000Z" //标准时间格式或unix时间戳,如:1654045200或1654045200.000 - }; - var result = await _client.QueryAsync(query); - if(result.Status == ResultStatuses.Success){ - switch(result.Data.ResultType){ - case ResultTypes.Vector: + switch(result.Data.ResultType) + { + case ResultTypes.Vector: { var data=result.Data.Result as QueryResultInstantVectorResponse[]; ... } break; - case ResultTypes.Matrix: + case ResultTypes.Matrix: { var data=result.Data.Result as QueryResultMatrixRangeResponse[]; ... } break; - default: + default: { var timeSpan=(double)result.Data.Result[0]; var value=(string)result.Data.Result[1]; } break; - } } } } +} ``` ### 目前只支持以下api: From d3822aee8dc5cc4f81b78ac7565de1cb7361b30f Mon Sep 17 00:00:00 2001 From: qinyouzeng Date: Thu, 30 Jun 2022 09:52:52 +0800 Subject: [PATCH 41/48] chore: dosc update --- src/Data/Masa.Utils.Data.Promethus/README.md | 4 ++-- src/Data/Masa.Utils.Data.Promethus/README.zh-CN.md | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Data/Masa.Utils.Data.Promethus/README.md b/src/Data/Masa.Utils.Data.Promethus/README.md index d59b5ce..9d1ad38 100644 --- a/src/Data/Masa.Utils.Data.Promethus/README.md +++ b/src/Data/Masa.Utils.Data.Promethus/README.md @@ -9,7 +9,7 @@ Install-Package Masa.Utils.Data.Promethus ``` -### Usage: +### Example: 1. Inject @@ -17,7 +17,7 @@ Install-Package Masa.Utils.Data.Promethus builder.Services.AddPromethusClient("http://127.0.0.1:9090"); ```` -2. Example +2. Query Example ```C# public class SampleService{ diff --git a/src/Data/Masa.Utils.Data.Promethus/README.zh-CN.md b/src/Data/Masa.Utils.Data.Promethus/README.zh-CN.md index a64f4dd..7163ea7 100644 --- a/src/Data/Masa.Utils.Data.Promethus/README.zh-CN.md +++ b/src/Data/Masa.Utils.Data.Promethus/README.zh-CN.md @@ -9,7 +9,7 @@ Install-Package Masa.Utils.Data.Promethus ``` -### 用法: +### 示例: 1. 注册 @@ -17,7 +17,7 @@ Install-Package Masa.Utils.Data.Promethus builder.Services.AddPromethusClient("http://127.0.0.1:9090"); ```` -2. 示例 +2. 查询样例 ```C# public class SampleService{ From 5912f21a33a8421d837a138cf9402ba8995c190f Mon Sep 17 00:00:00 2001 From: qinyouzeng Date: Thu, 30 Jun 2022 13:25:07 +0800 Subject: [PATCH 42/48] chore: docs update --- src/Data/Masa.Utils.Data.Promethus/README.md | 3 ++- src/Data/Masa.Utils.Data.Promethus/README.zh-CN.md | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/Data/Masa.Utils.Data.Promethus/README.md b/src/Data/Masa.Utils.Data.Promethus/README.md index 9d1ad38..2f44ce7 100644 --- a/src/Data/Masa.Utils.Data.Promethus/README.md +++ b/src/Data/Masa.Utils.Data.Promethus/README.md @@ -20,7 +20,8 @@ builder.Services.AddPromethusClient("http://127.0.0.1:9090"); 2. Query Example ```C# -public class SampleService{ +public class SampleService +{ private IMasaPromethusClient _client; diff --git a/src/Data/Masa.Utils.Data.Promethus/README.zh-CN.md b/src/Data/Masa.Utils.Data.Promethus/README.zh-CN.md index 7163ea7..06c3dd4 100644 --- a/src/Data/Masa.Utils.Data.Promethus/README.zh-CN.md +++ b/src/Data/Masa.Utils.Data.Promethus/README.zh-CN.md @@ -20,7 +20,8 @@ builder.Services.AddPromethusClient("http://127.0.0.1:9090"); 2. 查询样例 ```C# -public class SampleService{ +public class SampleService +{ private IMasaPromethusClient _client; From e36ed26a14e14611af2c0913af9013a3dbfaf6fa Mon Sep 17 00:00:00 2001 From: qinyouzeng Date: Thu, 30 Jun 2022 14:03:29 +0800 Subject: [PATCH 43/48] chore: name update and remove no used files --- Masa.Utils.sln | 8 ++++---- .../MappingConst.cs | 13 ------------ .../Response/Mapping/MappingResponse.cs | 15 -------------- .../Enums/ResultStatuses.cs | 4 ++-- .../Enums/ResultTypes.cs | 2 +- .../Extensions/CallerProviderExtensions.cs | 2 +- .../IMasaPromethusClient.cs | 6 +++--- ...proj => Masa.Utils.Data.Prometheus.csproj} | 0 ...ethusClient.cs => MasaPrometheusClient.cs} | 12 +++++------ .../Exemplar/ExemplarResultResponse.cs | 2 +- .../Reponse/MetaData/LabelResultResponse.cs | 2 +- ...ultResponse.cs => SeriesResultResponse.cs} | 4 ++-- .../Query/QueryResultCommonResponse.cs | 2 +- .../Reponse/Query/QueryResultDataResponse.cs | 2 +- .../Query/QueryResultInstantVectorResponse.cs | 2 +- .../Query/QueryResultMatrixRangeResponse.cs | 2 +- .../Model/Reponse/ResultBaseResponse.cs | 2 +- .../Model/Request/LableValueQueryRequest.cs | 2 +- .../Model/Request/MetaDataQueryRequest.cs | 2 +- .../Model/Request/QueryExemplarRequest.cs | 2 +- .../Model/Request/QueryRangeRequest.cs | 2 +- .../Model/Request/QueryRequest.cs | 2 +- src/Data/Masa.Utils.Data.Promethus/README.md | 12 +++++------ .../Masa.Utils.Data.Promethus/README.zh-CN.md | 12 +++++------ .../ServiceCollectionExtensions.cs | 20 +++++++++---------- .../Masa.Utils.Data.Promethus/_Imports.cs | 4 ++-- .../Extensions/ObjectExtensionsTests.cs | 12 +++++------ .../Extensions/StringExtensionsTests.cs | 2 +- ...=> Masa.Utils.Data.Prometheus.Test.csproj} | 4 ++-- .../MasaPromethusClientTests.cs | 14 ++++++------- .../UserStruct.cs | 4 ++-- .../_Imports.cs | 4 ++-- 32 files changed, 75 insertions(+), 103 deletions(-) delete mode 100644 src/Data/Masa.Utils.Data.Elasticsearch/MappingConst.cs delete mode 100644 src/Data/Masa.Utils.Data.Elasticsearch/Response/Mapping/MappingResponse.cs rename src/Data/Masa.Utils.Data.Promethus/{Masa.Utils.Data.Promethus.csproj => Masa.Utils.Data.Prometheus.csproj} (100%) rename src/Data/Masa.Utils.Data.Promethus/{MasaPromethusClient.cs => MasaPrometheusClient.cs} (91%) rename src/Data/Masa.Utils.Data.Promethus/Model/Reponse/MetaData/{SerieResultResponse.cs => SeriesResultResponse.cs} (69%) rename test/Masa.Utils.Data.Promethus.Test/{Masa.Utils.Data.Promethus.Test.csproj => Masa.Utils.Data.Prometheus.Test.csproj} (88%) diff --git a/Masa.Utils.sln b/Masa.Utils.sln index 38847a1..b881d39 100644 --- a/Masa.Utils.sln +++ b/Masa.Utils.sln @@ -103,9 +103,9 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Masa.Utils.Extensions.Valid EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Masa.Utils.Security.Authentication.OpenIdConnect", "src\Security\Masa.Utils.Security.Authentication.OpenIdConnect\Masa.Utils.Security.Authentication.OpenIdConnect.csproj", "{D17B5B36-5773-4827-9D5D-44390DF666CA}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Masa.Utils.Data.Promethus.Test", "test\Masa.Utils.Data.Promethus.Test\Masa.Utils.Data.Promethus.Test.csproj", "{AC19E221-D3CF-49E9-8E41-A7580C0736AA}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Masa.Utils.Data.Prometheus.Test", "test\Masa.Utils.Data.Promethus.Test\Masa.Utils.Data.Prometheus.Test.csproj", "{AC19E221-D3CF-49E9-8E41-A7580C0736AA}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Masa.Utils.Data.Promethus", "src\Data\Masa.Utils.Data.Promethus\Masa.Utils.Data.Promethus.csproj", "{B108BA38-AC93-4983-8361-43BF819985C7}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Masa.Utils.Data.Prometheus", "src\Data\Masa.Utils.Data.Promethus\Masa.Utils.Data.Prometheus.csproj", "{B108BA38-AC93-4983-8361-43BF819985C7}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -248,7 +248,7 @@ Global {B0E3CA19-C101-4E30-9401-C017B7088F4E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {B0E3CA19-C101-4E30-9401-C017B7088F4E}.Debug|Any CPU.Build.0 = Debug|Any CPU {B0E3CA19-C101-4E30-9401-C017B7088F4E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B0E3CA19-C101-4E30-9401-C017B7088F4E}.Release|Any CPU.Build.0 = Release|Any CPU + {B0E3CA19-C101-4E30-9401-C017B7088F4E}.Release|Any CPU.Build.0 = Release|Any CPU {D17B5B36-5773-4827-9D5D-44390DF666CA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {D17B5B36-5773-4827-9D5D-44390DF666CA}.Debug|Any CPU.Build.0 = Debug|Any CPU {D17B5B36-5773-4827-9D5D-44390DF666CA}.Release|Any CPU.ActiveCfg = Release|Any CPU @@ -310,8 +310,8 @@ Global {22643BF8-A5ED-48CA-BD1A-10BFEC075DBE} = {4F908878-0EB8-43E4-96E4-8B1F32E9B635} {533BCE80-61BC-443A-95D3-2C6328921ED8} = {B2DA607D-4A39-4F0C-A9B3-DD9A061B0B4E} {B0E3CA19-C101-4E30-9401-C017B7088F4E} = {533BCE80-61BC-443A-95D3-2C6328921ED8} - {AC19E221-D3CF-49E9-8E41-A7580C0736AA} = {4F908878-0EB8-43E4-96E4-8B1F32E9B635} {D17B5B36-5773-4827-9D5D-44390DF666CA} = {4FB3BD6D-D4C1-4BEF-AD62-8FD6EAEEB4DF} + {AC19E221-D3CF-49E9-8E41-A7580C0736AA} = {4F908878-0EB8-43E4-96E4-8B1F32E9B635} {B108BA38-AC93-4983-8361-43BF819985C7} = {F844C2A1-C36D-400E-A0D8-7658EF9C3B93} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution diff --git a/src/Data/Masa.Utils.Data.Elasticsearch/MappingConst.cs b/src/Data/Masa.Utils.Data.Elasticsearch/MappingConst.cs deleted file mode 100644 index c53298f..0000000 --- a/src/Data/Masa.Utils.Data.Elasticsearch/MappingConst.cs +++ /dev/null @@ -1,13 +0,0 @@ -// Copyright (c) MASA Stack All rights reserved. -// Licensed under the MIT License. See LICENSE.txt in the project root for license information. - -namespace Masa.Utils.Data.Elasticsearch; - -internal class MappingConst -{ - public const string PROPERTY = "properties"; - public const string TYPE = "type"; - public const string FIELD = "fields"; - public const string MAXLENGTH = "ignore_above"; - public const string KEYWORD = "keyword"; -} diff --git a/src/Data/Masa.Utils.Data.Elasticsearch/Response/Mapping/MappingResponse.cs b/src/Data/Masa.Utils.Data.Elasticsearch/Response/Mapping/MappingResponse.cs deleted file mode 100644 index 096ebb2..0000000 --- a/src/Data/Masa.Utils.Data.Elasticsearch/Response/Mapping/MappingResponse.cs +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright (c) MASA Stack All rights reserved. -// Licensed under the MIT License. See LICENSE.txt in the project root for license information. - -namespace Masa.Utils.Data.Elasticsearch.Response; - -public class MappingResponse -{ - public string? Name { get; set; } - - public string? DataType { get; set; } - - public bool? IsKeyword { get; set; } - - public int? MaxLenth { get; set; } -} diff --git a/src/Data/Masa.Utils.Data.Promethus/Enums/ResultStatuses.cs b/src/Data/Masa.Utils.Data.Promethus/Enums/ResultStatuses.cs index c18e9f4..b4f33b1 100644 --- a/src/Data/Masa.Utils.Data.Promethus/Enums/ResultStatuses.cs +++ b/src/Data/Masa.Utils.Data.Promethus/Enums/ResultStatuses.cs @@ -1,10 +1,10 @@ // Copyright (c) MASA Stack All rights reserved. // Licensed under the MIT License. See LICENSE.txt in the project root for license information. -namespace Masa.Utils.Data.Promethus.Enums; +namespace Masa.Utils.Data.Prometheus.Enums; public enum ResultStatuses { - Success=1, + Success = 1, Error } diff --git a/src/Data/Masa.Utils.Data.Promethus/Enums/ResultTypes.cs b/src/Data/Masa.Utils.Data.Promethus/Enums/ResultTypes.cs index 710fe9c..35391ff 100644 --- a/src/Data/Masa.Utils.Data.Promethus/Enums/ResultTypes.cs +++ b/src/Data/Masa.Utils.Data.Promethus/Enums/ResultTypes.cs @@ -1,7 +1,7 @@ // Copyright (c) MASA Stack All rights reserved. // Licensed under the MIT License. See LICENSE.txt in the project root for license information. -namespace Masa.Utils.Data.Promethus.Enums; +namespace Masa.Utils.Data.Prometheus.Enums; /// /// reference https://prometheus.io/docs/prometheus/latest/querying/api/#expression-query-result-formats diff --git a/src/Data/Masa.Utils.Data.Promethus/Extensions/CallerProviderExtensions.cs b/src/Data/Masa.Utils.Data.Promethus/Extensions/CallerProviderExtensions.cs index 00e79c8..e0d49e8 100644 --- a/src/Data/Masa.Utils.Data.Promethus/Extensions/CallerProviderExtensions.cs +++ b/src/Data/Masa.Utils.Data.Promethus/Extensions/CallerProviderExtensions.cs @@ -1,7 +1,7 @@ // Copyright (c) MASA Stack All rights reserved. // Licensed under the MIT License. See LICENSE.txt in the project root for license information. -[assembly: InternalsVisibleTo("Masa.Utils.Data.Promethus.Test")] +[assembly: InternalsVisibleTo("Masa.Utils.Data.Prometheus.Test")] namespace Masa.Utils.Caller.Core; internal static class CallerProviderExtensions diff --git a/src/Data/Masa.Utils.Data.Promethus/IMasaPromethusClient.cs b/src/Data/Masa.Utils.Data.Promethus/IMasaPromethusClient.cs index e6776fd..cc8c5d5 100644 --- a/src/Data/Masa.Utils.Data.Promethus/IMasaPromethusClient.cs +++ b/src/Data/Masa.Utils.Data.Promethus/IMasaPromethusClient.cs @@ -1,15 +1,15 @@ // Copyright (c) MASA Stack All rights reserved. // Licensed under the MIT License. See LICENSE.txt in the project root for license information. -namespace Masa.Utils.Data.Promethus; +namespace Masa.Utils.Data.Prometheus; -public interface IMasaPromethusClient +public interface IMasaPrometheusClient { Task QueryAsync(QueryRequest query); Task QueryRangeAsync(QueryRangeRequest query); - Task SeriesAsync(MetaDataQueryRequest query); + Task SeriesQueryAsync(MetaDataQueryRequest query); Task LabelsQueryAsync(MetaDataQueryRequest query); diff --git a/src/Data/Masa.Utils.Data.Promethus/Masa.Utils.Data.Promethus.csproj b/src/Data/Masa.Utils.Data.Promethus/Masa.Utils.Data.Prometheus.csproj similarity index 100% rename from src/Data/Masa.Utils.Data.Promethus/Masa.Utils.Data.Promethus.csproj rename to src/Data/Masa.Utils.Data.Promethus/Masa.Utils.Data.Prometheus.csproj diff --git a/src/Data/Masa.Utils.Data.Promethus/MasaPromethusClient.cs b/src/Data/Masa.Utils.Data.Promethus/MasaPrometheusClient.cs similarity index 91% rename from src/Data/Masa.Utils.Data.Promethus/MasaPromethusClient.cs rename to src/Data/Masa.Utils.Data.Promethus/MasaPrometheusClient.cs index 7b89ecd..e243e99 100644 --- a/src/Data/Masa.Utils.Data.Promethus/MasaPromethusClient.cs +++ b/src/Data/Masa.Utils.Data.Promethus/MasaPrometheusClient.cs @@ -1,15 +1,15 @@ // Copyright (c) MASA Stack All rights reserved. // Licensed under the MIT License. See LICENSE.txt in the project root for license information. -[assembly: InternalsVisibleTo("Masa.Utils.Data.Promethus.Test")] -namespace Masa.Utils.Data.Promethus; +[assembly: InternalsVisibleTo("Masa.Utils.Data.Prometheus.Test")] +namespace Masa.Utils.Data.Prometheus; -internal class MasaPromethusClient : IMasaPromethusClient +internal class MasaPrometheusClient : IMasaPrometheusClient { private readonly ICallerProvider _caller; private readonly JsonSerializerOptions _jsonSerializerOptions; - public MasaPromethusClient(ICallerProvider caller, JsonSerializerOptions jsonSerializerOptions) + public MasaPrometheusClient(ICallerProvider caller, JsonSerializerOptions jsonSerializerOptions) { _caller = caller; _jsonSerializerOptions = jsonSerializerOptions; @@ -42,9 +42,9 @@ public async Task QueryRangeAsync(QueryRangeRequest q return await QueryDataAsync("/api/v1/query_range", query); } - public async Task SeriesAsync(MetaDataQueryRequest query) + public async Task SeriesQueryAsync(MetaDataQueryRequest query) { - return await QueryDataAsync("/api/v1/series", query); + return await QueryDataAsync("/api/v1/series", query); } private async Task QueryDataAsync(string url, object data) where T : ResultBaseResponse diff --git a/src/Data/Masa.Utils.Data.Promethus/Model/Reponse/Exemplar/ExemplarResultResponse.cs b/src/Data/Masa.Utils.Data.Promethus/Model/Reponse/Exemplar/ExemplarResultResponse.cs index f3a83c8..60745eb 100644 --- a/src/Data/Masa.Utils.Data.Promethus/Model/Reponse/Exemplar/ExemplarResultResponse.cs +++ b/src/Data/Masa.Utils.Data.Promethus/Model/Reponse/Exemplar/ExemplarResultResponse.cs @@ -1,7 +1,7 @@ // Copyright (c) MASA Stack All rights reserved. // Licensed under the MIT License. See LICENSE.txt in the project root for license information. -namespace Masa.Utils.Data.Promethus.Model; +namespace Masa.Utils.Data.Prometheus.Model; public class ExemplarResultResponse : ResultBaseResponse { diff --git a/src/Data/Masa.Utils.Data.Promethus/Model/Reponse/MetaData/LabelResultResponse.cs b/src/Data/Masa.Utils.Data.Promethus/Model/Reponse/MetaData/LabelResultResponse.cs index 928a8ff..a20a25c 100644 --- a/src/Data/Masa.Utils.Data.Promethus/Model/Reponse/MetaData/LabelResultResponse.cs +++ b/src/Data/Masa.Utils.Data.Promethus/Model/Reponse/MetaData/LabelResultResponse.cs @@ -1,7 +1,7 @@ // Copyright (c) MASA Stack All rights reserved. // Licensed under the MIT License. See LICENSE.txt in the project root for license information. -namespace Masa.Utils.Data.Promethus.Model; +namespace Masa.Utils.Data.Prometheus.Model; public class LabelResultResponse : ResultBaseResponse { diff --git a/src/Data/Masa.Utils.Data.Promethus/Model/Reponse/MetaData/SerieResultResponse.cs b/src/Data/Masa.Utils.Data.Promethus/Model/Reponse/MetaData/SeriesResultResponse.cs similarity index 69% rename from src/Data/Masa.Utils.Data.Promethus/Model/Reponse/MetaData/SerieResultResponse.cs rename to src/Data/Masa.Utils.Data.Promethus/Model/Reponse/MetaData/SeriesResultResponse.cs index 979103c..6422449 100644 --- a/src/Data/Masa.Utils.Data.Promethus/Model/Reponse/MetaData/SerieResultResponse.cs +++ b/src/Data/Masa.Utils.Data.Promethus/Model/Reponse/MetaData/SeriesResultResponse.cs @@ -1,9 +1,9 @@ // Copyright (c) MASA Stack All rights reserved. // Licensed under the MIT License. See LICENSE.txt in the project root for license information. -namespace Masa.Utils.Data.Promethus.Model; +namespace Masa.Utils.Data.Prometheus.Model; -public class SerieResultResponse : ResultBaseResponse +public class SeriesResultResponse : ResultBaseResponse { public IEnumerable>? Data { get; set; } } diff --git a/src/Data/Masa.Utils.Data.Promethus/Model/Reponse/Query/QueryResultCommonResponse.cs b/src/Data/Masa.Utils.Data.Promethus/Model/Reponse/Query/QueryResultCommonResponse.cs index da20b58..1859c35 100644 --- a/src/Data/Masa.Utils.Data.Promethus/Model/Reponse/Query/QueryResultCommonResponse.cs +++ b/src/Data/Masa.Utils.Data.Promethus/Model/Reponse/Query/QueryResultCommonResponse.cs @@ -1,7 +1,7 @@ // Copyright (c) MASA Stack All rights reserved. // Licensed under the MIT License. See LICENSE.txt in the project root for license information. -namespace Masa.Utils.Data.Promethus.Model; +namespace Masa.Utils.Data.Prometheus.Model; public class QueryResultCommonResponse: ResultBaseResponse { diff --git a/src/Data/Masa.Utils.Data.Promethus/Model/Reponse/Query/QueryResultDataResponse.cs b/src/Data/Masa.Utils.Data.Promethus/Model/Reponse/Query/QueryResultDataResponse.cs index e4ef8d7..209f6d5 100644 --- a/src/Data/Masa.Utils.Data.Promethus/Model/Reponse/Query/QueryResultDataResponse.cs +++ b/src/Data/Masa.Utils.Data.Promethus/Model/Reponse/Query/QueryResultDataResponse.cs @@ -1,7 +1,7 @@ // Copyright (c) MASA Stack All rights reserved. // Licensed under the MIT License. See LICENSE.txt in the project root for license information. -namespace Masa.Utils.Data.Promethus.Model; +namespace Masa.Utils.Data.Prometheus.Model; public class QueryResultDataResponse { diff --git a/src/Data/Masa.Utils.Data.Promethus/Model/Reponse/Query/QueryResultInstantVectorResponse.cs b/src/Data/Masa.Utils.Data.Promethus/Model/Reponse/Query/QueryResultInstantVectorResponse.cs index e14ffe2..976986e 100644 --- a/src/Data/Masa.Utils.Data.Promethus/Model/Reponse/Query/QueryResultInstantVectorResponse.cs +++ b/src/Data/Masa.Utils.Data.Promethus/Model/Reponse/Query/QueryResultInstantVectorResponse.cs @@ -1,7 +1,7 @@ // Copyright (c) MASA Stack All rights reserved. // Licensed under the MIT License. See LICENSE.txt in the project root for license information. -namespace Masa.Utils.Data.Promethus.Model; +namespace Masa.Utils.Data.Prometheus.Model; public class QueryResultInstantVectorResponse { diff --git a/src/Data/Masa.Utils.Data.Promethus/Model/Reponse/Query/QueryResultMatrixRangeResponse.cs b/src/Data/Masa.Utils.Data.Promethus/Model/Reponse/Query/QueryResultMatrixRangeResponse.cs index d67c464..810473d 100644 --- a/src/Data/Masa.Utils.Data.Promethus/Model/Reponse/Query/QueryResultMatrixRangeResponse.cs +++ b/src/Data/Masa.Utils.Data.Promethus/Model/Reponse/Query/QueryResultMatrixRangeResponse.cs @@ -1,7 +1,7 @@ // Copyright (c) MASA Stack All rights reserved. // Licensed under the MIT License. See LICENSE.txt in the project root for license information. -namespace Masa.Utils.Data.Promethus.Model; +namespace Masa.Utils.Data.Prometheus.Model; public class QueryResultMatrixRangeResponse { diff --git a/src/Data/Masa.Utils.Data.Promethus/Model/Reponse/ResultBaseResponse.cs b/src/Data/Masa.Utils.Data.Promethus/Model/Reponse/ResultBaseResponse.cs index df8b2fe..33381e6 100644 --- a/src/Data/Masa.Utils.Data.Promethus/Model/Reponse/ResultBaseResponse.cs +++ b/src/Data/Masa.Utils.Data.Promethus/Model/Reponse/ResultBaseResponse.cs @@ -1,7 +1,7 @@ // Copyright (c) MASA Stack All rights reserved. // Licensed under the MIT License. See LICENSE.txt in the project root for license information. -namespace Masa.Utils.Data.Promethus.Model; +namespace Masa.Utils.Data.Prometheus.Model; public class ResultBaseResponse { diff --git a/src/Data/Masa.Utils.Data.Promethus/Model/Request/LableValueQueryRequest.cs b/src/Data/Masa.Utils.Data.Promethus/Model/Request/LableValueQueryRequest.cs index ae331e1..b1089a1 100644 --- a/src/Data/Masa.Utils.Data.Promethus/Model/Request/LableValueQueryRequest.cs +++ b/src/Data/Masa.Utils.Data.Promethus/Model/Request/LableValueQueryRequest.cs @@ -1,7 +1,7 @@ // Copyright (c) MASA Stack All rights reserved. // Licensed under the MIT License. See LICENSE.txt in the project root for license information. -namespace Masa.Utils.Data.Promethus.Model; +namespace Masa.Utils.Data.Prometheus.Model; public class LableValueQueryRequest: MetaDataQueryRequest { diff --git a/src/Data/Masa.Utils.Data.Promethus/Model/Request/MetaDataQueryRequest.cs b/src/Data/Masa.Utils.Data.Promethus/Model/Request/MetaDataQueryRequest.cs index 6e6b062..00c3af5 100644 --- a/src/Data/Masa.Utils.Data.Promethus/Model/Request/MetaDataQueryRequest.cs +++ b/src/Data/Masa.Utils.Data.Promethus/Model/Request/MetaDataQueryRequest.cs @@ -1,7 +1,7 @@ // Copyright (c) MASA Stack All rights reserved. // Licensed under the MIT License. See LICENSE.txt in the project root for license information. -namespace Masa.Utils.Data.Promethus.Model; +namespace Masa.Utils.Data.Prometheus.Model; public class MetaDataQueryRequest { diff --git a/src/Data/Masa.Utils.Data.Promethus/Model/Request/QueryExemplarRequest.cs b/src/Data/Masa.Utils.Data.Promethus/Model/Request/QueryExemplarRequest.cs index 5e1b45b..b6b9a4b 100644 --- a/src/Data/Masa.Utils.Data.Promethus/Model/Request/QueryExemplarRequest.cs +++ b/src/Data/Masa.Utils.Data.Promethus/Model/Request/QueryExemplarRequest.cs @@ -1,7 +1,7 @@ // Copyright (c) MASA Stack All rights reserved. // Licensed under the MIT License. See LICENSE.txt in the project root for license information. -namespace Masa.Utils.Data.Promethus.Model; +namespace Masa.Utils.Data.Prometheus.Model; public class QueryExemplarRequest { diff --git a/src/Data/Masa.Utils.Data.Promethus/Model/Request/QueryRangeRequest.cs b/src/Data/Masa.Utils.Data.Promethus/Model/Request/QueryRangeRequest.cs index f13773f..9d49261 100644 --- a/src/Data/Masa.Utils.Data.Promethus/Model/Request/QueryRangeRequest.cs +++ b/src/Data/Masa.Utils.Data.Promethus/Model/Request/QueryRangeRequest.cs @@ -1,7 +1,7 @@ // Copyright (c) MASA Stack All rights reserved. // Licensed under the MIT License. See LICENSE.txt in the project root for license information. -namespace Masa.Utils.Data.Promethus.Model; +namespace Masa.Utils.Data.Prometheus.Model; public class QueryRangeRequest { diff --git a/src/Data/Masa.Utils.Data.Promethus/Model/Request/QueryRequest.cs b/src/Data/Masa.Utils.Data.Promethus/Model/Request/QueryRequest.cs index d6b2f83..b177958 100644 --- a/src/Data/Masa.Utils.Data.Promethus/Model/Request/QueryRequest.cs +++ b/src/Data/Masa.Utils.Data.Promethus/Model/Request/QueryRequest.cs @@ -1,7 +1,7 @@ // Copyright (c) MASA Stack All rights reserved. // Licensed under the MIT License. See LICENSE.txt in the project root for license information. -namespace Masa.Utils.Data.Promethus.Model; +namespace Masa.Utils.Data.Prometheus.Model; public class QueryRequest { diff --git a/src/Data/Masa.Utils.Data.Promethus/README.md b/src/Data/Masa.Utils.Data.Promethus/README.md index 2f44ce7..94ad400 100644 --- a/src/Data/Masa.Utils.Data.Promethus/README.md +++ b/src/Data/Masa.Utils.Data.Promethus/README.md @@ -1,12 +1,12 @@ [中](README.zh-CN.md) | EN -## Masa.Utils.Data.Promethus +## Masa.Utils.Data.Prometheus -[Promethus Http Api](https://www.prometheus.io/docs/prometheus/latest/querying/api/) Client Library +[Prometheus Http Api](https://www.prometheus.io/docs/prometheus/latest/querying/api/) Client Library ## Install: ```c# -Install-Package Masa.Utils.Data.Promethus +Install-Package Masa.Utils.Data.Prometheus ``` ### Example: @@ -14,7 +14,7 @@ Install-Package Masa.Utils.Data.Promethus 1. Inject ```` C# -builder.Services.AddPromethusClient("http://127.0.0.1:9090"); +builder.Services.AddPrometheusClient("http://127.0.0.1:9090"); ```` 2. Query Example @@ -23,9 +23,9 @@ builder.Services.AddPromethusClient("http://127.0.0.1:9090"); public class SampleService { - private IMasaPromethusClient _client; + private IMasaPrometheusClient _client; - public SampleService(IMasaPromethusClient client) + public SampleService(IMasaPrometheusClient client) { _client=client; } diff --git a/src/Data/Masa.Utils.Data.Promethus/README.zh-CN.md b/src/Data/Masa.Utils.Data.Promethus/README.zh-CN.md index 06c3dd4..b8c14ab 100644 --- a/src/Data/Masa.Utils.Data.Promethus/README.zh-CN.md +++ b/src/Data/Masa.Utils.Data.Promethus/README.zh-CN.md @@ -1,12 +1,12 @@ [EN](README.md) | 中 -## Masa.Utils.Data.Promethus +## Masa.Utils.Data.Prometheus -[Promethus Http Api](https://www.prometheus.io/docs/prometheus/latest/querying/api/) 客户端类库 +[Prometheus Http Api](https://www.prometheus.io/docs/prometheus/latest/querying/api/) 客户端类库 ## 安装: ```c# -Install-Package Masa.Utils.Data.Promethus +Install-Package Masa.Utils.Data.Prometheus ``` ### 示例: @@ -14,7 +14,7 @@ Install-Package Masa.Utils.Data.Promethus 1. 注册 ```` C# -builder.Services.AddPromethusClient("http://127.0.0.1:9090"); +builder.Services.AddPrometheusClient("http://127.0.0.1:9090"); ```` 2. 查询样例 @@ -23,9 +23,9 @@ builder.Services.AddPromethusClient("http://127.0.0.1:9090"); public class SampleService { - private IMasaPromethusClient _client; + private IMasaPrometheusClient _client; - public SampleService(IMasaPromethusClient client) + public SampleService(IMasaPrometheusClient client) { _client=client; } diff --git a/src/Data/Masa.Utils.Data.Promethus/ServiceCollectionExtensions.cs b/src/Data/Masa.Utils.Data.Promethus/ServiceCollectionExtensions.cs index f1bc316..79e4494 100644 --- a/src/Data/Masa.Utils.Data.Promethus/ServiceCollectionExtensions.cs +++ b/src/Data/Masa.Utils.Data.Promethus/ServiceCollectionExtensions.cs @@ -1,25 +1,25 @@ // Copyright (c) MASA Stack All rights reserved. // Licensed under the MIT License. See LICENSE.txt in the project root for license information. -namespace Masa.Utils.Data.Promethus; +namespace Masa.Utils.Data.Prometheus; public static class ServiceCollectionExtensions { - private const string PROMETHUS_HTTP_CLIENT_NAME = "promethus_client_name"; + private const string Prometheus_HTTP_CLIENT_NAME = "prometheus_client_name"; - public static IServiceCollection AddPromethusClient(this IServiceCollection services, string uri) + public static IServiceCollection AddPrometheusClient(this IServiceCollection services, string url) { - ArgumentNullException.ThrowIfNull(uri, nameof(uri)); + ArgumentNullException.ThrowIfNull(url, nameof(url)); - if (services.Any(service => service.GetType() == typeof(IMasaPromethusClient))) + if (services.Any(service => service.GetType() == typeof(IMasaPrometheusClient))) return services; services.AddCaller(builder => { builder.UseHttpClient(options => { - options.BaseAddress = uri; - options.Name = PROMETHUS_HTTP_CLIENT_NAME; + options.BaseAddress = url; + options.Name = Prometheus_HTTP_CLIENT_NAME; }); }); @@ -29,10 +29,10 @@ public static IServiceCollection AddPromethusClient(this IServiceCollection serv }; jsonOptions.Converters.Add(new JsonStringEnumConverter()); - services.AddScoped(ServiceProvider => + services.AddScoped(ServiceProvider => { - var caller = ServiceProvider.GetRequiredService().CreateClient(PROMETHUS_HTTP_CLIENT_NAME); - return new MasaPromethusClient(caller, jsonOptions); + var caller = ServiceProvider.GetRequiredService().CreateClient(Prometheus_HTTP_CLIENT_NAME); + return new MasaPrometheusClient(caller, jsonOptions); }); return services; } diff --git a/src/Data/Masa.Utils.Data.Promethus/_Imports.cs b/src/Data/Masa.Utils.Data.Promethus/_Imports.cs index e49bded..0d8a7ec 100644 --- a/src/Data/Masa.Utils.Data.Promethus/_Imports.cs +++ b/src/Data/Masa.Utils.Data.Promethus/_Imports.cs @@ -3,8 +3,8 @@ global using Masa.Utils.Caller.Core; global using Masa.Utils.Caller.HttpClient; -global using Masa.Utils.Data.Promethus.Enums; -global using Masa.Utils.Data.Promethus.Model; +global using Masa.Utils.Data.Prometheus.Enums; +global using Masa.Utils.Data.Prometheus.Model; global using Microsoft.Extensions.DependencyInjection; global using System.Collections; global using System.Reflection; diff --git a/test/Masa.Utils.Data.Promethus.Test/Extensions/ObjectExtensionsTests.cs b/test/Masa.Utils.Data.Promethus.Test/Extensions/ObjectExtensionsTests.cs index 40f42d0..988a782 100644 --- a/test/Masa.Utils.Data.Promethus.Test/Extensions/ObjectExtensionsTests.cs +++ b/test/Masa.Utils.Data.Promethus.Test/Extensions/ObjectExtensionsTests.cs @@ -1,7 +1,7 @@ // Copyright (c) MASA Stack All rights reserved. // Licensed under the MIT License. See LICENSE.txt in the project root for license information. -namespace Masa.Utils.Data.Promethus.Test; +namespace Masa.Utils.Data.Prometheus.Test; [TestClass] public class ObjectExtensionsTests @@ -29,15 +29,15 @@ public void StructTest() { Name = "Bob", Age = 30, - gender = "Male" + Gender = "Male" }; var result = user.ToUrlParam(); - var str = $"age={user.Age}&gender={user.gender}&name={user.Name}"; + var str = $"age={user.Age}&gender={user.Gender}&name={user.Name}"; Assert.AreEqual(str, result); user.Name = "王占山"; - str = $"age={user.Age}&gender={user.gender}&name={System.Web.HttpUtility.UrlEncode(user.Name, System.Text.Encoding.UTF8)}"; + str = $"age={user.Age}&gender={user.Gender}&name={System.Web.HttpUtility.UrlEncode(user.Name, Encoding.UTF8)}"; result = user.ToUrlParam(); Assert.AreEqual(str, result); } @@ -54,11 +54,11 @@ public void ClassTest() }; var result = obj.ToUrlParam(isEnumString: true); - var str = $"a={obj.a}&ch={System.Web.HttpUtility.UrlEncode(obj.ch, System.Text.Encoding.UTF8)}&d={obj.d}&t={obj.t}"; + var str = $"a={obj.a}&ch={System.Web.HttpUtility.UrlEncode(obj.ch, Encoding.UTF8)}&d={obj.d}&t={obj.t}"; Assert.AreEqual(str, result); result = obj.ToUrlParam(isEnumString: false); - str = $"a={obj.a}&ch={System.Web.HttpUtility.UrlEncode(obj.ch, System.Text.Encoding.UTF8)}&d={obj.d}&t={(int)obj.t}"; + str = $"a={obj.a}&ch={System.Web.HttpUtility.UrlEncode(obj.ch, Encoding.UTF8)}&d={obj.d}&t={(int)obj.t}"; Assert.AreEqual(str, result); result = obj.ToUrlParam(isEnumString: false, isUrlEncode: false); diff --git a/test/Masa.Utils.Data.Promethus.Test/Extensions/StringExtensionsTests.cs b/test/Masa.Utils.Data.Promethus.Test/Extensions/StringExtensionsTests.cs index 170df5e..6c167dc 100644 --- a/test/Masa.Utils.Data.Promethus.Test/Extensions/StringExtensionsTests.cs +++ b/test/Masa.Utils.Data.Promethus.Test/Extensions/StringExtensionsTests.cs @@ -1,7 +1,7 @@ // Copyright (c) MASA Stack All rights reserved. // Licensed under the MIT License. See LICENSE.txt in the project root for license information. -namespace Masa.Utils.Data.Promethus.Test; +namespace Masa.Utils.Data.Prometheus.Test; [TestClass] public class StringExtensionsTests diff --git a/test/Masa.Utils.Data.Promethus.Test/Masa.Utils.Data.Promethus.Test.csproj b/test/Masa.Utils.Data.Promethus.Test/Masa.Utils.Data.Prometheus.Test.csproj similarity index 88% rename from test/Masa.Utils.Data.Promethus.Test/Masa.Utils.Data.Promethus.Test.csproj rename to test/Masa.Utils.Data.Promethus.Test/Masa.Utils.Data.Prometheus.Test.csproj index 48d683d..f2547f1 100644 --- a/test/Masa.Utils.Data.Promethus.Test/Masa.Utils.Data.Promethus.Test.csproj +++ b/test/Masa.Utils.Data.Promethus.Test/Masa.Utils.Data.Prometheus.Test.csproj @@ -1,4 +1,4 @@ - + net6.0 @@ -15,7 +15,7 @@ - + diff --git a/test/Masa.Utils.Data.Promethus.Test/MasaPromethusClientTests.cs b/test/Masa.Utils.Data.Promethus.Test/MasaPromethusClientTests.cs index 39950df..63aaa75 100644 --- a/test/Masa.Utils.Data.Promethus.Test/MasaPromethusClientTests.cs +++ b/test/Masa.Utils.Data.Promethus.Test/MasaPromethusClientTests.cs @@ -1,19 +1,19 @@ // Copyright (c) MASA Stack All rights reserved. // Licensed under the MIT License. See LICENSE.txt in the project root for license information. -namespace Masa.Utils.Data.Promethus.Test; +namespace Masa.Utils.Data.Prometheus.Test; [TestClass] -public class MasaPromethusClientTests +public class MasaPrometheusClientTests { - private IMasaPromethusClient _client; + private IMasaPrometheusClient _client; [TestInitialize] public void Initialize() { IServiceCollection service = new ServiceCollection(); - service.AddPromethusClient("http://localhost:9090"); - _client = service.BuildServiceProvider().GetService(); + service.AddPrometheusClient("http://localhost:9090"); + _client = service.BuildServiceProvider().GetService(); } [TestMethod] @@ -72,9 +72,9 @@ public async Task TestQueryRangeAsync() } [TestMethod] - public async Task TestSeriesAsync() + public async Task TestSeriesQueryAsync() { - var result = await _client.SeriesAsync(new MetaDataQueryRequest + var result = await _client.SeriesQueryAsync(new MetaDataQueryRequest { Match = new string[] { "up" }, Start = "2022-06-17T02:00:00.000Z", diff --git a/test/Masa.Utils.Data.Promethus.Test/UserStruct.cs b/test/Masa.Utils.Data.Promethus.Test/UserStruct.cs index f1c35d1..a1ea1f6 100644 --- a/test/Masa.Utils.Data.Promethus.Test/UserStruct.cs +++ b/test/Masa.Utils.Data.Promethus.Test/UserStruct.cs @@ -1,7 +1,7 @@ // Copyright (c) MASA Stack All rights reserved. // Licensed under the MIT License. See LICENSE.txt in the project root for license information. -namespace Masa.Utils.Data.Promethus.Test; +namespace Masa.Utils.Data.Prometheus.Test; public struct UserStruct { @@ -9,5 +9,5 @@ public struct UserStruct public int Age { get; set; } - public string gender { get; set; } + public string Gender { get; set; } } diff --git a/test/Masa.Utils.Data.Promethus.Test/_Imports.cs b/test/Masa.Utils.Data.Promethus.Test/_Imports.cs index 6b0e0fe..3b98df1 100644 --- a/test/Masa.Utils.Data.Promethus.Test/_Imports.cs +++ b/test/Masa.Utils.Data.Promethus.Test/_Imports.cs @@ -1,8 +1,8 @@ // Copyright (c) MASA Stack All rights reserved. // Licensed under the MIT License. See LICENSE.txt in the project root for license information. -global using Masa.Utils.Data.Promethus.Enums; -global using Masa.Utils.Data.Promethus.Model; +global using Masa.Utils.Data.Prometheus.Enums; +global using Masa.Utils.Data.Prometheus.Model; global using Microsoft.Extensions.DependencyInjection; global using Microsoft.VisualStudio.TestTools.UnitTesting; global using System; From f36051dc46b70b15ad2fa0084e2f6e791626f45e Mon Sep 17 00:00:00 2001 From: qinyouzeng Date: Thu, 30 Jun 2022 14:33:43 +0800 Subject: [PATCH 44/48] chore: folder name update --- Masa.Utils.sln | 24 +++++++++---------- .../Enums/ResultStatuses.cs | 0 .../Enums/ResultTypes.cs | 0 .../Extensions/CallerProviderExtensions.cs | 0 .../Extensions/ObjectExtensions.cs | 0 .../Extensions/StringExtensions.cs | 0 .../IMasaPromethusClient.cs | 0 .../Masa.Utils.Data.Prometheus.csproj | 0 .../MasaPrometheusClient.cs | 0 .../Exemplar/ExemplarResultResponse.cs | 0 .../Reponse/MetaData/LabelResultResponse.cs | 0 .../Reponse/MetaData/SeriesResultResponse.cs | 0 .../Query/QueryResultCommonResponse.cs | 0 .../Reponse/Query/QueryResultDataResponse.cs | 0 .../Query/QueryResultInstantVectorResponse.cs | 0 .../Query/QueryResultMatrixRangeResponse.cs | 0 .../Model/Reponse/ResultBaseResponse.cs | 0 .../Model/Request/LableValueQueryRequest.cs | 0 .../Model/Request/MetaDataQueryRequest.cs | 0 .../Model/Request/QueryExemplarRequest.cs | 0 .../Model/Request/QueryRangeRequest.cs | 0 .../Model/Request/QueryRequest.cs | 0 .../README.md | 0 .../README.zh-CN.md | 0 .../ServiceCollectionExtensions.cs | 0 .../_Imports.cs | 0 .../Extensions/ObjectExtensionsTests.cs | 0 .../Extensions/StringExtensionsTests.cs | 0 .../Masa.Utils.Data.Prometheus.Test.csproj | 2 +- .../MasaPromethusClientTests.cs | 5 +--- .../UserStruct.cs | 0 .../_Imports.cs | 0 32 files changed, 14 insertions(+), 17 deletions(-) rename src/Data/{Masa.Utils.Data.Promethus => Masa.Utils.Data.Prometheus}/Enums/ResultStatuses.cs (100%) rename src/Data/{Masa.Utils.Data.Promethus => Masa.Utils.Data.Prometheus}/Enums/ResultTypes.cs (100%) rename src/Data/{Masa.Utils.Data.Promethus => Masa.Utils.Data.Prometheus}/Extensions/CallerProviderExtensions.cs (100%) rename src/Data/{Masa.Utils.Data.Promethus => Masa.Utils.Data.Prometheus}/Extensions/ObjectExtensions.cs (100%) rename src/Data/{Masa.Utils.Data.Promethus => Masa.Utils.Data.Prometheus}/Extensions/StringExtensions.cs (100%) rename src/Data/{Masa.Utils.Data.Promethus => Masa.Utils.Data.Prometheus}/IMasaPromethusClient.cs (100%) rename src/Data/{Masa.Utils.Data.Promethus => Masa.Utils.Data.Prometheus}/Masa.Utils.Data.Prometheus.csproj (100%) rename src/Data/{Masa.Utils.Data.Promethus => Masa.Utils.Data.Prometheus}/MasaPrometheusClient.cs (100%) rename src/Data/{Masa.Utils.Data.Promethus => Masa.Utils.Data.Prometheus}/Model/Reponse/Exemplar/ExemplarResultResponse.cs (100%) rename src/Data/{Masa.Utils.Data.Promethus => Masa.Utils.Data.Prometheus}/Model/Reponse/MetaData/LabelResultResponse.cs (100%) rename src/Data/{Masa.Utils.Data.Promethus => Masa.Utils.Data.Prometheus}/Model/Reponse/MetaData/SeriesResultResponse.cs (100%) rename src/Data/{Masa.Utils.Data.Promethus => Masa.Utils.Data.Prometheus}/Model/Reponse/Query/QueryResultCommonResponse.cs (100%) rename src/Data/{Masa.Utils.Data.Promethus => Masa.Utils.Data.Prometheus}/Model/Reponse/Query/QueryResultDataResponse.cs (100%) rename src/Data/{Masa.Utils.Data.Promethus => Masa.Utils.Data.Prometheus}/Model/Reponse/Query/QueryResultInstantVectorResponse.cs (100%) rename src/Data/{Masa.Utils.Data.Promethus => Masa.Utils.Data.Prometheus}/Model/Reponse/Query/QueryResultMatrixRangeResponse.cs (100%) rename src/Data/{Masa.Utils.Data.Promethus => Masa.Utils.Data.Prometheus}/Model/Reponse/ResultBaseResponse.cs (100%) rename src/Data/{Masa.Utils.Data.Promethus => Masa.Utils.Data.Prometheus}/Model/Request/LableValueQueryRequest.cs (100%) rename src/Data/{Masa.Utils.Data.Promethus => Masa.Utils.Data.Prometheus}/Model/Request/MetaDataQueryRequest.cs (100%) rename src/Data/{Masa.Utils.Data.Promethus => Masa.Utils.Data.Prometheus}/Model/Request/QueryExemplarRequest.cs (100%) rename src/Data/{Masa.Utils.Data.Promethus => Masa.Utils.Data.Prometheus}/Model/Request/QueryRangeRequest.cs (100%) rename src/Data/{Masa.Utils.Data.Promethus => Masa.Utils.Data.Prometheus}/Model/Request/QueryRequest.cs (100%) rename src/Data/{Masa.Utils.Data.Promethus => Masa.Utils.Data.Prometheus}/README.md (100%) rename src/Data/{Masa.Utils.Data.Promethus => Masa.Utils.Data.Prometheus}/README.zh-CN.md (100%) rename src/Data/{Masa.Utils.Data.Promethus => Masa.Utils.Data.Prometheus}/ServiceCollectionExtensions.cs (100%) rename src/Data/{Masa.Utils.Data.Promethus => Masa.Utils.Data.Prometheus}/_Imports.cs (100%) rename test/{Masa.Utils.Data.Promethus.Test => Masa.Utils.Data.Prometheus.Test}/Extensions/ObjectExtensionsTests.cs (100%) rename test/{Masa.Utils.Data.Promethus.Test => Masa.Utils.Data.Prometheus.Test}/Extensions/StringExtensionsTests.cs (100%) rename test/{Masa.Utils.Data.Promethus.Test => Masa.Utils.Data.Prometheus.Test}/Masa.Utils.Data.Prometheus.Test.csproj (93%) rename test/{Masa.Utils.Data.Promethus.Test => Masa.Utils.Data.Prometheus.Test}/MasaPromethusClientTests.cs (96%) rename test/{Masa.Utils.Data.Promethus.Test => Masa.Utils.Data.Prometheus.Test}/UserStruct.cs (100%) rename test/{Masa.Utils.Data.Promethus.Test => Masa.Utils.Data.Prometheus.Test}/_Imports.cs (100%) diff --git a/Masa.Utils.sln b/Masa.Utils.sln index b881d39..3b75c81 100644 --- a/Masa.Utils.sln +++ b/Masa.Utils.sln @@ -103,9 +103,9 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Masa.Utils.Extensions.Valid EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Masa.Utils.Security.Authentication.OpenIdConnect", "src\Security\Masa.Utils.Security.Authentication.OpenIdConnect\Masa.Utils.Security.Authentication.OpenIdConnect.csproj", "{D17B5B36-5773-4827-9D5D-44390DF666CA}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Masa.Utils.Data.Prometheus.Test", "test\Masa.Utils.Data.Promethus.Test\Masa.Utils.Data.Prometheus.Test.csproj", "{AC19E221-D3CF-49E9-8E41-A7580C0736AA}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Masa.Utils.Data.Prometheus", "src\Data\Masa.Utils.Data.Prometheus\Masa.Utils.Data.Prometheus.csproj", "{81E8A8F5-91EA-43F2-9B19-83B85EED7DB7}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Masa.Utils.Data.Prometheus", "src\Data\Masa.Utils.Data.Promethus\Masa.Utils.Data.Prometheus.csproj", "{B108BA38-AC93-4983-8361-43BF819985C7}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Masa.Utils.Data.Prometheus.Test", "test\Masa.Utils.Data.Prometheus.Test\Masa.Utils.Data.Prometheus.Test.csproj", "{CAB4132B-82E4-4B37-AF05-7F446DE3AF04}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -253,14 +253,14 @@ Global {D17B5B36-5773-4827-9D5D-44390DF666CA}.Debug|Any CPU.Build.0 = Debug|Any CPU {D17B5B36-5773-4827-9D5D-44390DF666CA}.Release|Any CPU.ActiveCfg = Release|Any CPU {D17B5B36-5773-4827-9D5D-44390DF666CA}.Release|Any CPU.Build.0 = Release|Any CPU - {AC19E221-D3CF-49E9-8E41-A7580C0736AA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {AC19E221-D3CF-49E9-8E41-A7580C0736AA}.Debug|Any CPU.Build.0 = Debug|Any CPU - {AC19E221-D3CF-49E9-8E41-A7580C0736AA}.Release|Any CPU.ActiveCfg = Release|Any CPU - {AC19E221-D3CF-49E9-8E41-A7580C0736AA}.Release|Any CPU.Build.0 = Release|Any CPU - {B108BA38-AC93-4983-8361-43BF819985C7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B108BA38-AC93-4983-8361-43BF819985C7}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B108BA38-AC93-4983-8361-43BF819985C7}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B108BA38-AC93-4983-8361-43BF819985C7}.Release|Any CPU.Build.0 = Release|Any CPU + {81E8A8F5-91EA-43F2-9B19-83B85EED7DB7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {81E8A8F5-91EA-43F2-9B19-83B85EED7DB7}.Debug|Any CPU.Build.0 = Debug|Any CPU + {81E8A8F5-91EA-43F2-9B19-83B85EED7DB7}.Release|Any CPU.ActiveCfg = Release|Any CPU + {81E8A8F5-91EA-43F2-9B19-83B85EED7DB7}.Release|Any CPU.Build.0 = Release|Any CPU + {CAB4132B-82E4-4B37-AF05-7F446DE3AF04}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {CAB4132B-82E4-4B37-AF05-7F446DE3AF04}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CAB4132B-82E4-4B37-AF05-7F446DE3AF04}.Release|Any CPU.ActiveCfg = Release|Any CPU + {CAB4132B-82E4-4B37-AF05-7F446DE3AF04}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -311,8 +311,8 @@ Global {533BCE80-61BC-443A-95D3-2C6328921ED8} = {B2DA607D-4A39-4F0C-A9B3-DD9A061B0B4E} {B0E3CA19-C101-4E30-9401-C017B7088F4E} = {533BCE80-61BC-443A-95D3-2C6328921ED8} {D17B5B36-5773-4827-9D5D-44390DF666CA} = {4FB3BD6D-D4C1-4BEF-AD62-8FD6EAEEB4DF} - {AC19E221-D3CF-49E9-8E41-A7580C0736AA} = {4F908878-0EB8-43E4-96E4-8B1F32E9B635} - {B108BA38-AC93-4983-8361-43BF819985C7} = {F844C2A1-C36D-400E-A0D8-7658EF9C3B93} + {81E8A8F5-91EA-43F2-9B19-83B85EED7DB7} = {F844C2A1-C36D-400E-A0D8-7658EF9C3B93} + {CAB4132B-82E4-4B37-AF05-7F446DE3AF04} = {4F908878-0EB8-43E4-96E4-8B1F32E9B635} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {D7DAA0E6-098F-4B18-8775-64FDA96F1FF0} diff --git a/src/Data/Masa.Utils.Data.Promethus/Enums/ResultStatuses.cs b/src/Data/Masa.Utils.Data.Prometheus/Enums/ResultStatuses.cs similarity index 100% rename from src/Data/Masa.Utils.Data.Promethus/Enums/ResultStatuses.cs rename to src/Data/Masa.Utils.Data.Prometheus/Enums/ResultStatuses.cs diff --git a/src/Data/Masa.Utils.Data.Promethus/Enums/ResultTypes.cs b/src/Data/Masa.Utils.Data.Prometheus/Enums/ResultTypes.cs similarity index 100% rename from src/Data/Masa.Utils.Data.Promethus/Enums/ResultTypes.cs rename to src/Data/Masa.Utils.Data.Prometheus/Enums/ResultTypes.cs diff --git a/src/Data/Masa.Utils.Data.Promethus/Extensions/CallerProviderExtensions.cs b/src/Data/Masa.Utils.Data.Prometheus/Extensions/CallerProviderExtensions.cs similarity index 100% rename from src/Data/Masa.Utils.Data.Promethus/Extensions/CallerProviderExtensions.cs rename to src/Data/Masa.Utils.Data.Prometheus/Extensions/CallerProviderExtensions.cs diff --git a/src/Data/Masa.Utils.Data.Promethus/Extensions/ObjectExtensions.cs b/src/Data/Masa.Utils.Data.Prometheus/Extensions/ObjectExtensions.cs similarity index 100% rename from src/Data/Masa.Utils.Data.Promethus/Extensions/ObjectExtensions.cs rename to src/Data/Masa.Utils.Data.Prometheus/Extensions/ObjectExtensions.cs diff --git a/src/Data/Masa.Utils.Data.Promethus/Extensions/StringExtensions.cs b/src/Data/Masa.Utils.Data.Prometheus/Extensions/StringExtensions.cs similarity index 100% rename from src/Data/Masa.Utils.Data.Promethus/Extensions/StringExtensions.cs rename to src/Data/Masa.Utils.Data.Prometheus/Extensions/StringExtensions.cs diff --git a/src/Data/Masa.Utils.Data.Promethus/IMasaPromethusClient.cs b/src/Data/Masa.Utils.Data.Prometheus/IMasaPromethusClient.cs similarity index 100% rename from src/Data/Masa.Utils.Data.Promethus/IMasaPromethusClient.cs rename to src/Data/Masa.Utils.Data.Prometheus/IMasaPromethusClient.cs diff --git a/src/Data/Masa.Utils.Data.Promethus/Masa.Utils.Data.Prometheus.csproj b/src/Data/Masa.Utils.Data.Prometheus/Masa.Utils.Data.Prometheus.csproj similarity index 100% rename from src/Data/Masa.Utils.Data.Promethus/Masa.Utils.Data.Prometheus.csproj rename to src/Data/Masa.Utils.Data.Prometheus/Masa.Utils.Data.Prometheus.csproj diff --git a/src/Data/Masa.Utils.Data.Promethus/MasaPrometheusClient.cs b/src/Data/Masa.Utils.Data.Prometheus/MasaPrometheusClient.cs similarity index 100% rename from src/Data/Masa.Utils.Data.Promethus/MasaPrometheusClient.cs rename to src/Data/Masa.Utils.Data.Prometheus/MasaPrometheusClient.cs diff --git a/src/Data/Masa.Utils.Data.Promethus/Model/Reponse/Exemplar/ExemplarResultResponse.cs b/src/Data/Masa.Utils.Data.Prometheus/Model/Reponse/Exemplar/ExemplarResultResponse.cs similarity index 100% rename from src/Data/Masa.Utils.Data.Promethus/Model/Reponse/Exemplar/ExemplarResultResponse.cs rename to src/Data/Masa.Utils.Data.Prometheus/Model/Reponse/Exemplar/ExemplarResultResponse.cs diff --git a/src/Data/Masa.Utils.Data.Promethus/Model/Reponse/MetaData/LabelResultResponse.cs b/src/Data/Masa.Utils.Data.Prometheus/Model/Reponse/MetaData/LabelResultResponse.cs similarity index 100% rename from src/Data/Masa.Utils.Data.Promethus/Model/Reponse/MetaData/LabelResultResponse.cs rename to src/Data/Masa.Utils.Data.Prometheus/Model/Reponse/MetaData/LabelResultResponse.cs diff --git a/src/Data/Masa.Utils.Data.Promethus/Model/Reponse/MetaData/SeriesResultResponse.cs b/src/Data/Masa.Utils.Data.Prometheus/Model/Reponse/MetaData/SeriesResultResponse.cs similarity index 100% rename from src/Data/Masa.Utils.Data.Promethus/Model/Reponse/MetaData/SeriesResultResponse.cs rename to src/Data/Masa.Utils.Data.Prometheus/Model/Reponse/MetaData/SeriesResultResponse.cs diff --git a/src/Data/Masa.Utils.Data.Promethus/Model/Reponse/Query/QueryResultCommonResponse.cs b/src/Data/Masa.Utils.Data.Prometheus/Model/Reponse/Query/QueryResultCommonResponse.cs similarity index 100% rename from src/Data/Masa.Utils.Data.Promethus/Model/Reponse/Query/QueryResultCommonResponse.cs rename to src/Data/Masa.Utils.Data.Prometheus/Model/Reponse/Query/QueryResultCommonResponse.cs diff --git a/src/Data/Masa.Utils.Data.Promethus/Model/Reponse/Query/QueryResultDataResponse.cs b/src/Data/Masa.Utils.Data.Prometheus/Model/Reponse/Query/QueryResultDataResponse.cs similarity index 100% rename from src/Data/Masa.Utils.Data.Promethus/Model/Reponse/Query/QueryResultDataResponse.cs rename to src/Data/Masa.Utils.Data.Prometheus/Model/Reponse/Query/QueryResultDataResponse.cs diff --git a/src/Data/Masa.Utils.Data.Promethus/Model/Reponse/Query/QueryResultInstantVectorResponse.cs b/src/Data/Masa.Utils.Data.Prometheus/Model/Reponse/Query/QueryResultInstantVectorResponse.cs similarity index 100% rename from src/Data/Masa.Utils.Data.Promethus/Model/Reponse/Query/QueryResultInstantVectorResponse.cs rename to src/Data/Masa.Utils.Data.Prometheus/Model/Reponse/Query/QueryResultInstantVectorResponse.cs diff --git a/src/Data/Masa.Utils.Data.Promethus/Model/Reponse/Query/QueryResultMatrixRangeResponse.cs b/src/Data/Masa.Utils.Data.Prometheus/Model/Reponse/Query/QueryResultMatrixRangeResponse.cs similarity index 100% rename from src/Data/Masa.Utils.Data.Promethus/Model/Reponse/Query/QueryResultMatrixRangeResponse.cs rename to src/Data/Masa.Utils.Data.Prometheus/Model/Reponse/Query/QueryResultMatrixRangeResponse.cs diff --git a/src/Data/Masa.Utils.Data.Promethus/Model/Reponse/ResultBaseResponse.cs b/src/Data/Masa.Utils.Data.Prometheus/Model/Reponse/ResultBaseResponse.cs similarity index 100% rename from src/Data/Masa.Utils.Data.Promethus/Model/Reponse/ResultBaseResponse.cs rename to src/Data/Masa.Utils.Data.Prometheus/Model/Reponse/ResultBaseResponse.cs diff --git a/src/Data/Masa.Utils.Data.Promethus/Model/Request/LableValueQueryRequest.cs b/src/Data/Masa.Utils.Data.Prometheus/Model/Request/LableValueQueryRequest.cs similarity index 100% rename from src/Data/Masa.Utils.Data.Promethus/Model/Request/LableValueQueryRequest.cs rename to src/Data/Masa.Utils.Data.Prometheus/Model/Request/LableValueQueryRequest.cs diff --git a/src/Data/Masa.Utils.Data.Promethus/Model/Request/MetaDataQueryRequest.cs b/src/Data/Masa.Utils.Data.Prometheus/Model/Request/MetaDataQueryRequest.cs similarity index 100% rename from src/Data/Masa.Utils.Data.Promethus/Model/Request/MetaDataQueryRequest.cs rename to src/Data/Masa.Utils.Data.Prometheus/Model/Request/MetaDataQueryRequest.cs diff --git a/src/Data/Masa.Utils.Data.Promethus/Model/Request/QueryExemplarRequest.cs b/src/Data/Masa.Utils.Data.Prometheus/Model/Request/QueryExemplarRequest.cs similarity index 100% rename from src/Data/Masa.Utils.Data.Promethus/Model/Request/QueryExemplarRequest.cs rename to src/Data/Masa.Utils.Data.Prometheus/Model/Request/QueryExemplarRequest.cs diff --git a/src/Data/Masa.Utils.Data.Promethus/Model/Request/QueryRangeRequest.cs b/src/Data/Masa.Utils.Data.Prometheus/Model/Request/QueryRangeRequest.cs similarity index 100% rename from src/Data/Masa.Utils.Data.Promethus/Model/Request/QueryRangeRequest.cs rename to src/Data/Masa.Utils.Data.Prometheus/Model/Request/QueryRangeRequest.cs diff --git a/src/Data/Masa.Utils.Data.Promethus/Model/Request/QueryRequest.cs b/src/Data/Masa.Utils.Data.Prometheus/Model/Request/QueryRequest.cs similarity index 100% rename from src/Data/Masa.Utils.Data.Promethus/Model/Request/QueryRequest.cs rename to src/Data/Masa.Utils.Data.Prometheus/Model/Request/QueryRequest.cs diff --git a/src/Data/Masa.Utils.Data.Promethus/README.md b/src/Data/Masa.Utils.Data.Prometheus/README.md similarity index 100% rename from src/Data/Masa.Utils.Data.Promethus/README.md rename to src/Data/Masa.Utils.Data.Prometheus/README.md diff --git a/src/Data/Masa.Utils.Data.Promethus/README.zh-CN.md b/src/Data/Masa.Utils.Data.Prometheus/README.zh-CN.md similarity index 100% rename from src/Data/Masa.Utils.Data.Promethus/README.zh-CN.md rename to src/Data/Masa.Utils.Data.Prometheus/README.zh-CN.md diff --git a/src/Data/Masa.Utils.Data.Promethus/ServiceCollectionExtensions.cs b/src/Data/Masa.Utils.Data.Prometheus/ServiceCollectionExtensions.cs similarity index 100% rename from src/Data/Masa.Utils.Data.Promethus/ServiceCollectionExtensions.cs rename to src/Data/Masa.Utils.Data.Prometheus/ServiceCollectionExtensions.cs diff --git a/src/Data/Masa.Utils.Data.Promethus/_Imports.cs b/src/Data/Masa.Utils.Data.Prometheus/_Imports.cs similarity index 100% rename from src/Data/Masa.Utils.Data.Promethus/_Imports.cs rename to src/Data/Masa.Utils.Data.Prometheus/_Imports.cs diff --git a/test/Masa.Utils.Data.Promethus.Test/Extensions/ObjectExtensionsTests.cs b/test/Masa.Utils.Data.Prometheus.Test/Extensions/ObjectExtensionsTests.cs similarity index 100% rename from test/Masa.Utils.Data.Promethus.Test/Extensions/ObjectExtensionsTests.cs rename to test/Masa.Utils.Data.Prometheus.Test/Extensions/ObjectExtensionsTests.cs diff --git a/test/Masa.Utils.Data.Promethus.Test/Extensions/StringExtensionsTests.cs b/test/Masa.Utils.Data.Prometheus.Test/Extensions/StringExtensionsTests.cs similarity index 100% rename from test/Masa.Utils.Data.Promethus.Test/Extensions/StringExtensionsTests.cs rename to test/Masa.Utils.Data.Prometheus.Test/Extensions/StringExtensionsTests.cs diff --git a/test/Masa.Utils.Data.Promethus.Test/Masa.Utils.Data.Prometheus.Test.csproj b/test/Masa.Utils.Data.Prometheus.Test/Masa.Utils.Data.Prometheus.Test.csproj similarity index 93% rename from test/Masa.Utils.Data.Promethus.Test/Masa.Utils.Data.Prometheus.Test.csproj rename to test/Masa.Utils.Data.Prometheus.Test/Masa.Utils.Data.Prometheus.Test.csproj index f2547f1..2b72548 100644 --- a/test/Masa.Utils.Data.Promethus.Test/Masa.Utils.Data.Prometheus.Test.csproj +++ b/test/Masa.Utils.Data.Prometheus.Test/Masa.Utils.Data.Prometheus.Test.csproj @@ -15,7 +15,7 @@ - + diff --git a/test/Masa.Utils.Data.Promethus.Test/MasaPromethusClientTests.cs b/test/Masa.Utils.Data.Prometheus.Test/MasaPromethusClientTests.cs similarity index 96% rename from test/Masa.Utils.Data.Promethus.Test/MasaPromethusClientTests.cs rename to test/Masa.Utils.Data.Prometheus.Test/MasaPromethusClientTests.cs index 63aaa75..ad48fdf 100644 --- a/test/Masa.Utils.Data.Promethus.Test/MasaPromethusClientTests.cs +++ b/test/Masa.Utils.Data.Prometheus.Test/MasaPromethusClientTests.cs @@ -36,14 +36,13 @@ public async Task TestQueryVectorAsync() Query = "up" }); - if (result.Data.Result != null) + if (result != null && result.Data != null && result.Data.Result != null) { var data = result.Data.Result as QueryResultInstantVectorResponse[]; Assert.IsNotNull(data); Assert.IsNotNull(data[0].Metric); Assert.IsNotNull(data[0].Value); - Assert.IsNotNull(data[0].Metric.Keys); Assert.AreEqual(2, data[0].Value.Length); } @@ -90,7 +89,6 @@ public async Task TestLabelsQueryAsync() var result = await _client.LabelsQueryAsync(default!); Assert.IsNotNull(result); Assert.AreEqual(result.Status, ResultStatuses.Success); - Assert.IsTrue(result.Data.Count() > 0); } [TestMethod] @@ -99,7 +97,6 @@ public async Task TestLabelValuesQueryAsync() var result = await _client.LabelValuesQueryAsync(new LableValueQueryRequest()); Assert.IsNotNull(result); Assert.AreEqual(result.Status, ResultStatuses.Success); - Assert.IsTrue(result.Data.Count() > 0); } [TestMethod] diff --git a/test/Masa.Utils.Data.Promethus.Test/UserStruct.cs b/test/Masa.Utils.Data.Prometheus.Test/UserStruct.cs similarity index 100% rename from test/Masa.Utils.Data.Promethus.Test/UserStruct.cs rename to test/Masa.Utils.Data.Prometheus.Test/UserStruct.cs diff --git a/test/Masa.Utils.Data.Promethus.Test/_Imports.cs b/test/Masa.Utils.Data.Prometheus.Test/_Imports.cs similarity index 100% rename from test/Masa.Utils.Data.Promethus.Test/_Imports.cs rename to test/Masa.Utils.Data.Prometheus.Test/_Imports.cs From 7ae8db69b8c3c946c70ae0114655761073e57c01 Mon Sep 17 00:00:00 2001 From: qinyouzeng Date: Thu, 30 Jun 2022 15:14:34 +0800 Subject: [PATCH 45/48] chore: file rename --- .../{IMasaPromethusClient.cs => IMasaPrometheusClient.cs} | 0 .../{MasaPromethusClientTests.cs => MasaPrometheusClientTests.cs} | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename src/Data/Masa.Utils.Data.Prometheus/{IMasaPromethusClient.cs => IMasaPrometheusClient.cs} (100%) rename test/Masa.Utils.Data.Prometheus.Test/{MasaPromethusClientTests.cs => MasaPrometheusClientTests.cs} (100%) diff --git a/src/Data/Masa.Utils.Data.Prometheus/IMasaPromethusClient.cs b/src/Data/Masa.Utils.Data.Prometheus/IMasaPrometheusClient.cs similarity index 100% rename from src/Data/Masa.Utils.Data.Prometheus/IMasaPromethusClient.cs rename to src/Data/Masa.Utils.Data.Prometheus/IMasaPrometheusClient.cs diff --git a/test/Masa.Utils.Data.Prometheus.Test/MasaPromethusClientTests.cs b/test/Masa.Utils.Data.Prometheus.Test/MasaPrometheusClientTests.cs similarity index 100% rename from test/Masa.Utils.Data.Prometheus.Test/MasaPromethusClientTests.cs rename to test/Masa.Utils.Data.Prometheus.Test/MasaPrometheusClientTests.cs From fcd34478dd51dff9c99afba24cadc74190f059c9 Mon Sep 17 00:00:00 2001 From: qinyouzeng Date: Thu, 30 Jun 2022 15:27:43 +0800 Subject: [PATCH 46/48] chore: class split --- .../Model/Reponse/Exemplar/ExemplarDataModel.cs | 13 +++++++++++++ .../Model/Reponse/Exemplar/ExemplarModel.cs | 11 +++++++++++ .../Reponse/Exemplar/ExemplarResultResponse.cs | 16 ---------------- .../ServiceCollectionExtensions.cs | 6 +++--- 4 files changed, 27 insertions(+), 19 deletions(-) create mode 100644 src/Data/Masa.Utils.Data.Prometheus/Model/Reponse/Exemplar/ExemplarDataModel.cs create mode 100644 src/Data/Masa.Utils.Data.Prometheus/Model/Reponse/Exemplar/ExemplarModel.cs diff --git a/src/Data/Masa.Utils.Data.Prometheus/Model/Reponse/Exemplar/ExemplarDataModel.cs b/src/Data/Masa.Utils.Data.Prometheus/Model/Reponse/Exemplar/ExemplarDataModel.cs new file mode 100644 index 0000000..2777b07 --- /dev/null +++ b/src/Data/Masa.Utils.Data.Prometheus/Model/Reponse/Exemplar/ExemplarDataModel.cs @@ -0,0 +1,13 @@ +// Copyright (c) MASA Stack All rights reserved. +// Licensed under the MIT License. See LICENSE.txt in the project root for license information. + +namespace Masa.Utils.Data.Prometheus.Model; + +public class ExemplarModel +{ + public IDictionary? Labels { get; set; } + + public string? Value { get; set; } + + public float TimeStamp { get; set; } +} diff --git a/src/Data/Masa.Utils.Data.Prometheus/Model/Reponse/Exemplar/ExemplarModel.cs b/src/Data/Masa.Utils.Data.Prometheus/Model/Reponse/Exemplar/ExemplarModel.cs new file mode 100644 index 0000000..84ff5c6 --- /dev/null +++ b/src/Data/Masa.Utils.Data.Prometheus/Model/Reponse/Exemplar/ExemplarModel.cs @@ -0,0 +1,11 @@ +// Copyright (c) MASA Stack All rights reserved. +// Licensed under the MIT License. See LICENSE.txt in the project root for license information. + +namespace Masa.Utils.Data.Prometheus.Model; + +public class ExemplarDataModel +{ + public IDictionary? SeriesLabels { get; set; } + + public IEnumerable? Exemplars { get; set; } +} diff --git a/src/Data/Masa.Utils.Data.Prometheus/Model/Reponse/Exemplar/ExemplarResultResponse.cs b/src/Data/Masa.Utils.Data.Prometheus/Model/Reponse/Exemplar/ExemplarResultResponse.cs index 60745eb..c03e8ee 100644 --- a/src/Data/Masa.Utils.Data.Prometheus/Model/Reponse/Exemplar/ExemplarResultResponse.cs +++ b/src/Data/Masa.Utils.Data.Prometheus/Model/Reponse/Exemplar/ExemplarResultResponse.cs @@ -7,19 +7,3 @@ public class ExemplarResultResponse : ResultBaseResponse { public IEnumerable? Data { get; set; } } - -public class ExemplarModel -{ - public IDictionary? Labels { get; set; } - - public string? Value { get; set; } - - public float TimeStamp { get; set; } -} - -public class ExemplarDataModel -{ - public IDictionary? SeriesLabels { get; set; } - - public IEnumerable? Exemplars { get; set; } -} diff --git a/src/Data/Masa.Utils.Data.Prometheus/ServiceCollectionExtensions.cs b/src/Data/Masa.Utils.Data.Prometheus/ServiceCollectionExtensions.cs index 79e4494..3b1ca05 100644 --- a/src/Data/Masa.Utils.Data.Prometheus/ServiceCollectionExtensions.cs +++ b/src/Data/Masa.Utils.Data.Prometheus/ServiceCollectionExtensions.cs @@ -5,7 +5,7 @@ namespace Masa.Utils.Data.Prometheus; public static class ServiceCollectionExtensions { - private const string Prometheus_HTTP_CLIENT_NAME = "prometheus_client_name"; + private const string PROMETHEUS_HTTP_CLIENT_NAME = "prometheus_client_name"; public static IServiceCollection AddPrometheusClient(this IServiceCollection services, string url) { @@ -19,7 +19,7 @@ public static IServiceCollection AddPrometheusClient(this IServiceCollection ser builder.UseHttpClient(options => { options.BaseAddress = url; - options.Name = Prometheus_HTTP_CLIENT_NAME; + options.Name = PROMETHEUS_HTTP_CLIENT_NAME; }); }); @@ -31,7 +31,7 @@ public static IServiceCollection AddPrometheusClient(this IServiceCollection ser services.AddScoped(ServiceProvider => { - var caller = ServiceProvider.GetRequiredService().CreateClient(Prometheus_HTTP_CLIENT_NAME); + var caller = ServiceProvider.GetRequiredService().CreateClient(PROMETHEUS_HTTP_CLIENT_NAME); return new MasaPrometheusClient(caller, jsonOptions); }); return services; From e48c968d8efba1bd843c16335527fa0a0bb2e8e6 Mon Sep 17 00:00:00 2001 From: qinyouzeng Date: Tue, 5 Jul 2022 09:43:45 +0800 Subject: [PATCH 47/48] feat: close thorw friendly exception --- .../Extensions/CallerProviderExtensions.cs | 2 +- .../MasaPrometheusClientTests.cs | 60 +++++++++++++++---- 2 files changed, 48 insertions(+), 14 deletions(-) diff --git a/src/Data/Masa.Utils.Data.Prometheus/Extensions/CallerProviderExtensions.cs b/src/Data/Masa.Utils.Data.Prometheus/Extensions/CallerProviderExtensions.cs index e0d49e8..2f9f1b7 100644 --- a/src/Data/Masa.Utils.Data.Prometheus/Extensions/CallerProviderExtensions.cs +++ b/src/Data/Masa.Utils.Data.Prometheus/Extensions/CallerProviderExtensions.cs @@ -9,7 +9,7 @@ internal static class CallerProviderExtensions public static async Task GetAsync(this ICallerProvider caller, string url, object data) { var request = new HttpRequestMessage(HttpMethod.Get, $"{url}?{data.ToUrlParam()}"); - var response = await caller.SendAsync(request); + var response = await caller.SendAsync(request,autoThrowUserFriendlyException:false); return await response.Content.ReadAsStringAsync(); } } diff --git a/test/Masa.Utils.Data.Prometheus.Test/MasaPrometheusClientTests.cs b/test/Masa.Utils.Data.Prometheus.Test/MasaPrometheusClientTests.cs index ad48fdf..6b31e14 100644 --- a/test/Masa.Utils.Data.Prometheus.Test/MasaPrometheusClientTests.cs +++ b/test/Masa.Utils.Data.Prometheus.Test/MasaPrometheusClientTests.cs @@ -8,24 +8,41 @@ public class MasaPrometheusClientTests { private IMasaPrometheusClient _client; - [TestInitialize] - public void Initialize() + public MasaPrometheusClientTests() { IServiceCollection service = new ServiceCollection(); service.AddPrometheusClient("http://localhost:9090"); - _client = service.BuildServiceProvider().GetService(); + _client = service.BuildServiceProvider().GetService() ?? default!; } [TestMethod] - public async Task TestQueryAsync() + [DataRow(null)] + [DataRow("up")] + [DataRow("not_exists")] + [DataRow("error data")] + public async Task TestQueryAsync(string query) { var result = await _client.QueryAsync(new QueryRequest { - Query = "up" + Query = query }); + Assert.IsNotNull(result); - Assert.AreEqual(result.Status, ResultStatuses.Success); - Assert.IsNotNull(result.Data); + if (string.IsNullOrEmpty(query) || query.Contains(' ')) + { + Assert.AreEqual(result.Status, ResultStatuses.Error); + } + else + { + if (query == "not_exists") + { + Assert.IsFalse(result.Data?.Result?.Any()); + } + else + { + Assert.IsTrue(result.Data?.Result?.Any()); + } + } } [TestMethod] @@ -43,8 +60,6 @@ public async Task TestQueryVectorAsync() Assert.IsNotNull(data); Assert.IsNotNull(data[0].Metric); Assert.IsNotNull(data[0].Value); - Assert.IsNotNull(data[0].Metric.Keys); - Assert.AreEqual(2, data[0].Value.Length); } } @@ -84,11 +99,30 @@ public async Task TestSeriesQueryAsync() } [TestMethod] - public async Task TestLabelsQueryAsync() + [DataRow(null)] + [DataRow(new string[] { "up" })] + [DataRow(new string[] { "not_exists" })] + [DataRow(new string[] { "error data" })] + public async Task TestLabelsQueryAsync(IEnumerable matches) { - var result = await _client.LabelsQueryAsync(default!); - Assert.IsNotNull(result); - Assert.AreEqual(result.Status, ResultStatuses.Success); + var result = await _client.LabelsQueryAsync(new MetaDataQueryRequest { Match = matches }); + if (matches != null && matches.Any(s => s.Contains(' '))) + { + Assert.AreEqual(result.Status, ResultStatuses.Error); + Assert.IsNotNull(result.Error); + } + else + { + Assert.AreEqual(result.Status, ResultStatuses.Success); + if (matches == null || matches.Any(s => s == "up")) + { + Assert.IsTrue(result.Data?.Any()); + } + else + { + Assert.IsFalse(result.Data?.Any()); + } + } } [TestMethod] From 75e5a36fbefd58f6fe74333dc8c80d0cc1ff67c3 Mon Sep 17 00:00:00 2001 From: qinyouzeng Date: Tue, 19 Jul 2022 11:56:51 +0800 Subject: [PATCH 48/48] chore: code format --- .../Extensions/CallerProviderExtensions.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Data/Masa.Utils.Data.Prometheus/Extensions/CallerProviderExtensions.cs b/src/Data/Masa.Utils.Data.Prometheus/Extensions/CallerProviderExtensions.cs index 2f9f1b7..32c446a 100644 --- a/src/Data/Masa.Utils.Data.Prometheus/Extensions/CallerProviderExtensions.cs +++ b/src/Data/Masa.Utils.Data.Prometheus/Extensions/CallerProviderExtensions.cs @@ -9,7 +9,7 @@ internal static class CallerProviderExtensions public static async Task GetAsync(this ICallerProvider caller, string url, object data) { var request = new HttpRequestMessage(HttpMethod.Get, $"{url}?{data.ToUrlParam()}"); - var response = await caller.SendAsync(request,autoThrowUserFriendlyException:false); + var response = await caller.SendAsync(request, autoThrowUserFriendlyException: false); return await response.Content.ReadAsStringAsync(); } }