From 8e37ecb7378df0a3c6d37f4aa886e8fbb692bd42 Mon Sep 17 00:00:00 2001
From: Qinyouzeng <102203523+Qinyouzeng@users.noreply.github.com>
Date: Wed, 10 Apr 2024 12:04:13 +0800
Subject: [PATCH] feat: clickhouse query improved (#470)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
* feat:更改数据统计方式,源表实时计算改为统计表查询
---
Masa.Tsc.sln | 58 ++
.../Masa.Tsc.ApiGateways.Caller.csproj | 4 +-
.../Extensions/DictionaryExtenistions.cs | 35 +
...ldingBlocks.StackSdks.Tsc.Contracts.csproj | 13 +
.../Model/Aggregate/AggregateTypes.cs | 14 +
.../Aggregate/SimpleAggregateRequestDto.cs | 25 +
.../Model/BaseRequestDto.cs | 29 +
.../Model/ConditionTypes.cs | 20 +
.../Model/FieldConditionDto.cs | 13 +
.../Model/FieldOrderDto.cs | 11 +
.../Model/MappingResponseDto.cs | 11 +
.../Model/Trace/TraceDatabaseResponseDto.cs | 80 +++
.../Model/Trace/TraceDtoKind.cs | 13 +
.../Model/Trace/TraceExceptionResponseDto.cs | 19 +
.../Model/Trace/TraceHttpResponseDto.cs | 83 +++
.../Model/Trace/TraceNetResponseDto.cs | 35 +
.../Model/Trace/TraceRequestAttrDto.cs | 21 +
.../Model/Trace/TraceResponseDto.cs | 111 +++
.../Service/ILogService.cs | 18 +
.../Service/ITraceService.cs | 22 +
.../_Imports.cs | 10 +
.../ApmClickhouseInit.cs | 129 ++++
.../ApmClickhouseServiceExtensions.cs | 21 +
.../Cliclhouse/ClickhouseApmService.cs | 663 ++++++++++++++++++
.../Config/Constants.cs | 40 ++
.../Interfaces/IApmService.cs | 62 ++
...ontrib.StackSdks.Tsc.Apm.Clickhouse.csproj | 13 +
.../Models/ApmEnums.cs | 10 +
.../Models/Request/ApmEndpointRequestDto.cs | 9 +
.../Request/ApmTraceLatencyRequestDto.cs | 19 +
.../Models/Request/BaseApmRequestDto.cs | 37 +
.../Models/Response/EndpointChartDto.cs | 28 +
.../EndpointLatencyDistributionDto.cs | 11 +
.../Models/Response/EndpointListDto.cs | 11 +
.../Models/Response/ServiceListDto.cs | 66 ++
.../_Imports.cs | 20 +
.../Extensions/ClickhouseInit.cs | 311 ++++++++
.../Extensions/IDbConnectionExtensitions.cs | 537 ++++++++++++++
.../MasaTscCliclhouseExtensitions.cs | 21 +
.../LogService.cs | 28 +
...sa.Contrib.StackSdks.Tsc.Clickhouse.csproj | 20 +
.../Model/MASAStackClickhouseConnection.cs | 46 ++
.../TraceService.cs | 39 ++
.../_Imports.cs | 21 +
.../Constants/ElasticConstant.cs | 40 ++
.../Constants/LogTraceSetting.cs | 25 +
.../Constants/MappingConstant.cs | 16 +
.../Converters/LogResponseDtoConverter.cs | 35 +
.../Converters/TraceResponseDtoConverter.cs | 35 +
.../Extenistions/IElasticClientExtenstion.cs | 504 +++++++++++++
.../Extenistions/JsonElementExtensions.cs | 75 ++
.../Extenistions/ServiceExtenistion.cs | 139 ++++
.../LogService.cs | 31 +
...Contrib.StackSdks.Tsc.Elasticsearch.csproj | 20 +
.../Model/ElasticseachLogResponseDto.cs | 10 +
.../Model/ElasticseacherMappingResponse.cs | 17 +
.../Scroll/ElasticsearchScrollRequestDto.cs | 11 +
.../Scroll/ElasticsearchScrollResponseDto.cs | 9 +
.../Trace/ElasticseachTraceResponseDto.cs | 13 +
.../TraceService.cs | 41 ++
.../_Imports.cs | 22 +
.../Enums/ResultStatuses.cs | 10 +
.../Enums/ResultTypes.cs | 15 +
.../Extensions/HttpClientExtensions.cs | 30 +
.../Extensions/ObjectExtensions.cs | 142 ++++
.../Extensions/StringExtensions.cs | 20 +
.../IMasaPrometheusClient.cs | 21 +
.../Masa.Utils.Data.Prometheus.csproj | 12 +
.../MasaPrometheusClient.cs | 140 ++++
.../Reponse/Exemplar/ExemplarDataModel.cs | 13 +
.../Model/Reponse/Exemplar/ExemplarModel.cs | 11 +
.../Exemplar/ExemplarResultResponse.cs | 9 +
.../Reponse/MetaData/LabelResultResponse.cs | 9 +
.../Reponse/MetaData/MetaItemValueModel.cs | 22 +
.../Reponse/MetaData/MetaResultResponse.cs | 9 +
.../MetaData/MetricMetaQueryRequest.cs | 17 +
.../Reponse/MetaData/SeriesResultResponse.cs | 9 +
.../Query/QueryResultCommonResponse.cs | 9 +
.../Reponse/Query/QueryResultDataResponse.cs | 11 +
.../Query/QueryResultInstantVectorResponse.cs | 11 +
.../Query/QueryResultMatrixRangeResponse.cs | 11 +
.../Model/Reponse/ResultBaseResponse.cs | 15 +
.../Model/Request/LableValueQueryRequest.cs | 9 +
.../Model/Request/MetaDataQueryRequest.cs | 13 +
.../Model/Request/QueryExemplarRequest.cs | 14 +
.../Model/Request/QueryRangeRequest.cs | 17 +
.../Model/Request/QueryRequest.cs | 13 +
.../Masa.Utils.Data.Prometheus/README.md | 75 ++
.../README.zh-CN.md | 75 ++
.../ServiceCollectionExtensions.cs | 38 +
.../Masa.Utils.Data.Prometheus/_Imports.cs | 14 +
.../Extensions/AddTraceLogExtenstion.cs | 2 +-
.../Infrastructure/Const/ConfigConst.cs | 4 +
.../AppSettingConfiguration.cs | 2 +
.../Masa.Tsc.Service.Admin.csproj | 24 +-
.../Services/ApmService.cs | 3 +-
.../Services/TopologyService.cs | 11 +-
.../Apm/ApmInputSearchComponent.razor | 70 +-
.../Components/Apm/ApmLogView.razor.css | 1 -
.../Components/Apm/ApmSamplePage.razor.cs | 2 +-
.../Components/Apm/ApmSearchComponent.razor | 2 +-
.../Apm/ApmSearchComponent.razor.cs | 57 +-
.../Components/Apm/ApmTraceView.razor.css | 1 -
.../Pages/Apm/Endpoint.razor.cs | 8 +-
.../Pages/Apm/Service.razor | 1 +
.../Pages/Apm/Service.razor.cs | 2 +-
.../Apm/Services/ServiceEndpoints.razor.cs | 6 +-
.../Shared/ApmComponentBase.cs | 27 +-
src/Web/Masa.Tsc.Web.Admin.Server/Program.cs | 3 +-
109 files changed, 4828 insertions(+), 62 deletions(-)
create mode 100644 src/Infrastructure/Masa.BuildingBlocks.StackSdks.Tsc.Contracts/Extensions/DictionaryExtenistions.cs
create mode 100644 src/Infrastructure/Masa.BuildingBlocks.StackSdks.Tsc.Contracts/Masa.BuildingBlocks.StackSdks.Tsc.Contracts.csproj
create mode 100644 src/Infrastructure/Masa.BuildingBlocks.StackSdks.Tsc.Contracts/Model/Aggregate/AggregateTypes.cs
create mode 100644 src/Infrastructure/Masa.BuildingBlocks.StackSdks.Tsc.Contracts/Model/Aggregate/SimpleAggregateRequestDto.cs
create mode 100644 src/Infrastructure/Masa.BuildingBlocks.StackSdks.Tsc.Contracts/Model/BaseRequestDto.cs
create mode 100644 src/Infrastructure/Masa.BuildingBlocks.StackSdks.Tsc.Contracts/Model/ConditionTypes.cs
create mode 100644 src/Infrastructure/Masa.BuildingBlocks.StackSdks.Tsc.Contracts/Model/FieldConditionDto.cs
create mode 100644 src/Infrastructure/Masa.BuildingBlocks.StackSdks.Tsc.Contracts/Model/FieldOrderDto.cs
create mode 100644 src/Infrastructure/Masa.BuildingBlocks.StackSdks.Tsc.Contracts/Model/MappingResponseDto.cs
create mode 100644 src/Infrastructure/Masa.BuildingBlocks.StackSdks.Tsc.Contracts/Model/Trace/TraceDatabaseResponseDto.cs
create mode 100644 src/Infrastructure/Masa.BuildingBlocks.StackSdks.Tsc.Contracts/Model/Trace/TraceDtoKind.cs
create mode 100644 src/Infrastructure/Masa.BuildingBlocks.StackSdks.Tsc.Contracts/Model/Trace/TraceExceptionResponseDto.cs
create mode 100644 src/Infrastructure/Masa.BuildingBlocks.StackSdks.Tsc.Contracts/Model/Trace/TraceHttpResponseDto.cs
create mode 100644 src/Infrastructure/Masa.BuildingBlocks.StackSdks.Tsc.Contracts/Model/Trace/TraceNetResponseDto.cs
create mode 100644 src/Infrastructure/Masa.BuildingBlocks.StackSdks.Tsc.Contracts/Model/Trace/TraceRequestAttrDto.cs
create mode 100644 src/Infrastructure/Masa.BuildingBlocks.StackSdks.Tsc.Contracts/Model/Trace/TraceResponseDto.cs
create mode 100644 src/Infrastructure/Masa.BuildingBlocks.StackSdks.Tsc.Contracts/Service/ILogService.cs
create mode 100644 src/Infrastructure/Masa.BuildingBlocks.StackSdks.Tsc.Contracts/Service/ITraceService.cs
create mode 100644 src/Infrastructure/Masa.BuildingBlocks.StackSdks.Tsc.Contracts/_Imports.cs
create mode 100644 src/Infrastructure/Masa.Contrib.StackSdks.Tsc.Apm.Clickhouse/ApmClickhouseInit.cs
create mode 100644 src/Infrastructure/Masa.Contrib.StackSdks.Tsc.Apm.Clickhouse/ApmClickhouseServiceExtensions.cs
create mode 100644 src/Infrastructure/Masa.Contrib.StackSdks.Tsc.Apm.Clickhouse/Cliclhouse/ClickhouseApmService.cs
create mode 100644 src/Infrastructure/Masa.Contrib.StackSdks.Tsc.Apm.Clickhouse/Config/Constants.cs
create mode 100644 src/Infrastructure/Masa.Contrib.StackSdks.Tsc.Apm.Clickhouse/Interfaces/IApmService.cs
create mode 100644 src/Infrastructure/Masa.Contrib.StackSdks.Tsc.Apm.Clickhouse/Masa.Contrib.StackSdks.Tsc.Apm.Clickhouse.csproj
create mode 100644 src/Infrastructure/Masa.Contrib.StackSdks.Tsc.Apm.Clickhouse/Models/ApmEnums.cs
create mode 100644 src/Infrastructure/Masa.Contrib.StackSdks.Tsc.Apm.Clickhouse/Models/Request/ApmEndpointRequestDto.cs
create mode 100644 src/Infrastructure/Masa.Contrib.StackSdks.Tsc.Apm.Clickhouse/Models/Request/ApmTraceLatencyRequestDto.cs
create mode 100644 src/Infrastructure/Masa.Contrib.StackSdks.Tsc.Apm.Clickhouse/Models/Request/BaseApmRequestDto.cs
create mode 100644 src/Infrastructure/Masa.Contrib.StackSdks.Tsc.Apm.Clickhouse/Models/Response/EndpointChartDto.cs
create mode 100644 src/Infrastructure/Masa.Contrib.StackSdks.Tsc.Apm.Clickhouse/Models/Response/EndpointLatencyDistributionDto.cs
create mode 100644 src/Infrastructure/Masa.Contrib.StackSdks.Tsc.Apm.Clickhouse/Models/Response/EndpointListDto.cs
create mode 100644 src/Infrastructure/Masa.Contrib.StackSdks.Tsc.Apm.Clickhouse/Models/Response/ServiceListDto.cs
create mode 100644 src/Infrastructure/Masa.Contrib.StackSdks.Tsc.Apm.Clickhouse/_Imports.cs
create mode 100644 src/Infrastructure/Masa.Contrib.StackSdks.Tsc.Clickhouse/Extensions/ClickhouseInit.cs
create mode 100644 src/Infrastructure/Masa.Contrib.StackSdks.Tsc.Clickhouse/Extensions/IDbConnectionExtensitions.cs
create mode 100644 src/Infrastructure/Masa.Contrib.StackSdks.Tsc.Clickhouse/Extensions/MasaTscCliclhouseExtensitions.cs
create mode 100644 src/Infrastructure/Masa.Contrib.StackSdks.Tsc.Clickhouse/LogService.cs
create mode 100644 src/Infrastructure/Masa.Contrib.StackSdks.Tsc.Clickhouse/Masa.Contrib.StackSdks.Tsc.Clickhouse.csproj
create mode 100644 src/Infrastructure/Masa.Contrib.StackSdks.Tsc.Clickhouse/Model/MASAStackClickhouseConnection.cs
create mode 100644 src/Infrastructure/Masa.Contrib.StackSdks.Tsc.Clickhouse/TraceService.cs
create mode 100644 src/Infrastructure/Masa.Contrib.StackSdks.Tsc.Clickhouse/_Imports.cs
create mode 100644 src/Infrastructure/Masa.Contrib.StackSdks.Tsc.Elasticsearch/Constants/ElasticConstant.cs
create mode 100644 src/Infrastructure/Masa.Contrib.StackSdks.Tsc.Elasticsearch/Constants/LogTraceSetting.cs
create mode 100644 src/Infrastructure/Masa.Contrib.StackSdks.Tsc.Elasticsearch/Constants/MappingConstant.cs
create mode 100644 src/Infrastructure/Masa.Contrib.StackSdks.Tsc.Elasticsearch/Converters/LogResponseDtoConverter.cs
create mode 100644 src/Infrastructure/Masa.Contrib.StackSdks.Tsc.Elasticsearch/Converters/TraceResponseDtoConverter.cs
create mode 100644 src/Infrastructure/Masa.Contrib.StackSdks.Tsc.Elasticsearch/Extenistions/IElasticClientExtenstion.cs
create mode 100644 src/Infrastructure/Masa.Contrib.StackSdks.Tsc.Elasticsearch/Extenistions/JsonElementExtensions.cs
create mode 100644 src/Infrastructure/Masa.Contrib.StackSdks.Tsc.Elasticsearch/Extenistions/ServiceExtenistion.cs
create mode 100644 src/Infrastructure/Masa.Contrib.StackSdks.Tsc.Elasticsearch/LogService.cs
create mode 100644 src/Infrastructure/Masa.Contrib.StackSdks.Tsc.Elasticsearch/Masa.Contrib.StackSdks.Tsc.Elasticsearch.csproj
create mode 100644 src/Infrastructure/Masa.Contrib.StackSdks.Tsc.Elasticsearch/Model/ElasticseachLogResponseDto.cs
create mode 100644 src/Infrastructure/Masa.Contrib.StackSdks.Tsc.Elasticsearch/Model/ElasticseacherMappingResponse.cs
create mode 100644 src/Infrastructure/Masa.Contrib.StackSdks.Tsc.Elasticsearch/Model/Scroll/ElasticsearchScrollRequestDto.cs
create mode 100644 src/Infrastructure/Masa.Contrib.StackSdks.Tsc.Elasticsearch/Model/Scroll/ElasticsearchScrollResponseDto.cs
create mode 100644 src/Infrastructure/Masa.Contrib.StackSdks.Tsc.Elasticsearch/Model/Trace/ElasticseachTraceResponseDto.cs
create mode 100644 src/Infrastructure/Masa.Contrib.StackSdks.Tsc.Elasticsearch/TraceService.cs
create mode 100644 src/Infrastructure/Masa.Contrib.StackSdks.Tsc.Elasticsearch/_Imports.cs
create mode 100644 src/Infrastructure/Masa.Utils.Data.Prometheus/Enums/ResultStatuses.cs
create mode 100644 src/Infrastructure/Masa.Utils.Data.Prometheus/Enums/ResultTypes.cs
create mode 100644 src/Infrastructure/Masa.Utils.Data.Prometheus/Extensions/HttpClientExtensions.cs
create mode 100644 src/Infrastructure/Masa.Utils.Data.Prometheus/Extensions/ObjectExtensions.cs
create mode 100644 src/Infrastructure/Masa.Utils.Data.Prometheus/Extensions/StringExtensions.cs
create mode 100644 src/Infrastructure/Masa.Utils.Data.Prometheus/IMasaPrometheusClient.cs
create mode 100644 src/Infrastructure/Masa.Utils.Data.Prometheus/Masa.Utils.Data.Prometheus.csproj
create mode 100644 src/Infrastructure/Masa.Utils.Data.Prometheus/MasaPrometheusClient.cs
create mode 100644 src/Infrastructure/Masa.Utils.Data.Prometheus/Model/Reponse/Exemplar/ExemplarDataModel.cs
create mode 100644 src/Infrastructure/Masa.Utils.Data.Prometheus/Model/Reponse/Exemplar/ExemplarModel.cs
create mode 100644 src/Infrastructure/Masa.Utils.Data.Prometheus/Model/Reponse/Exemplar/ExemplarResultResponse.cs
create mode 100644 src/Infrastructure/Masa.Utils.Data.Prometheus/Model/Reponse/MetaData/LabelResultResponse.cs
create mode 100644 src/Infrastructure/Masa.Utils.Data.Prometheus/Model/Reponse/MetaData/MetaItemValueModel.cs
create mode 100644 src/Infrastructure/Masa.Utils.Data.Prometheus/Model/Reponse/MetaData/MetaResultResponse.cs
create mode 100644 src/Infrastructure/Masa.Utils.Data.Prometheus/Model/Reponse/MetaData/MetricMetaQueryRequest.cs
create mode 100644 src/Infrastructure/Masa.Utils.Data.Prometheus/Model/Reponse/MetaData/SeriesResultResponse.cs
create mode 100644 src/Infrastructure/Masa.Utils.Data.Prometheus/Model/Reponse/Query/QueryResultCommonResponse.cs
create mode 100644 src/Infrastructure/Masa.Utils.Data.Prometheus/Model/Reponse/Query/QueryResultDataResponse.cs
create mode 100644 src/Infrastructure/Masa.Utils.Data.Prometheus/Model/Reponse/Query/QueryResultInstantVectorResponse.cs
create mode 100644 src/Infrastructure/Masa.Utils.Data.Prometheus/Model/Reponse/Query/QueryResultMatrixRangeResponse.cs
create mode 100644 src/Infrastructure/Masa.Utils.Data.Prometheus/Model/Reponse/ResultBaseResponse.cs
create mode 100644 src/Infrastructure/Masa.Utils.Data.Prometheus/Model/Request/LableValueQueryRequest.cs
create mode 100644 src/Infrastructure/Masa.Utils.Data.Prometheus/Model/Request/MetaDataQueryRequest.cs
create mode 100644 src/Infrastructure/Masa.Utils.Data.Prometheus/Model/Request/QueryExemplarRequest.cs
create mode 100644 src/Infrastructure/Masa.Utils.Data.Prometheus/Model/Request/QueryRangeRequest.cs
create mode 100644 src/Infrastructure/Masa.Utils.Data.Prometheus/Model/Request/QueryRequest.cs
create mode 100644 src/Infrastructure/Masa.Utils.Data.Prometheus/README.md
create mode 100644 src/Infrastructure/Masa.Utils.Data.Prometheus/README.zh-CN.md
create mode 100644 src/Infrastructure/Masa.Utils.Data.Prometheus/ServiceCollectionExtensions.cs
create mode 100644 src/Infrastructure/Masa.Utils.Data.Prometheus/_Imports.cs
diff --git a/Masa.Tsc.sln b/Masa.Tsc.sln
index 9e74df77..127181f6 100644
--- a/Masa.Tsc.sln
+++ b/Masa.Tsc.sln
@@ -41,6 +41,18 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Masa.Tsc.Service.Admin", "s
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Masa.Tsc.Web.Admin.Wasm", "src\Web\Masa.Tsc.Web.Admin.Wasm\Masa.Tsc.Web.Admin.Wasm.csproj", "{192AE8AB-9E20-44CB-895C-4F981179F92A}"
EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Infrastructure", "Infrastructure", "{386CA149-7280-4F1F-A064-4F3B9643C082}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Masa.Contrib.StackSdks.Tsc.Apm.Clickhouse", "src\Infrastructure\Masa.Contrib.StackSdks.Tsc.Apm.Clickhouse\Masa.Contrib.StackSdks.Tsc.Apm.Clickhouse.csproj", "{2F17FF6D-31C8-4D43-9918-B31DE9E8A826}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Masa.Contrib.StackSdks.Tsc.Clickhouse", "src\Infrastructure\Masa.Contrib.StackSdks.Tsc.Clickhouse\Masa.Contrib.StackSdks.Tsc.Clickhouse.csproj", "{FCED6C6F-3EC0-47A4-84CD-0392BB663999}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Masa.Contrib.StackSdks.Tsc.Elasticsearch", "src\Infrastructure\Masa.Contrib.StackSdks.Tsc.Elasticsearch\Masa.Contrib.StackSdks.Tsc.Elasticsearch.csproj", "{860A1867-2BC7-4AAD-82E8-55CD74C0F608}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Masa.BuildingBlocks.StackSdks.Tsc.Contracts", "src\Infrastructure\Masa.BuildingBlocks.StackSdks.Tsc.Contracts\Masa.BuildingBlocks.StackSdks.Tsc.Contracts.csproj", "{647CDA33-B497-47F7-A258-1F1831BF240A}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Masa.Utils.Data.Prometheus", "src\Infrastructure\Masa.Utils.Data.Prometheus\Masa.Utils.Data.Prometheus.csproj", "{7F3CD41F-35ED-46C9-8974-D064E73B9D19}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -104,6 +116,46 @@ Global
{192AE8AB-9E20-44CB-895C-4F981179F92A}.Release|Any CPU.Build.0 = Release|Any CPU
{192AE8AB-9E20-44CB-895C-4F981179F92A}.Release|x86.ActiveCfg = Release|Any CPU
{192AE8AB-9E20-44CB-895C-4F981179F92A}.Release|x86.Build.0 = Release|Any CPU
+ {2F17FF6D-31C8-4D43-9918-B31DE9E8A826}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {2F17FF6D-31C8-4D43-9918-B31DE9E8A826}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {2F17FF6D-31C8-4D43-9918-B31DE9E8A826}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {2F17FF6D-31C8-4D43-9918-B31DE9E8A826}.Debug|x86.Build.0 = Debug|Any CPU
+ {2F17FF6D-31C8-4D43-9918-B31DE9E8A826}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {2F17FF6D-31C8-4D43-9918-B31DE9E8A826}.Release|Any CPU.Build.0 = Release|Any CPU
+ {2F17FF6D-31C8-4D43-9918-B31DE9E8A826}.Release|x86.ActiveCfg = Release|Any CPU
+ {2F17FF6D-31C8-4D43-9918-B31DE9E8A826}.Release|x86.Build.0 = Release|Any CPU
+ {FCED6C6F-3EC0-47A4-84CD-0392BB663999}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {FCED6C6F-3EC0-47A4-84CD-0392BB663999}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {FCED6C6F-3EC0-47A4-84CD-0392BB663999}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {FCED6C6F-3EC0-47A4-84CD-0392BB663999}.Debug|x86.Build.0 = Debug|Any CPU
+ {FCED6C6F-3EC0-47A4-84CD-0392BB663999}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {FCED6C6F-3EC0-47A4-84CD-0392BB663999}.Release|Any CPU.Build.0 = Release|Any CPU
+ {FCED6C6F-3EC0-47A4-84CD-0392BB663999}.Release|x86.ActiveCfg = Release|Any CPU
+ {FCED6C6F-3EC0-47A4-84CD-0392BB663999}.Release|x86.Build.0 = Release|Any CPU
+ {860A1867-2BC7-4AAD-82E8-55CD74C0F608}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {860A1867-2BC7-4AAD-82E8-55CD74C0F608}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {860A1867-2BC7-4AAD-82E8-55CD74C0F608}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {860A1867-2BC7-4AAD-82E8-55CD74C0F608}.Debug|x86.Build.0 = Debug|Any CPU
+ {860A1867-2BC7-4AAD-82E8-55CD74C0F608}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {860A1867-2BC7-4AAD-82E8-55CD74C0F608}.Release|Any CPU.Build.0 = Release|Any CPU
+ {860A1867-2BC7-4AAD-82E8-55CD74C0F608}.Release|x86.ActiveCfg = Release|Any CPU
+ {860A1867-2BC7-4AAD-82E8-55CD74C0F608}.Release|x86.Build.0 = Release|Any CPU
+ {647CDA33-B497-47F7-A258-1F1831BF240A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {647CDA33-B497-47F7-A258-1F1831BF240A}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {647CDA33-B497-47F7-A258-1F1831BF240A}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {647CDA33-B497-47F7-A258-1F1831BF240A}.Debug|x86.Build.0 = Debug|Any CPU
+ {647CDA33-B497-47F7-A258-1F1831BF240A}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {647CDA33-B497-47F7-A258-1F1831BF240A}.Release|Any CPU.Build.0 = Release|Any CPU
+ {647CDA33-B497-47F7-A258-1F1831BF240A}.Release|x86.ActiveCfg = Release|Any CPU
+ {647CDA33-B497-47F7-A258-1F1831BF240A}.Release|x86.Build.0 = Release|Any CPU
+ {7F3CD41F-35ED-46C9-8974-D064E73B9D19}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {7F3CD41F-35ED-46C9-8974-D064E73B9D19}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {7F3CD41F-35ED-46C9-8974-D064E73B9D19}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {7F3CD41F-35ED-46C9-8974-D064E73B9D19}.Debug|x86.Build.0 = Debug|Any CPU
+ {7F3CD41F-35ED-46C9-8974-D064E73B9D19}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {7F3CD41F-35ED-46C9-8974-D064E73B9D19}.Release|Any CPU.Build.0 = Release|Any CPU
+ {7F3CD41F-35ED-46C9-8974-D064E73B9D19}.Release|x86.ActiveCfg = Release|Any CPU
+ {7F3CD41F-35ED-46C9-8974-D064E73B9D19}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -120,6 +172,12 @@ Global
{AD1AD4E4-5D65-4480-9A38-7B11FC367501} = {F3986DD3-0372-4929-B72A-09D93196541E}
{C9455D57-1672-4A97-9CF2-3B23706282A6} = {4A1D2DFA-D091-4CD2-B9CB-D7AAA795ABD9}
{192AE8AB-9E20-44CB-895C-4F981179F92A} = {F3986DD3-0372-4929-B72A-09D93196541E}
+ {386CA149-7280-4F1F-A064-4F3B9643C082} = {92F40AFA-8416-40BE-9893-D35E1924C69D}
+ {2F17FF6D-31C8-4D43-9918-B31DE9E8A826} = {386CA149-7280-4F1F-A064-4F3B9643C082}
+ {FCED6C6F-3EC0-47A4-84CD-0392BB663999} = {386CA149-7280-4F1F-A064-4F3B9643C082}
+ {860A1867-2BC7-4AAD-82E8-55CD74C0F608} = {386CA149-7280-4F1F-A064-4F3B9643C082}
+ {647CDA33-B497-47F7-A258-1F1831BF240A} = {386CA149-7280-4F1F-A064-4F3B9643C082}
+ {7F3CD41F-35ED-46C9-8974-D064E73B9D19} = {386CA149-7280-4F1F-A064-4F3B9643C082}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {B83BA2BA-19E5-41FB-A92A-16A03DA229E4}
diff --git a/src/ApiGateways/Masa.Tsc.ApiGateways.Caller/Masa.Tsc.ApiGateways.Caller.csproj b/src/ApiGateways/Masa.Tsc.ApiGateways.Caller/Masa.Tsc.ApiGateways.Caller.csproj
index 25cf50e5..3a7742d2 100644
--- a/src/ApiGateways/Masa.Tsc.ApiGateways.Caller/Masa.Tsc.ApiGateways.Caller.csproj
+++ b/src/ApiGateways/Masa.Tsc.ApiGateways.Caller/Masa.Tsc.ApiGateways.Caller.csproj
@@ -6,8 +6,7 @@
enable
-
-
+
@@ -19,5 +18,6 @@
+
diff --git a/src/Infrastructure/Masa.BuildingBlocks.StackSdks.Tsc.Contracts/Extensions/DictionaryExtenistions.cs b/src/Infrastructure/Masa.BuildingBlocks.StackSdks.Tsc.Contracts/Extensions/DictionaryExtenistions.cs
new file mode 100644
index 00000000..eb0fb2d3
--- /dev/null
+++ b/src/Infrastructure/Masa.BuildingBlocks.StackSdks.Tsc.Contracts/Extensions/DictionaryExtenistions.cs
@@ -0,0 +1,35 @@
+// Copyright (c) MASA Stack All rights reserved.
+// Licensed under the MIT License. See LICENSE.txt in the project root for license information.
+
+namespace System.Collections.Generic;
+
+public static class DictionaryExtenistions
+{
+ private static readonly JsonSerializerOptions _serializerOptions = new()
+ {
+ PropertyNamingPolicy = JsonNamingPolicy.CamelCase,
+ NumberHandling = JsonNumberHandling.AllowReadingFromString
+ };
+
+ public static Dictionary GroupByKeyPrefix(this Dictionary source, string prefix, Func