shutdown.go 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. package tools
  2. import (
  3. "context"
  4. "github.com/mark3labs/mcp-go/mcp"
  5. "fwh-toolbox-server/agentmcp/kit"
  6. "fwh-toolbox-server/repositories"
  7. "fwh-toolbox-server/services"
  8. )
  9. // ---- shutdown_stats ----
  10. type shutdownStatsArgs struct {
  11. Date string `json:"date,omitempty" jsonschema:"统计日期 yyyy-MM-dd(北京时间),不填取最新可用日期"`
  12. }
  13. var ShutdownStats = kit.Def[shutdownStatsArgs]{
  14. Name: "shutdown_stats",
  15. Title: "查询停机统计",
  16. Description: "查询 ToolBox 每日停机统计汇总。返回:date;count(当日停机站点数,all/us/au);" +
  17. "weekly(截至该日最近 7 天每天的停机站点数,all/us/au 各 7 个数,按时间顺序);yearly(最近 12 个月每月的停机站点数)。" +
  18. "查看当日具体是哪些站点用 shutdown_sites。",
  19. ReadOnly: true,
  20. Handler: func(ctx context.Context, a shutdownStatsArgs) (*mcp.CallToolResult, error) {
  21. day, err := kit.ParseDate("date", a.Date, true)
  22. if err != nil {
  23. return kit.Fail(err), nil
  24. }
  25. var datePtr *string
  26. if day != nil {
  27. s := day.Format(kit.DateLayout)
  28. datePtr = &s
  29. } else {
  30. latest, err := services.GetShutdownStatisticsDate()
  31. if err != nil {
  32. return kit.Upstream("ToolBox 停机统计", err), nil
  33. }
  34. datePtr = latest
  35. }
  36. dash, err := services.GetShutdownStatistics(datePtr)
  37. if err != nil {
  38. return kit.Upstream("ToolBox 停机统计", err), nil
  39. }
  40. out := map[string]any{"date": dash.Date, "weekly": dash.Weekly, "yearly": dash.Yearly}
  41. if item, err := services.GetShutdownInfoMap(datePtr); err == nil && item != nil {
  42. out["count"] = item.Count
  43. out["status"] = item.Status
  44. }
  45. return kit.Object(out), nil
  46. },
  47. }
  48. // ---- shutdown_sites ----
  49. type shutdownSitesArgs struct {
  50. Date string `json:"date" jsonschema:"日期 yyyy-MM-dd"`
  51. Country string `json:"country,omitempty" jsonschema:"国家:all(默认)、us(美国)、au(澳大利亚)"`
  52. Limit int `json:"limit,omitempty" jsonschema:"最多返回条数,1~500,默认 200"`
  53. }
  54. var ShutdownSites = kit.Def[shutdownSitesArgs]{
  55. Name: "shutdown_sites",
  56. Title: "查询停机站点列表",
  57. Description: "查询某一天发生停机(Shutdown)的站点列表(FWH 平台)。" +
  58. "返回字段:gatewayId(站点 SN)、shutdownType(1 系统停机、2 aPower 停机)、country、province、activeTime(激活时间)、deviceTime(停机开始的设备时间)。",
  59. ReadOnly: true,
  60. Handler: func(ctx context.Context, a shutdownSitesArgs) (*mcp.CallToolResult, error) {
  61. day, err := kit.ParseDate("date", a.Date, false)
  62. if err != nil {
  63. return kit.Fail(err), nil
  64. }
  65. country, err := parseCountry(a.Country)
  66. if err != nil {
  67. return kit.Fail(err), nil
  68. }
  69. items, err := repositories.QuerySiteShutdownList(day.Format(kit.DateLayout), int(country))
  70. if err != nil {
  71. return kit.Upstream("FWH 平台停机列表接口", err), nil
  72. }
  73. return kit.List(items, -1, kit.Limit(a.Limit, 200, 500), "结果已截断,可按 country 分别查询"), nil
  74. },
  75. }