| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- package servicemanagement
-
- import (
- "context"
- "fmt"
-
- "git.x2erp.com/qdy/go-base/ctx"
- "git.x2erp.com/qdy/go-base/logger"
- "git.x2erp.com/qdy/go-base/model/response"
- "git.x2erp.com/qdy/go-base/util"
- "git.x2erp.com/qdy/go-db/factory/database"
- )
-
- // ServiceInfo 微服务信息
- type ServiceInfo struct {
- ServiceName string `json:"service_name"`
- ConfigCount int `json:"config_count"`
- Creator string `json:"creator,omitempty"`
- CreatedAt string `json:"created_at,omitempty"`
- }
-
- // GetServices 获取微服务列表
- func GetServices(ctx context.Context, dbFactory *database.DBFactory, reqCtx *ctx.RequestContext) *response.QueryResult[[]ServiceInfo] {
- logger.Debug("GetServices-开始获取微服务列表")
-
- // 获取数据库连接
- db := dbFactory.GetDB()
-
- // 查询distinct service_name及其相关信息
- query := `
- SELECT
- service_name,
- COUNT(*) as config_count,
- MIN(creator) as creator,
- MIN(created_at) as created_at
- FROM config_startup_svc
- GROUP BY service_name
- ORDER BY service_name
- `
-
- rows, err := db.QueryxContext(ctx, query)
- if err != nil {
- logger.ErrorC(reqCtx, fmt.Sprintf("查询微服务列表失败: %v", err))
- return util.CreateErrorResult[[]ServiceInfo](fmt.Sprintf("查询微服务列表失败: %v", err), reqCtx)
- }
- defer rows.Close()
-
- var services []ServiceInfo
- for rows.Next() {
- var service ServiceInfo
- var creator, createdAt interface{}
-
- err := rows.Scan(&service.ServiceName, &service.ConfigCount, &creator, &createdAt)
- if err != nil {
- logger.ErrorC(reqCtx, fmt.Sprintf("扫描微服务数据失败: %v", err))
- continue
- }
-
- // 处理可能为nil的字段
- if creator != nil {
- service.Creator = fmt.Sprintf("%v", creator)
- }
- if createdAt != nil {
- service.CreatedAt = fmt.Sprintf("%v", createdAt)
- }
-
- services = append(services, service)
- }
-
- if err := rows.Err(); err != nil {
- logger.ErrorC(reqCtx, fmt.Sprintf("遍历微服务数据失败: %v", err))
- return util.CreateErrorResult[[]ServiceInfo](fmt.Sprintf("遍历微服务数据失败: %v", err), reqCtx)
- }
-
- logger.Debug(fmt.Sprintf("获取到 %d 个微服务", len(services)))
- return util.CreateSuccessResultData[[]ServiceInfo](services, reqCtx)
- }
|