pgsql.go 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. package data
  2. import (
  3. "context"
  4. "fmt"
  5. "time"
  6. "github.com/mark3labs/mcp-go/mcp"
  7. "github.com/mark3labs/mcp-go/server"
  8. "fwh-toolbox-server/cmd/mcp/tools/helper"
  9. "fwh-toolbox-server/repositories"
  10. )
  11. func registerPgsqlTools(s *server.MCPServer) {
  12. s.AddTool(
  13. mcp.NewTool("data_pgsql_query_snapshot_file_record",
  14. mcp.WithDescription("查询 PostgreSQL 中的告警快照文件解析记录"),
  15. mcp.WithString("file_name", mcp.Required(), mcp.Description("快照文件名")),
  16. ),
  17. handlePgsqlQuerySnapshotFileRecord,
  18. )
  19. s.AddTool(
  20. mcp.NewTool("data_pgsql_query_snapshot_data",
  21. mcp.WithDescription("查询 PostgreSQL 中的告警快照数据(按SN和日期)"),
  22. mcp.WithString("sn", mcp.Required(), mcp.Description("站点SN")),
  23. mcp.WithString("date", mcp.Required(), mcp.Description("日期,格式 yyyy-MM-dd")),
  24. ),
  25. handlePgsqlQuerySnapshotData,
  26. )
  27. }
  28. func handlePgsqlQuerySnapshotFileRecord(ctx context.Context, req mcp.CallToolRequest) (*mcp.CallToolResult, error) {
  29. fileName, err := req.RequireString("file_name")
  30. if err != nil {
  31. return helper.ParamError("file_name"), nil
  32. }
  33. data, err := repositories.QuerySnapshotFileRecord(ctx, fileName)
  34. if err != nil {
  35. return helper.EmptyResult(fmt.Sprintf("未找到文件记录: %v", err)), nil
  36. }
  37. return helper.JSONResult(data), nil
  38. }
  39. func handlePgsqlQuerySnapshotData(ctx context.Context, req mcp.CallToolRequest) (*mcp.CallToolResult, error) {
  40. sn, err := req.RequireString("sn")
  41. if err != nil {
  42. return helper.ParamError("sn"), nil
  43. }
  44. dateStr, err := req.RequireString("date")
  45. if err != nil {
  46. return helper.ParamError("date"), nil
  47. }
  48. // 验证日期格式
  49. if _, err := time.Parse("2006-01-02", dateStr); err != nil {
  50. return helper.ParamInvalidError("date", fmt.Sprintf("需要 yyyy-MM-dd 格式: %v", err)), nil
  51. }
  52. data, err := repositories.QuerySnapshotData(ctx, sn, dateStr)
  53. if err != nil {
  54. return helper.ServiceError("查询快照数据", err), nil
  55. }
  56. if len(data) == 0 {
  57. return helper.EmptyResult("查询结果为空"), nil
  58. }
  59. return helper.JSONResult(data), nil
  60. }