package tools import ( "context" "github.com/mark3labs/mcp-go/mcp" "fwh-toolbox-server/agentmcp/kit" "fwh-toolbox-server/repositories" "fwh-toolbox-server/services" ) // ---- shutdown_stats ---- type shutdownStatsArgs struct { Date string `json:"date,omitempty" jsonschema:"统计日期 yyyy-MM-dd(北京时间),不填取最新可用日期"` } var ShutdownStats = kit.Def[shutdownStatsArgs]{ Name: "shutdown_stats", Title: "查询停机统计", Description: "查询 ToolBox 每日停机统计汇总。返回:date;count(当日停机站点数,all/us/au);" + "weekly(截至该日最近 7 天每天的停机站点数,all/us/au 各 7 个数,按时间顺序);yearly(最近 12 个月每月的停机站点数)。" + "查看当日具体是哪些站点用 shutdown_sites。", ReadOnly: true, Handler: func(ctx context.Context, a shutdownStatsArgs) (*mcp.CallToolResult, error) { day, err := kit.ParseDate("date", a.Date, true) if err != nil { return kit.Fail(err), nil } var datePtr *string if day != nil { s := day.Format(kit.DateLayout) datePtr = &s } else { latest, err := services.GetShutdownStatisticsDate() if err != nil { return kit.Upstream("ToolBox 停机统计", err), nil } datePtr = latest } dash, err := services.GetShutdownStatistics(datePtr) if err != nil { return kit.Upstream("ToolBox 停机统计", err), nil } out := map[string]any{"date": dash.Date, "weekly": dash.Weekly, "yearly": dash.Yearly} if item, err := services.GetShutdownInfoMap(datePtr); err == nil && item != nil { out["count"] = item.Count out["status"] = item.Status } return kit.Object(out), nil }, } // ---- shutdown_sites ---- type shutdownSitesArgs struct { Date string `json:"date" jsonschema:"日期 yyyy-MM-dd"` Country string `json:"country,omitempty" jsonschema:"国家:all(默认)、us(美国)、au(澳大利亚)"` Limit int `json:"limit,omitempty" jsonschema:"最多返回条数,1~500,默认 200"` } var ShutdownSites = kit.Def[shutdownSitesArgs]{ Name: "shutdown_sites", Title: "查询停机站点列表", Description: "查询某一天发生停机(Shutdown)的站点列表(FWH 平台)。" + "返回字段:gatewayId(站点 SN)、shutdownType(1 系统停机、2 aPower 停机)、country、province、activeTime(激活时间)、deviceTime(停机开始的设备时间)。", ReadOnly: true, Handler: func(ctx context.Context, a shutdownSitesArgs) (*mcp.CallToolResult, error) { day, err := kit.ParseDate("date", a.Date, false) if err != nil { return kit.Fail(err), nil } country, err := parseCountry(a.Country) if err != nil { return kit.Fail(err), nil } items, err := repositories.QuerySiteShutdownList(day.Format(kit.DateLayout), int(country)) if err != nil { return kit.Upstream("FWH 平台停机列表接口", err), nil } return kit.List(items, -1, kit.Limit(a.Limit, 200, 500), "结果已截断,可按 country 分别查询"), nil }, }