From c35e4abe469e17923839c16d359b6a8579c6202a Mon Sep 17 00:00:00 2001 From: Liujian <824010343@qq.com> Date: Fri, 12 Jul 2024 23:26:29 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8B=86=E5=88=86=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 2 + controller/external-app/external_app.go | 35 - controller/external-app/iml.go | 45 - controller/monitor/iml.go | 126 -- controller/monitor/statistic.go | 31 - controller/partition/iml.go | 18 +- controller/partition/partition.go | 9 +- controller/project/iml.go | 18 +- controller/project/project.go | 18 +- ....timestamp-1720797741902-0827b2d7ab219.mjs | 90 ++ go.mod | 5 +- go.sum | 63 - module/external-app/dto/input.go | 12 - module/external-app/dto/output.go | 21 - module/external-app/external_app.go | 35 - module/external-app/iml.go | 108 -- module/monitor/driver/driver.go | 24 - module/monitor/driver/influxdb-v2/executor.go | 363 ----- .../driver/influxdb-v2/flux/buckets_config.go | 32 - .../monitor/driver/influxdb-v2/flux/flux.go | 349 ---- .../flux/influxdb_config/buckets.yaml | 15 - .../flux/influxdb_config/tasks.yaml | 1418 ----------------- .../monitor/driver/influxdb-v2/flux/init.go | 18 - .../driver/influxdb-v2/flux/monitor_flux.go | 37 - .../driver/influxdb-v2/flux/tasks_config.go | 34 - .../monitor/driver/influxdb-v2/influxdb-v2.go | 61 - module/monitor/driver/influxdb-v2/util.go | 189 --- module/monitor/driver/manager.go | 61 - module/monitor/dto/input.go | 31 - module/monitor/dto/output.go | 129 -- module/monitor/iml.go | 750 --------- module/monitor/monitor.go | 60 - module/partition/impl.go | 208 +-- module/partition/partition.go | 6 +- module/project-monitor/dto/input.go | 1 - module/project-monitor/dto/output.go | 7 - module/project-monitor/iml.go | 48 - module/project-monitor/monitor.go | 20 - plugins/core/core.go | 34 +- plugins/core/external_app.go | 20 - plugins/core/monitor.go | 21 - plugins/core/partition.go | 6 +- plugins/core/project.go | 15 +- service/external-app/iml.go | 65 - service/external-app/model.go | 52 - service/external-app/service.go | 21 - service/monitor/iml.go | 257 --- service/monitor/model.go | 159 -- service/monitor/service.go | 54 - stores/external-app/model.go | 25 - stores/external-app/store.go | 21 - stores/monitor/model.go | 23 - stores/monitor/store.go | 22 - 53 files changed, 144 insertions(+), 5148 deletions(-) delete mode 100644 controller/external-app/external_app.go delete mode 100644 controller/external-app/iml.go delete mode 100644 controller/monitor/iml.go delete mode 100644 controller/monitor/statistic.go create mode 100644 frontend/packages/core/vite.config.ts.timestamp-1720797741902-0827b2d7ab219.mjs delete mode 100644 module/external-app/dto/input.go delete mode 100644 module/external-app/dto/output.go delete mode 100644 module/external-app/external_app.go delete mode 100644 module/external-app/iml.go delete mode 100644 module/monitor/driver/driver.go delete mode 100644 module/monitor/driver/influxdb-v2/executor.go delete mode 100644 module/monitor/driver/influxdb-v2/flux/buckets_config.go delete mode 100644 module/monitor/driver/influxdb-v2/flux/flux.go delete mode 100644 module/monitor/driver/influxdb-v2/flux/influxdb_config/buckets.yaml delete mode 100644 module/monitor/driver/influxdb-v2/flux/influxdb_config/tasks.yaml delete mode 100644 module/monitor/driver/influxdb-v2/flux/init.go delete mode 100644 module/monitor/driver/influxdb-v2/flux/monitor_flux.go delete mode 100644 module/monitor/driver/influxdb-v2/flux/tasks_config.go delete mode 100644 module/monitor/driver/influxdb-v2/influxdb-v2.go delete mode 100644 module/monitor/driver/influxdb-v2/util.go delete mode 100644 module/monitor/driver/manager.go delete mode 100644 module/monitor/dto/input.go delete mode 100644 module/monitor/dto/output.go delete mode 100644 module/monitor/iml.go delete mode 100644 module/monitor/monitor.go delete mode 100644 module/project-monitor/dto/input.go delete mode 100644 module/project-monitor/dto/output.go delete mode 100644 module/project-monitor/iml.go delete mode 100644 module/project-monitor/monitor.go delete mode 100644 plugins/core/external_app.go delete mode 100644 plugins/core/monitor.go delete mode 100644 service/external-app/iml.go delete mode 100644 service/external-app/model.go delete mode 100644 service/external-app/service.go delete mode 100644 service/monitor/iml.go delete mode 100644 service/monitor/model.go delete mode 100644 service/monitor/service.go delete mode 100644 stores/external-app/model.go delete mode 100644 stores/external-app/store.go delete mode 100644 stores/monitor/model.go delete mode 100644 stores/monitor/store.go diff --git a/.gitignore b/.gitignore index 0165c46..1c05109 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,5 @@ *.DS_Store /.idea/ /build/ +/apipark +/config.yml diff --git a/controller/external-app/external_app.go b/controller/external-app/external_app.go deleted file mode 100644 index a67befb..0000000 --- a/controller/external-app/external_app.go +++ /dev/null @@ -1,35 +0,0 @@ -package external_app - -import ( - "github.com/gin-gonic/gin" - "reflect" - - "github.com/eolinker/go-common/autowire" - - external_app_dto "github.com/eolinker/apipark/module/external-app/dto" -) - -type IExternalAppController interface { - // GetExternalApp get external app by id - GetExternalApp(ctx *gin.Context, id string) (*external_app_dto.ExternalApp, error) - // ListExternalApp list external app - ListExternalApp(ctx *gin.Context) ([]*external_app_dto.ExternalAppItem, error) - // CreateExternalApp create external app - CreateExternalApp(ctx *gin.Context, input *external_app_dto.CreateExternalApp) (*external_app_dto.ExternalApp, error) - // EditExternalApp edit external app - EditExternalApp(ctx *gin.Context, id string, input *external_app_dto.EditExternalApp) (*external_app_dto.ExternalApp, error) - // DeleteExternalApp delete external app - DeleteExternalApp(ctx *gin.Context, id string) error - // EnableExternalApp enable external app - EnableExternalApp(ctx *gin.Context, id string) error - // DisableExternalApp disable external app - DisableExternalApp(ctx *gin.Context, id string) error - // UpdateExternalAppToken update external app token - UpdateExternalAppToken(ctx *gin.Context, id string) (string, error) -} - -func init() { - autowire.Auto[IExternalAppController](func() reflect.Value { - return reflect.ValueOf(new(imlExternalAppController)) - }) -} diff --git a/controller/external-app/iml.go b/controller/external-app/iml.go deleted file mode 100644 index 2d7bbd1..0000000 --- a/controller/external-app/iml.go +++ /dev/null @@ -1,45 +0,0 @@ -package external_app - -import ( - external_app "github.com/eolinker/apipark/module/external-app" - external_app_dto "github.com/eolinker/apipark/module/external-app/dto" - "github.com/gin-gonic/gin" -) - -var _ IExternalAppController = (*imlExternalAppController)(nil) - -type imlExternalAppController struct { - module external_app.IExternalAppModule `autowired:""` -} - -func (i *imlExternalAppController) GetExternalApp(ctx *gin.Context, id string) (*external_app_dto.ExternalApp, error) { - return i.module.GetExternalApp(ctx, id) -} - -func (i *imlExternalAppController) ListExternalApp(ctx *gin.Context) ([]*external_app_dto.ExternalAppItem, error) { - return i.module.ListExternalApp(ctx) -} - -func (i *imlExternalAppController) CreateExternalApp(ctx *gin.Context, input *external_app_dto.CreateExternalApp) (*external_app_dto.ExternalApp, error) { - return i.module.CreateExternalApp(ctx, input) -} - -func (i *imlExternalAppController) EditExternalApp(ctx *gin.Context, id string, input *external_app_dto.EditExternalApp) (*external_app_dto.ExternalApp, error) { - return i.module.EditExternalApp(ctx, id, input) -} - -func (i *imlExternalAppController) DeleteExternalApp(ctx *gin.Context, id string) error { - return i.module.DeleteExternalApp(ctx, id) -} - -func (i *imlExternalAppController) EnableExternalApp(ctx *gin.Context, id string) error { - return i.module.EnableExternalApp(ctx, id) -} - -func (i *imlExternalAppController) DisableExternalApp(ctx *gin.Context, id string) error { - return i.module.DisableExternalApp(ctx, id) -} - -func (i *imlExternalAppController) UpdateExternalAppToken(ctx *gin.Context, id string) (string, error) { - return i.module.UpdateExternalAppToken(ctx, id) -} diff --git a/controller/monitor/iml.go b/controller/monitor/iml.go deleted file mode 100644 index 88a1a94..0000000 --- a/controller/monitor/iml.go +++ /dev/null @@ -1,126 +0,0 @@ -package monitor - -import ( - "fmt" - "time" - - "github.com/eolinker/apipark/module/monitor" - monitor_dto "github.com/eolinker/apipark/module/monitor/dto" - "github.com/gin-gonic/gin" -) - -var ( - _ IMonitorStatisticController = (*imlMonitorStatisticController)(nil) -) - -type imlMonitorStatisticController struct { - module monitor.IMonitorStatisticModule `autowired:""` -} - -func (i *imlMonitorStatisticController) InvokeTrendInner(ctx *gin.Context, partition string, dataType string, typ string, api string, provider string, subscriber string, input *monitor_dto.CommonInput) (*monitor_dto.MonInvokeCountTrend, string, error) { - if dataType == monitor_dto.DataTypeApi && typ == monitor_dto.DataTypeSubscriber || dataType == monitor_dto.DataTypeSubscriber && typ == monitor_dto.DataTypeApi { - return i.module.InvokeTrendWithSubscriberAndApi(ctx, partition, api, subscriber, input) - } else if dataType == monitor_dto.DataTypeApi && typ == monitor_dto.DataTypeProvider || dataType == monitor_dto.DataTypeProvider && typ == monitor_dto.DataTypeApi { - return i.module.InvokeTrendWithProviderAndApi(ctx, partition, provider, api, input) - } - return nil, "", fmt.Errorf("unsupported detail type: %s, data type is %s", typ, dataType) -} - -func (i *imlMonitorStatisticController) StatisticsInner(ctx *gin.Context, partition string, dataType string, typ string, id string, input *monitor_dto.StatisticInput) (interface{}, error) { - switch dataType { - case monitor_dto.DataTypeApi: - switch typ { - case monitor_dto.DataTypeProvider: - return i.module.ProviderStatisticsOnApi(ctx, partition, id, input) - case monitor_dto.DataTypeSubscriber: - return i.module.SubscriberStatisticsOnApi(ctx, partition, id, input) - default: - return nil, fmt.Errorf("unsupported detail type: %s, data type is %s", typ, dataType) - } - case monitor_dto.DataTypeProvider: - switch typ { - case monitor_dto.DataTypeApi: - return i.module.ApiStatisticsOnProvider(ctx, partition, id, input) - default: - return nil, fmt.Errorf("unsupported detail type: %s, data type is %s", typ, dataType) - } - case monitor_dto.DataTypeSubscriber: - switch typ { - case monitor_dto.DataTypeApi: - return i.module.ApiStatisticsOnSubscriber(ctx, partition, id, input) - default: - return nil, fmt.Errorf("unsupported detail type: %s, data type is %s", typ, dataType) - } - } - return nil, fmt.Errorf("unsupported data type: %s", dataType) - -} - -func (i *imlMonitorStatisticController) InvokeTrend(ctx *gin.Context, partition string, dataType string, id string, input *monitor_dto.CommonInput) (*monitor_dto.MonInvokeCountTrend, string, error) { - switch dataType { - case monitor_dto.DataTypeApi: - return i.module.APITrend(ctx, partition, id, input) - case monitor_dto.DataTypeProvider: - return i.module.ProviderTrend(ctx, partition, id, input) - case monitor_dto.DataTypeSubscriber: - return i.module.SubscriberTrend(ctx, partition, id, input) - default: - return nil, "", fmt.Errorf("unsupported data type: %s", dataType) - } -} - -func (i *imlMonitorStatisticController) Statistics(ctx *gin.Context, partition string, dataType string, input *monitor_dto.StatisticInput) (interface{}, error) { - switch dataType { - case monitor_dto.DataTypeApi: - return i.module.ApiStatistics(ctx, partition, input) - case monitor_dto.DataTypeProvider: - return i.module.ProviderStatistics(ctx, partition, input) - case monitor_dto.DataTypeSubscriber: - return i.module.SubscriberStatistics(ctx, partition, input) - default: - return nil, fmt.Errorf("unsupported data type: %s", dataType) - } -} - -func (i *imlMonitorStatisticController) OverviewMessageTrend(ctx *gin.Context, partition string, input *monitor_dto.CommonInput) ([]time.Time, []float64, []float64, string, error) { - trend, timeInterval, err := i.module.MessageTrend(ctx, partition, input) - if err != nil { - return nil, nil, nil, "", err - } - - return trend.Dates, trend.ReqMessage, trend.RespMessage, timeInterval, nil -} - -func (i *imlMonitorStatisticController) OverviewInvokeTrend(ctx *gin.Context, partition string, input *monitor_dto.CommonInput) ([]time.Time, []int64, []int64, []int64, []int64, []float64, []float64, string, error) { - trend, timeInterval, err := i.module.InvokeTrend(ctx, partition, input) - if err != nil { - return nil, nil, nil, nil, nil, nil, nil, "", err - } - - return trend.Date, trend.RequestTotal, trend.ProxyTotal, trend.Status4XX, trend.Status5XX, trend.RequestRate, trend.ProxyRate, timeInterval, nil -} - -func (i *imlMonitorStatisticController) Summary(ctx *gin.Context, partition string, input *monitor_dto.CommonInput) (*monitor_dto.MonSummaryOutput, *monitor_dto.MonSummaryOutput, error) { - requestSummary, err := i.module.RequestSummary(ctx, partition, input) - if err != nil { - return nil, nil, err - } - proxySummary, err := i.module.ProxySummary(ctx, partition, input) - if err != nil { - return nil, nil, err - } - return requestSummary, proxySummary, nil -} - -func (i *imlMonitorStatisticController) Top10(ctx *gin.Context, partition string, input *monitor_dto.Top10Input) (interface{}, error) { - switch input.DataType { - case monitor_dto.DataTypeApi: - return i.module.TopAPIStatistics(ctx, partition, 10, input.CommonInput) - case monitor_dto.DataTypeProvider: - return i.module.TopProviderStatistics(ctx, partition, 10, input.CommonInput) - case monitor_dto.DataTypeSubscriber: - return i.module.TopSubscriberStatistics(ctx, partition, 10, input.CommonInput) - default: - return nil, fmt.Errorf("unsupported data type: %s", input.DataType) - } -} diff --git a/controller/monitor/statistic.go b/controller/monitor/statistic.go deleted file mode 100644 index a022d81..0000000 --- a/controller/monitor/statistic.go +++ /dev/null @@ -1,31 +0,0 @@ -package monitor - -import ( - "reflect" - "time" - - "github.com/eolinker/go-common/autowire" - "github.com/gin-gonic/gin" - - monitor_dto "github.com/eolinker/apipark/module/monitor/dto" -) - -type IMonitorStatisticController interface { - Top10(ctx *gin.Context, partition string, input *monitor_dto.Top10Input) (interface{}, error) - Summary(ctx *gin.Context, partition string, input *monitor_dto.CommonInput) (*monitor_dto.MonSummaryOutput, *monitor_dto.MonSummaryOutput, error) - OverviewInvokeTrend(ctx *gin.Context, partition string, input *monitor_dto.CommonInput) ([]time.Time, []int64, []int64, []int64, []int64, []float64, []float64, string, error) - OverviewMessageTrend(ctx *gin.Context, partition string, input *monitor_dto.CommonInput) ([]time.Time, []float64, []float64, string, error) - - Statistics(ctx *gin.Context, partition string, dataType string, input *monitor_dto.StatisticInput) (interface{}, error) - - InvokeTrend(ctx *gin.Context, partition string, dataType string, id string, input *monitor_dto.CommonInput) (*monitor_dto.MonInvokeCountTrend, string, error) - - InvokeTrendInner(ctx *gin.Context, partition string, dataType string, typ string, api string, provider string, subscriber string, input *monitor_dto.CommonInput) (*monitor_dto.MonInvokeCountTrend, string, error) - StatisticsInner(ctx *gin.Context, partition string, dataType string, typ string, id string, input *monitor_dto.StatisticInput) (interface{}, error) -} - -func init() { - autowire.Auto[IMonitorStatisticController](func() reflect.Value { - return reflect.ValueOf(new(imlMonitorStatisticController)) - }) -} diff --git a/controller/partition/iml.go b/controller/partition/iml.go index 0802449..03a8c65 100644 --- a/controller/partition/iml.go +++ b/controller/partition/iml.go @@ -2,7 +2,7 @@ package partition import ( "errors" - + "github.com/eolinker/apipark/module/partition" parition_dto "github.com/eolinker/apipark/module/partition/dto" "github.com/eolinker/go-common/auto" @@ -29,22 +29,6 @@ func (p *imlPartition) Check(ctx *gin.Context, input *parition_dto.CheckCluster) return p.partitionModule.CheckCluster(ctx, input.Address) } -func (p *imlPartition) DeleteMonitorConfig(ctx *gin.Context, partition string) error { - return p.partitionModule.DeleteMonitorConfig(ctx, partition) -} - -func (p *imlPartition) MonitorPartitions(ctx *gin.Context) ([]*parition_dto.MonitorPartition, error) { - return p.partitionModule.MonitorPartitions(ctx) -} - -func (p *imlPartition) SaveMonitorConfig(ctx *gin.Context, partition string, cfg *parition_dto.SaveMonitorConfig) (*parition_dto.MonitorConfig, error) { - return p.partitionModule.SaveMonitorConfig(ctx, partition, cfg) -} - -func (p *imlPartition) GetMonitorConfig(ctx *gin.Context, partition string) (*parition_dto.MonitorConfig, error) { - return p.partitionModule.GetMonitorConfig(ctx, partition) -} - func (p *imlPartition) SimpleWithCluster(ctx *gin.Context) ([]*parition_dto.SimpleWithCluster, error) { return p.partitionModule.SimpleWithCluster(ctx) } diff --git a/controller/partition/partition.go b/controller/partition/partition.go index 2abdb26..05402b6 100644 --- a/controller/partition/partition.go +++ b/controller/partition/partition.go @@ -2,9 +2,9 @@ package partition import ( "reflect" - + parition_dto "github.com/eolinker/apipark/module/partition/dto" - + "github.com/eolinker/go-common/auto" "github.com/eolinker/go-common/autowire" "github.com/gin-gonic/gin" @@ -18,10 +18,7 @@ type IPartitionController interface { Update(ctx *gin.Context, id string, input *parition_dto.Edit) (*parition_dto.Detail, error) Delete(ctx *gin.Context, id string) (string, error) SimpleWithCluster(ctx *gin.Context) ([]*parition_dto.SimpleWithCluster, error) - SaveMonitorConfig(ctx *gin.Context, partition string, cfg *parition_dto.SaveMonitorConfig) (*parition_dto.MonitorConfig, error) - GetMonitorConfig(ctx *gin.Context, partition string) (*parition_dto.MonitorConfig, error) - DeleteMonitorConfig(ctx *gin.Context, partition string) error - MonitorPartitions(ctx *gin.Context) ([]*parition_dto.MonitorPartition, error) + Nodes(ctx *gin.Context, partitionId string) ([]*parition_dto.Node, error) ResetCluster(ctx *gin.Context, partitionId string, input *parition_dto.ResetCluster) ([]*parition_dto.Node, error) Check(ctx *gin.Context, input *parition_dto.CheckCluster) ([]*parition_dto.Node, error) diff --git a/controller/project/iml.go b/controller/project/iml.go index 422b3f5..9c56152 100644 --- a/controller/project/iml.go +++ b/controller/project/iml.go @@ -1,19 +1,15 @@ package project import ( - project_monitor "github.com/eolinker/apipark/module/project-monitor" - project_monitor_dto "github.com/eolinker/apipark/module/project-monitor/dto" - "github.com/eolinker/apipark/module/project" project_dto "github.com/eolinker/apipark/module/project/dto" "github.com/gin-gonic/gin" ) var ( - _ IProjectController = (*imlProjectController)(nil) - _ IProjectMemberController = (*imlProjectMemberController)(nil) - _ IProjectMonitorController = (*imlProjectMonitorController)(nil) - _ IAppController = (*imlAppController)(nil) + _ IProjectController = (*imlProjectController)(nil) + _ IProjectMemberController = (*imlProjectMemberController)(nil) + _ IAppController = (*imlAppController)(nil) ) type imlProjectController struct { @@ -80,14 +76,6 @@ func (i *imlProjectMemberController) EditProjectMember(ctx *gin.Context, pid str return i.module.EditProjectMember(ctx, pid, uid, edit.Roles) } -type imlProjectMonitorController struct { - module project_monitor.IProjectMonitor `autowired:""` -} - -func (i *imlProjectMonitorController) MonitorPartitions(ctx *gin.Context, pid string) ([]*project_monitor_dto.MonitorPartition, error) { - return i.module.MonitorPartitions(ctx, pid) -} - type imlAppController struct { module project.IAppModule `autowired:""` } diff --git a/controller/project/project.go b/controller/project/project.go index dfc3381..2d4beeb 100644 --- a/controller/project/project.go +++ b/controller/project/project.go @@ -2,12 +2,10 @@ package project import ( "reflect" - - project_monitor_dto "github.com/eolinker/apipark/module/project-monitor/dto" - + project_dto "github.com/eolinker/apipark/module/project/dto" "github.com/gin-gonic/gin" - + "github.com/eolinker/go-common/autowire" ) @@ -43,15 +41,10 @@ type IProjectMemberController interface { SimpleMembersToAdd(ctx *gin.Context, pid string, keyword string) ([]*project_dto.TeamMemberToAdd, error) } -type IProjectMonitorController interface { - // MonitorPartitions 获取项目监控分区列表 - MonitorPartitions(ctx *gin.Context, pid string) ([]*project_monitor_dto.MonitorPartition, error) -} - type IAppController interface { // CreateApp 创建应用 CreateApp(ctx *gin.Context, teamID string, project *project_dto.CreateApp) (*project_dto.App, error) - + UpdateApp(ctx *gin.Context, appId string, project *project_dto.UpdateApp) (*project_dto.App, error) SearchMyApps(ctx *gin.Context, teamId string, keyword string) ([]*project_dto.AppItem, error) // SimpleApps 获取简易项目列表 @@ -68,10 +61,7 @@ func init() { autowire.Auto[IProjectMemberController](func() reflect.Value { return reflect.ValueOf(new(imlProjectMemberController)) }) - autowire.Auto[IProjectMonitorController](func() reflect.Value { - return reflect.ValueOf(new(imlProjectMonitorController)) - }) - + autowire.Auto[IAppController](func() reflect.Value { return reflect.ValueOf(new(imlAppController)) }) diff --git a/frontend/packages/core/vite.config.ts.timestamp-1720797741902-0827b2d7ab219.mjs b/frontend/packages/core/vite.config.ts.timestamp-1720797741902-0827b2d7ab219.mjs new file mode 100644 index 0000000..cce4310 --- /dev/null +++ b/frontend/packages/core/vite.config.ts.timestamp-1720797741902-0827b2d7ab219.mjs @@ -0,0 +1,90 @@ +// vite.config.ts +import { defineConfig } from "file:///Users/liujian/work/golang/src/github.com/eolinker/apipark/frontend/node_modules/.pnpm/vite@5.0.12_@types+node@20.11.10_less@4.2.0/node_modules/vite/dist/node/index.js"; +import react from "file:///Users/liujian/work/golang/src/github.com/eolinker/apipark/frontend/node_modules/.pnpm/@vitejs+plugin-react@4.2.1_vite@5.0.12/node_modules/@vitejs/plugin-react/dist/index.mjs"; +import path from "path"; +import dynamicImportVars from "file:///Users/liujian/work/golang/src/github.com/eolinker/apipark/frontend/node_modules/.pnpm/@rollup+plugin-dynamic-import-vars@2.1.2/node_modules/@rollup/plugin-dynamic-import-vars/dist/es/index.js"; +import tailwindcss from "file:///Users/liujian/work/golang/src/github.com/eolinker/apipark/frontend/node_modules/.pnpm/tailwindcss@3.4.1/node_modules/tailwindcss/lib/index.js"; +import autoprefixer from "file:///Users/liujian/work/golang/src/github.com/eolinker/apipark/frontend/node_modules/.pnpm/autoprefixer@10.4.17_postcss@8.4.33/node_modules/autoprefixer/lib/autoprefixer.js"; +var __vite_injected_original_dirname = "/Users/liujian/work/golang/src/github.com/eolinker/apipark/frontend/packages/core"; +var vite_config_default = defineConfig({ + cacheDir: "./node_modules/.vite", + build: { + outDir: "../../dist", + sourcemap: false, + chunkSizeWarningLimit: 5e4, + cacheDir: "./node_modules/.vite", + output: { + manualChunks(id) { + if (id.includes("node_modules")) { + return id.toString().split("node_modules/")[1].split("/")[0].toString(); + } + if (id.includes(".pnpm")) { + const segments = id.split(path.sep); + const packageName = segments[segments.indexOf(".pnpm") + 1].split("@")[0]; + return packageName; + } + } + } + }, + css: { + postcss: { + plugins: [ + tailwindcss(path.resolve(__vite_injected_original_dirname, "../common/tailwind.config.js")), + autoprefixer + ] + }, + preprocessorOptions: { + less: { + javascriptEnabled: true + } + }, + modules: { + localsConvention: "camelCase", + generateScopedName: "[local]_[hash:base64:2]" + } + }, + plugins: [ + react(), + dynamicImportVars({ + include: ["src"], + exclude: [], + warnOnError: false + }) + // MillionLint.vite() + // visualizer({ + // filename: 'stats.html', // 生成的可视化报告文件名 + // sourcemap: true, // 使用 sourcemap,以便更准确地显示原始源文件 + // // gzip: true, // 显示 gzip 压缩后的大小 + // brotliSize: false, // 显示 brotli 压缩后的大小 + // open: true, // 自动生成报告后自动打开浏览器 + // // 其他可视化选项... + // }), + ], + resolve: { + alias: [ + { find: /^~/, replacement: "" }, + { find: "@common", replacement: path.resolve(__vite_injected_original_dirname, "../common/src") }, + { find: "@market", replacement: path.resolve(__vite_injected_original_dirname, "../market/src") }, + { find: "@core", replacement: path.resolve(__vite_injected_original_dirname, "./src") } + ] + }, + server: { + proxy: { + "/api/v1": { + // target: 'http://uat.apikit.com:11204/mockApi/aoplatform/', + target: "http://172.18.166.219:8288/", + changeOrigin: true + }, + "/api2/v1": { + // target: 'http://uat.apikit.com:11204/mockApi/aoplatform/', + target: "http://172.18.166.219:8288/", + changeOrigin: true + } + } + }, + logLevel: "info" +}); +export { + vite_config_default as default +}; +//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsidml0ZS5jb25maWcudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImNvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9kaXJuYW1lID0gXCIvVXNlcnMvbGl1amlhbi93b3JrL2dvbGFuZy9zcmMvZ2l0aHViLmNvbS9lb2xpbmtlci9hcGlwYXJrL2Zyb250ZW5kL3BhY2thZ2VzL2NvcmVcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZmlsZW5hbWUgPSBcIi9Vc2Vycy9saXVqaWFuL3dvcmsvZ29sYW5nL3NyYy9naXRodWIuY29tL2VvbGlua2VyL2FwaXBhcmsvZnJvbnRlbmQvcGFja2FnZXMvY29yZS92aXRlLmNvbmZpZy50c1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9pbXBvcnRfbWV0YV91cmwgPSBcImZpbGU6Ly8vVXNlcnMvbGl1amlhbi93b3JrL2dvbGFuZy9zcmMvZ2l0aHViLmNvbS9lb2xpbmtlci9hcGlwYXJrL2Zyb250ZW5kL3BhY2thZ2VzL2NvcmUvdml0ZS5jb25maWcudHNcIjsvKlxuICogQERhdGU6IDIwMjQtMDEtMzEgMTU6MDA6MzlcbiAqIEBMYXN0RWRpdG9yczogbWFnZ2lleXl5XG4gKiBATGFzdEVkaXRUaW1lOiAyMDI0LTA2LTA3IDE3OjA0OjQxXG4gKiBARmlsZVBhdGg6IFxcZnJvbnRlbmRcXHBhY2thZ2VzXFxjb3JlXFx2aXRlLmNvbmZpZy50c1xuICovXG5pbXBvcnQgeyBkZWZpbmVDb25maWcgfSBmcm9tICd2aXRlJ1xuaW1wb3J0IHJlYWN0IGZyb20gJ0B2aXRlanMvcGx1Z2luLXJlYWN0J1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCdcbmltcG9ydCBkeW5hbWljSW1wb3J0VmFycyBmcm9tICdAcm9sbHVwL3BsdWdpbi1keW5hbWljLWltcG9ydC12YXJzJztcbmltcG9ydCB0YWlsd2luZGNzcyBmcm9tICd0YWlsd2luZGNzcyc7XG5pbXBvcnQgYXV0b3ByZWZpeGVyIGZyb20gJ2F1dG9wcmVmaXhlcic7XG4vLyBpbXBvcnQge3Zpc3VhbGl6ZXJ9IGZyb20gJ3JvbGx1cC1wbHVnaW4tdmlzdWFsaXplcic7XG4vLyBpbXBvcnQgTWlsbGlvbkxpbnQgZnJvbSAnQG1pbGxpb24vbGludCdcblxuZXhwb3J0IGRlZmF1bHQgZGVmaW5lQ29uZmlnKHtcbiAgY2FjaGVEaXI6ICcuL25vZGVfbW9kdWxlcy8udml0ZScsXG4gIGJ1aWxkOntcbiAgICBvdXREaXI6Jy4uLy4uL2Rpc3QnLFxuICAgIHNvdXJjZW1hcDogZmFsc2UsXG4gICAgY2h1bmtTaXplV2FybmluZ0xpbWl0OiA1MDAwMCxcbiAgICBjYWNoZURpcjogJy4vbm9kZV9tb2R1bGVzLy52aXRlJywgXG4gICAgICBvdXRwdXQ6IHtcbiAgICAgICAgbWFudWFsQ2h1bmtzKGlkKSB7XG4gICAgICAgICAgaWYgKGlkLmluY2x1ZGVzKCdub2RlX21vZHVsZXMnKSkge1xuICAgICAgICAgICAgcmV0dXJuIGlkLnRvU3RyaW5nKCkuc3BsaXQoJ25vZGVfbW9kdWxlcy8nKVsxXS5zcGxpdCgnLycpWzBdLnRvU3RyaW5nKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIFx1OTQ4OFx1NUJGOSBwbnBtIFx1NTQ4QyBNb25vcmVwbyBcdTcyNzlcdTZCOEFcdTU5MDRcdTc0MDZcbiAgICAgICAgICBpZiAoaWQuaW5jbHVkZXMoJy5wbnBtJykpIHtcbiAgICAgICAgICAgIGNvbnN0IHNlZ21lbnRzID0gaWQuc3BsaXQocGF0aC5zZXApO1xuICAgICAgICAgICAgY29uc3QgcGFja2FnZU5hbWUgPSBzZWdtZW50c1tzZWdtZW50cy5pbmRleE9mKCcucG5wbScpICsgMV0uc3BsaXQoJ0AnKVswXTtcbiAgICAgICAgICAgIHJldHVybiBwYWNrYWdlTmFtZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfSxcbiAgY3NzOiB7XG4gICAgcG9zdGNzczoge1xuICAgICAgcGx1Z2luczogW1xuICAgICAgICB0YWlsd2luZGNzcyhwYXRoLnJlc29sdmUoX19kaXJuYW1lLCAnLi4vY29tbW9uL3RhaWx3aW5kLmNvbmZpZy5qcycpKSwgXG4gICAgICAgIGF1dG9wcmVmaXhlclxuICAgICAgXSxcbiAgICB9LFxuICAgIHByZXByb2Nlc3Nvck9wdGlvbnM6IHtcbiAgICAgIGxlc3M6IHtcbiAgICAgICAgamF2YXNjcmlwdEVuYWJsZWQ6IHRydWUsXG4gICAgICB9LFxuICAgIH0sXG4gICAgbW9kdWxlczp7XG4gICAgICBsb2NhbHNDb252ZW50aW9uOlwiY2FtZWxDYXNlXCIsXG4gICAgICBnZW5lcmF0ZVNjb3BlZE5hbWU6XCJbbG9jYWxdX1toYXNoOmJhc2U2NDoyXVwiXG4gICAgfVxuICB9LFxuICBwbHVnaW5zOiBbcmVhY3QoKSxcbiAgICAgIGR5bmFtaWNJbXBvcnRWYXJzKHtcbiAgICAgICAgaW5jbHVkZTpbXCJzcmNcIl0sXG4gICAgICAgIGV4Y2x1ZGU6W10sXG4gICAgICAgIHdhcm5PbkVycm9yOmZhbHNlXG4gICAgICAgfSksXG4gICAgICAvLyAgTWlsbGlvbkxpbnQudml0ZSgpXG4gICAgICAvLyAgdmlzdWFsaXplcih7XG4gICAgICAvLyAgICBmaWxlbmFtZTogJ3N0YXRzLmh0bWwnLCAvLyBcdTc1MUZcdTYyMTBcdTc2ODRcdTUzRUZcdTg5QzZcdTUzMTZcdTYyQTVcdTU0NEFcdTY1ODdcdTRFRjZcdTU0MERcbiAgICAgIC8vICAgIHNvdXJjZW1hcDogdHJ1ZSwgLy8gXHU0RjdGXHU3NTI4IHNvdXJjZW1hcFx1RkYwQ1x1NEVFNVx1NEZCRlx1NjZGNFx1NTFDNlx1Nzg2RVx1NTczMFx1NjYzRVx1NzkzQVx1NTM5Rlx1NTlDQlx1NkU5MFx1NjU4N1x1NEVGNlxuICAgICAgLy8gICAvLyAgZ3ppcDogdHJ1ZSwgLy8gXHU2NjNFXHU3OTNBIGd6aXAgXHU1MzhCXHU3RjI5XHU1NDBFXHU3Njg0XHU1OTI3XHU1QzBGXG4gICAgICAvLyAgICBicm90bGlTaXplOiBmYWxzZSwgLy8gXHU2NjNFXHU3OTNBIGJyb3RsaSBcdTUzOEJcdTdGMjlcdTU0MEVcdTc2ODRcdTU5MjdcdTVDMEZcbiAgICAgIC8vICAgIG9wZW46IHRydWUsIC8vIFx1ODFFQVx1NTJBOFx1NzUxRlx1NjIxMFx1NjJBNVx1NTQ0QVx1NTQwRVx1ODFFQVx1NTJBOFx1NjI1M1x1NUYwMFx1NkQ0Rlx1ODlDOFx1NTY2OFxuICAgICAgLy8gICAgLy8gXHU1MTc2XHU0RUQ2XHU1M0VGXHU4OUM2XHU1MzE2XHU5MDA5XHU5ODc5Li4uXG4gICAgICAvLyAgfSksXG4gICAgXSxcbiAgcmVzb2x2ZToge1xuICAgIGFsaWFzOiBbXG4gICAgICB7IGZpbmQ6IC9efi8sIHJlcGxhY2VtZW50OiAnJyB9LFxuICAgICAgeyBmaW5kOiAnQGNvbW1vbicsIHJlcGxhY2VtZW50OiBwYXRoLnJlc29sdmUoX19kaXJuYW1lLCAnLi4vY29tbW9uL3NyYycpIH0sXG4gICAgICB7IGZpbmQ6ICdAbWFya2V0JywgcmVwbGFjZW1lbnQ6IHBhdGgucmVzb2x2ZShfX2Rpcm5hbWUsICcuLi9tYXJrZXQvc3JjJykgfSxcbiAgICAgIHsgZmluZDogJ0Bjb3JlJywgcmVwbGFjZW1lbnQ6IHBhdGgucmVzb2x2ZShfX2Rpcm5hbWUsICcuL3NyYycpIH0sXG4gICAgXVxuICB9LFxuICBzZXJ2ZXI6IHtcbiAgICBwcm94eToge1xuICAgICAgJy9hcGkvdjEnOiB7XG4gICAgICAgIC8vIHRhcmdldDogJ2h0dHA6Ly91YXQuYXBpa2l0LmNvbToxMTIwNC9tb2NrQXBpL2FvcGxhdGZvcm0vJyxcbiAgICAgICAgdGFyZ2V0OiAnaHR0cDovLzE3Mi4xOC4xNjYuMjE5OjgyODgvJyxcbiAgICAgICAgY2hhbmdlT3JpZ2luOiB0cnVlLFxuICAgICAgfSxcbiAgICAgICcvYXBpMi92MSc6IHtcbiAgICAgICAgLy8gdGFyZ2V0OiAnaHR0cDovL3VhdC5hcGlraXQuY29tOjExMjA0L21vY2tBcGkvYW9wbGF0Zm9ybS8nLFxuICAgICAgICB0YXJnZXQ6ICdodHRwOi8vMTcyLjE4LjE2Ni4yMTk6ODI4OC8nLFxuICAgICAgICBjaGFuZ2VPcmlnaW46IHRydWUsXG4gICAgICB9XG4gICAgfVxuICB9LFxuICBsb2dMZXZlbDonaW5mbydcbn0pXG4iXSwKICAibWFwcGluZ3MiOiAiO0FBTUEsU0FBUyxvQkFBb0I7QUFDN0IsT0FBTyxXQUFXO0FBQ2xCLE9BQU8sVUFBVTtBQUNqQixPQUFPLHVCQUF1QjtBQUM5QixPQUFPLGlCQUFpQjtBQUN4QixPQUFPLGtCQUFrQjtBQVh6QixJQUFNLG1DQUFtQztBQWV6QyxJQUFPLHNCQUFRLGFBQWE7QUFBQSxFQUMxQixVQUFVO0FBQUEsRUFDVixPQUFNO0FBQUEsSUFDSixRQUFPO0FBQUEsSUFDUCxXQUFXO0FBQUEsSUFDWCx1QkFBdUI7QUFBQSxJQUN2QixVQUFVO0FBQUEsSUFDUixRQUFRO0FBQUEsTUFDTixhQUFhLElBQUk7QUFDZixZQUFJLEdBQUcsU0FBUyxjQUFjLEdBQUc7QUFDL0IsaUJBQU8sR0FBRyxTQUFTLEVBQUUsTUFBTSxlQUFlLEVBQUUsQ0FBQyxFQUFFLE1BQU0sR0FBRyxFQUFFLENBQUMsRUFBRSxTQUFTO0FBQUEsUUFDeEU7QUFFQSxZQUFJLEdBQUcsU0FBUyxPQUFPLEdBQUc7QUFDeEIsZ0JBQU0sV0FBVyxHQUFHLE1BQU0sS0FBSyxHQUFHO0FBQ2xDLGdCQUFNLGNBQWMsU0FBUyxTQUFTLFFBQVEsT0FBTyxJQUFJLENBQUMsRUFBRSxNQUFNLEdBQUcsRUFBRSxDQUFDO0FBQ3hFLGlCQUFPO0FBQUEsUUFDVDtBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUFBLEVBQ0YsS0FBSztBQUFBLElBQ0gsU0FBUztBQUFBLE1BQ1AsU0FBUztBQUFBLFFBQ1AsWUFBWSxLQUFLLFFBQVEsa0NBQVcsOEJBQThCLENBQUM7QUFBQSxRQUNuRTtBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBQUEsSUFDQSxxQkFBcUI7QUFBQSxNQUNuQixNQUFNO0FBQUEsUUFDSixtQkFBbUI7QUFBQSxNQUNyQjtBQUFBLElBQ0Y7QUFBQSxJQUNBLFNBQVE7QUFBQSxNQUNOLGtCQUFpQjtBQUFBLE1BQ2pCLG9CQUFtQjtBQUFBLElBQ3JCO0FBQUEsRUFDRjtBQUFBLEVBQ0EsU0FBUztBQUFBLElBQUMsTUFBTTtBQUFBLElBQ1osa0JBQWtCO0FBQUEsTUFDaEIsU0FBUSxDQUFDLEtBQUs7QUFBQSxNQUNkLFNBQVEsQ0FBQztBQUFBLE1BQ1QsYUFBWTtBQUFBLElBQ2IsQ0FBQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBVUo7QUFBQSxFQUNGLFNBQVM7QUFBQSxJQUNQLE9BQU87QUFBQSxNQUNMLEVBQUUsTUFBTSxNQUFNLGFBQWEsR0FBRztBQUFBLE1BQzlCLEVBQUUsTUFBTSxXQUFXLGFBQWEsS0FBSyxRQUFRLGtDQUFXLGVBQWUsRUFBRTtBQUFBLE1BQ3pFLEVBQUUsTUFBTSxXQUFXLGFBQWEsS0FBSyxRQUFRLGtDQUFXLGVBQWUsRUFBRTtBQUFBLE1BQ3pFLEVBQUUsTUFBTSxTQUFTLGFBQWEsS0FBSyxRQUFRLGtDQUFXLE9BQU8sRUFBRTtBQUFBLElBQ2pFO0FBQUEsRUFDRjtBQUFBLEVBQ0EsUUFBUTtBQUFBLElBQ04sT0FBTztBQUFBLE1BQ0wsV0FBVztBQUFBO0FBQUEsUUFFVCxRQUFRO0FBQUEsUUFDUixjQUFjO0FBQUEsTUFDaEI7QUFBQSxNQUNBLFlBQVk7QUFBQTtBQUFBLFFBRVYsUUFBUTtBQUFBLFFBQ1IsY0FBYztBQUFBLE1BQ2hCO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFBQSxFQUNBLFVBQVM7QUFDWCxDQUFDOyIsCiAgIm5hbWVzIjogW10KfQo= diff --git a/go.mod b/go.mod index 53c8774..44b2f0e 100644 --- a/go.mod +++ b/go.mod @@ -11,7 +11,6 @@ require ( github.com/gabriel-vasile/mimetype v1.4.4 github.com/gin-gonic/gin v1.10.0 github.com/google/uuid v1.6.0 - github.com/influxdata/influxdb-client-go/v2 v2.12.3 github.com/urfave/cli/v2 v2.27.2 golang.org/x/crypto v0.24.0 gopkg.in/yaml.v3 v3.0.1 @@ -25,7 +24,6 @@ require ( github.com/cloudwego/base64x v0.1.4 // indirect github.com/cloudwego/iasm v0.2.0 // indirect github.com/cpuguy83/go-md2man/v2 v2.0.4 // indirect - github.com/deepmap/oapi-codegen v1.8.2 // indirect github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect github.com/dustin/go-humanize v1.0.0 // indirect github.com/ghodss/yaml v1.0.0 // indirect @@ -38,11 +36,11 @@ require ( github.com/goccy/go-json v0.10.2 // indirect github.com/google/go-cmp v0.6.0 // indirect github.com/gorilla/websocket v1.4.2 // indirect - github.com/influxdata/line-protocol v0.0.0-20200327222509-2487e7298839 // indirect github.com/jinzhu/inflection v1.0.0 // indirect github.com/jinzhu/now v1.1.5 // indirect github.com/json-iterator/go v1.1.12 // indirect github.com/klauspost/cpuid/v2 v2.2.7 // indirect + github.com/kr/pretty v0.1.0 // indirect github.com/leodido/go-urn v1.4.0 // indirect github.com/mattn/go-isatty v0.0.20 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect @@ -63,6 +61,7 @@ require ( golang.org/x/sys v0.22.0 // indirect golang.org/x/text v0.16.0 // indirect google.golang.org/protobuf v1.34.1 // indirect + gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gorm.io/driver/mysql v1.5.2 // indirect ) diff --git a/go.sum b/go.sum index 52afb83..08f9336 100644 --- a/go.sum +++ b/go.sum @@ -16,13 +16,9 @@ github.com/cloudwego/iasm v0.2.0 h1:1KNIy1I1H9hNNFEEH3DVnI4UujN+1zjpuk6gwHLTssg= github.com/cloudwego/iasm v0.2.0/go.mod h1:8rXZaNYT2n95jn+zTI1sDr+IgcD2GVs0nlbbQPiEFhY= github.com/cpuguy83/go-md2man/v2 v2.0.4 h1:wfIWP927BUkWJb2NmU/kNDYIBTh/ziUX91+lVfRxZq4= github.com/cpuguy83/go-md2man/v2 v2.0.4/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= -github.com/cyberdelia/templates v0.0.0-20141128023046-ca7fffd4298c/go.mod h1:GyV+0YP4qX0UQ7r2MoYZ+AvYDp12OF5yg4q8rGnyNh4= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/deepmap/oapi-codegen v1.8.2 h1:SegyeYGcdi0jLLrpbCMoJxnUUn8GBXHsvr4rbzjuhfU= -github.com/deepmap/oapi-codegen v1.8.2/go.mod h1:YLgSKSDv/bZQB7N4ws6luhozi3cEdRktEqrX88CvjIw= -github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78= github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc= github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo= @@ -35,7 +31,6 @@ github.com/eolinker/go-common v1.0.0 h1:gqR0d6juRrJVc6OKpl7DFB5Xml5uGx6q9eCetrPq github.com/eolinker/go-common v1.0.0/go.mod h1:Kb/jENMN1mApnodvRgV4YwO9FJby1Jkt2EUjrBjvSX4= github.com/gabriel-vasile/mimetype v1.4.4 h1:QjV6pZ7/XZ7ryI2KuyeEDE8wnh7fHP9YnQy+R0LnH8I= github.com/gabriel-vasile/mimetype v1.4.4/go.mod h1:JwLei5XPtWdGiMFB5Pjle1oEeoSeEuJfJE+TtfvdB/s= -github.com/getkin/kin-openapi v0.61.0/go.mod h1:7Yn5whZr5kJi6t+kShccXS8ae1APpYTW6yheSwk8Yi4= github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/gin-contrib/gzip v1.0.1 h1:HQ8ENHODeLY7a4g1Au/46Z92bdGFl74OhxcZble9WJE= @@ -44,9 +39,6 @@ github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= github.com/gin-gonic/gin v1.10.0 h1:nTuyha1TYqgedzytsKYqna+DfLos46nTv2ygFy86HFU= github.com/gin-gonic/gin v1.10.0/go.mod h1:4PMNQiOhvDRa013RKVbsiNwoyezlm2rm0uX/T7kzp5Y= -github.com/go-chi/chi/v5 v5.0.0/go.mod h1:BBug9lr0cqtdAhsu6R4AAdvufI0/XBzAQSsUqJpoZOs= -github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= -github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= github.com/go-playground/assert/v2 v2.2.0 h1:JvknZsQTYeFEAhQwI4qEt9cyV5ONwRHC+lYKSsYSR8s= github.com/go-playground/assert/v2 v2.2.0/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/oXslEjJA= @@ -59,19 +51,13 @@ github.com/go-sql-driver/mysql v1.7.0 h1:ueSltNNllEqE3qcWBTD0iQd3IpL/6U+mJxLkazJ github.com/go-sql-driver/mysql v1.7.0/go.mod h1:OXbVy3sEdcQ2Doequ6Z5BW6fXNQTmx+9S1MCJN5yJMI= github.com/goccy/go-json v0.10.2 h1:CrxCmQqYDkv1z7lO7Wbh2HN93uovUHgrECaO5ZrCXAU= github.com/goccy/go-json v0.10.2/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= -github.com/golangci/lint-1 v0.0.0-20181222135242-d2cdd8c08219/go.mod h1:/X8TswGSh1pIozq4ZwCfxS0WA5JGXguxk94ar/4c87Y= github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc= github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= -github.com/influxdata/influxdb-client-go/v2 v2.12.3 h1:28nRlNMRIV4QbtIUvxhWqaxn0IpXeMSkY/uJa/O/vC4= -github.com/influxdata/influxdb-client-go/v2 v2.12.3/go.mod h1:IrrLUbCjjfkmRuaCiGQg4m2GbkaeJDcuWoxiWdQEbA0= -github.com/influxdata/line-protocol v0.0.0-20200327222509-2487e7298839 h1:W9WBk7wlPfJLvMCdtV4zPulc4uCPrlywQOmbFOhgQNU= -github.com/influxdata/line-protocol v0.0.0-20200327222509-2487e7298839/go.mod h1:xaLFMmpvUxqXtVkUJfg9QmT88cDaCJ3ZKgdZ78oO8Qo= github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E= github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc= github.com/jinzhu/now v1.1.5 h1:/o9tlHleP7gOFmsnYNz3RGnqzefHA47wQpKrrdTIwXQ= @@ -87,19 +73,8 @@ github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORN github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= -github.com/labstack/echo/v4 v4.2.1/go.mod h1:AA49e0DZ8kk5jTOOCKNuPR6oTnBS0dYiM4FW1e6jwpg= -github.com/labstack/gommon v0.3.0/go.mod h1:MULnywXg0yavhxWKc+lOruYdAhDwPK9wf0OL7NoOu+k= github.com/leodido/go-urn v1.4.0 h1:WT9HwE9SGECu3lg4d/dIA+jxlljEa1/ffXKmRjqdmIQ= github.com/leodido/go-urn v1.4.0/go.mod h1:bvxc+MVxLKB4z00jd1z+Dvzr47oO32F/QSNjSBOlFxI= -github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/matryer/moq v0.0.0-20190312154309-6cfb0558e1bd/go.mod h1:9ELz6aaclSIGnZBoaSLZ3NAl1VTufbOrXBPvtcy6WiQ= -github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= -github.com/mattn/go-colorable v0.1.7/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= -github.com/mattn/go-colorable v0.1.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= -github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= -github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2yME+cCiQ= -github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= @@ -109,7 +84,6 @@ github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9G github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= github.com/pelletier/go-toml/v2 v2.2.2 h1:aYUidT7k73Pcl9nb2gScu7NSrKCSHIDE89b3+6Wq+LM= github.com/pelletier/go-toml/v2 v2.2.2/go.mod h1:1t835xjRzz80PqgE6HHgN2JOsmgYu/h4qDAS4n929Rs= -github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= @@ -123,8 +97,6 @@ github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSS github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= -github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= -github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= @@ -138,9 +110,6 @@ github.com/ugorji/go/codec v1.2.12 h1:9LC83zGrHhuUA9l16C9AHXAqEV/2wBQ4nkvumAE65E github.com/ugorji/go/codec v1.2.12/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg= github.com/urfave/cli/v2 v2.27.2 h1:6e0H+AkS+zDckwPCUrZkKX38mRaau4nL2uipkJpbkcI= github.com/urfave/cli/v2 v2.27.2/go.mod h1:g0+79LmHHATl7DAcHO99smiR/T7uGLw84w8Y42x+4eM= -github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= -github.com/valyala/fasttemplate v1.0.1/go.mod h1:UQGH1tvbgY+Nz5t2n7tXsz52dQxojPUpymEIMZ47gx8= -github.com/valyala/fasttemplate v1.2.1/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ= github.com/xrash/smetrics v0.0.0-20240312152122-5f08fbb34913 h1:+qGGcbkzsfDQNPPe9UDgpxAWQrhbbBXOYJFQDq/dtJw= github.com/xrash/smetrics v0.0.0-20240312152122-5f08fbb34913/go.mod h1:4aEEwZQutDLsQv2Deui4iYQ6DWTxR14g6m8Wv88+Xqk= go.etcd.io/etcd/client/pkg/v3 v3.5.13 h1:RVZSAnWWWiI5IrYAXjQorajncORbS0zI48LQlE2kQWg= @@ -156,53 +125,21 @@ go.uber.org/zap v1.23.0/go.mod h1:D+nX8jyLsMHMYrln8A0rJjFt/T/9/bGgIhAqxv5URuY= golang.org/x/arch v0.0.0-20210923205945-b76863e36670/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8= golang.org/x/arch v0.8.0 h1:3wRIsP3pM4yUptoR96otTUOXI367OS0+c9eeRi9doIc= golang.org/x/arch v0.8.0/go.mod h1:FEVrYAQjsQXMVJ1nsMoVVXPZg6p2JE2mx8psSWTDQys= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200820211705-5c72a883971a/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= golang.org/x/crypto v0.24.0 h1:mnl8DM0o513X8fdIkmyFE/5hTYxbwYOjDS/+rK6qpRI= golang.org/x/crypto v0.24.0/go.mod h1:Z1PMYSOR5nyMcyAVAIQSKCDwalqy85Aqn1x3Ws4L5DM= -golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.26.0 h1:soB7SVo0PWrY4vPW/+ay0jKDNScG2X9wFeYlXIvJsOQ= golang.org/x/net v0.26.0/go.mod h1:5YKkiSynbBIh3p6iOc/vibscux0x38BZDkn8sCUPxHE= -golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200826173525-f9321e4c35a6/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.22.0 h1:RI27ohtqKCnwULzJLqkv897zojh5/DwS/ENaMzUOaWI= golang.org/x/sys v0.22.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= -golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.16.0 h1:a94ExnEXNtEwYLGJSIUxnWoxoRz/ZcCsV63ROupILh4= golang.org/x/text v0.16.0/go.mod h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI= -golang.org/x/time v0.0.0-20201208040808-7e3f01d25324/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= google.golang.org/protobuf v1.34.1 h1:9ddQBjfCyZPOHPUiPxpYESBLc+T8P3E+Vo4IbKZgFWg= google.golang.org/protobuf v1.34.1/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/module/external-app/dto/input.go b/module/external-app/dto/input.go deleted file mode 100644 index 4ad8b26..0000000 --- a/module/external-app/dto/input.go +++ /dev/null @@ -1,12 +0,0 @@ -package external_app_dto - -type CreateExternalApp struct { - Id string `json:"id"` - Name string `json:"name"` - Desc string `json:"desc"` -} - -type EditExternalApp struct { - Name *string `json:"name"` - Desc *string `json:"desc"` -} diff --git a/module/external-app/dto/output.go b/module/external-app/dto/output.go deleted file mode 100644 index d5d3c9a..0000000 --- a/module/external-app/dto/output.go +++ /dev/null @@ -1,21 +0,0 @@ -package external_app_dto - -import ( - "github.com/eolinker/go-common/auto" -) - -type ExternalApp struct { - ID string `json:"id"` - Name string `json:"name"` - Desc string `json:"desc"` -} - -type ExternalAppItem struct { - ID string `json:"id"` - Name string `json:"name"` - Token string `json:"token"` - Tags string `json:"tags"` - Status bool `json:"status"` - Operator auto.Label `json:"operator" aolabel:"user"` - UpdateTime auto.TimeLabel `json:"update_time"` -} diff --git a/module/external-app/external_app.go b/module/external-app/external_app.go deleted file mode 100644 index fcddd38..0000000 --- a/module/external-app/external_app.go +++ /dev/null @@ -1,35 +0,0 @@ -package external_app - -import ( - "context" - "reflect" - - "github.com/eolinker/go-common/autowire" - - external_app_dto "github.com/eolinker/apipark/module/external-app/dto" -) - -type IExternalAppModule interface { - // GetExternalApp get external app by id - GetExternalApp(ctx context.Context, id string) (*external_app_dto.ExternalApp, error) - // ListExternalApp list external app - ListExternalApp(ctx context.Context) ([]*external_app_dto.ExternalAppItem, error) - // CreateExternalApp create external app - CreateExternalApp(ctx context.Context, input *external_app_dto.CreateExternalApp) (*external_app_dto.ExternalApp, error) - // EditExternalApp edit external app - EditExternalApp(ctx context.Context, id string, input *external_app_dto.EditExternalApp) (*external_app_dto.ExternalApp, error) - // DeleteExternalApp delete external app - DeleteExternalApp(ctx context.Context, id string) error - // EnableExternalApp enable external app - EnableExternalApp(ctx context.Context, id string) error - // DisableExternalApp disable external app - DisableExternalApp(ctx context.Context, id string) error - // UpdateExternalAppToken update external app token - UpdateExternalAppToken(ctx context.Context, id string) (string, error) -} - -func init() { - autowire.Auto[IExternalAppModule](func() reflect.Value { - return reflect.ValueOf(new(imlExternalAppModule)) - }) -} diff --git a/module/external-app/iml.go b/module/external-app/iml.go deleted file mode 100644 index e67241c..0000000 --- a/module/external-app/iml.go +++ /dev/null @@ -1,108 +0,0 @@ -package external_app - -import ( - "context" - "strings" - - "github.com/google/uuid" - - "github.com/eolinker/go-common/auto" - - "github.com/eolinker/go-common/utils" - - external_app_dto "github.com/eolinker/apipark/module/external-app/dto" - external_app "github.com/eolinker/apipark/service/external-app" -) - -var _ IExternalAppModule = (*imlExternalAppModule)(nil) - -type imlExternalAppModule struct { - externalAppService external_app.IExternalAppService `autowired:""` -} - -func (i *imlExternalAppModule) GetExternalApp(ctx context.Context, id string) (*external_app_dto.ExternalApp, error) { - app, err := i.externalAppService.Get(ctx, id) - if err != nil { - return nil, err - } - return &external_app_dto.ExternalApp{ - ID: app.ID, - Name: app.Name, - Desc: app.Desc, - }, nil - -} - -func (i *imlExternalAppModule) ListExternalApp(ctx context.Context) ([]*external_app_dto.ExternalAppItem, error) { - list, err := i.externalAppService.Search(ctx, "", nil, "update_at desc") - if err != nil { - return nil, err - } - return utils.SliceToSlice(list, func(e *external_app.ExternalApp) *external_app_dto.ExternalAppItem { - tags := strings.Join(e.Tags, ",") - return &external_app_dto.ExternalAppItem{ - ID: e.ID, - Name: e.Name, - Token: e.Token, - Tags: tags, - Status: e.Enable, - Operator: auto.UUID(e.Updater), - UpdateTime: auto.TimeLabel(e.UpdateAt), - } - - }), nil -} - -func (i *imlExternalAppModule) CreateExternalApp(ctx context.Context, input *external_app_dto.CreateExternalApp) (*external_app_dto.ExternalApp, error) { - if input.Id == "" { - input.Id = uuid.New().String() - } - token := utils.Md5(uuid.New().String()) - err := i.externalAppService.Create(ctx, &external_app.CreateExternalApp{ - Id: input.Id, - Name: input.Name, - Token: token, - Desc: input.Desc, - Enable: true, - }) - if err != nil { - return nil, err - } - return i.GetExternalApp(ctx, input.Id) -} - -func (i *imlExternalAppModule) EditExternalApp(ctx context.Context, id string, input *external_app_dto.EditExternalApp) (*external_app_dto.ExternalApp, error) { - err := i.externalAppService.Save(ctx, id, &external_app.EditExternalApp{ - Name: input.Name, - Desc: input.Desc, - }) - if err != nil { - return nil, err - } - return i.GetExternalApp(ctx, id) -} - -func (i *imlExternalAppModule) DeleteExternalApp(ctx context.Context, id string) error { - return i.externalAppService.Delete(ctx, id) -} - -func (i *imlExternalAppModule) EnableExternalApp(ctx context.Context, id string) error { - enable := true - return i.externalAppService.Save(ctx, id, &external_app.EditExternalApp{ - Enable: &enable, - }) -} - -func (i *imlExternalAppModule) DisableExternalApp(ctx context.Context, id string) error { - enable := false - return i.externalAppService.Save(ctx, id, &external_app.EditExternalApp{ - Enable: &enable, - }) -} - -func (i *imlExternalAppModule) UpdateExternalAppToken(ctx context.Context, id string) (string, error) { - token := utils.Md5(uuid.New().String()) - return token, i.externalAppService.Save(ctx, id, &external_app.EditExternalApp{ - Token: &token, - }) -} diff --git a/module/monitor/driver/driver.go b/module/monitor/driver/driver.go deleted file mode 100644 index 9bd5755..0000000 --- a/module/monitor/driver/driver.go +++ /dev/null @@ -1,24 +0,0 @@ -package driver - -import ( - "context" - "time" - - "github.com/eolinker/apipark/service/monitor" -) - -type IDriver interface { - Name() string - Check(cfg string) error - Create(cfg string) (IExecutor, error) -} - -type IExecutor interface { - Init(ctx context.Context) error - CommonStatistics(ctx context.Context, start, end time.Time, groupBy string, limit int, wheres []monitor.MonWhereItem) (map[string]monitor.MonCommonData, error) - RequestSummary(ctx context.Context, start time.Time, end time.Time, wheres []monitor.MonWhereItem) (*monitor.Summary, error) - ProxySummary(ctx context.Context, start time.Time, end time.Time, wheres []monitor.MonWhereItem) (*monitor.Summary, error) - InvokeTrend(ctx context.Context, start time.Time, end time.Time, wheres []monitor.MonWhereItem) (*monitor.MonInvokeCountTrend, string, error) - ProxyTrend(ctx context.Context, start time.Time, end time.Time, wheres []monitor.MonWhereItem) (*monitor.MonInvokeCountTrend, string, error) - MessageTrend(ctx context.Context, start time.Time, end time.Time, wheres []monitor.MonWhereItem) (*monitor.MonMessageTrend, string, error) -} diff --git a/module/monitor/driver/influxdb-v2/executor.go b/module/monitor/driver/influxdb-v2/executor.go deleted file mode 100644 index fa76bf3..0000000 --- a/module/monitor/driver/influxdb-v2/executor.go +++ /dev/null @@ -1,363 +0,0 @@ -package influxdb_v2 - -import ( - "context" - "encoding/json" - "strings" - "time" - - "github.com/eolinker/eosc/log" - - "github.com/eolinker/go-common/utils" - "github.com/influxdata/influxdb-client-go/v2/domain" - - "github.com/eolinker/apipark/common" - - influxdb2 "github.com/influxdata/influxdb-client-go/v2" - - "github.com/eolinker/apipark/module/monitor/driver" - "github.com/eolinker/apipark/module/monitor/driver/influxdb-v2/flux" - - "github.com/influxdata/influxdb-client-go/v2/api" - - "github.com/eolinker/apipark/service/monitor" -) - -func newExecutor(cfg string, fluxQuery flux.IFluxQuery) (driver.IExecutor, error) { - var data InfluxdbV2Config - err := json.Unmarshal([]byte(cfg), &data) - if err != nil { - return nil, err - } - client := influxdb2.NewClient(data.Addr, data.Token) - - return &executor{cfg: data, openApi: client.QueryAPI(data.Org), client: client, fluxQuery: fluxQuery}, nil -} - -type executor struct { - fluxQuery flux.IFluxQuery - cfg InfluxdbV2Config - openApi api.QueryAPI - client influxdb2.Client -} - -func (e *executor) Init(ctx context.Context) error { - orgInfo, err := e.client.OrganizationsAPI().FindOrganizationByName(ctx, e.cfg.Org) - if err != nil { - return err - } - orgID := *orgInfo.Id - //初始化bucket - bucketsAPI := e.client.BucketsAPI() - buckets, err := bucketsAPI.FindBucketsByOrgName(ctx, e.cfg.Org) - if err != nil { - return err - } - - bucketsConf := flux.GetBucketConfigList() - //要创建的bucket - toCreateBuckets := utils.SliceToMap(bucketsConf, func(t *flux.BucketConf) string { - return t.BucketName - }) - if buckets != nil { - for _, bucket := range *buckets { - if _, has := toCreateBuckets[bucket.Name]; has { - delete(toCreateBuckets, bucket.Name) - } - } - } - expire := domain.RetentionRuleTypeExpire - rule := domain.RetentionRule{ - ShardGroupDurationSeconds: nil, - Type: &expire, - } - //创建bucket - for _, bucketConf := range toCreateBuckets { - rule.EverySeconds = bucketConf.Retention - _, err := e.client.BucketsAPI().CreateBucketWithNameWithID(ctx, orgID, bucketConf.BucketName, rule) - if err != nil { - return err - } - log.Infof("Save bucket %s success. organization: %s", bucketConf.BucketName, e.cfg.Org) - } - - //创建定时脚本 - tasksApi := e.client.TasksAPI() - taskFilter := &api.TaskFilter{ - OrgID: orgID, - } - existedTasks, err := tasksApi.FindTasks(ctx, taskFilter) - if err != nil { - return err - } - tasksConf := flux.GetTaskConfigList() - //要创建的bucket - toCreateTasks := utils.SliceToMap(tasksConf, func(t *flux.TaskConf) string { - return t.TaskName - }) - toDeleteTaskIDs := make([]string, 0, len(toCreateTasks)) - - /* - 将influxDB已存在的定时脚本 与 定时脚本配置的进行对比 - 1. 配置和influxDB均有则不创建 - 2. 配置有,influxDB没有,则创建 - 3. 配置没有,influxDB有,且是apinto开头, 则删除 - */ - for _, task := range existedTasks { - if _, has := toCreateTasks[task.Name]; has { - delete(toCreateTasks, task.Name) - } else { - if strings.HasPrefix(task.Name, "apinto") { - toDeleteTaskIDs = append(toDeleteTaskIDs, task.Id) - } - } - } - //删除旧的apinto定时脚本 - for _, delId := range toDeleteTaskIDs { - err = tasksApi.DeleteTaskWithID(ctx, delId) - if err != nil { - return err - } - } - - //创建influxDB中没有的定时脚本 - for _, taskConf := range toCreateTasks { - newTask := &domain.Task{ - Cron: &taskConf.Cron, - Flux: taskConf.Flux, - Name: taskConf.TaskName, - Offset: &taskConf.Offset, - OrgID: orgID, - //Status: nil, - } - _, err := tasksApi.CreateTask(ctx, newTask) - if err != nil { - return err - } - log.Infof("Save task %s success. organization: %s", taskConf.TaskName, e.cfg.Org) - } - - return nil -} - -func (e *executor) MessageTrend(ctx context.Context, start time.Time, end time.Time, wheres []monitor.MonWhereItem) (*monitor.MonMessageTrend, string, error) { - newStartTime, every, windowOffset, bucket := getTimeIntervalAndBucket(start, end) - - filters := formatFilter(wheres) - - fieldsConditions := []string{"request", "response"} - - dates, groupValues, err := e.fluxQuery.CommonTendency(ctx, e.openApi, newStartTime, end, bucket, "request", filters, fieldsConditions, every, windowOffset) - if err != nil { - return nil, "", err - } - - resultVal := &monitor.MonMessageTrend{ - Dates: dates, - ReqMessage: formatMessageTrendData(groupValues["request"]), - RespMessage: formatMessageTrendData(groupValues["response"]), - } - - return resultVal, every, nil -} - -func (e *executor) ProxyTrend(ctx context.Context, start time.Time, end time.Time, wheres []monitor.MonWhereItem) (*monitor.MonInvokeCountTrend, string, error) { - newStartTime, every, windowOffset, bucket := getTimeIntervalAndBucket(start, end) - - filters := formatFilter(wheres) - - proxyConditions := []string{"p_total", "p_success", "p_s4xx", "p_s5xx"} - - dates, proxyValues, err := e.fluxQuery.CommonTendency(ctx, e.openApi, newStartTime, end, bucket, "proxy", filters, proxyConditions, every, windowOffset) - if err != nil { - return nil, "", err - } - proxyRate := make([]float64, 0, len(dates)) - //计算请求成功率 - proxyTotal := proxyValues["p_total"] - proxySuccess := proxyValues["p_success"] - for i, total := range proxyTotal { - if total == 0 { - proxyRate = append(proxyRate, 0) - continue - } - rate := FormatFloat64(float64(proxySuccess[i])/float64(total), 4) - proxyRate = append(proxyRate, rate) - } - - resultVal := &monitor.MonInvokeCountTrend{ - Date: dates, - Status5XX: proxyValues["p_s5xx"], - Status4XX: proxyValues["p_s4xx"], - ProxyRate: proxyRate, - ProxyTotal: proxyValues["p_total"], - } - - return resultVal, every, nil -} - -func (e *executor) InvokeTrend(ctx context.Context, start time.Time, end time.Time, wheres []monitor.MonWhereItem) (*monitor.MonInvokeCountTrend, string, error) { - newStartTime, every, windowOffset, bucket := getTimeIntervalAndBucket(start, end) - filters := formatFilter(wheres) - - requestConditions := []string{"total", "success", "s4xx", "s5xx"} - - dates, requestValues, err := e.fluxQuery.CommonTendency(ctx, e.openApi, newStartTime, end, bucket, "request", filters, requestConditions, every, windowOffset) - if err != nil { - return nil, "", err - } - requestRate := make([]float64, 0, len(dates)) - //计算请求成功率 - requestTotal := requestValues["total"] - requestSuccess := requestValues["success"] - for i, total := range requestTotal { - if total == 0 { - requestRate = append(requestRate, 0) - continue - } - rate := FormatFloat64(float64(requestSuccess[i])/float64(total), 4) - requestRate = append(requestRate, rate) - } - - proxyConditions := []string{"p_total", "p_success"} - - _, proxyValues, err := e.fluxQuery.CommonTendency(ctx, e.openApi, newStartTime, end, bucket, "proxy", filters, proxyConditions, every, windowOffset) - if err != nil { - return nil, "", err - } - //计算转发成功率 - proxyTotal := proxyValues["p_total"] - proxySuccess := proxyValues["p_success"] //proxySuccess和proxyTotal必定等长 - proxyRate := make([]float64, 0, len(proxyTotal)) - for i, total := range proxyTotal { - if total == 0 { - proxyRate = append(proxyRate, 0) - continue - } - rate := FormatFloat64(float64(proxySuccess[i])/float64(total), 4) - proxyRate = append(proxyRate, rate) - } - resultVal := &monitor.MonInvokeCountTrend{ - Date: dates, - Status5XX: requestValues["s5xx"], - Status4XX: requestValues["s4xx"], - ProxyRate: proxyRate, - ProxyTotal: proxyValues["p_total"], - RequestRate: requestRate, - RequestTotal: requestValues["total"], - } - - return resultVal, every, nil -} - -func (e *executor) summary(ctx context.Context, start, end time.Time, bucket string, filters string, filterCfg *flux.StatisticsFilterConf, prefix string) (*monitor.Summary, error) { - //获取请求表的饼状图 - queryOnce, err := e.fluxQuery.CommonQueryOnce(ctx, e.openApi, start, end, bucket, filters, filterCfg) - if err != nil { - return nil, err - } - summary := new(monitor.Summary) - if v, ok := queryOnce[prefix+"s4xx"]; ok { - summary.Status4Xx = common.FmtIntFromInterface(v) - } - if v, ok := queryOnce[prefix+"s5xx"]; ok { - summary.Status5Xx = common.FmtIntFromInterface(v) - } - if v, ok := queryOnce[prefix+"success"]; ok { - summary.Success = common.FmtIntFromInterface(v) - } - if v, ok := queryOnce[prefix+"total"]; ok { - summary.Total = common.FmtIntFromInterface(v) - } - summary.Fail = summary.Total - summary.Success - return summary, nil -} - -func (e *executor) RequestSummary(ctx context.Context, start time.Time, end time.Time, wheres []monitor.MonWhereItem) (*monitor.Summary, error) { - newStartTime, _, _, bucket := getTimeIntervalAndBucket(start, end) - return e.summary(ctx, newStartTime, end, bucket, formatFilter(wheres), &flux.StatisticsFilterConf{ - Measurement: "request", - AggregateFn: "sum()", - Fields: []string{"total", "success", "s4xx", "s5xx"}, - }, "") -} - -func (e *executor) ProxySummary(ctx context.Context, start time.Time, end time.Time, wheres []monitor.MonWhereItem) (*monitor.Summary, error) { - newStartTime, _, _, bucket := getTimeIntervalAndBucket(start, end) - return e.summary(ctx, newStartTime, end, bucket, formatFilter(wheres), &flux.StatisticsFilterConf{ - Measurement: "proxy", - AggregateFn: "sum()", - Fields: []string{"p_total", "p_success", "p_s4xx", "p_s5xx"}, - }, "p_") -} - -func (e *executor) CommonStatistics(ctx context.Context, start, end time.Time, groupBy string, limit int, wheres []monitor.MonWhereItem) (map[string]monitor.MonCommonData, error) { - filters := formatFilter(wheres) - newStartTime, _, _, bucket := getTimeIntervalAndBucket(start, end) - - statisticsConf := []*flux.StatisticsFilterConf{ - { - Measurement: "request", - AggregateFn: "sum()", - Fields: []string{"total", "success", "timing", "request"}, - }, - { - Measurement: "proxy", - AggregateFn: "sum()", - Fields: []string{"p_total", "p_success"}, - }, - { - Measurement: "request", - AggregateFn: "max()", - Fields: []string{"timing_max", "request_max"}, - }, { - Measurement: "request", - AggregateFn: "min()", - Fields: []string{"timing_min", "request_min"}, - }, - } - - results, err := e.fluxQuery.CommonStatistics(ctx, e.openApi, newStartTime, end, bucket, groupBy, filters, statisticsConf, limit) - if err != nil { - return nil, err - } - resultMap := make(map[string]monitor.MonCommonData) - for key, result := range results { - - requestRate := 0.0 - if result.Total == 0 { - requestRate = 0.0 - } else { - requestRate = FormatFloat64(float64(result.Success)/float64(result.Total), 4) - } - - proxyRate := 0.0 - if result.ProxyTotal == 0 { - proxyRate = 0.0 - } else { - proxyRate = FormatFloat64(float64(result.ProxySuccess)/float64(result.ProxyTotal), 4) - } - - monCommonData := monitor.MonCommonData{ - ID: key, - RequestTotal: result.Total, - RequestSuccess: result.Success, - RequestRate: requestRate, - ProxyTotal: result.ProxyTotal, - ProxySuccess: result.ProxySuccess, - ProxyRate: proxyRate, - StatusFail: result.Total - result.Success, - AvgResp: float64(result.TotalTiming) / float64(result.Total), - MaxResp: result.MaxTiming, - MinResp: result.MinTiming, - AvgTraffic: float64(result.TotalRequest) / float64(result.Total), - MaxTraffic: result.RequestMax, - MinTraffic: result.RequestMin, - } - - resultMap[key] = monCommonData - } - - return resultMap, nil - -} diff --git a/module/monitor/driver/influxdb-v2/flux/buckets_config.go b/module/monitor/driver/influxdb-v2/flux/buckets_config.go deleted file mode 100644 index 9910686..0000000 --- a/module/monitor/driver/influxdb-v2/flux/buckets_config.go +++ /dev/null @@ -1,32 +0,0 @@ -package flux - -import ( - _ "embed" - - "gopkg.in/yaml.v3" -) - -//go:embed influxdb_config/buckets.yaml -var bucketsData []byte - -var ( - bucketList []*BucketConf -) - -type BucketConf struct { - BucketName string `yaml:"bucket_name"` - Retention int64 `yaml:"retention"` -} - -func initBucketsConfig() { - conf := make([]*BucketConf, 0, 5) - err := yaml.Unmarshal(bucketsData, &conf) - if err != nil { - panic(err) - } - bucketList = conf -} - -func GetBucketConfigList() []*BucketConf { - return bucketList -} diff --git a/module/monitor/driver/influxdb-v2/flux/flux.go b/module/monitor/driver/influxdb-v2/flux/flux.go deleted file mode 100644 index 4fad108..0000000 --- a/module/monitor/driver/influxdb-v2/flux/flux.go +++ /dev/null @@ -1,349 +0,0 @@ -package flux - -import ( - "context" - "fmt" - "strings" - "time" - - "github.com/eolinker/apipark/common" - "github.com/eolinker/eosc/log" - "github.com/influxdata/influxdb-client-go/v2/api" -) - -type IFluxQuery interface { - CommonStatistics(ctx context.Context, queryApi api.QueryAPI, start, end time.Time, bucket, groupBy, filters string, statisticsConf []*StatisticsFilterConf, limit int) (map[string]*FluxStatistics, error) - CommonProxyStatistics(ctx context.Context, queryApi api.QueryAPI, start, end time.Time, bucket, groupBy, filters string, statisticsConf []*StatisticsFilterConf, limit int) (map[string]*FluxStatistics, error) - CommonTendency(ctx context.Context, queryApi api.QueryAPI, start, end time.Time, bucket, table, filters string, dataFields []string, every, windowOffset string) ([]time.Time, map[string][]int64, error) - // CommonQueryOnce 查询只返回一条结果 - CommonQueryOnce(ctx context.Context, queryApi api.QueryAPI, start, end time.Time, bucket, filters string, fieldsConf *StatisticsFilterConf) (map[string]interface{}, error) - CommonWarnStatistics(ctx context.Context, queryApi api.QueryAPI, start, end time.Time, bucket, groupBy, filters string, statisticsConf *StatisticsFilterConf) (map[string]*FluxWarnStatistics, error) -} - -type fluxQuery struct { -} - -// CommonStatistics flux查询统计 -func (f *fluxQuery) CommonStatistics(ctx context.Context, queryApi api.QueryAPI, start, end time.Time, bucket, groupBy, filters string, statisticsConf []*StatisticsFilterConf, limit int) (map[string]*FluxStatistics, error) { - //拼装请求 - query := f.assembleStatisticsFlux(start, end, bucket, groupBy, filters, statisticsConf, "total", limit) - - log.Info("flux sql=", query) - result, err := queryApi.Query(ctx, query) - if err != nil { - log.Error("flux err=", err) - return nil, err - } - - tempMap := make(map[string]map[string]interface{}) - for result.Next() { - key := "" - if v, ok := result.Record().Values()[groupBy]; ok { - if v == nil { - continue - } - key = v.(string) - } - tempMap[key] = result.Record().Values() - } - result.Close() - - resultMap := make(map[string]*FluxStatistics) - //拼装返回参数 - for key, maps := range tempMap { - total := common.FmtIntFromInterface(maps["total"]) - success := common.FmtIntFromInterface(maps["success"]) - pTotal := common.FmtIntFromInterface(maps["p_total"]) - pSuccess := common.FmtIntFromInterface(maps["p_success"]) - totalTiming := common.FmtIntFromInterface(maps["timing"]) - maxMinTiming := common.FmtIntFromInterface(maps["timing_max"]) - minTiming := common.FmtIntFromInterface(maps["timing_min"]) - totalRequest := common.FmtIntFromInterface(maps["request"]) - maxRequest := common.FmtIntFromInterface(maps["request_max"]) - minRequest := common.FmtIntFromInterface(maps["request_min"]) - - resultMap[key] = &FluxStatistics{ - Total: total, - Success: success, - ProxyTotal: pTotal, - ProxySuccess: pSuccess, - TotalTiming: totalTiming, - MaxTiming: maxMinTiming, - MinTiming: minTiming, - TotalRequest: totalRequest, - RequestMax: maxRequest, - RequestMin: minRequest, - } - } - - return resultMap, nil -} - -// CommonProxyStatistics flux查询统计(只查转发表) -func (f *fluxQuery) CommonProxyStatistics(ctx context.Context, queryApi api.QueryAPI, start, end time.Time, bucket, groupBy, filters string, statisticsConf []*StatisticsFilterConf, limit int) (map[string]*FluxStatistics, error) { - //拼装请求 - query := f.assembleStatisticsFlux(start, end, bucket, groupBy, filters, statisticsConf, "p_total", limit) - - log.Info("flux sql=", query) - result, err := queryApi.Query(ctx, query) - if err != nil { - log.Error("flux err=", err) - return nil, err - } - - tempMap := make(map[string]map[string]interface{}) - for result.Next() { - key := "" - if v, ok := result.Record().Values()[groupBy]; ok { - key = v.(string) - } - tempMap[key] = result.Record().Values() - } - result.Close() - - resultMap := make(map[string]*FluxStatistics) - //拼装返回参数 - for key, maps := range tempMap { - pTotal := common.FmtIntFromInterface(maps["p_total"]) - pSuccess := common.FmtIntFromInterface(maps["p_success"]) - totalTiming := common.FmtIntFromInterface(maps["p_timing"]) - maxMinTiming := common.FmtIntFromInterface(maps["p_timing_max"]) - minTiming := common.FmtIntFromInterface(maps["p_timing_min"]) - totalRequest := common.FmtIntFromInterface(maps["p_request"]) - maxRequest := common.FmtIntFromInterface(maps["p_request_max"]) - minRequest := common.FmtIntFromInterface(maps["p_request_min"]) - - resultMap[key] = &FluxStatistics{ - ProxyTotal: pTotal, - ProxySuccess: pSuccess, - TotalTiming: totalTiming, - MaxTiming: maxMinTiming, - MinTiming: minTiming, - TotalRequest: totalRequest, - RequestMax: maxRequest, - RequestMin: minRequest, - } - } - - return resultMap, nil -} - -func (f *fluxQuery) CommonTendency(ctx context.Context, queryApi api.QueryAPI, start, end time.Time, bucket, table, filters string, dataFields []string, every, windowOffset string) ([]time.Time, map[string][]int64, error) { - fieldConditions := f.assembleTendencyFieldCondition(dataFields) - //拼装请求 - query := f.assembleTendencyFlux(start, end, bucket, table, filters, fieldConditions, every, windowOffset) - - log.Info("flux sql=", query) - result, err := queryApi.Query(ctx, query) - if err != nil { - log.Error("flux err=", err) - return nil, nil, err - } - defer result.Close() - - resultList := make([]map[string]interface{}, 0, 10) - for result.Next() { - resultList = append(resultList, result.Record().Values()) - } - //初始返回内容 - dates := make([]time.Time, 0, len(resultList)) - resultMap := make(map[string][]int64, len(dataFields)) - for _, field := range dataFields { - resultMap[field] = make([]int64, 0, len(resultList)) - } - - for _, res := range resultList { - for _, field := range dataFields { - resultMap[field] = append(resultMap[field], common.FmtIntFromInterface(res[field])) - } - t, _ := res["_time"].(time.Time) - dates = append(dates, t) - } - - return dates, resultMap, nil -} - -func (f *fluxQuery) CommonQueryOnce(ctx context.Context, queryApi api.QueryAPI, start, end time.Time, bucket, filters string, fieldsConf *StatisticsFilterConf) (map[string]interface{}, error) { - query := f.getCircularMapFlux(start, end, bucket, filters, fieldsConf) - - log.Info("flux sql=", query) - result, err := queryApi.Query(ctx, query) - if err != nil { - log.Error("flux err=", err) - return nil, err - } - - for result.Next() { - return result.Record().Values(), nil - } - //当某个时间段没有记录时,会返回空 - return map[string]interface{}{}, nil -} - -// CommonWarnStatistics flux查询统计(告警数据用) -func (f *fluxQuery) CommonWarnStatistics(ctx context.Context, queryApi api.QueryAPI, start, end time.Time, bucket, groupBy, filters string, statisticsConf *StatisticsFilterConf) (map[string]*FluxWarnStatistics, error) { - //拼装请求 - query := f.assembleWarnStatisticsFlux(start, end, bucket, groupBy, filters, statisticsConf) - - log.Info("flux sql=", query) - result, err := queryApi.Query(ctx, query) - if err != nil { - log.Error("flux err=", err) - return nil, err - } - - tempMap := make(map[string]map[string]interface{}) - for result.Next() { - key := "" - if v, ok := result.Record().Values()[groupBy]; ok { - key = v.(string) - } - tempMap[key] = result.Record().Values() - } - result.Close() - - resultMap := make(map[string]*FluxWarnStatistics) - - //拼装返回参数 - for key, maps := range tempMap { - resultMap[key] = f.warnFormatFluxResults(maps, statisticsConf.Fields) - } - - return resultMap, nil -} - -// warnFormatFluxResults 格式化告警查询统计的返回数据 -func (f *fluxQuery) warnFormatFluxResults(results map[string]interface{}, fields []string) *FluxWarnStatistics { - result := &FluxWarnStatistics{} - for _, field := range fields { - switch field { - case "total": - result.Total = common.FmtIntFromInterface(results[field]) - case "success": - result.Success = common.FmtIntFromInterface(results[field]) - case "s4xx": - result.S4xx = common.FmtIntFromInterface(results[field]) - case "s5xx": - result.S5xx = common.FmtIntFromInterface(results[field]) - case "p_total": - result.ProxyTotal = common.FmtIntFromInterface(results[field]) - case "p_success": - result.ProxySuccess = common.FmtIntFromInterface(results[field]) - case "p_s4xx": - result.ProxyS4xx = common.FmtIntFromInterface(results[field]) - case "p_s5xx": - result.ProxyS5xx = common.FmtIntFromInterface(results[field]) - case "request": - result.TotalRequest = common.FmtIntFromInterface(results[field]) - case "response": - result.TotalResponse = common.FmtIntFromInterface(results[field]) - case "timing": - result.TotalTiming = common.FmtIntFromInterface(results[field]) - } - } - return result -} - -func (f *fluxQuery) assembleStatisticsFlux(start, end time.Time, bucket, groupBy, filters string, statisticsConf []*StatisticsFilterConf, sortBy string, limit int) string { - limitStr := "" - if limit > 0 { - //按请求量降序 - limitStr = fmt.Sprintf(`|> group() |> sort(columns: ["%s"], desc: true) |> limit(n: %d) `, sortBy, limit) - } - - streams := make([]string, 0, len(statisticsConf)) - for _, conf := range statisticsConf { - //拼装过滤的_field - fields := make([]string, 0, len(conf.Fields)) - for _, field := range conf.Fields { - fields = append(fields, fmt.Sprintf(` r["_field"] == "%s" `, field)) - } - //拼装union所需的数据流 - streams = append(streams, fmt.Sprintf(` -from(bucket: "%s") - |> range(start: %d, stop: %d) - |> filter(fn: (r) => r["_measurement"] == "%s") - %s - |> filter(fn: (r) =>%s) - |> group(columns:["%s","_field"])|> %s -`, bucket, start.Unix(), end.Unix(), conf.Measurement, filters, strings.Join(fields, "or"), groupBy, conf.AggregateFn)) - } - - return fmt.Sprintf(` -union(tables: [ -%s -]) -|> pivot(rowKey: ["%s"], columnKey: ["_field"], valueColumn: "_value") -%s -`, strings.Join(streams, ",\n"), groupBy, limitStr) -} - -func (f *fluxQuery) assembleTendencyFlux(start, end time.Time, bucket, table, filters, fieldConditions, every string, windowOffset string) string { - windowOffsetFlux := "" - if windowOffset != "" { - windowOffsetFlux = fmt.Sprintf(", offset: %s", windowOffset) - } - return fmt.Sprintf(`from(bucket: "%s") - |> range(start: %d, stop: %d) - |> filter(fn: (r) => r["_measurement"] == "%s") - %s - %s - |> group(columns: ["_field"]) - |> aggregateWindow(every: %s, fn: sum, location: {offset: 0ns, zone: "Asia/Shanghai"}, timeSrc: "_start"%s) - |> pivot(rowKey: ["_time"], columnKey: ["_field"], valueColumn: "_value")`, bucket, start.Unix(), end.Unix(), table, - filters, fieldConditions, every, windowOffsetFlux) - -} - -// assembleTendencyFieldCondition 封装趋势图需要的Field数据 -func (f *fluxQuery) assembleTendencyFieldCondition(fieldConditions []string) string { - /* - 比如输入 {"total","success","s4xx","s5xx"} - 返回 |> filter(fn: (r) => r["_field"] == "total" or r["_field"] == "success" or r["_field"] == "s4xx" or r["_field"] == "s5xx") - */ - fields := make([]string, 0, len(fieldConditions)) - for _, field := range fieldConditions { - fields = append(fields, fmt.Sprintf(` r["_field"] == "%s" `, field)) - } - return fmt.Sprintf(`|> filter(fn: (r) => %s )`, strings.Join(fields, "or")) -} - -// 饼状图flux -func (f *fluxQuery) getCircularMapFlux(start, end time.Time, bucket, filters string, fieldsConf *StatisticsFilterConf) string { - fields := make([]string, 0, len(fieldsConf.Fields)) - for _, field := range fieldsConf.Fields { - fields = append(fields, fmt.Sprintf(` r["_field"] == "%s" `, field)) - } - - return fmt.Sprintf(` -from(bucket: "%s") - |> range(start: %d, stop: %d) - |> filter(fn: (r) => r["_measurement"] == "%s") - %s - |> filter(fn: (r) =>%s) - |> group(columns:["_field"]) - |> %s - |> pivot(rowKey: ["_start"], columnKey: ["_field"], valueColumn: "_value")`, bucket, start.Unix(), end.Unix(), fieldsConf.Measurement, filters, strings.Join(fields, "or"), fieldsConf.AggregateFn) -} - -// assembleWarnStatisticsFlux 组装告警用的统计flux -func (f *fluxQuery) assembleWarnStatisticsFlux(start, end time.Time, bucket, groupBy, filters string, statisticsConf *StatisticsFilterConf) string { - - //拼装过滤的_field - fields := make([]string, 0, len(statisticsConf.Fields)) - for _, field := range statisticsConf.Fields { - fields = append(fields, fmt.Sprintf(` r["_field"] == "%s" `, field)) - } - //拼装union所需的数据流 - return fmt.Sprintf(` -from(bucket: "%s") - |> range(start: %d, stop: %d) - |> filter(fn: (r) => r["_measurement"] == "%s") - %s - |> filter(fn: (r) =>%s) - |> group(columns:["%s","_field"]) - |> %s - |> pivot(rowKey: ["%s"], columnKey: ["_field"], valueColumn: "_value") -`, bucket, start.Unix(), end.Unix(), statisticsConf.Measurement, filters, strings.Join(fields, "or"), groupBy, statisticsConf.AggregateFn, groupBy) - -} diff --git a/module/monitor/driver/influxdb-v2/flux/influxdb_config/buckets.yaml b/module/monitor/driver/influxdb-v2/flux/influxdb_config/buckets.yaml deleted file mode 100644 index cb636c1..0000000 --- a/module/monitor/driver/influxdb-v2/flux/influxdb_config/buckets.yaml +++ /dev/null @@ -1,15 +0,0 @@ -- - bucket_name: apinto - retention: 3600 #1个小时 -- - bucket_name: apinto/minute - retention: 604800 #7天 -- - bucket_name: apinto/hour - retention: 7776000 #90天 -- - bucket_name: apinto/day - retention: 157680000 #5年 -- - bucket_name: apinto/week - retention: 0 #永久 \ No newline at end of file diff --git a/module/monitor/driver/influxdb-v2/flux/influxdb_config/tasks.yaml b/module/monitor/driver/influxdb-v2/flux/influxdb_config/tasks.yaml deleted file mode 100644 index f5f09c4..0000000 --- a/module/monitor/driver/influxdb-v2/flux/influxdb_config/tasks.yaml +++ /dev/null @@ -1,1418 +0,0 @@ -- - task_name: "apinto_minute_request_request_v1" - cron: "* * * * *" - offset: "10s" - flux: | - - request_request = - from(bucket: "apinto") - |> range(start: -1m) - |> filter(fn: (r) => r._measurement == "request") - |> filter(fn: (r) => r._field == "request") - |> group( - columns: [ - "api", - "app", - "upstream", - "method", - "node", - "cluster", - "provider", - "_measurement", - ], - ) - request_request - |> sum() - |> set(key: "_field", value: "request") - |> to( - bucket: "apinto/minute", - timeColumn: "_start", - tagColumns: [ - "api", - "app", - "method", - "upstream", - "node", - "cluster", - "provider", - ], - ) - request_request - |> max() - |> set(key: "_field", value: "request_max") - |> to( - bucket: "apinto/minute", - tagColumns: [ - "api", - "app", - "method", - "upstream", - "node", - "cluster", - "provider", - ], - timeColumn: "_start", - ) - request_request - |> min() - |> set(key: "_field", value: "request_min") - |> to( - bucket: "apinto/minute", - timeColumn: "_start", - tagColumns: [ - "api", - "app", - "method", - "upstream", - "node", - "cluster", - "provider", - ], - ) -- - task_name: "apinto_minute_request_response_v1" - cron: "* * * * *" - offset: "12s" - flux: | - - request_response = - from(bucket: "apinto") - |> range(start: -1m) - |> filter(fn: (r) => r._measurement == "request") - |> filter(fn: (r) => r._field == "response") - |> group( - columns: [ - "api", - "app", - "upstream", - "method", - "node", - "cluster", - "provider", - "_measurement", - ], - ) - - request_response - |> sum() - |> set(key: "_field", value: "response") - |> to( - bucket: "apinto/minute", - timeColumn: "_start", - tagColumns: [ - "api", - "app", - "method", - "upstream", - "node", - "cluster", - "provider", - ], - ) - request_response - |> max() - |> set(key: "_field", value: "response_max") - |> to( - bucket: "apinto/minute", - tagColumns: [ - "api", - "app", - "method", - "upstream", - "node", - "cluster", - "provider", - ], - timeColumn: "_start", - ) - request_response - |> min() - |> set(key: "_field", value: "response_min") - |> to( - bucket: "apinto/minute", - timeColumn: "_start", - tagColumns: [ - "api", - "app", - "method", - "upstream", - "node", - "cluster", - "provider", - ], - ) -- - task_name: "apinto_minute_request_retry_v1" - cron: "* * * * *" - offset: "14s" - flux: | - - request_retry = - from(bucket: "apinto") - |> range(start: -1m) - |> filter(fn: (r) => r._measurement == "request") - |> filter(fn: (r) => r._field == "retry") - |> group( - columns: [ - "api", - "app", - "upstream", - "method", - "node", - "cluster", - "provider", - "_measurement", - ], - ) - - request_retry - |> sum() - |> set(key: "_field", value: "retry") - |> to( - bucket: "apinto/minute", - timeColumn: "_start", - tagColumns: [ - "api", - "app", - "method", - "upstream", - "node", - "cluster", - "provider", - ], - ) - request_retry - |> max() - |> set(key: "_field", value: "retry_max") - |> to( - bucket: "apinto/minute", - tagColumns: [ - "api", - "app", - "method", - "upstream", - "node", - "cluster", - "provider", - ], - timeColumn: "_start", - ) - request_retry - |> min() - |> set(key: "_field", value: "retry_min") - |> to( - bucket: "apinto/minute", - timeColumn: "_start", - tagColumns: [ - "api", - "app", - "method", - "upstream", - "node", - "cluster", - "provider", - ], - ) -- - task_name: "apinto_minute_request_status_v1" - cron: "* * * * *" - offset: "16s" - flux: | - - request_status = - from(bucket: "apinto") - |> range(start: -1m) - |> filter(fn: (r) => r._measurement == "request") - |> filter(fn: (r) => r._field == "status") - |> group( - columns: [ - "api", - "app", - "upstream", - "method", - "node", - "cluster", - "provider", - "_measurement", - ], - ) - - request_status - |> count() - |> set(key: "_field", value: "total") - |> to( - bucket: "apinto/minute", - timeColumn: "_start", - tagColumns: [ - "api", - "app", - "method", - "upstream", - "node", - "cluster", - "provider", - ], - ) - request_status - |> filter(fn: (r) => r._value < 400) - |> count() - |> set(key: "_field", value: "success") - |> to( - bucket: "apinto/minute", - tagColumns: [ - "api", - "app", - "method", - "upstream", - "node", - "cluster", - "provider", - ], - timeColumn: "_start", - ) - request_status - |> filter(fn: (r) => r._value >= 400 and r._value < 500) - |> count() - |> set(key: "_field", value: "s4xx") - |> to( - bucket: "apinto/minute", - timeColumn: "_start", - tagColumns: [ - "api", - "app", - "method", - "upstream", - "node", - "cluster", - "provider", - ], - ) - request_status - |> filter(fn: (r) => r._value >= 500) - |> count() - |> set(key: "_field", value: "s5xx") - |> to( - bucket: "apinto/minute", - timeColumn: "_start", - tagColumns: [ - "api", - "app", - "method", - "upstream", - "node", - "cluster", - "provider", - ], - ) -- - task_name: "apinto_minute_request_timing_v1" - cron: "* * * * *" - offset: "18s" - flux: | - - request_timing = - from(bucket: "apinto") - |> range(start: -1m) - |> filter(fn: (r) => r._measurement == "request") - |> filter(fn: (r) => r._field == "timing") - |> group( - columns: [ - "api", - "app", - "upstream", - "method", - "node", - "cluster", - "_measurement", - ], - ) - - request_timing - |> sum() - |> set(key: "_field", value: "timing") - |> to( - bucket: "apinto/minute", - timeColumn: "_start", - tagColumns: [ - "api", - "app", - "method", - "upstream", - "node", - "cluster", - "provider", - ], - ) - request_timing - |> max() - |> set(key: "_field", value: "timing_max") - |> to( - bucket: "apinto/minute", - tagColumns: [ - "api", - "app", - "method", - "upstream", - "node", - "cluster", - "provider", - ], - timeColumn: "_start", - ) - request_timing - |> min() - |> set(key: "_field", value: "timing_min") - |> to( - bucket: "apinto/minute", - timeColumn: "_start", - tagColumns: [ - "api", - "app", - "method", - "upstream", - "node", - "cluster", - "provider", - ], - ) -- - task_name: "apinto_minute_proxy_timing_v1" - cron: "* * * * *" - offset: "20s" - flux: | - - proxy_timing = - from(bucket: "apinto") - |> range(start: -1m) - |> filter(fn: (r) => r._measurement == "proxy") - |> filter(fn: (r) => r._field == "timing") - |> group( - columns: [ - "api", - "app", - "upstream", - "addr", - "method", - "node", - "cluster", - "provider", - "_measurement", - ], - ) - - proxy_timing - |> sum() - |> set(key: "_field", value: "p_timing") - |> to( - bucket: "apinto/minute", - timeColumn: "_start", - tagColumns: [ - "api", - "app", - "method", - "upstream", - "addr", - "node", - "cluster", - "provider", - ], - ) - proxy_timing - |> max() - |> set(key: "_field", value: "p_timing_max") - |> to( - bucket: "apinto/minute", - timeColumn: "_start", - tagColumns: [ - "api", - "app", - "method", - "upstream", - "addr", - "node", - "cluster", - "provider", - ], - ) - proxy_timing - |> min() - |> set(key: "_field", value: "p_timing_min") - |> to( - bucket: "apinto/minute", - timeColumn: "_start", - tagColumns: [ - "api", - "app", - "method", - "upstream", - "addr", - "node", - "cluster", - "provider", - ], - ) -- - task_name: "apinto_minute_proxy_status_v1" - cron: "* * * * *" - offset: "22s" - flux: | - - proxy_status = - from(bucket: "apinto") - |> range(start: -1m) - |> filter(fn: (r) => r._measurement == "proxy") - |> filter(fn: (r) => r._field == "status") - |> group( - columns: [ - "api", - "app", - "upstream", - "addr", - "method", - "node", - "cluster", - "provider", - "_measurement", - ], - ) - - proxy_status - |> count() - |> set(key: "_field", value: "p_total") - |> to( - bucket: "apinto/minute", - timeColumn: "_start", - tagColumns: [ - "api", - "app", - "method", - "upstream", - "addr", - "node", - "cluster", - "provider", - ], - ) - proxy_status - |> filter(fn: (r) => r._value < 400) - |> count() - |> set(key: "_field", value: "p_success") - |> to( - bucket: "apinto/minute", - tagColumns: [ - "api", - "app", - "method", - "upstream", - "addr", - "node", - "cluster", - "provider", - ], - timeColumn: "_start", - ) - proxy_status - |> filter(fn: (r) => r._value >= 400 and r._value < 500) - |> count() - |> set(key: "_field", value: "p_s4xx") - |> to( - bucket: "apinto/minute", - timeColumn: "_start", - tagColumns: [ - "api", - "app", - "method", - "upstream", - "addr", - "node", - "cluster", - "provider", - ], - ) - proxy_status - |> filter(fn: (r) => r._value >= 500) - |> count() - |> set(key: "_field", value: "p_s5xx") - |> to( - bucket: "apinto/minute", - timeColumn: "_start", - tagColumns: [ - "api", - "app", - "method", - "upstream", - "addr", - "node", - "cluster", - "provider", - ], - ) -- - task_name: "apinto_minute_proxy_request_v1" - cron: "* * * * *" - offset: "24s" - flux: | - - proxy_request = - from(bucket: "apinto") - |> range(start: -1m) - |> filter(fn: (r) => r._measurement == "proxy") - |> filter(fn: (r) => r._field == "request") - |> group( - columns: [ - "api", - "app", - "upstream", - "addr", - "method", - "node", - "cluster", - "provider", - "_measurement", - ], - ) - - proxy_request - |> sum() - |> set(key: "_field", value: "p_request") - |> to( - bucket: "apinto/minute", - timeColumn: "_start", - tagColumns: [ - "api", - "app", - "method", - "upstream", - "addr", - "node", - "cluster", - "provider", - ], - ) - proxy_request - |> max() - |> set(key: "_field", value: "p_request_max") - |> to( - bucket: "apinto/minute", - tagColumns: [ - "api", - "app", - "method", - "upstream", - "addr", - "node", - "cluster", - "provider", - ], - timeColumn: "_start", - ) - proxy_request - |> min() - |> set(key: "_field", value: "p_request_min") - |> to( - bucket: "apinto/minute", - timeColumn: "_start", - tagColumns: [ - "api", - "app", - "method", - "upstream", - "addr", - "node", - "cluster", - "provider", - ], - ) -- - task_name: "apinto_minute_proxy_response_v1" - cron: "* * * * *" - offset: "26s" - flux: | - - proxy_response = - from(bucket: "apinto") - |> range(start: -1m) - |> filter(fn: (r) => r._measurement == "proxy") - |> filter(fn: (r) => r._field == "response") - |> group( - columns: [ - "api", - "app", - "upstream", - "addr", - "method", - "node", - "cluster", - "provider", - "_measurement", - ], - ) - proxy_response - |> sum() - |> set(key: "_field", value: "p_response") - |> to( - bucket: "apinto/minute", - timeColumn: "_start", - tagColumns: [ - "api", - "app", - "method", - "upstream", - "addr", - "node", - "cluster", - "provider", - ], - ) - proxy_response - |> max() - |> set(key: "_field", value: "p_response_max") - |> to( - bucket: "apinto/minute", - tagColumns: [ - "api", - "app", - "method", - "upstream", - "addr", - "node", - "cluster", - "provider", - ], - timeColumn: "_start", - ) - proxy_response - |> min() - |> set(key: "_field", value: "p_response_min") - |> to( - bucket: "apinto/minute", - timeColumn: "_start", - tagColumns: [ - "api", - "app", - "method", - "upstream", - "addr", - "node", - "cluster", - "provider", - ], - ) -- - task_name: "apinto_hour_request_v1" - cron: "0 * * * *" - offset: "1m30s" - flux: | - - from(bucket: "apinto/minute") - |> range(start: -1h) - |> filter(fn: (r) => r._measurement == "request") - |> filter( - fn: (r) => - r._field == "total" or r._field == "success" or r._field == "s4xx" or r._field == "s5xx" - or - r._field == "timing" or r._field == "request" or r._field == "response" or r._field - == - "retry", - ) - |> group( - columns: [ - "api", - "app", - "upstream", - "method", - "node", - "cluster", - "provider", - "_field", - "_measurement", - ], - ) - |> sum() - |> to( - bucket: "apinto/hour", - timeColumn: "_start", - tagColumns: [ - "api", - "app", - "method", - "upstream", - "node", - "cluster", - "provider", - ], - ) - from(bucket: "apinto/minute") - |> range(start: -1h) - |> filter(fn: (r) => r._measurement == "request") - |> filter( - fn: (r) => - r._field == "timing_max" or r._field == "request_max" or r._field == "response_max" - or - r._field == "retry_max", - ) - |> group( - columns: [ - "api", - "app", - "upstream", - "method", - "node", - "cluster", - "provider", - "_field", - "_measurement", - ], - ) - |> max() - |> to( - bucket: "apinto/hour", - timeColumn: "_start", - tagColumns: [ - "api", - "app", - "method", - "upstream", - "node", - "cluster", - "provider", - ], - ) - from(bucket: "apinto/minute") - |> range(start: -1h) - |> filter(fn: (r) => r._measurement == "request") - |> filter( - fn: (r) => - r._field == "timing_min" or r._field == "request_min" or r._field == "response_min" - or - r._field == "retry_min", - ) - |> group( - columns: [ - "api", - "app", - "upstream", - "method", - "node", - "cluster", - "provider", - "_field", - "_measurement", - ], - ) - |> max() - |> to( - bucket: "apinto/hour", - timeColumn: "_start", - tagColumns: [ - "api", - "app", - "method", - "upstream", - "node", - "cluster", - "provider", - ], - ) -- - task_name: "apinto_hour_proxy_v1" - cron: "0 * * * *" - offset: "1m45s" - flux: | - - from(bucket: "apinto/minute") - |> range(start: -1h) - |> filter(fn: (r) => r._measurement == "proxy") - |> filter( - fn: (r) => - r._field == "p_total" or r._field == "p_success" or r._field == "p_s4xx" or r._field - == - "p_s5xx" or r._field == "p_timing" or r._field == "p_request" or r._field - == - "p_response" or r._field == "p_retry", - ) - |> group( - columns: [ - "api", - "app", - "upstream", - "addr", - "method", - "node", - "cluster", - "provider", - "_field", - "_measurement", - ], - ) - |> sum() - |> to( - bucket: "apinto/hour", - timeColumn: "_start", - tagColumns: [ - "api", - "app", - "method", - "upstream", - "addr", - "node", - "cluster", - "provider", - ], - ) - - from(bucket: "apinto/minute") - |> range(start: -1h) - |> filter(fn: (r) => r._measurement == "proxy") - |> filter( - fn: (r) => - r._field == "p_timing_max" or r._field == "p_request_max" or r._field - == - "p_response_max" or r._field == "p_retry_max", - ) - |> group( - columns: [ - "api", - "app", - "upstream", - "addr", - "method", - "node", - "cluster", - "provider", - "_field", - "_measurement", - ], - ) - |> max() - |> to( - bucket: "apinto/hour", - timeColumn: "_start", - tagColumns: [ - "api", - "app", - "method", - "upstream", - "addr", - "node", - "cluster", - "provider", - ], - ) - - from(bucket: "apinto/minute") - |> range(start: -1h) - |> filter(fn: (r) => r._measurement == "proxy") - |> filter( - fn: (r) => - r._field == "p_timing_min" or r._field == "p_request_min" or r._field - == - "p_response_min" or r._field == "p_retry_min", - ) - |> group( - columns: [ - "api", - "app", - "upstream", - "addr", - "method", - "node", - "cluster", - "provider", - "_field", - "_measurement", - ], - ) - |> max() - |> to( - bucket: "apinto/hour", - timeColumn: "_start", - tagColumns: [ - "api", - "app", - "method", - "upstream", - "addr", - "node", - "cluster", - "provider", - ], - ) -- - task_name: "apinto_day_request_v1" - cron: "0 0 * * *" - offset: "2m30s" - flux: | - - from(bucket: "apinto/hour") - |> range(start: -1d) - |> filter(fn: (r) => r._measurement == "request") - |> filter( - fn: (r) => - r._field == "total" or r._field == "success" or r._field == "s4xx" or r._field == "s5xx" - or - r._field == "timing" or r._field == "request" or r._field == "response" or r._field - == - "retry", - ) - |> group( - columns: [ - "api", - "app", - "upstream", - "method", - "node", - "cluster", - "provider", - "_field", - ], - ) - |> sum() - |> set(key: "_measurement", value: "request") - |> to( - bucket: "apinto/day", - timeColumn: "_start", - tagColumns: [ - "api", - "app", - "method", - "upstream", - "node", - "cluster", - "provider", - ], - ) - from(bucket: "apinto/hour") - |> range(start: -1d) - |> filter(fn: (r) => r._measurement == "request") - |> filter( - fn: (r) => - r._field == "timing_max" or r._field == "request_max" or r._field == "response_max" - or - r._field == "retry_max", - ) - |> group( - columns: [ - "api", - "app", - "upstream", - "method", - "node", - "cluster", - "provider", - "_field", - ], - ) - |> max() - |> set(key: "_measurement", value: "request") - |> to( - bucket: "apinto/day", - timeColumn: "_start", - tagColumns: [ - "api", - "app", - "method", - "upstream", - "node", - "cluster", - "provider", - ], - ) - from(bucket: "apinto/hour") - |> range(start: -1d) - |> filter(fn: (r) => r._measurement == "request") - |> filter( - fn: (r) => - r._field == "timing_min" or r._field == "request_min" or r._field == "response_min" - or - r._field == "retry_min", - ) - |> group( - columns: [ - "api", - "app", - "upstream", - "method", - "node", - "cluster", - "provider", - "_field", - ], - ) - |> max() - |> set(key: "_measurement", value: "request") - |> to( - bucket: "apinto/day", - timeColumn: "_start", - tagColumns: [ - "api", - "app", - "method", - "upstream", - "node", - "cluster", - "provider", - ], - ) -- - task_name: "apinto_day_proxy_v1" - cron: "0 0 * * *" - offset: "2m45s" - flux: | - - from(bucket: "apinto/hour") - |> range(start: -1d) - |> filter(fn: (r) => r._measurement == "proxy") - |> filter( - fn: (r) => - r._field == "p_total" or r._field == "p_success" or r._field == "p_s4xx" or r._field - == - "p_s5xx" or r._field == "p_timing" or r._field == "p_request" or r._field - == - "p_response" or r._field == "p_retry", - ) - |> group( - columns: [ - "api", - "app", - "upstream", - "addr", - "method", - "node", - "cluster", - "provider", - "_field", - ], - ) - |> sum() - |> set(key: "_measurement", value: "proxy") - |> to( - bucket: "apinto/day", - timeColumn: "_start", - tagColumns: [ - "api", - "app", - "method", - "upstream", - "addr", - "node", - "cluster", - "provider", - ], - ) - - from(bucket: "apinto/hour") - |> range(start: -1d) - |> filter(fn: (r) => r._measurement == "proxy") - |> filter( - fn: (r) => - r._field == "p_timing_max" or r._field == "p_request_max" or r._field - == - "p_response_max" or r._field == "p_retry_max", - ) - |> group( - columns: [ - "api", - "app", - "upstream", - "addr", - "method", - "node", - "cluster", - "provider", - "_field", - ], - ) - |> max() - |> set(key: "_measurement", value: "proxy") - |> to( - bucket: "apinto/day", - timeColumn: "_start", - tagColumns: [ - "api", - "app", - "method", - "upstream", - "addr", - "node", - "cluster", - "provider", - ], - ) - - from(bucket: "apinto/hour") - |> range(start: -1d) - |> filter(fn: (r) => r._measurement == "proxy") - |> filter( - fn: (r) => - r._field == "p_timing_min" or r._field == "p_request_min" or r._field - == - "p_response_min" or r._field == "p_retry_min", - ) - |> group( - columns: [ - "api", - "app", - "upstream", - "addr", - "method", - "node", - "cluster", - "provider", - "_field", - ], - ) - |> max() - |> set(key: "_measurement", value: "proxy") - |> to( - bucket: "apinto/day", - timeColumn: "_start", - tagColumns: [ - "api", - "app", - "method", - "upstream", - "addr", - "node", - "cluster", - "provider", - ], - ) -- - task_name: "apinto_week_request_v1" - cron: "0 0 * * 1" - offset: "3m30s" - flux: | - - from(bucket: "apinto/day") - |> range(start: -1w) - |> filter(fn: (r) => r._measurement == "request") - |> filter( - fn: (r) => - r._field == "total" or r._field == "success" or r._field == "s4xx" or r._field == "s5xx" - or - r._field == "timing" or r._field == "request" or r._field == "response" or r._field - == - "retry", - ) - |> group( - columns: [ - "api", - "app", - "upstream", - "method", - "node", - "cluster", - "provider", - "_field", - ], - ) - |> sum() - |> set(key: "_measurement", value: "request") - |> to( - bucket: "apinto/week", - timeColumn: "_start", - tagColumns: [ - "api", - "app", - "method", - "upstream", - "node", - "cluster", - "provider", - ], - ) - from(bucket: "apinto/day") - |> range(start: -1w) - |> filter(fn: (r) => r._measurement == "request") - |> filter( - fn: (r) => - r._field == "timing_max" or r._field == "request_max" or r._field == "response_max" - or - r._field == "retry_max", - ) - |> group( - columns: [ - "api", - "app", - "upstream", - "method", - "node", - "cluster", - "provider", - "_field", - ], - ) - |> max() - |> set(key: "_measurement", value: "request") - |> to( - bucket: "apinto/week", - timeColumn: "_start", - tagColumns: [ - "api", - "app", - "method", - "upstream", - "node", - "cluster", - "provider", - ], - ) - from(bucket: "apinto/day") - |> range(start: -1w) - |> filter(fn: (r) => r._measurement == "request") - |> filter( - fn: (r) => - r._field == "timing_min" or r._field == "request_min" or r._field == "response_min" - or - r._field == "retry_min", - ) - |> group( - columns: [ - "api", - "app", - "upstream", - "method", - "node", - "cluster", - "provider", - "_field", - ], - ) - |> max() - |> set(key: "_measurement", value: "request") - |> to( - bucket: "apinto/week", - timeColumn: "_start", - tagColumns: [ - "api", - "app", - "method", - "upstream", - "node", - "cluster", - "provider", - ], - ) -- - task_name: "apinto_week_proxy_v1" - cron: "0 0 * * 1" - offset: "3m45s" - flux: | - - from(bucket: "apinto/day") - |> range(start: -1w) - |> filter(fn: (r) => r._measurement == "proxy") - |> filter( - fn: (r) => - r._field == "p_total" or r._field == "p_success" or r._field == "p_s4xx" or r._field - == - "p_s5xx" or r._field == "p_timing" or r._field == "p_request" or r._field - == - "p_response" or r._field == "p_retry", - ) - |> group( - columns: [ - "api", - "app", - "upstream", - "addr", - "method", - "node", - "cluster", - "provider", - "_field", - ], - ) - |> sum() - |> set(key: "_measurement", value: "proxy") - |> to( - bucket: "apinto/week", - timeColumn: "_start", - tagColumns: [ - "api", - "app", - "method", - "upstream", - "addr", - "node", - "cluster", - "provider", - ], - ) - from(bucket: "apinto/day") - |> range(start: -1w) - |> filter(fn: (r) => r._measurement == "proxy") - |> filter( - fn: (r) => - r._field == "p_timing_max" or r._field == "p_request_max" or r._field - == - "p_response_max" or r._field == "p_retry_max", - ) - |> group( - columns: [ - "api", - "app", - "upstream", - "addr", - "method", - "node", - "cluster", - "provider", - "_field", - ], - ) - |> max() - |> set(key: "_measurement", value: "proxy") - |> to( - bucket: "apinto/week", - timeColumn: "_start", - tagColumns: [ - "api", - "app", - "method", - "upstream", - "addr", - "node", - "cluster", - "provider", - ], - ) - from(bucket: "apinto/day") - |> range(start: -1w) - |> filter(fn: (r) => r._measurement == "proxy") - |> filter( - fn: (r) => - r._field == "p_timing_min" or r._field == "p_request_min" or r._field - == - "p_response_min" or r._field == "p_retry_min", - ) - |> group( - columns: [ - "api", - "app", - "upstream", - "addr", - "method", - "node", - "cluster", - "provider", - "_field", - ], - ) - |> max() - |> set(key: "_measurement", value: "proxy") - |> to( - bucket: "apinto/week", - timeColumn: "_start", - tagColumns: [ - "api", - "app", - "method", - "upstream", - "addr", - "node", - "cluster", - "provider", - ], - ) \ No newline at end of file diff --git a/module/monitor/driver/influxdb-v2/flux/init.go b/module/monitor/driver/influxdb-v2/flux/init.go deleted file mode 100644 index ce040b0..0000000 --- a/module/monitor/driver/influxdb-v2/flux/init.go +++ /dev/null @@ -1,18 +0,0 @@ -package flux - -import ( - "reflect" - - "github.com/eolinker/go-common/autowire" -) - -func init() { - autowire.Auto[IFluxQuery](func() reflect.Value { - return reflect.ValueOf(new(fluxQuery)) - }) - - //初始化buckets配置 - initBucketsConfig() - //初始化tasks定时脚本配置 - initTasksConfig() -} diff --git a/module/monitor/driver/influxdb-v2/flux/monitor_flux.go b/module/monitor/driver/influxdb-v2/flux/monitor_flux.go deleted file mode 100644 index 8acbd15..0000000 --- a/module/monitor/driver/influxdb-v2/flux/monitor_flux.go +++ /dev/null @@ -1,37 +0,0 @@ -package flux - -// FluxStatistics flux统计通用字段 -type FluxStatistics struct { - Total int64 `json:"total"` //总数 - Success int64 `json:"success"` //成功数 - ProxyTotal int64 `json:"p_total"` //转发总数 - ProxySuccess int64 `json:"p_success"` //转发成功数 - TotalTiming int64 `json:"timing"` //平均响应时间 - MaxTiming int64 `json:"timing_max"` //最大响应时间 - MinTiming int64 `json:"timing_min"` //最小响应时间 - TotalRequest int64 `json:"request"` //总请求流量 - RequestMax int64 `json:"request_max"` //最大流量 - RequestMin int64 `json:"request_min"` //最小流量 -} - -// FluxWarnStatistics flux统计告警通用字段 -type FluxWarnStatistics struct { - Total int64 `json:"total"` //总数 - Success int64 `json:"success"` //成功数 - S4xx int64 `json:"s4xx"` - S5xx int64 `json:"s5xx"` - ProxyTotal int64 `json:"p_total"` //转发总数 - ProxySuccess int64 `json:"p_success"` //转发成功数 - ProxyS4xx int64 `json:"p_s4xx"` - ProxyS5xx int64 `json:"p_s5xx"` - TotalTiming int64 `json:"timing"` //平均响应时间 - TotalRequest int64 `json:"request"` //总请求流量 - TotalResponse int64 `json:"response"` //总响应流量 -} - -// StatisticsFilterConf 统计表过滤_field的配置 -type StatisticsFilterConf struct { - Measurement string - AggregateFn string - Fields []string -} diff --git a/module/monitor/driver/influxdb-v2/flux/tasks_config.go b/module/monitor/driver/influxdb-v2/flux/tasks_config.go deleted file mode 100644 index 54b595a..0000000 --- a/module/monitor/driver/influxdb-v2/flux/tasks_config.go +++ /dev/null @@ -1,34 +0,0 @@ -package flux - -import ( - _ "embed" - - "gopkg.in/yaml.v3" -) - -//go:embed influxdb_config/tasks.yaml -var tasksData []byte - -var ( - taskList []*TaskConf -) - -type TaskConf struct { - TaskName string `yaml:"task_name"` - Cron string `yaml:"cron"` - Offset string `yaml:"offset"` - Flux string `yaml:"flux"` -} - -func initTasksConfig() { - conf := make([]*TaskConf, 0, 15) - err := yaml.Unmarshal(tasksData, &conf) - if err != nil { - panic(err) - } - taskList = conf -} - -func GetTaskConfigList() []*TaskConf { - return taskList -} diff --git a/module/monitor/driver/influxdb-v2/influxdb-v2.go b/module/monitor/driver/influxdb-v2/influxdb-v2.go deleted file mode 100644 index fa7d528..0000000 --- a/module/monitor/driver/influxdb-v2/influxdb-v2.go +++ /dev/null @@ -1,61 +0,0 @@ -package influxdb_v2 - -import ( - "encoding/json" - "fmt" - "net/url" - - "github.com/eolinker/go-common/autowire" - - "github.com/eolinker/apipark/module/monitor/driver/influxdb-v2/flux" - - "github.com/eolinker/apipark/module/monitor/driver" -) - -var _ driver.IDriver = (*influxdbV2)(nil) - -const ( - name = "influxdb-v2" -) - -func init() { - d := newInfluxdbV2() - autowire.Autowired(d) - driver.Register(d) -} - -type InfluxdbV2Config struct { - Addr string `json:"addr"` - Token string `json:"token"` - Org string `json:"org"` -} - -func newInfluxdbV2() *influxdbV2 { - return &influxdbV2{} -} - -type influxdbV2 struct { - fluxQuery flux.IFluxQuery `autowired:""` -} - -func (i *influxdbV2) Name() string { - return name -} - -func (i *influxdbV2) Check(cfg string) error { - var data InfluxdbV2Config - err := json.Unmarshal([]byte(cfg), &data) - if err != nil { - return err - } - - _, err = url.Parse(data.Addr) - if err != nil { - return fmt.Errorf("addr is invalid") - } - return nil -} - -func (i *influxdbV2) Create(cfg string) (driver.IExecutor, error) { - return newExecutor(cfg, i.fluxQuery) -} diff --git a/module/monitor/driver/influxdb-v2/util.go b/module/monitor/driver/influxdb-v2/util.go deleted file mode 100644 index 85d2bfc..0000000 --- a/module/monitor/driver/influxdb-v2/util.go +++ /dev/null @@ -1,189 +0,0 @@ -package influxdb_v2 - -import ( - "fmt" - "strconv" - "strings" - "time" - - "github.com/eolinker/apipark/service/monitor" -) - -const ( - oneHour = 3600 - oneDay = 24 * oneHour - tenDay = 10 * oneDay - oneYear = 365 * oneDay - - bucketMinuteRetention = (7 - 1) * oneDay - bucketHourRetention = (90 - 1) * oneDay - bucketDayRetention = (5*365 - 1) * oneDay - - bucketMinute = "apinto/minute" - bucketHour = "apinto/hour" - bucketDay = "apinto/day" - bucketWeek = "apinto/week" - - timeZone = "Asia/Shanghai" -) - -// formatStartTimeHour 将time格式化为小时整 -func formatStartTimeHour(t time.Time, location *time.Location) time.Time { - return time.Date(t.Year(), t.Month(), t.Day(), t.Hour(), 0, 0, 0, location) -} - -// formatStartTimeDay 将time格式化为天整 -func formatStartTimeDay(t time.Time, location *time.Location) time.Time { - return time.Date(t.Year(), t.Month(), t.Day(), 0, 0, 0, 0, location) -} - -// formatStartTimeDay 将startTime向前移到周一,因为week桶里的time是每个周一才有数据 -func formatStartTimeToMonday(t time.Time, location *time.Location) time.Time { - var dayDiff int - switch t.Weekday() { - case time.Monday: - dayDiff = 0 - case time.Tuesday: - dayDiff = -1 - case time.Wednesday: - dayDiff = -2 - case time.Thursday: - dayDiff = -3 - case time.Friday: - dayDiff = -4 - case time.Saturday: - dayDiff = -5 - case time.Sunday: - dayDiff = -6 - } - - return time.Date(t.Year(), t.Month(), t.Day()+dayDiff, 0, 0, 0, 0, location) -} - -// FormatFloat64 float64保留places位小数 -func FormatFloat64(f float64, places int) float64 { - formatStr := "%." + strconv.Itoa(places) + "f" - f64, _ := strconv.ParseFloat(fmt.Sprintf(formatStr, f), 64) - return f64 -} - -func formatFilter(wheres []monitor.MonWhereItem) string { - filter := `` - if len(wheres) > 0 { - filters := make([]string, 0, len(wheres)) - for _, where := range wheres { - if len(where.Values) > 0 { - wl := make([]string, 0, len(where.Values)) - for _, v := range where.Values { - wl = append(wl, fmt.Sprintf(fmt.Sprintf(`r["%s"] == "%s"`, where.Key, v))) - } - filters = append(filters, fmt.Sprint("(", strings.Join(wl, " or "), ")")) - } - } - filter = fmt.Sprint(`|> filter(fn:(r)=>`, strings.Join(filters, " and "), ")") - } - return filter -} - -// getTimeIntervalAndBucket 根据start和end来获取窗口时间间隔,窗口偏移量offset,以及使用的bucket, 查询的startTime也会格式化 -func getTimeIntervalAndBucket(startTime, endTime time.Time) (time.Time, string, string, string) { - //根据start距离现在的时长算出可使用的最小桶 - minimumBucket := "" - startToNow := time.Now().Unix() - startTime.Unix() - if startToNow <= bucketMinuteRetention { - minimumBucket = bucketMinute - } else if startToNow <= bucketHourRetention { - minimumBucket = bucketHour - } else if startToNow <= bucketDayRetention { - minimumBucket = bucketDay - } else { - minimumBucket = bucketWeek - } - - //结合可使用的最小桶,根据end-start时间间隔来得出合适的桶和趋势图时间间隔 - diff := endTime.Unix() - startTime.Unix() - location, _ := time.LoadLocation(timeZone) - if diff <= oneHour { - - switch minimumBucket { - case bucketMinute: - return startTime, "1m", "", bucketMinute - case bucketHour: - //start变成小时整 - newStart := formatStartTimeHour(startTime, location) - return newStart, "1h", "", bucketHour - case bucketDay: - //start 变成一天整 - newStart := formatStartTimeDay(startTime, location) - return newStart, "1d", "", bucketDay - case bucketWeek: - //将startTime往前顺延到周一 - newStart := formatStartTimeToMonday(startTime, location) - return newStart, "1w", "-4d", bucketWeek - } - - } else if diff <= oneDay { - - switch minimumBucket { - case bucketMinute: - offset := "" - offsetTime := startTime.Minute() % 5 - if offsetTime != 0 { - offset = fmt.Sprintf("%dm", offsetTime) - } - return startTime, "5m", offset, bucketMinute - - case bucketHour: - newStart := formatStartTimeHour(startTime, location) - return newStart, "1h", "", bucketHour - case bucketDay: - newStart := formatStartTimeDay(startTime, location) - return newStart, "1d", "", bucketDay - case bucketWeek: - //将startTime往前顺延到周一 - newStart := formatStartTimeToMonday(startTime, location) - return newStart, "1w", "-4d", bucketWeek - } - - } else if diff <= tenDay { - - switch minimumBucket { - case bucketMinute, bucketHour: - newStart := formatStartTimeHour(startTime, location) - return newStart, "1h", "", bucketHour - case bucketDay: - newStart := formatStartTimeDay(startTime, location) - return newStart, "1d", "", bucketDay - case bucketWeek: - //将startTime往前顺延到周一 - newStart := formatStartTimeToMonday(startTime, location) - return newStart, "1w", "-4d", bucketWeek - } - - } else if diff < oneYear { - - switch minimumBucket { - case bucketMinute, bucketHour, bucketDay: - newStart := formatStartTimeDay(startTime, location) - return newStart, "1d", "", bucketDay - case bucketWeek: - //将startTime往前顺延到周一 - newStart := formatStartTimeToMonday(startTime, location) - return newStart, "1w", "-4d", bucketWeek - } - - } - - //end-start大于1年 时间间隔为1周 - //将startTime往前顺延到周一 - newStart := formatStartTimeToMonday(startTime, location) - return newStart, "1w", "-4d", bucketWeek -} - -func formatMessageTrendData(data []int64) []float64 { - floatData := make([]float64, 0, len(data)) - for _, d := range data { - floatData = append(floatData, FormatFloat64(float64(d)/1024, 2)) - } - return floatData -} diff --git a/module/monitor/driver/manager.go b/module/monitor/driver/manager.go deleted file mode 100644 index 03babe2..0000000 --- a/module/monitor/driver/manager.go +++ /dev/null @@ -1,61 +0,0 @@ -package driver - -import ( - "errors" - - "github.com/eolinker/eosc" -) - -var ( - ErrDriverNotFound = errors.New("driver not found") -) - -type Manager struct { - drivers eosc.Untyped[string, IDriver] -} - -var ( - manager = NewManager() -) - -func NewManager() *Manager { - return &Manager{ - drivers: eosc.BuildUntyped[string, IDriver](), - } -} - -func (m *Manager) Register(driver IDriver) { - m.drivers.Set(driver.Name(), driver) -} - -func (m *Manager) Get(name string) (IDriver, bool) { - return m.drivers.Get(name) -} - -func (m *Manager) Names() []string { - return m.drivers.Keys() -} - -func Get(name string) (IDriver, bool) { - return manager.Get(name) -} - -func Register(driver IDriver) { - manager.Register(driver) -} - -func CreateExecutor(name string, cfg string) (IExecutor, error) { - d, has := manager.Get(name) - if !has { - return nil, ErrDriverNotFound - } - return d.Create(cfg) -} - -func Check(name string, cfg string) error { - d, has := manager.Get(name) - if !has { - return ErrDriverNotFound - } - return d.Check(cfg) -} diff --git a/module/monitor/dto/input.go b/module/monitor/dto/input.go deleted file mode 100644 index 5b5f70b..0000000 --- a/module/monitor/dto/input.go +++ /dev/null @@ -1,31 +0,0 @@ -package monitor_dto - -type MonWhereItem struct { - Key string - Operation string // 表达式,默认为 =,多个为 in,可以用其他 - Values []string -} - -const ( - DataTypeApi = "api" - DataTypeProvider = "provider" - DataTypeSubscriber = "subscriber" -) - -type Top10Input struct { - *CommonInput - DataType string `json:"data_type"` -} - -type CommonInput struct { - //Partitions []string `json:"clusters"` - Start int64 `json:"start"` - End int64 `json:"end"` -} - -type StatisticInput struct { - Apis []string `json:"apis"` - Projects []string `json:"projects"` - Path string `json:"path"` - *CommonInput -} diff --git a/module/monitor/dto/output.go b/module/monitor/dto/output.go deleted file mode 100644 index fb417d7..0000000 --- a/module/monitor/dto/output.go +++ /dev/null @@ -1,129 +0,0 @@ -package monitor_dto - -import ( - "time" - - "github.com/eolinker/apipark/service/monitor" - - "github.com/eolinker/go-common/auto" -) - -type ApiStatisticItem struct { - *ApiStatisticBasicItem - IsRed bool `json:"is_red"` //是否标红 -} - -type ApiStatisticBasicItem struct { - Id string `json:"id"` //apiID - Name string `json:"name"` //api名称 - Path string `json:"path"` - Project auto.Label `json:"project" aolabel:"project"` - *MonCommonData -} - -type ProjectStatisticItem struct { - *ProjectStatisticBasicItem - IsRed bool `json:"is_red"` //是否标红 -} - -type ProjectStatisticBasicItem struct { - Id string `json:"id"` //订阅方ID - Name string `json:"name"` //订阅方名称 - *MonCommonData -} - -// MonSummaryOutput 请求/转发统计 -type MonSummaryOutput struct { - Total int64 `json:"total"` // 请求总数 - Success int64 `json:"success"` //请求成功数 - Fail int64 `json:"fail"` //请求失败数 - Status4Xx int64 `json:"status_4xx"` //状态码4xx数 - Status5Xx int64 `json:"status_5xx"` //状态码5xx数 -} - -func ToMonSummaryOutput(output *monitor.Summary) *MonSummaryOutput { - return &MonSummaryOutput{ - Total: output.Total, - Success: output.Success, - Fail: output.Fail, - Status4Xx: output.Status4Xx, - Status5Xx: output.Status5Xx, - } -} - -type MonMessageTrend struct { - Dates []time.Time `json:"dates"` - ReqMessage []float64 `json:"req_message"` - RespMessage []float64 `json:"resp_message"` -} - -func ToMonMessageTrend(item *monitor.MonMessageTrend) *MonMessageTrend { - return &MonMessageTrend{ - Dates: item.Dates, - ReqMessage: item.ReqMessage, - RespMessage: item.RespMessage, - } -} - -// MonCommonData 通用字段 -type MonCommonData struct { - RequestTotal int64 `json:"request_total"` //请求总数 - RequestSuccess int64 `json:"request_success"` //请求成功数 - RequestRate float64 `json:"request_rate"` //请求成功率 - ProxyTotal int64 `json:"proxy_total"` //转发总数 - ProxySuccess int64 `json:"proxy_success"` //转发成功数 - ProxyRate float64 `json:"proxy_rate"` //转发成功率 - StatusFail int64 `json:"status_fail"` //失败状态数 - AvgResp float64 `json:"avg_resp"` //平均响应时间 - MaxResp int64 `json:"max_resp"` //最大响应时间 - MinResp int64 `json:"min_resp"` //最小响应时间 - AvgTraffic float64 `json:"avg_traffic"` //平均流量 - MaxTraffic int64 `json:"max_traffic"` //最大流量 - MinTraffic int64 `json:"min_traffic"` //最小流量 -} - -func ToMonCommonData(item monitor.MonCommonData) *MonCommonData { - return &MonCommonData{ - RequestTotal: item.RequestTotal, - RequestSuccess: item.RequestSuccess, - RequestRate: item.RequestRate, - ProxyTotal: item.ProxyTotal, - ProxySuccess: item.ProxySuccess, - ProxyRate: item.ProxyRate, - StatusFail: item.StatusFail, - AvgResp: item.AvgResp, - MaxResp: item.MaxResp, - MinResp: item.MinResp, - AvgTraffic: item.AvgTraffic, - MaxTraffic: item.MaxTraffic, - MinTraffic: item.MinTraffic, - } -} - -type MonInvokeCountTrend struct { - Date []time.Time `json:"date"` - Status5XX []int64 `json:"status_5xx"` - Status4XX []int64 `json:"status_4xx"` - ProxyRate []float64 `json:"proxy_rate"` - ProxyTotal []int64 `json:"proxy_total"` - RequestRate []float64 `json:"request_rate"` - RequestTotal []int64 `json:"request_total"` -} - -func ToMonInvokeCountTrend(item *monitor.MonInvokeCountTrend) *MonInvokeCountTrend { - return &MonInvokeCountTrend{ - Date: item.Date, - Status5XX: item.Status5XX, - Status4XX: item.Status4XX, - ProxyRate: item.ProxyRate, - ProxyTotal: item.ProxyTotal, - RequestRate: item.RequestRate, - RequestTotal: item.RequestTotal, - } -} - -type MonMessageChart struct { - Date []time.Time `json:"date"` - Request []float64 `json:"request"` - Response []float64 `json:"response"` -} diff --git a/module/monitor/iml.go b/module/monitor/iml.go deleted file mode 100644 index aa006f1..0000000 --- a/module/monitor/iml.go +++ /dev/null @@ -1,750 +0,0 @@ -package monitor - -import ( - "context" - "errors" - "fmt" - "sort" - "time" - - "github.com/eolinker/apipark/service/service" - - "github.com/eolinker/apipark/service/subscribe" - - "github.com/eolinker/apipark/service/project" - - "github.com/eolinker/apipark/service/cluster" - - "github.com/eolinker/apipark/module/monitor/driver" - - "github.com/eolinker/go-common/auto" - - "github.com/eolinker/go-common/utils" - - "github.com/eolinker/apipark/service/api" - - "github.com/eolinker/apipark/service/partition" - - "github.com/eolinker/apipark/service/monitor" - - monitor_dto "github.com/eolinker/apipark/module/monitor/dto" -) - -var ( - _ IMonitorStatisticModule = (*imlMonitorStatisticModule)(nil) -) - -type imlMonitorStatisticModule struct { - monitorStatisticCacheService monitor.IMonitorStatisticsCache `autowired:""` - partitionService partition.IPartitionService `autowired:""` - subscribeService subscribe.ISubscribeService `autowired:""` - serviceService service.IServiceService `autowired:""` - serviceApiService service.IApiService `autowired:""` - projectPartitionService project.IProjectPartitionsService `autowired:""` - clusterService cluster.IClusterService `autowired:""` - monitorService monitor.IMonitorService `autowired:""` - projectService project.IProjectService `autowired:""` - apiService api.IAPIService `autowired:""` -} - -func (i *imlMonitorStatisticModule) InvokeTrendWithSubscriberAndApi(ctx context.Context, partitionId string, apiId string, subscriberId string, input *monitor_dto.CommonInput) (*monitor_dto.MonInvokeCountTrend, string, error) { - - wheres, err := i.genCommonWheres(ctx, partitionId) - if err != nil { - return nil, "", err - } - wheres = append(wheres, monitor.MonWhereItem{ - Key: "api", - Operation: "=", - Values: []string{apiId}, - }, monitor.MonWhereItem{ - Key: "app", - Operation: "=", - Values: []string{subscriberId}, - }) - executor, err := i.getExecutor(ctx, partitionId) - if err != nil { - return nil, "", err - } - result, timeInterval, err := executor.InvokeTrend(ctx, formatTimeByMinute(input.Start), formatTimeByMinute(input.End), wheres) - if err != nil { - return nil, "", err - } - return monitor_dto.ToMonInvokeCountTrend(result), timeInterval, nil -} - -func (i *imlMonitorStatisticModule) InvokeTrendWithProviderAndApi(ctx context.Context, partitionId string, providerId string, apiId string, input *monitor_dto.CommonInput) (*monitor_dto.MonInvokeCountTrend, string, error) { - - wheres, err := i.genCommonWheres(ctx, partitionId) - if err != nil { - return nil, "", err - } - wheres = append(wheres, monitor.MonWhereItem{ - Key: "api", - Operation: "=", - Values: []string{apiId}, - }, monitor.MonWhereItem{ - Key: "provider", - Operation: "=", - Values: []string{providerId}, - }) - executor, err := i.getExecutor(ctx, partitionId) - if err != nil { - return nil, "", err - } - result, timeInterval, err := executor.InvokeTrend(ctx, formatTimeByMinute(input.Start), formatTimeByMinute(input.End), wheres) - if err != nil { - return nil, "", err - } - return monitor_dto.ToMonInvokeCountTrend(result), timeInterval, nil -} - -func (i *imlMonitorStatisticModule) SubscriberStatisticsOnApi(ctx context.Context, partitionId string, apiId string, input *monitor_dto.StatisticInput) ([]*monitor_dto.ProjectStatisticBasicItem, error) { - return i.statisticOnApi(ctx, partitionId, apiId, "app", input) -} - -func (i *imlMonitorStatisticModule) ProviderStatisticsOnApi(ctx context.Context, partitionId string, apiId string, input *monitor_dto.StatisticInput) ([]*monitor_dto.ProjectStatisticBasicItem, error) { - return i.statisticOnApi(ctx, partitionId, apiId, "provider", input) -} - -func (i *imlMonitorStatisticModule) statisticOnApi(ctx context.Context, partitionId string, apiId string, groupBy string, input *monitor_dto.StatisticInput) ([]*monitor_dto.ProjectStatisticBasicItem, error) { - _, err := i.partitionService.Get(ctx, partitionId) - if err != nil { - return nil, err - } - var projects []*project.Project - switch groupBy { - case "app": - projects, err = i.projectService.AppList(ctx) - - case "provider": - pp, err := i.projectPartitionService.ListByPartition(ctx, partitionId) - if err != nil { - return nil, err - } - - projects, err = i.projectService.List(ctx, utils.SliceToSlice(pp, func(t *project.Partition) string { return t.Project })...) - default: - return nil, errors.New("invalid group by") - } - if err != nil { - return nil, err - } - - wheres, err := i.genCommonWheres(ctx, partitionId) - if err != nil { - return nil, err - } - wheres = append(wheres, monitor.MonWhereItem{ - Key: "api", - Operation: "=", - Values: []string{apiId}, - }) - - statisticMap, err := i.statistics(ctx, partitionId, groupBy, formatTimeByMinute(input.Start), formatTimeByMinute(input.End), wheres, 0) - if err != nil { - return nil, err - } - - result := make([]*monitor_dto.ProjectStatisticBasicItem, 0, len(statisticMap)) - for _, item := range projects { - - statisticItem := &monitor_dto.ProjectStatisticBasicItem{ - Id: item.Id, - Name: item.Name, - MonCommonData: new(monitor_dto.MonCommonData), - } - if val, ok := statisticMap[item.Id]; ok { - statisticItem.MonCommonData = monitor_dto.ToMonCommonData(val) - delete(statisticMap, item.Id) - } - result = append(result, statisticItem) - } - for key, item := range statisticMap { - statisticItem := &monitor_dto.ProjectStatisticBasicItem{ - Id: key, - Name: "未知系统-" + key, - MonCommonData: monitor_dto.ToMonCommonData(item), - } - - if key == "-" { - statisticItem.Name = "无系统" - } - result = append(result, statisticItem) - } - sort.Slice(result, func(i, j int) bool { - return result[i].RequestTotal > result[j].RequestTotal - }) - return result, nil -} - -func (i *imlMonitorStatisticModule) ApiStatisticsOnSubscriber(ctx context.Context, partitionId string, subscriberId string, input *monitor_dto.StatisticInput) ([]*monitor_dto.ApiStatisticBasicItem, error) { - _, err := i.partitionService.Get(ctx, partitionId) - if err != nil { - return nil, err - } - // 根据订阅ID查询订阅的服务列表 - subscriptions, err := i.subscribeService.MySubscribeServices(ctx, subscriberId, nil, nil) - if err != nil { - return nil, err - } - serviceIds := utils.SliceToSlice(subscriptions, func(t *subscribe.Subscribe) string { - return t.Service - }) - serviceApis, err := i.serviceApiService.List(ctx, serviceIds...) - if err != nil { - return nil, err - } - serviceApiMap := make(map[string]struct{}) - apiIds := utils.SliceToSlice(serviceApis, func(t *service.Api) string { - return t.Aid - }, func(a *service.Api) bool { - _, ok := serviceApiMap[a.Aid] - if ok { - return false - } - serviceApiMap[a.Aid] = struct{}{} - return true - }) - - wheres, err := i.genCommonWheres(ctx, partitionId) - if err != nil { - return nil, err - } - wheres = append(wheres, monitor.MonWhereItem{ - Key: "app", - Operation: "=", - Values: []string{subscriberId}, - }) - - apiInfos, err := i.apiService.ListInfo(ctx, apiIds...) - if err != nil { - return nil, err - } - return i.apiStatistics(ctx, partitionId, apiInfos, formatTimeByMinute(input.Start), formatTimeByMinute(input.End), wheres, 0) -} - -func (i *imlMonitorStatisticModule) ApiStatisticsOnProvider(ctx context.Context, partitionId string, providerId string, input *monitor_dto.StatisticInput) ([]*monitor_dto.ApiStatisticBasicItem, error) { - _, err := i.partitionService.Get(ctx, partitionId) - if err != nil { - return nil, err - } - - apiInfos, err := i.apiService.ListInfoForProject(ctx, providerId) - if err != nil { - return nil, err - } - wheres, err := i.genCommonWheres(ctx, partitionId) - if err != nil { - return nil, err - } - wheres = append(wheres, monitor.MonWhereItem{ - Key: "provider", - Operation: "=", - Values: []string{providerId}, - }) - - return i.apiStatistics(ctx, partitionId, apiInfos, formatTimeByMinute(input.Start), formatTimeByMinute(input.End), wheres, 0) -} - -func (i *imlMonitorStatisticModule) apiStatistics(ctx context.Context, partitionId string, apiInfos []*api.APIInfo, start time.Time, end time.Time, wheres []monitor.MonWhereItem, limit int) ([]*monitor_dto.ApiStatisticBasicItem, error) { - statisticMap, err := i.statistics(ctx, partitionId, "api", start, end, wheres, limit) - if err != nil { - return nil, err - } - - result := make([]*monitor_dto.ApiStatisticBasicItem, 0, len(statisticMap)) - for _, item := range apiInfos { - - statisticItem := &monitor_dto.ApiStatisticBasicItem{ - Id: item.UUID, - Name: item.Name, - Path: item.Path, - Project: auto.UUID(item.Project), - MonCommonData: new(monitor_dto.MonCommonData), - } - if val, ok := statisticMap[item.UUID]; ok { - statisticItem.MonCommonData = monitor_dto.ToMonCommonData(val) - delete(statisticMap, item.UUID) - } - result = append(result, statisticItem) - } - for key, item := range statisticMap { - statisticItem := &monitor_dto.ApiStatisticBasicItem{ - Id: key, - Name: "未知API-" + key, - MonCommonData: monitor_dto.ToMonCommonData(item), - } - - if key == "-" { - statisticItem.Name = "无API" - } - result = append(result, statisticItem) - } - sort.Slice(result, func(i, j int) bool { - return result[i].RequestTotal > result[j].RequestTotal - }) - return result, nil -} - -func (i *imlMonitorStatisticModule) APITrend(ctx context.Context, partitionId string, apiId string, input *monitor_dto.CommonInput) (*monitor_dto.MonInvokeCountTrend, string, error) { - - wheres, err := i.genCommonWheres(ctx, partitionId) - if err != nil { - return nil, "", err - } - wheres = append(wheres, monitor.MonWhereItem{ - Key: "api", - Operation: "=", - Values: []string{apiId}, - }) - executor, err := i.getExecutor(ctx, partitionId) - if err != nil { - return nil, "", err - } - result, timeInterval, err := executor.InvokeTrend(ctx, formatTimeByMinute(input.Start), formatTimeByMinute(input.End), wheres) - if err != nil { - return nil, "", err - } - return monitor_dto.ToMonInvokeCountTrend(result), timeInterval, nil -} - -func (i *imlMonitorStatisticModule) ProviderTrend(ctx context.Context, partitionId string, providerId string, input *monitor_dto.CommonInput) (*monitor_dto.MonInvokeCountTrend, string, error) { - - wheres, err := i.genCommonWheres(ctx, partitionId) - if err != nil { - return nil, "", err - } - wheres = append(wheres, monitor.MonWhereItem{ - Key: "provider", - Operation: "=", - Values: []string{providerId}, - }) - executor, err := i.getExecutor(ctx, partitionId) - if err != nil { - return nil, "", err - } - result, timeInterval, err := executor.InvokeTrend(ctx, formatTimeByMinute(input.Start), formatTimeByMinute(input.End), wheres) - if err != nil { - return nil, "", err - } - return monitor_dto.ToMonInvokeCountTrend(result), timeInterval, nil -} - -func (i *imlMonitorStatisticModule) SubscriberTrend(ctx context.Context, partitionId string, subscriberId string, input *monitor_dto.CommonInput) (*monitor_dto.MonInvokeCountTrend, string, error) { - - wheres, err := i.genCommonWheres(ctx, partitionId) - if err != nil { - return nil, "", err - } - wheres = append(wheres, monitor.MonWhereItem{ - Key: "app", - Operation: "=", - Values: []string{subscriberId}, - }) - executor, err := i.getExecutor(ctx, partitionId) - if err != nil { - return nil, "", err - } - result, timeInterval, err := executor.InvokeTrend(ctx, formatTimeByMinute(input.Start), formatTimeByMinute(input.End), wheres) - if err != nil { - return nil, "", err - } - return monitor_dto.ToMonInvokeCountTrend(result), timeInterval, nil -} - -func (i *imlMonitorStatisticModule) projectStatistics(ctx context.Context, partitionId string, projects []*project.Project, groupBy string, start time.Time, end time.Time, wheres []monitor.MonWhereItem, limit int) ([]*monitor_dto.ProjectStatisticBasicItem, error) { - statisticMap, err := i.statistics(ctx, partitionId, groupBy, start, end, wheres, limit) - if err != nil { - return nil, err - } - - result := make([]*monitor_dto.ProjectStatisticBasicItem, 0, len(statisticMap)) - for _, item := range projects { - statisticItem := &monitor_dto.ProjectStatisticBasicItem{ - Id: item.Id, - Name: item.Name, - MonCommonData: new(monitor_dto.MonCommonData), - } - if val, ok := statisticMap[item.Id]; ok { - statisticItem.MonCommonData = monitor_dto.ToMonCommonData(val) - delete(statisticMap, item.Id) - } - result = append(result, statisticItem) - } - for key, item := range statisticMap { - statisticItem := &monitor_dto.ProjectStatisticBasicItem{ - Id: key, - Name: "未知系统-" + key, - MonCommonData: monitor_dto.ToMonCommonData(item), - } - - if key == "-" { - statisticItem.Name = "无系统" - } - result = append(result, statisticItem) - } - sort.Slice(result, func(i, j int) bool { - return result[i].RequestTotal > result[j].RequestTotal - }) - return result, nil -} - -func (i *imlMonitorStatisticModule) SubscriberStatistics(ctx context.Context, partitionId string, input *monitor_dto.StatisticInput) ([]*monitor_dto.ProjectStatisticBasicItem, error) { - _, err := i.partitionService.Get(ctx, partitionId) - if err != nil { - return nil, err - } - - projects, err := i.projectService.AppList(ctx, input.Projects...) - if err != nil { - return nil, err - } - projectIds := utils.SliceToSlice(projects, func(p *project.Project) string { - return p.Id - }) - - wheres, err := i.genCommonWheres(ctx, partitionId) - if err != nil { - return nil, err - } - - if len(projectIds) > 0 { - wheres = append(wheres, monitor.MonWhereItem{ - Key: "app", - Operation: "in", - Values: projectIds, - }) - } - - return i.projectStatistics(ctx, partitionId, projects, "app", formatTimeByMinute(input.Start), formatTimeByMinute(input.End), wheres, 0) -} - -func (i *imlMonitorStatisticModule) projectsByPartition(ctx context.Context, partitionId string, inputProjects []string) ([]*project.Project, error) { - projectIds := make([]string, 0) - // 获取当前分区的系统列表 - pp, err := i.projectPartitionService.ListByPartition(ctx, partitionId) - if err != nil { - return nil, err - } - projectPartitionMap := utils.SliceToMap(pp, func(t *project.Partition) string { - projectIds = append(projectIds, t.Project) - return t.Project - }) - if len(inputProjects) > 0 { - projectIds = utils.SliceToSlice(inputProjects, func(s string) string { - return s - }, func(s string) bool { - _, ok := projectPartitionMap[s] - return ok - }) - if len(projectIds) == 0 { - return nil, nil - } - } - - return i.projectService.List(ctx, projectIds...) -} - -func (i *imlMonitorStatisticModule) ProviderStatistics(ctx context.Context, partitionId string, input *monitor_dto.StatisticInput) ([]*monitor_dto.ProjectStatisticBasicItem, error) { - _, err := i.partitionService.Get(ctx, partitionId) - if err != nil { - return nil, err - } - - projects, err := i.projectsByPartition(ctx, partitionId, input.Projects) - if err != nil { - return nil, err - } - - wheres, err := i.genCommonWheres(ctx, partitionId) - if err != nil { - return nil, err - } - - if len(input.Projects) > 0 { - wheres = append(wheres, monitor.MonWhereItem{ - Key: "provider", - Operation: "in", - Values: input.Projects, - }) - } - - return i.projectStatistics(ctx, partitionId, projects, "provider", formatTimeByMinute(input.Start), formatTimeByMinute(input.End), wheres, 0) -} - -func (i *imlMonitorStatisticModule) ApiStatistics(ctx context.Context, partitionId string, input *monitor_dto.StatisticInput) ([]*monitor_dto.ApiStatisticBasicItem, error) { - _, err := i.partitionService.Get(ctx, partitionId) - if err != nil { - return nil, err - } - wheres, err := i.genCommonWheres(ctx, partitionId) - if err != nil { - return nil, err - } - - wm := make(map[string]interface{}) - if len(input.Apis) > 0 { - wm["uuid"] = input.Apis - wheres = append(wheres, monitor.MonWhereItem{ - Key: "api", - Operation: "in", - Values: input.Apis, - }) - } - if len(input.Projects) > 0 { - wm["project"] = input.Projects - wheres = append(wheres, monitor.MonWhereItem{ - Key: "project", - Operation: "in", - Values: input.Projects, - }) - } - // 查询符合条件的API - apis, err := i.apiService.Search(ctx, input.Path, wm) - if err != nil { - return nil, err - } - if len(apis) < 1 { - // 没有符合条件的API - return make([]*monitor_dto.ApiStatisticBasicItem, 0), nil - } - apiIds := utils.SliceToSlice(apis, func(t *api.API) string { - return t.UUID - }) - - apiInfos, err := i.apiService.ListInfo(ctx, apiIds...) - if err != nil { - return nil, err - } - return i.apiStatistics(ctx, partitionId, apiInfos, formatTimeByMinute(input.Start), formatTimeByMinute(input.End), wheres, 0) -} - -func (i *imlMonitorStatisticModule) MessageTrend(ctx context.Context, partitionId string, input *monitor_dto.CommonInput) (*monitor_dto.MonMessageTrend, string, error) { - - wheres, err := i.genCommonWheres(ctx, partitionId) - if err != nil { - return nil, "", err - } - executor, err := i.getExecutor(ctx, partitionId) - if err != nil { - return nil, "", err - } - result, timeInterval, err := executor.MessageTrend(ctx, formatTimeByMinute(input.Start), formatTimeByMinute(input.End), wheres) - if err != nil { - return nil, "", err - } - return monitor_dto.ToMonMessageTrend(result), timeInterval, nil -} - -func (i *imlMonitorStatisticModule) InvokeTrend(ctx context.Context, partitionId string, input *monitor_dto.CommonInput) (*monitor_dto.MonInvokeCountTrend, string, error) { - wheres, err := i.genCommonWheres(ctx, partitionId) - if err != nil { - return nil, "", err - } - executor, err := i.getExecutor(ctx, partitionId) - if err != nil { - return nil, "", err - } - result, timeInterval, err := executor.InvokeTrend(ctx, formatTimeByMinute(input.Start), formatTimeByMinute(input.End), wheres) - if err != nil { - return nil, "", err - } - return monitor_dto.ToMonInvokeCountTrend(result), timeInterval, nil -} - -func (i *imlMonitorStatisticModule) genCommonWheres(ctx context.Context, partitionId string) ([]monitor.MonWhereItem, error) { - - info, err := i.partitionService.Get(ctx, partitionId) - if err != nil { - return nil, err - } - - wheres := make([]monitor.MonWhereItem, 0, 1) - - wheres = append(wheres, monitor.MonWhereItem{ - Key: "cluster", - Operation: "=", - Values: []string{info.Cluster}, - }) - - return wheres, nil -} - -func (i *imlMonitorStatisticModule) statistics(ctx context.Context, partitionId string, groupBy string, start, end time.Time, wheres []monitor.MonWhereItem, limit int) (map[string]monitor.MonCommonData, error) { - statisticMap, _ := i.monitorStatisticCacheService.GetStatisticsCache(ctx, partitionId, start, end, groupBy, wheres, limit) - if len(statisticMap) > 0 { - return statisticMap, nil - } - - executor, err := i.getExecutor(ctx, partitionId) - if err != nil { - return nil, err - } - - result, err := executor.CommonStatistics(ctx, start, end, groupBy, limit, wheres) - if err != nil { - return nil, err - } - i.monitorStatisticCacheService.SetStatisticsCache(ctx, partitionId, start, end, groupBy, wheres, limit, result) - return result, nil -} - -func (i *imlMonitorStatisticModule) TopAPIStatistics(ctx context.Context, partitionId string, limit int, input *monitor_dto.CommonInput) ([]*monitor_dto.ApiStatisticItem, error) { - - wheres, err := i.genCommonWheres(ctx, partitionId) - if err != nil { - return nil, err - } - - statisticMap, err := i.statistics(ctx, partitionId, "api", formatTimeByMinute(input.Start), formatTimeByMinute(input.End), wheres, limit) - if err != nil { - return nil, err - } - - uuids := utils.MapToSlice(statisticMap, func(key string, value monitor.MonCommonData) string { - return value.ID - }) - apis, err := i.apiService.ListInfo(ctx, uuids...) - if err != nil { - return nil, err - } - apiMap := utils.SliceToMap(apis, func(t *api.APIInfo) string { - return t.UUID - }) - result := make([]*monitor_dto.ApiStatisticItem, 0, len(statisticMap)) - for key, item := range statisticMap { - statisticItem := &monitor_dto.ApiStatisticItem{ - ApiStatisticBasicItem: &monitor_dto.ApiStatisticBasicItem{ - Id: key, - MonCommonData: monitor_dto.ToMonCommonData(item), - }, - } - if a, ok := apiMap[item.ID]; ok { - statisticItem.Name = a.Name - statisticItem.Path = a.Path - statisticItem.Project = auto.UUID(a.Project) - } else { - statisticItem.IsRed = true - if key == "-" { - statisticItem.Name = "无API" - } else { - statisticItem.Name = fmt.Sprintf("未知API-%s", key) - } - } - result = append(result, statisticItem) - } - sort.Slice(result, func(i, j int) bool { - return result[i].RequestTotal > result[j].RequestTotal - }) - return result, nil -} - -func (i *imlMonitorStatisticModule) TopSubscriberStatistics(ctx context.Context, partitionId string, limit int, input *monitor_dto.CommonInput) ([]*monitor_dto.ProjectStatisticItem, error) { - _, err := i.partitionService.Get(ctx, partitionId) - if err != nil { - return nil, err - } - return i.topProjectStatistics(ctx, partitionId, "app", input, limit) -} - -func (i *imlMonitorStatisticModule) TopProviderStatistics(ctx context.Context, partitionId string, limit int, input *monitor_dto.CommonInput) ([]*monitor_dto.ProjectStatisticItem, error) { - _, err := i.partitionService.Get(ctx, partitionId) - if err != nil { - return nil, err - } - return i.topProjectStatistics(ctx, partitionId, "provider", input, limit) -} -func (i *imlMonitorStatisticModule) topProjectStatistics(ctx context.Context, partitionId string, groupBy string, input *monitor_dto.CommonInput, limit int) ([]*monitor_dto.ProjectStatisticItem, error) { - wheres, err := i.genCommonWheres(ctx, partitionId) - if err != nil { - return nil, err - } - statisticMap, err := i.statistics(ctx, partitionId, groupBy, formatTimeByMinute(input.Start), formatTimeByMinute(input.End), wheres, limit) - if err != nil { - return nil, err - } - var projects []*project.Project - switch groupBy { - case "app": - projects, err = i.projectService.AppList(ctx) - case "provider": - projects, err = i.projectsByPartition(ctx, partitionId, nil) - default: - return nil, errors.New("invalid group by") - } - if err != nil { - return nil, err - } - projectMap := utils.SliceToMap(projects, func(t *project.Project) string { - return t.Id - }) - result := make([]*monitor_dto.ProjectStatisticItem, 0, len(statisticMap)) - for key, item := range statisticMap { - statisticItem := &monitor_dto.ProjectStatisticItem{ - ProjectStatisticBasicItem: &monitor_dto.ProjectStatisticBasicItem{ - Id: key, - MonCommonData: monitor_dto.ToMonCommonData(item), - }, - } - if a, ok := projectMap[item.ID]; ok { - statisticItem.Name = a.Name - } else { - statisticItem.IsRed = true - if key == "-" { - statisticItem.Name = "无系统" - } else { - statisticItem.Name = fmt.Sprintf("未知系统-%s", key) - } - } - result = append(result, statisticItem) - } - sort.Slice(result, func(i, j int) bool { - return result[i].RequestTotal > result[j].RequestTotal - }) - return result, nil -} - -func (i *imlMonitorStatisticModule) getExecutor(ctx context.Context, partitionId string) (driver.IExecutor, error) { - info, err := i.monitorService.GetByPartition(ctx, partitionId) - if err != nil { - return nil, err - } - return driver.CreateExecutor(info.Driver, info.Config) -} - -func (i *imlMonitorStatisticModule) RequestSummary(ctx context.Context, partitionId string, input *monitor_dto.CommonInput) (*monitor_dto.MonSummaryOutput, error) { - wheres, err := i.genCommonWheres(ctx, partitionId) - if err != nil { - return nil, err - } - executor, err := i.getExecutor(ctx, partitionId) - if err != nil { - return nil, err - - } - summary, err := executor.RequestSummary(ctx, formatTimeByMinute(input.Start), formatTimeByMinute(input.End), wheres) - if err != nil { - return nil, err - } - - return monitor_dto.ToMonSummaryOutput(summary), nil -} - -func (i *imlMonitorStatisticModule) ProxySummary(ctx context.Context, partitionId string, input *monitor_dto.CommonInput) (*monitor_dto.MonSummaryOutput, error) { - wheres, err := i.genCommonWheres(ctx, partitionId) - if err != nil { - return nil, err - } - executor, err := i.getExecutor(ctx, partitionId) - if err != nil { - return nil, err - - } - summary, err := executor.ProxySummary(ctx, formatTimeByMinute(input.Start), formatTimeByMinute(input.End), wheres) - if err != nil { - return nil, err - } - - return monitor_dto.ToMonSummaryOutput(summary), nil -} diff --git a/module/monitor/monitor.go b/module/monitor/monitor.go deleted file mode 100644 index e5a37ee..0000000 --- a/module/monitor/monitor.go +++ /dev/null @@ -1,60 +0,0 @@ -package monitor - -import ( - "context" - "reflect" - "time" - - "github.com/eolinker/go-common/autowire" - - _ "github.com/eolinker/apipark/module/monitor/driver/influxdb-v2" - monitor_dto "github.com/eolinker/apipark/module/monitor/dto" -) - -type IMonitorStatisticModule interface { - TopAPIStatistics(ctx context.Context, partitionId string, limit int, input *monitor_dto.CommonInput) ([]*monitor_dto.ApiStatisticItem, error) - TopProviderStatistics(ctx context.Context, partitionId string, limit int, input *monitor_dto.CommonInput) ([]*monitor_dto.ProjectStatisticItem, error) - TopSubscriberStatistics(ctx context.Context, partitionId string, limit int, input *monitor_dto.CommonInput) ([]*monitor_dto.ProjectStatisticItem, error) - // RequestSummary 请求概况 - RequestSummary(ctx context.Context, partitionId string, input *monitor_dto.CommonInput) (*monitor_dto.MonSummaryOutput, error) - // ProxySummary 转发概况 - ProxySummary(ctx context.Context, partitionId string, input *monitor_dto.CommonInput) (*monitor_dto.MonSummaryOutput, error) - - // InvokeTrend 调用次数趋势 - InvokeTrend(ctx context.Context, partitionId string, input *monitor_dto.CommonInput) (*monitor_dto.MonInvokeCountTrend, string, error) - - // MessageTrend 消息趋势 - MessageTrend(ctx context.Context, partitionId string, input *monitor_dto.CommonInput) (*monitor_dto.MonMessageTrend, string, error) - // ProxyTrend 转发趋势 - - ApiStatistics(ctx context.Context, partitionId string, input *monitor_dto.StatisticInput) ([]*monitor_dto.ApiStatisticBasicItem, error) - - SubscriberStatistics(ctx context.Context, partitionId string, input *monitor_dto.StatisticInput) ([]*monitor_dto.ProjectStatisticBasicItem, error) - - ProviderStatistics(ctx context.Context, partitionId string, input *monitor_dto.StatisticInput) ([]*monitor_dto.ProjectStatisticBasicItem, error) - - APITrend(ctx context.Context, partitionId string, apiId string, input *monitor_dto.CommonInput) (*monitor_dto.MonInvokeCountTrend, string, error) - - ProviderTrend(ctx context.Context, partitionId string, providerId string, input *monitor_dto.CommonInput) (*monitor_dto.MonInvokeCountTrend, string, error) - - SubscriberTrend(ctx context.Context, partitionId string, subscriberId string, input *monitor_dto.CommonInput) (*monitor_dto.MonInvokeCountTrend, string, error) - - InvokeTrendWithSubscriberAndApi(ctx context.Context, partitionId string, apiId string, subscriberId string, input *monitor_dto.CommonInput) (*monitor_dto.MonInvokeCountTrend, string, error) - InvokeTrendWithProviderAndApi(ctx context.Context, partitionId string, providerId string, apiId string, input *monitor_dto.CommonInput) (*monitor_dto.MonInvokeCountTrend, string, error) - - ProviderStatisticsOnApi(ctx context.Context, partitionId string, apiId string, input *monitor_dto.StatisticInput) ([]*monitor_dto.ProjectStatisticBasicItem, error) - ApiStatisticsOnProvider(ctx context.Context, partitionId string, providerId string, input *monitor_dto.StatisticInput) ([]*monitor_dto.ApiStatisticBasicItem, error) - ApiStatisticsOnSubscriber(ctx context.Context, partitionId string, subscriberId string, input *monitor_dto.StatisticInput) ([]*monitor_dto.ApiStatisticBasicItem, error) - SubscriberStatisticsOnApi(ctx context.Context, partitionId string, apiId string, input *monitor_dto.StatisticInput) ([]*monitor_dto.ProjectStatisticBasicItem, error) -} - -func init() { - autowire.Auto[IMonitorStatisticModule](func() reflect.Value { - return reflect.ValueOf(new(imlMonitorStatisticModule)) - }) -} -func formatTimeByMinute(org int64) time.Time { - t := time.Unix(org, 0) - location, _ := time.LoadLocation("Asia/Shanghai") - return time.Date(t.Year(), t.Month(), t.Day(), t.Hour(), t.Minute(), 0, 0, location) -} diff --git a/module/partition/impl.go b/module/partition/impl.go index 44312d4..725025c 100644 --- a/module/partition/impl.go +++ b/module/partition/impl.go @@ -2,27 +2,21 @@ package partition import ( "context" - "encoding/json" "errors" "fmt" "github.com/eolinker/apipark/gateway/admin" "github.com/eolinker/apipark/service/organization" "github.com/eolinker/eosc/log" "strings" - "time" - + "github.com/eolinker/go-common/store" - + "github.com/eolinker/apipark/gateway" - - "github.com/eolinker/apipark/module/monitor/driver" - + "gorm.io/gorm" - - "github.com/eolinker/apipark/service/monitor" - + "github.com/google/uuid" - + "github.com/eolinker/ap-account/service/account" paritiondto "github.com/eolinker/apipark/module/partition/dto" "github.com/eolinker/apipark/service/cluster" @@ -40,8 +34,8 @@ type imlPartition struct { organizationService organization.IOrganizationService `autowired:""` clusterService cluster.IClusterService `autowired:""` userNameService account.IAccountService `autowired:""` - monitorService monitor.IMonitorService `autowired:""` - transaction store.ITransaction `autowired:""` + //monitorService monitor.IMonitorService `autowired:""` + transaction store.ITransaction `autowired:""` } func (m *imlPartition) CheckCluster(ctx context.Context, address ...string) ([]*paritiondto.Node, error) { @@ -59,7 +53,7 @@ func (m *imlPartition) CheckCluster(ctx context.Context, address ...string) ([]* } }) nodeStatus(ctx, nodesOut) - + return nodesOut, nil } @@ -68,7 +62,7 @@ func (m *imlPartition) ResetCluster(ctx context.Context, partitionId string, add if err != nil { return nil, err } - + nodes, err := m.clusterService.UpdateAddress(ctx, info.Cluster, address) if err != nil { return nil, err @@ -86,7 +80,7 @@ func (m *imlPartition) ResetCluster(ctx context.Context, partitionId string, add Gateways: i.Server, } }) - + nodeStatus(ctx, nodesOut) return nodesOut, nil } @@ -122,176 +116,10 @@ func (m *imlPartition) ClusterNodes(ctx context.Context, partitionId string) ([] } }) nodeStatus(ctx, nodesOut) - + return nodesOut, nil } -func (m *imlPartition) DeleteMonitorConfig(ctx context.Context, partitionId string) error { - _, err := m.monitorService.GetByPartition(ctx, partitionId) - if err != nil { - if errors.Is(err, gorm.ErrRecordNotFound) { - return nil - } - return err - } - - return m.transaction.Transaction(ctx, func(ctx context.Context) error { - clusters, err := m.clusterService.ListByClusters(ctx, partitionId) - if err != nil { - return err - } - err = m.monitorService.DeleteByPartition(ctx, partitionId) - if err != nil { - return err - } - id := fmt.Sprintf("%s_influxdb", partitionId) - for _, c := range clusters { - err := m.dynamicClient(ctx, c.Uuid, "influxdbv2", func(client gateway.IDynamicClient) error { - return client.Offline(ctx, &gateway.DynamicRelease{ - BasicItem: &gateway.BasicItem{ID: id}, - }) - }) - if err != nil { - return err - } - - } - return nil - }) -} - -func (m *imlPartition) MonitorPartitions(ctx context.Context) ([]*paritiondto.MonitorPartition, error) { - list, err := m.partitionService.Search(ctx, "", nil, "create_at asc") - if err != nil { - return nil, err - } - partitionIds := utils.SliceToSlice(list, func(i *partition.Partition) string { - return i.UUID - }) - monitorMap, err := m.monitorService.MapByPartition(ctx, partitionIds...) - if err != nil { - return nil, err - } - return utils.SliceToSlice(list, func(i *partition.Partition) *paritiondto.MonitorPartition { - _, ok := monitorMap[i.UUID] - return &paritiondto.MonitorPartition{ - Id: i.UUID, - Name: i.Name, - EnableMonitor: ok, - } - }), nil -} - -func (m *imlPartition) dynamicClient(ctx context.Context, clusterId string, resource string, f func(gateway.IDynamicClient) error) error { - client, err := m.clusterService.GatewayClient(ctx, clusterId) - if err != nil { - return err - } - defer func() { - err := client.Close(ctx) - if err != nil { - log.Warn("close apinto client:", err) - } - }() - dynamic, err := client.Dynamic(resource) - if err != nil { - return err - } - return f(dynamic) -} - -func (m *imlPartition) SaveMonitorConfig(ctx context.Context, partition string, cfg *paritiondto.SaveMonitorConfig) (*paritiondto.MonitorConfig, error) { - _, err := m.partitionService.Get(ctx, partition) - if err != nil { - return nil, err - } - - data, _ := json.Marshal(cfg.Config) - err = driver.Check(cfg.Driver, string(data)) - if err != nil { - return nil, err - } - - executor, err := driver.CreateExecutor(cfg.Driver, string(data)) - if err != nil { - return nil, err - } - err = executor.Init(ctx) - if err != nil { - return nil, err - } - clusters, err := m.clusterService.ListByClusters(ctx, partition) - if err != nil { - return nil, err - } - version := time.Now().Format("20060102150405") - id := fmt.Sprintf("%s_influxdb", partition) - for _, c := range clusters { - err := m.dynamicClient(ctx, c.Uuid, "influxdbv2", func(client gateway.IDynamicClient) error { - pubCfg := &gateway.DynamicRelease{ - BasicItem: &gateway.BasicItem{ - ID: id, - Description: "", - Version: version, - MatchLabels: map[string]string{ - "module": "monitor", - }, - }, - Attr: map[string]interface{}{ - "org": cfg.Config["org"], - "token": cfg.Config["token"], - "url": cfg.Config["addr"], - "bucket": "apinto", - "scopes": []string{"monitor"}, - }, - } - return client.Online(ctx, pubCfg) - }) - if err != nil { - return nil, err - } - - } - - err = m.monitorService.Save(ctx, &monitor.SaveMonitor{ - Partition: partition, - Driver: cfg.Driver, - Config: string(data), - }) - if err != nil { - return nil, err - } - - return m.GetMonitorConfig(ctx, partition) -} - -func (m *imlPartition) GetMonitorConfig(ctx context.Context, partition string) (*paritiondto.MonitorConfig, error) { - _, err := m.partitionService.Get(ctx, partition) - if err != nil { - return nil, err - - } - info, err := m.monitorService.GetByPartition(ctx, partition) - if err != nil { - if !errors.Is(err, gorm.ErrRecordNotFound) { - return nil, err - } - return &paritiondto.MonitorConfig{ - Driver: "influxdb-v2", - Config: map[string]interface{}{}, - }, nil - } - cfg := make(map[string]interface{}) - err = json.Unmarshal([]byte(info.Config), &cfg) - if err != nil { - return nil, err - } - return &paritiondto.MonitorConfig{ - Driver: info.Driver, - Config: cfg, - }, nil -} - func (m *imlPartition) CreatePartition(ctx context.Context, create *paritiondto.Create) (*paritiondto.Detail, error) { if create.Id == "" { create.Id = uuid.New().String() @@ -338,7 +166,7 @@ func (m *imlPartition) Search(ctx context.Context, keyword string) ([]*paritiond return nil, err } items := utils.SliceToSlice(partitions, func(i *partition.Partition) *paritiondto.Item { - + return &paritiondto.Item{ Creator: auto.UUID(i.Creator), Updater: auto.UUID(i.Updater), @@ -359,7 +187,7 @@ func (m *imlPartition) Search(ctx context.Context, keyword string) ([]*paritiond item.ClusterNum = counts[item.Id] } } - + return items, nil } @@ -384,7 +212,7 @@ func (m *imlPartition) Get(ctx context.Context, id string) (*paritiondto.Detail, break } } - + pd := &paritiondto.Detail{ Creator: auto.UUID(pm.Creator), Updater: auto.UUID(pm.Updater), @@ -427,7 +255,7 @@ func (m *imlPartition) Delete(ctx context.Context, id string) error { } return m.partitionService.Delete(ctx, id) }) - + } func (m *imlPartition) Simple(ctx context.Context) ([]*paritiondto.Simple, error) { @@ -458,19 +286,19 @@ func (m *imlPartition) SimpleByIds(ctx context.Context, ids []string) ([]*pariti } }) return pd, nil - + } func (m *imlPartition) SimpleWithCluster(ctx context.Context) ([]*paritiondto.SimpleWithCluster, error) { pm, err := m.partitionService.Search(ctx, "", nil) if err != nil { return nil, err } - + clusterList, err := m.clusterService.List(ctx) if err != nil { return nil, err } - + clusterMap := utils.SliceToMapArrayO(clusterList, func(i *cluster.Cluster) (string, *paritiondto.Cluster) { return i.Partition, &paritiondto.Cluster{ Id: i.Uuid, diff --git a/module/partition/partition.go b/module/partition/partition.go index 8e414c2..f0b4ace 100644 --- a/module/partition/partition.go +++ b/module/partition/partition.go @@ -3,7 +3,7 @@ package partition import ( "context" "reflect" - + parition_dto "github.com/eolinker/apipark/module/partition/dto" "github.com/eolinker/go-common/autowire" ) @@ -17,10 +17,6 @@ type IPartitionModule interface { Simple(ctx context.Context) ([]*parition_dto.Simple, error) SimpleByIds(ctx context.Context, ids []string) ([]*parition_dto.Simple, error) SimpleWithCluster(ctx context.Context) ([]*parition_dto.SimpleWithCluster, error) - SaveMonitorConfig(ctx context.Context, partition string, cfg *parition_dto.SaveMonitorConfig) (*parition_dto.MonitorConfig, error) - GetMonitorConfig(ctx context.Context, partition string) (*parition_dto.MonitorConfig, error) - DeleteMonitorConfig(ctx context.Context, partition string) error - MonitorPartitions(ctx context.Context) ([]*parition_dto.MonitorPartition, error) CheckCluster(ctx context.Context, address ...string) ([]*parition_dto.Node, error) ResetCluster(ctx context.Context, partitionId string, address string) ([]*parition_dto.Node, error) ClusterNodes(ctx context.Context, partitionId string) ([]*parition_dto.Node, error) diff --git a/module/project-monitor/dto/input.go b/module/project-monitor/dto/input.go deleted file mode 100644 index 186d0e7..0000000 --- a/module/project-monitor/dto/input.go +++ /dev/null @@ -1 +0,0 @@ -package project_monitor_dto diff --git a/module/project-monitor/dto/output.go b/module/project-monitor/dto/output.go deleted file mode 100644 index 1fa7966..0000000 --- a/module/project-monitor/dto/output.go +++ /dev/null @@ -1,7 +0,0 @@ -package project_monitor_dto - -type MonitorPartition struct { - Id string `json:"id"` - Name string `json:"name"` - EnableMonitor bool `json:"enable_monitor"` -} diff --git a/module/project-monitor/iml.go b/module/project-monitor/iml.go deleted file mode 100644 index f1cfb14..0000000 --- a/module/project-monitor/iml.go +++ /dev/null @@ -1,48 +0,0 @@ -package project_monitor - -import ( - "context" - - "github.com/eolinker/go-common/utils" - - "github.com/eolinker/apipark/service/monitor" - - "github.com/eolinker/apipark/service/project" - - "github.com/eolinker/apipark/service/partition" - - project_monitor_dto "github.com/eolinker/apipark/module/project-monitor/dto" -) - -var _ IProjectMonitor = (*imlProjectMonitor)(nil) - -type imlProjectMonitor struct { - partitionService partition.IPartitionService `autowired:""` - projectPartitionService project.IProjectPartitionsService `autowired:""` - monitorService monitor.IMonitorService `autowired:""` -} - -func (i *imlProjectMonitor) MonitorPartitions(ctx context.Context, pid string) ([]*project_monitor_dto.MonitorPartition, error) { - partitionIds, err := i.projectPartitionService.GetByProject(ctx, pid) - if err != nil { - return nil, err - } - monitorMap, err := i.monitorService.MapByPartition(ctx, partitionIds...) - if err != nil { - return nil, err - } - partitions, err := i.partitionService.Search(ctx, "", map[string]interface{}{ - "uuid": partitionIds, - }, "create_at asc") - if err != nil { - return nil, err - } - return utils.SliceToSlice(partitions, func(s *partition.Partition) *project_monitor_dto.MonitorPartition { - _, ok := monitorMap[s.UUID] - return &project_monitor_dto.MonitorPartition{ - Id: s.UUID, - Name: s.Name, - EnableMonitor: ok, - } - }), nil -} diff --git a/module/project-monitor/monitor.go b/module/project-monitor/monitor.go deleted file mode 100644 index 5583a4d..0000000 --- a/module/project-monitor/monitor.go +++ /dev/null @@ -1,20 +0,0 @@ -package project_monitor - -import ( - "context" - "reflect" - - "github.com/eolinker/go-common/autowire" - - project_monitor_dto "github.com/eolinker/apipark/module/project-monitor/dto" -) - -type IProjectMonitor interface { - MonitorPartitions(ctx context.Context, pid string) ([]*project_monitor_dto.MonitorPartition, error) -} - -func init() { - autowire.Auto[IProjectMonitor](func() reflect.Value { - return reflect.ValueOf(new(imlProjectMonitor)) - }) -} diff --git a/plugins/core/core.go b/plugins/core/core.go index 2697d8d..e73661c 100644 --- a/plugins/core/core.go +++ b/plugins/core/core.go @@ -4,32 +4,29 @@ import ( "github.com/eolinker/apipark/controller/common" plugin_partition "github.com/eolinker/apipark/controller/plugin-partition" "net/http" - + "github.com/eolinker/apipark/controller/topology" - - "github.com/eolinker/apipark/controller/monitor" - + dynamic_module "github.com/eolinker/apipark/controller/dynamic-module" - - external_app "github.com/eolinker/apipark/controller/external-app" + "github.com/eolinker/apipark/controller/release" - + project_authorization "github.com/eolinker/apipark/controller/project-authorization" - + "github.com/eolinker/apipark/controller/subscribe" - + "github.com/eolinker/apipark/controller/api" - + "github.com/eolinker/apipark/controller/upstream" - + "github.com/eolinker/apipark/controller/service" - + "github.com/eolinker/apipark/controller/catalogue" - + "github.com/eolinker/apipark/controller/project" - + "github.com/eolinker/apipark/controller/my_team" - + "github.com/eolinker/apipark/controller/certificate" organization2 "github.com/eolinker/apipark/controller/organization" "github.com/eolinker/apipark/controller/partition" @@ -50,7 +47,7 @@ func (d *Driver) Access() map[string][]string { } func (d *Driver) Create() (pm3.IPlugin, error) { - + p := new(plugin) autowire.Autowired(p) return p, nil @@ -65,7 +62,6 @@ type plugin struct { appController project.IAppController `autowired:""` projectController project.IProjectController `autowired:""` projectMemberController project.IProjectMemberController `autowired:""` - projectMonitorController project.IProjectMonitorController `autowired:""` serviceController service.IServiceController `autowired:""` catalogueController catalogue.ICatalogueController `autowired:""` upstreamController upstream.IUpstreamController `autowired:""` @@ -74,9 +70,7 @@ type plugin struct { projectAuthorizationController project_authorization.IProjectAuthorizationController `autowired:""` releaseController release.IReleaseController `autowired:""` subscribeApprovalController subscribe.ISubscribeApprovalController `autowired:""` - externalAppController external_app.IExternalAppController `autowired:""` dynamicModuleController dynamic_module.IDynamicModuleController `autowired:""` - monitorStatisticController monitor.IMonitorStatisticController `autowired:""` topologyController topology.ITopologyController `autowired:""` pluginPartitionController plugin_partition.IPluginPartitionController `autowired:""` commonController common.ICommonController `autowired:""` @@ -98,9 +92,7 @@ func (p *plugin) OnComplete() { p.apis = append(p.apis, p.subscribeApis()...) p.apis = append(p.apis, p.projectAuthorizationApis()...) p.apis = append(p.apis, p.releaseApis()...) - p.apis = append(p.apis, p.ExternalAppApi()...) p.apis = append(p.apis, p.DynamicModuleApis()...) - p.apis = append(p.apis, p.monitorStatisticApis()...) p.apis = append(p.apis, p.TopologyApis()...) p.apis = append(p.apis, p.PartitionPluginApi()...) p.apis = append(p.apis, p.commonApis()...) diff --git a/plugins/core/external_app.go b/plugins/core/external_app.go deleted file mode 100644 index a797be7..0000000 --- a/plugins/core/external_app.go +++ /dev/null @@ -1,20 +0,0 @@ -package core - -import ( - "net/http" - - "github.com/eolinker/go-common/pm3" -) - -func (p *plugin) ExternalAppApi() []pm3.Api { - return []pm3.Api{ - pm3.CreateApiWidthDoc(http.MethodGet, "/api/v1/external-app", []string{"context", "query:id"}, []string{"app"}, p.externalAppController.GetExternalApp), - pm3.CreateApiWidthDoc(http.MethodGet, "/api/v1/external-apps", []string{"context"}, []string{"apps"}, p.externalAppController.ListExternalApp), - pm3.CreateApiWidthDoc(http.MethodPost, "/api/v1/external-app", []string{"context", "body"}, []string{"app"}, p.externalAppController.CreateExternalApp), - pm3.CreateApiWidthDoc(http.MethodPut, "/api/v1/external-app", []string{"context", "query:id", "body"}, []string{"app"}, p.externalAppController.EditExternalApp), - pm3.CreateApiWidthDoc(http.MethodDelete, "/api/v1/external-app", []string{"context", "query:id"}, nil, p.externalAppController.DeleteExternalApp), - pm3.CreateApiWidthDoc(http.MethodPut, "/api/v1/external-app/enable", []string{"context", "query:id"}, nil, p.externalAppController.EnableExternalApp), - pm3.CreateApiWidthDoc(http.MethodPut, "/api/v1/external-app/disable", []string{"context", "query:id"}, nil, p.externalAppController.DisableExternalApp), - pm3.CreateApiWidthDoc(http.MethodPut, "/api/v1/external-app/token", []string{"context", "query:id"}, []string{"token"}, p.externalAppController.UpdateExternalAppToken), - } -} diff --git a/plugins/core/monitor.go b/plugins/core/monitor.go deleted file mode 100644 index f2edc7b..0000000 --- a/plugins/core/monitor.go +++ /dev/null @@ -1,21 +0,0 @@ -package core - -import ( - "net/http" - - "github.com/eolinker/go-common/pm3" -) - -func (p *plugin) monitorStatisticApis() []pm3.Api { - return []pm3.Api{ - pm3.CreateApiWidthDoc(http.MethodPost, "/api/v1/monitor/overview/top10", []string{"context", "query:partition", "body"}, []string{"top10"}, p.monitorStatisticController.Top10), - pm3.CreateApiWidthDoc(http.MethodPost, "/api/v1/monitor/overview/summary", []string{"context", "query:partition", "body"}, []string{"request_summary", "proxy_summary"}, p.monitorStatisticController.Summary), - pm3.CreateApiWidthDoc(http.MethodPost, "/api/v1/monitor/overview/invoke", []string{"context", "query:partition", "body"}, []string{"date", "request_total", "proxy_total", "status_4xx", "status_5xx", "request_rate", "proxy_rate", "time_interval"}, p.monitorStatisticController.OverviewInvokeTrend), - pm3.CreateApiWidthDoc(http.MethodPost, "/api/v1/monitor/overview/message", []string{"context", "query:partition", "body"}, []string{"date", "request_message", "response_message", "time_interval"}, p.monitorStatisticController.OverviewMessageTrend), - - pm3.CreateApiWidthDoc(http.MethodPost, "/api/v1/monitor/:data_type", []string{"context", "query:partition", "rest:data_type", "body"}, []string{"statistics"}, p.monitorStatisticController.Statistics), - pm3.CreateApiWidthDoc(http.MethodPost, "/api/v1/monitor/:data_type/trend", []string{"context", "query:partition", "rest:data_type", "query:id", "body"}, []string{"tendency", "time_interval"}, p.monitorStatisticController.InvokeTrend), - pm3.CreateApiWidthDoc(http.MethodPost, "/api/v1/monitor/:data_type/trend/:typ", []string{"context", "query:partition", "rest:data_type", "rest:typ", "query:api", "query:provider", "query:subscriber", "body"}, []string{"tendency", "time_interval"}, p.monitorStatisticController.InvokeTrendInner), - pm3.CreateApiWidthDoc(http.MethodPost, "/api/v1/monitor/:data_type/statistics/:typ", []string{"context", "query:partition", "rest:data_type", "rest:typ", "query:id", "body"}, []string{"statistics"}, p.monitorStatisticController.StatisticsInner), - } -} diff --git a/plugins/core/partition.go b/plugins/core/partition.go index 1c7692d..339ff15 100644 --- a/plugins/core/partition.go +++ b/plugins/core/partition.go @@ -2,7 +2,7 @@ package core import ( "net/http" - + "github.com/eolinker/go-common/pm3" ) @@ -15,9 +15,5 @@ func (p *plugin) partitionApi() []pm3.Api { pm3.CreateApiWidthDoc(http.MethodDelete, "/api/v1/partition", []string{"context", "query:id"}, []string{"id"}, p.partitionController.Delete), pm3.CreateApiWidthDoc(http.MethodGet, "/api/v1/simple/partitions", []string{"context"}, []string{"partitions"}, p.partitionController.Simple), pm3.CreateApiWidthDoc(http.MethodGet, "/api/v1/simple/partitions/cluster", []string{"context"}, []string{"partitions"}, p.partitionController.SimpleWithCluster), - pm3.CreateApiWidthDoc(http.MethodPost, "/api/v1/partition/monitor", []string{"context", "query:partition", "body"}, []string{"info"}, p.partitionController.SaveMonitorConfig), - pm3.CreateApiWidthDoc(http.MethodGet, "/api/v1/partition/monitor", []string{"context", "query:partition"}, []string{"info"}, p.partitionController.GetMonitorConfig), - pm3.CreateApiWidthDoc(http.MethodDelete, "/api/v1/partition/monitor", []string{"context", "query:partition"}, nil, p.partitionController.DeleteMonitorConfig), - pm3.CreateApiWidthDoc(http.MethodGet, "/api/v1/simple/monitor/partitions", []string{"context"}, []string{"partitions"}, p.partitionController.MonitorPartitions), } } diff --git a/plugins/core/project.go b/plugins/core/project.go index fe849d5..80814ff 100644 --- a/plugins/core/project.go +++ b/plugins/core/project.go @@ -2,7 +2,7 @@ package core import ( "net/http" - + "github.com/eolinker/go-common/pm3" ) @@ -13,23 +13,20 @@ func (p *plugin) ProjectApi() []pm3.Api { pm3.CreateApiWidthDoc(http.MethodPut, "/api/v1/project/info", []string{"context", "query:project", "body"}, []string{"project"}, p.projectController.EditProject), pm3.CreateApiWidthDoc(http.MethodDelete, "/api/v1/project/info", []string{"context", "query:project"}, nil, p.projectController.DeleteProject), pm3.CreateApiWidthDoc(http.MethodGet, "/api/v1/my_projects", []string{"context", "query:team", "query:keyword"}, []string{"projects"}, p.projectController.SearchMyProjects), - + pm3.CreateApiWidthDoc(http.MethodGet, "/api/v1/simple/projects/mine", []string{"context", "query:keyword"}, []string{"projects"}, p.projectController.MySimpleProjects), - + pm3.CreateApiWidthDoc(http.MethodGet, "/api/v1/simple/projects", []string{"context", "query:keyword", "query:partition"}, []string{"projects"}, p.projectController.SimpleProjects), - + // 项目成员相关 pm3.CreateApiWidthDoc(http.MethodGet, "/api/v1/project/members", []string{"context", "query:project", "query:keyword"}, []string{"members"}, p.projectMemberController.Members), pm3.CreateApiWidthDoc(http.MethodGet, "/api/v1/simple/project/members", []string{"context", "query:project"}, []string{"members"}, p.projectMemberController.SimpleMembers), pm3.CreateApiWidthDoc(http.MethodGet, "/api/v1/project/members/toadd", []string{"context", "query:project", "query:keyword"}, []string{"members"}, p.projectMemberController.SimpleMembersToAdd), - + pm3.CreateApiWidthDoc(http.MethodPost, "/api/v1/project/member", []string{"context", "query:project", "body"}, nil, p.projectMemberController.AddMember), pm3.CreateApiWidthDoc(http.MethodDelete, "/api/v1/project/member", []string{"context", "query:project", "query:user"}, nil, p.projectMemberController.RemoveMember), pm3.CreateApiWidthDoc(http.MethodPut, "/api/v1/project/member", []string{"context", "query:project", "query:user", "body"}, nil, p.projectMemberController.EditProjectMember), - - // 项目监控 - pm3.CreateApiWidthDoc(http.MethodGet, "/api/v1/project/monitor/partitions/simple", []string{"context", "query:project"}, []string{"partitions"}, p.projectMonitorController.MonitorPartitions), - + // 应用相关 pm3.CreateApiWidthDoc(http.MethodGet, "/api/v1/app/info", []string{"context", "query:app"}, []string{"project"}, p.appController.GetApp), pm3.CreateApiWidthDoc(http.MethodDelete, "/api/v1/app", []string{"context", "query:app"}, nil, p.appController.DeleteApp), diff --git a/service/external-app/iml.go b/service/external-app/iml.go deleted file mode 100644 index b048751..0000000 --- a/service/external-app/iml.go +++ /dev/null @@ -1,65 +0,0 @@ -package external_app - -import ( - "time" - - "github.com/eolinker/apipark/service/universally" - external_app "github.com/eolinker/apipark/stores/external-app" -) - -type imlExternalAppService struct { - store external_app.IExternalAppStore `autowired:""` - universally.IServiceGet[ExternalApp] - universally.IServiceDelete - universally.IServiceCreate[CreateExternalApp] - universally.IServiceEdit[EditExternalApp] -} - -func (i *imlExternalAppService) OnComplete() { - i.IServiceGet = universally.NewGetSoftDelete[ExternalApp, external_app.ExternalApp](i.store, FromEntity) - - i.IServiceDelete = universally.NewSoftDelete[external_app.ExternalApp](i.store) - - i.IServiceCreate = universally.NewCreator[CreateExternalApp, external_app.ExternalApp](i.store, "external_app", createEntityHandler, uniquestHandler, labelHandler) - - i.IServiceEdit = universally.NewEdit[EditExternalApp, external_app.ExternalApp](i.store, updateHandler, labelHandler) -} - -func labelHandler(e *external_app.ExternalApp) []string { - return []string{e.Name, e.UUID, e.Desc} -} -func uniquestHandler(i *CreateExternalApp) []map[string]interface{} { - return []map[string]interface{}{{"uuid": i.Id}} -} -func createEntityHandler(i *CreateExternalApp) *external_app.ExternalApp { - now := time.Now() - return &external_app.ExternalApp{ - UUID: i.Id, - Name: i.Name, - Token: i.Token, - Desc: i.Desc, - Tags: i.Tags, - Enable: i.Enable, - CreateAt: now, - UpdateAt: now, - } -} - -func updateHandler(e *external_app.ExternalApp, i *EditExternalApp) { - if i.Name != nil { - e.Name = *i.Name - } - if i.Token != nil { - e.Token = *i.Token - } - if i.Desc != nil { - e.Desc = *i.Desc - } - if len(i.Tags) > 0 { - e.Tags = i.Tags - } - if i.Enable != nil { - e.Enable = *i.Enable - } - e.UpdateAt = time.Now() -} diff --git a/service/external-app/model.go b/service/external-app/model.go deleted file mode 100644 index 77d3c62..0000000 --- a/service/external-app/model.go +++ /dev/null @@ -1,52 +0,0 @@ -package external_app - -import ( - "time" - - external_app "github.com/eolinker/apipark/stores/external-app" -) - -type ExternalApp struct { - ID string - Name string - Token string - Desc string - Tags []string - Enable bool - Creator string - Updater string - CreateAt time.Time - UpdateAt time.Time -} - -type CreateExternalApp struct { - Id string - Name string - Token string - Desc string - Tags []string - Enable bool -} - -type EditExternalApp struct { - Name *string - Token *string - Desc *string - Tags []string - Enable *bool -} - -func FromEntity(ov *external_app.ExternalApp) *ExternalApp { - return &ExternalApp{ - ID: ov.UUID, - Name: ov.Name, - Token: ov.Token, - Desc: ov.Desc, - Tags: ov.Tags, - Enable: ov.Enable, - Creator: ov.Creator, - Updater: ov.Updater, - CreateAt: ov.CreateAt, - UpdateAt: ov.UpdateAt, - } -} diff --git a/service/external-app/service.go b/service/external-app/service.go deleted file mode 100644 index 5686c9e..0000000 --- a/service/external-app/service.go +++ /dev/null @@ -1,21 +0,0 @@ -package external_app - -import ( - "reflect" - - "github.com/eolinker/apipark/service/universally" - "github.com/eolinker/go-common/autowire" -) - -type IExternalAppService interface { - universally.IServiceGet[ExternalApp] - universally.IServiceDelete - universally.IServiceCreate[CreateExternalApp] - universally.IServiceEdit[EditExternalApp] -} - -func init() { - autowire.Auto[IExternalAppService](func() reflect.Value { - return reflect.ValueOf(new(imlExternalAppService)) - }) -} diff --git a/service/monitor/iml.go b/service/monitor/iml.go deleted file mode 100644 index 210e264..0000000 --- a/service/monitor/iml.go +++ /dev/null @@ -1,257 +0,0 @@ -package monitor - -import ( - "context" - "encoding/json" - "errors" - "fmt" - "sort" - "strings" - "time" - - "github.com/eolinker/eosc/log" - - "github.com/eolinker/go-common/cache" - - "github.com/google/uuid" - - "gorm.io/gorm" - - "github.com/eolinker/go-common/utils" - - "github.com/eolinker/apipark/stores/monitor" -) - -var ( - _ IMonitorService = (*imlMonitorService)(nil) -) - -type imlMonitorService struct { - store monitor.IMonitorStore `autowired:""` -} - -func (i *imlMonitorService) DeleteByPartition(ctx context.Context, partitionId string) error { - _, err := i.store.DeleteWhere(ctx, map[string]interface{}{ - "partition": partitionId, - }) - return err -} - -func (i *imlMonitorService) GetByPartition(ctx context.Context, partitionId string) (*Monitor, error) { - info, err := i.store.First(ctx, map[string]interface{}{ - "partition": partitionId, - }) - if err != nil { - return nil, err - } - return &Monitor{ - ID: info.UUID, - Partition: info.Partition, - Driver: info.Driver, - Config: info.Config, - Creator: info.Creator, - Updater: info.Updater, - CreateAt: info.CreateAt, - UpdateAt: info.UpdateAt, - }, nil -} - -func (i *imlMonitorService) Get(ctx context.Context, id string) (*Monitor, error) { - info, err := i.store.First(ctx, map[string]interface{}{ - "uuid": id, - }) - if err != nil { - return nil, err - } - return &Monitor{ - ID: info.UUID, - Partition: info.Partition, - Driver: info.Driver, - Config: info.Config, - Creator: info.Creator, - Updater: info.Updater, - CreateAt: info.CreateAt, - UpdateAt: info.UpdateAt, - }, nil -} - -func (i *imlMonitorService) MapByPartition(ctx context.Context, partitionIds ...string) (map[string]*Monitor, error) { - if len(partitionIds) == 0 { - return make(map[string]*Monitor), nil - } - list, err := i.store.List(ctx, map[string]interface{}{ - "partition": partitionIds, - }) - if err != nil { - return nil, err - } - return utils.SliceToMapO(list, func(m *monitor.Monitor) (string, *Monitor) { - return m.Partition, &Monitor{ - ID: m.UUID, - Partition: m.Partition, - Driver: m.Driver, - Config: m.Config, - Creator: m.Creator, - Updater: m.Updater, - CreateAt: m.CreateAt, - UpdateAt: m.UpdateAt, - } - }), nil -} - -func (i *imlMonitorService) Save(ctx context.Context, m *SaveMonitor) error { - userId := utils.UserId(ctx) - now := time.Now() - info, err := i.store.First(ctx, map[string]interface{}{ - "partition": m.Partition, - }) - if err != nil { - if !errors.Is(err, gorm.ErrRecordNotFound) { - return err - } - info = &monitor.Monitor{ - UUID: uuid.New().String(), - Partition: m.Partition, - Driver: m.Driver, - Config: m.Config, - Creator: userId, - Updater: userId, - CreateAt: now, - UpdateAt: now, - } - } else { - info.Config = m.Config - info.Updater = userId - info.UpdateAt = now - } - return i.store.Save(ctx, info) -} - -var ( - _ IMonitorStatisticsCache = (*imlMonitorStatisticsCacheService)(nil) -) - -type imlMonitorStatisticsCacheService struct { - commonCache cache.ICommonCache `autowired:""` -} - -func (i *imlMonitorStatisticsCacheService) GetStatisticsCache(ctx context.Context, partitionId string, start, end time.Time, groupBy string, wheres []MonWhereItem, limit int) (map[string]MonCommonData, error) { - key := fmt.Sprintf("monitor:statistics:%s:%d_%d:%s:%s:%d", partitionId, start.Unix(), end.Unix(), groupBy, formatWhereKey(wheres), limit) - - maps, err := i.commonCache.HGetAll(ctx, key) - if err != nil { - log.Errorf("GetStatisticsCache cache.HGetAll key=%s err=%s", key, err.Error()) - return nil, err - } - valMap := make(map[string]MonCommonData) - for k, v := range maps { - commonData := &MonCommonData{} - if err = json.Unmarshal([]byte(v), commonData); err != nil { - log.Errorf("GetStatisticsCache json.Unmarshal err=%s", err.Error()) - return nil, err - } - valMap[k] = *commonData - } - - return valMap, nil -} - -func (i *imlMonitorStatisticsCacheService) SetStatisticsCache(ctx context.Context, partitionId string, start, end time.Time, groupBy string, wheres []MonWhereItem, limit int, values map[string]MonCommonData) error { - key := fmt.Sprintf("monitor:statistics:%s:%d_%d:%s:%s:%d", partitionId, start.Unix(), end.Unix(), groupBy, formatWhereKey(wheres), limit) - - maps := make(map[string][]byte) - for k, data := range values { - bytes, err := json.Marshal(data) - if err != nil { - log.Errorf("SetStatisticsCache json.Marshal key=%s err=%s", key, err.Error()) - return err - } - maps[k] = bytes - } - - return i.commonCache.HMSet(ctx, key, maps, 5*time.Minute) -} - -func (i *imlMonitorStatisticsCacheService) GetTrendCache(ctx context.Context, partitionId string, start, end time.Time, wheres []MonWhereItem) (*MonInvokeCountTrend, error) { - key := fmt.Sprintf("monitor:trend:%s:%d_%d:%s", partitionId, start.Unix(), end.Unix(), formatWhereKey(wheres)) - - bytes, err := i.commonCache.Get(ctx, key) - if err != nil { - log.Errorf("GetTrendCache cache.Get key=%s err=%s", key, err.Error()) - return nil, err - } - - val := new(MonInvokeCountTrend) - - if err = json.Unmarshal(bytes, val); err != nil { - log.Errorf("GetTrendCache json.Unmarshal key=%s bytes=%v err=%s", key, bytes, err.Error()) - return nil, err - } - - return val, nil -} - -func (i *imlMonitorStatisticsCacheService) SetTrendCache(ctx context.Context, partitionId string, start, end time.Time, wheres []MonWhereItem, value *MonInvokeCountTrend) error { - key := fmt.Sprintf("monitor:trend:%s:%d_%d:%s", partitionId, start.Unix(), end.Unix(), formatWhereKey(wheres)) - - bytes, err := json.Marshal(value) - if err != nil { - log.Errorf("SetTrendCache json.Marshal key=%s val=%v err=%s", key, value, err.Error()) - return err - } - - return i.commonCache.Set(ctx, key, bytes, 5*time.Minute) -} - -func (i *imlMonitorStatisticsCacheService) GetMessageTrend(ctx context.Context, partitionId string, start, end time.Time, wheres []MonWhereItem) (*MonMessageTrend, error) { - key := fmt.Sprintf("monitor:message_trend:%s:%d_%d:%s", partitionId, start.Unix(), end.Unix(), formatWhereKey(wheres)) - - bytes, err := i.commonCache.Get(ctx, key) - if err != nil { - log.Errorf("GetMessageTrend cache.Get key=%s err=%s", key, err.Error()) - return nil, err - } - - val := new(MonMessageTrend) - - if err = json.Unmarshal(bytes, val); err != nil { - log.Errorf("GetMessageTrend json.Unmarshal key=%s bytes=%v err=%s", key, bytes, err.Error()) - return nil, err - } - - return val, nil -} - -func (i *imlMonitorStatisticsCacheService) SetMessageTrend(ctx context.Context, partitionId string, start, end time.Time, wheres []MonWhereItem, val *MonMessageTrend) error { - key := fmt.Sprintf("monitor:message_trend:%s:%d_%d:%s", partitionId, start.Unix(), end.Unix(), formatWhereKey(wheres)) - - bytes, err := json.Marshal(val) - if err != nil { - log.Errorf("SetMessageTrend json.Marshal key=%s val=%v err=%s", key, val, err.Error()) - return err - } - - return i.commonCache.Set(ctx, key, bytes, 5*time.Minute) -} - -func formatWhereKey(wheres []MonWhereItem) string { - - whereMap := make(map[string]MonWhereItem) - keys := make([]string, 0, len(wheres)) - for _, where := range wheres { - whereMap[where.Key] = where - keys = append(keys, where.Key) - } - - sort.Strings(keys) - - redisKeys := make([]string, 0) - for _, key := range keys { - if v, ok := whereMap[key]; ok { - sort.Strings(v.Values) - redisKeys = append(redisKeys, fmt.Sprintf("%v", strings.Join(v.Values, "_"))) - } - } - - return strings.Join(redisKeys, ":") -} diff --git a/service/monitor/model.go b/service/monitor/model.go deleted file mode 100644 index 049df46..0000000 --- a/service/monitor/model.go +++ /dev/null @@ -1,159 +0,0 @@ -package monitor - -import "time" - -type CreateMonitorProxy struct { -} - -type UpdateMonitorProxy struct { -} - -type Monitor struct { - ID string - Partition string - Driver string - Config string - Creator string - Updater string - CreateAt time.Time - UpdateAt time.Time -} - -type SaveMonitor struct { - Partition string - Driver string - Config string -} - -type MonSortType string - -type MonCommonInput struct { - StartTime int64 - EndTime int64 - PartitionId string - Path string - Clusters []string - Ip string - Keyword string - ServiceName string - AppId string - ApiId string - ServiceNames []string - AppIds []string - ApiIds []string - PageNum int - PageSize int - Sort MonCommonSort -} - -type MonCommonSort struct { - Key MonSortType - Val bool -} - -// MonCommonStatistics 调用统计 -type MonCommonStatistics struct { - ApiId string //apiID - ApiName string //api名称 - ServiceID string //上游服务ID - ServiceName string //上游服务名称 - AppName string //应用名称 - AppId string //应用ID - Path string //路径 - ProxyPath string //转发路径 - Ip string //IP - Node string //目标节点 - IsRed bool //是否标红 - MonCommonData -} - -type MonPirMapInfo struct { - RequestTotal int `json:"request_total"` //请求总数 - RequestSuccess int `json:"request_success"` //请求成功数 - RequestFail int `json:"request_fail"` //请求失败数 - RequestStatus5XX int `json:"request_status_5_xx"` - RequestStatus4XX int `json:"request_status_4_xx"` - ProxyTotal int `json:"proxy_total"` //转发总数 - ProxySuccess int `json:"proxy_success"` //转发成功数 - ProxyFail int `json:"proxy_fail"` //转发失败数 - ProxyStatus5XX int `json:"proxy_status_5_xx"` - ProxyStatus4XX int `json:"proxy_status_4_xx"` -} - -type MonInvokeCountTrend struct { - Date []time.Time `json:"date"` - Status5XX []int64 `json:"status_5_xx"` - Status4XX []int64 `json:"status_4_xx"` - ProxyRate []float64 `json:"proxy_rate"` - ProxyTotal []int64 `json:"proxy_total"` - RequestRate []float64 `json:"request_rate"` - RequestTotal []int64 `json:"request_total"` -} - -// MonCommonData 通用字段 -type MonCommonData struct { - ID string `json:"id"` - RequestTotal int64 `json:"request_total"` //请求总数 - RequestSuccess int64 `json:"request_success"` //请求成功数 - RequestRate float64 `json:"request_rate"` //请求成功率 - ProxyTotal int64 `json:"proxy_total"` //转发总数 - ProxySuccess int64 `json:"proxy_success"` //转发成功数 - ProxyRate float64 `json:"proxy_rate"` //转发成功率 - StatusFail int64 `json:"status_fail"` //失败状态数 - AvgResp float64 `json:"avg_resp"` //平均响应时间 - MaxResp int64 `json:"max_resp"` //最大响应时间 - MinResp int64 `json:"min_resp"` //最小响应时间 - AvgTraffic float64 `json:"avg_traffic"` //平均流量 - MaxTraffic int64 `json:"max_traffic"` //最大流量 - MinTraffic int64 `json:"min_traffic"` //最小流量 -} - -type MonProxyData struct { - ProxyTotal int64 `json:"proxy_total"` //转发总数 - ProxySuccess int64 `json:"proxy_success"` //转发成功数 - ProxyRate float64 `json:"proxy_rate"` //转发成功率 - StatusFail int64 `json:"status_fail"` //失败状态数 - AvgResp float64 `json:"avg_resp"` //平均响应时间 - MaxResp int64 `json:"max_resp"` //最大响应时间 - MinResp int64 `json:"min_resp"` //最小响应时间 - AvgTraffic float64 `json:"avg_traffic"` //平均流量 - MaxTraffic int64 `json:"max_traffic"` //最大流量 - MinTraffic int64 `json:"min_traffic"` //最小流量 -} - -type MonMessageTrend struct { - Dates []time.Time `json:"dates"` - ReqMessage []float64 `json:"req_message"` - RespMessage []float64 `json:"resp_message"` -} - -type Summary struct { - Total int64 `json:"total"` - Success int64 `json:"success"` - Fail int64 `json:"fail"` - Status4Xx int64 `json:"status_4xx"` - Status5Xx int64 `json:"status_5xx"` -} - -type MonWhereItem struct { - Key string - Operation string // 表达式,默认为 =,多个为 in,可以用其他 - Values []string -} -type MonSortBy struct { - Key string - Desc bool -} -type MonStatisticsValue struct { - MonCommonData -} -type MonTrendFilter struct { - Name string - MonWhereItem -} - -type MonTrendValues struct { - Data []string - Names []string - Values [][]interface{} -} diff --git a/service/monitor/service.go b/service/monitor/service.go deleted file mode 100644 index 9d8abbd..0000000 --- a/service/monitor/service.go +++ /dev/null @@ -1,54 +0,0 @@ -package monitor - -import ( - "context" - "reflect" - "time" - - "github.com/eolinker/go-common/autowire" -) - -type IMonitorService interface { - // Get 获取监控配置 - Get(ctx context.Context, id string) (*Monitor, error) - // MapByPartition 获取监控配置 - MapByPartition(ctx context.Context, partitionId ...string) (map[string]*Monitor, error) - GetByPartition(ctx context.Context, partitionId string) (*Monitor, error) - // Save 保存监控配置 - Save(ctx context.Context, monitor *SaveMonitor) error - DeleteByPartition(ctx context.Context, partitionId string) error -} - -func init() { - autowire.Auto[IMonitorService](func() reflect.Value { - return reflect.ValueOf(new(imlMonitorService)) - }) - - autowire.Auto[IMonitorStatisticsCache](func() reflect.Value { - return reflect.ValueOf(new(imlMonitorStatisticsCacheService)) - }) -} - -type IMonitorStatisticsCache interface { - GetStatisticsCache(ctx context.Context, partitionId string, start, end time.Time, groupBy string, wheres []MonWhereItem, limit int) (map[string]MonCommonData, error) - SetStatisticsCache(ctx context.Context, partitionId string, start, end time.Time, groupBy string, wheres []MonWhereItem, limit int, values map[string]MonCommonData) error - - GetTrendCache(ctx context.Context, partitionId string, start, end time.Time, wheres []MonWhereItem) (*MonInvokeCountTrend, error) - SetTrendCache(ctx context.Context, partitionId string, start, end time.Time, wheres []MonWhereItem, value *MonInvokeCountTrend) error - - //GetCircularMap(ctx context.Context, partitionId string, start, end time.Time, wheres []MonWhereItem) (request, proxy *CircularDate, err error) - //SetCircularMap(ctx context.Context, partitionId string, start, end time.Time, wheres []MonWhereItem, request, proxy *CircularDate) error - - GetMessageTrend(ctx context.Context, partitionId string, start, end time.Time, wheres []MonWhereItem) (*MonMessageTrend, error) - SetMessageTrend(ctx context.Context, partitionId string, start, end time.Time, wheres []MonWhereItem, val *MonMessageTrend) error -} - -// IMonitorSourceDriver 监控数据源驱动 -type IMonitorSourceDriver interface { - CheckInput(config []byte) ([]byte, error) -} - -type IMonitorSourceManager interface { - //driver.IDriverManager[IMonitorSourceDriver] - List() []string -} diff --git a/stores/external-app/model.go b/stores/external-app/model.go deleted file mode 100644 index 8d10341..0000000 --- a/stores/external-app/model.go +++ /dev/null @@ -1,25 +0,0 @@ -package external_app - -import "time" - -type ExternalApp struct { - Id int64 `gorm:"column:id;type:BIGINT(20);AUTO_INCREMENT;NOT NULL;comment:id;primary_key;comment:主键ID;"` - UUID string `gorm:"type:varchar(36);not null;column:uuid;uniqueIndex:uuid;comment:UUID;"` - Name string `gorm:"type:varchar(100);not null;column:name;comment:name"` - Token string `gorm:"column:token;type:VARCHAR(36);NOT NULL;comment:鉴权token"` - Desc string `gorm:"column:desc;type:TEXT;comment:应用描述;"` - Tags []string `gorm:"column:tags;type:TEXT;comment:应用标签;serializer:json"` - Enable bool `gorm:"column:enable;type:TINYINT(1); comment:启用状态"` - IsDelete bool `gorm:"column:is_delete;type:TINYINT(1); comment:是否删除"` - Creator string `gorm:"type:varchar(36);not null;column:creator;comment:creator" aovalue:"creator"` - Updater string `gorm:"type:varchar(36);not null;column:updater;comment:updater" aovalue:"updater"` - CreateAt time.Time `gorm:"type:timestamp;NOT NULL;DEFAULT:CURRENT_TIMESTAMP;column:create_at;comment:创建时间"` - UpdateAt time.Time `gorm:"type:timestamp;NOT NULL;DEFAULT:CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP;column:update_at;comment:修改时间" json:"update_at"` -} - -func (c *ExternalApp) IdValue() int64 { - return c.Id -} -func (c *ExternalApp) TableName() string { - return "external_app" -} diff --git a/stores/external-app/store.go b/stores/external-app/store.go deleted file mode 100644 index 33be2f6..0000000 --- a/stores/external-app/store.go +++ /dev/null @@ -1,21 +0,0 @@ -package external_app - -import ( - "reflect" - - "github.com/eolinker/go-common/autowire" - "github.com/eolinker/go-common/store" -) - -type IExternalAppStore interface { - store.ISearchStore[ExternalApp] -} -type storeExternalApp struct { - store.SearchStore[ExternalApp] // 用struct方式继承,会自动填充并初始化表 -} - -func init() { - autowire.Auto[IExternalAppStore](func() reflect.Value { - return reflect.ValueOf(new(storeExternalApp)) - }) -} diff --git a/stores/monitor/model.go b/stores/monitor/model.go deleted file mode 100644 index 3a37fc1..0000000 --- a/stores/monitor/model.go +++ /dev/null @@ -1,23 +0,0 @@ -package monitor - -import "time" - -type Monitor struct { - Id int64 `gorm:"column:id;type:BIGINT(20);AUTO_INCREMENT;NOT NULL;comment:id;primary_key;comment:主键ID;"` - UUID string `gorm:"type:varchar(36);not null;column:uuid;uniqueIndex:uuid;comment:UUID;"` - Partition string `gorm:"column:partition;type:varchar(36);NOT NULL;comment:分区ID"` - Driver string `gorm:"column:driver;type:VARCHAR(36);NOT NULL;comment:驱动"` - Config string `gorm:"column:config;type:TEXT;NOT NULL;comment:配置"` - Creator string `gorm:"type:varchar(36);not null;column:creator;comment:creator" aovalue:"creator"` - Updater string `gorm:"type:varchar(36);not null;column:updater;comment:updater" aovalue:"updater"` - CreateAt time.Time `gorm:"type:timestamp;NOT NULL;DEFAULT:CURRENT_TIMESTAMP;column:create_at;comment:创建时间"` - UpdateAt time.Time `gorm:"type:timestamp;NOT NULL;DEFAULT:CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP;column:update_at;comment:修改时间" json:"update_at"` -} - -func (c *Monitor) IdValue() int64 { - return c.Id -} - -func (c *Monitor) TableName() string { - return "monitor" -} diff --git a/stores/monitor/store.go b/stores/monitor/store.go deleted file mode 100644 index e6faddc..0000000 --- a/stores/monitor/store.go +++ /dev/null @@ -1,22 +0,0 @@ -package monitor - -import ( - "reflect" - - "github.com/eolinker/go-common/autowire" - "github.com/eolinker/go-common/store" -) - -type IMonitorStore interface { - store.IBaseStore[Monitor] -} - -type storeMonitor struct { - store.Store[Monitor] -} - -func init() { - autowire.Auto[IMonitorStore](func() reflect.Value { - return reflect.ValueOf(new(storeMonitor)) - }) -}