Ingen beskrivning
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

get_services.go 2.2KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. package servicemanagement
  2. import (
  3. "context"
  4. "fmt"
  5. "git.x2erp.com/qdy/go-base/ctx"
  6. "git.x2erp.com/qdy/go-base/logger"
  7. "git.x2erp.com/qdy/go-base/model/response"
  8. "git.x2erp.com/qdy/go-base/util"
  9. "git.x2erp.com/qdy/go-db/factory/database"
  10. )
  11. // ServiceInfo 微服务信息
  12. type ServiceInfo struct {
  13. ServiceName string `json:"service_name"`
  14. ConfigCount int `json:"config_count"`
  15. Creator string `json:"creator,omitempty"`
  16. CreatedAt string `json:"created_at,omitempty"`
  17. }
  18. // GetServices 获取微服务列表
  19. func GetServices(ctx context.Context, dbFactory *database.DBFactory, reqCtx *ctx.RequestContext) *response.QueryResult[[]ServiceInfo] {
  20. logger.Debug("GetServices-开始获取微服务列表")
  21. // 获取数据库连接
  22. db := dbFactory.GetDB()
  23. // 查询distinct service_name及其相关信息
  24. query := `
  25. SELECT
  26. service_name,
  27. COUNT(*) as config_count,
  28. MIN(creator) as creator,
  29. MIN(created_at) as created_at
  30. FROM config_startup_svc
  31. GROUP BY service_name
  32. ORDER BY service_name
  33. `
  34. rows, err := db.QueryxContext(ctx, query)
  35. if err != nil {
  36. logger.ErrorC(reqCtx, fmt.Sprintf("查询微服务列表失败: %v", err))
  37. return util.CreateErrorResult[[]ServiceInfo](fmt.Sprintf("查询微服务列表失败: %v", err), reqCtx)
  38. }
  39. defer rows.Close()
  40. var services []ServiceInfo
  41. for rows.Next() {
  42. var service ServiceInfo
  43. var creator, createdAt interface{}
  44. err := rows.Scan(&service.ServiceName, &service.ConfigCount, &creator, &createdAt)
  45. if err != nil {
  46. logger.ErrorC(reqCtx, fmt.Sprintf("扫描微服务数据失败: %v", err))
  47. continue
  48. }
  49. // 处理可能为nil的字段
  50. if creator != nil {
  51. service.Creator = fmt.Sprintf("%v", creator)
  52. }
  53. if createdAt != nil {
  54. service.CreatedAt = fmt.Sprintf("%v", createdAt)
  55. }
  56. services = append(services, service)
  57. }
  58. if err := rows.Err(); err != nil {
  59. logger.ErrorC(reqCtx, fmt.Sprintf("遍历微服务数据失败: %v", err))
  60. return util.CreateErrorResult[[]ServiceInfo](fmt.Sprintf("遍历微服务数据失败: %v", err), reqCtx)
  61. }
  62. logger.Debug(fmt.Sprintf("获取到 %d 个微服务", len(services)))
  63. return util.CreateSuccessResultData[[]ServiceInfo](services, reqCtx)
  64. }