metric_query_tool.py 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. from typing import Dict, Any
  2. class MetricQueryTool:
  3. """
  4. Queries simulated time-series metrics for the incident's service.
  5. Input to run(): a metric name substring (e.g. 'db_pool', 'latency', 'memory')
  6. Returns: time-series data as a formatted string
  7. """
  8. name = "metric_query"
  9. description = (
  10. "Query time-series metrics for the incident service. "
  11. "Input: a metric name or keyword (e.g. 'db_pool', 'memory', 'latency', 'error_rate'). "
  12. "Returns time-series values showing how the metric changed over time."
  13. )
  14. def __init__(self, incident_data: Dict[str, Any]):
  15. self.metrics: Dict[str, Dict] = incident_data.get("metrics", {})
  16. self.service: str = incident_data.get("service", "unknown")
  17. def run(self, metric_name: str) -> str:
  18. query = metric_name.lower().strip()
  19. matched = {k: v for k, v in self.metrics.items() if query in k.lower()}
  20. if not matched:
  21. available = ", ".join(self.metrics.keys())
  22. return (
  23. f"No metrics found matching '{metric_name}' for {self.service}.\n"
  24. f"Available metrics: {available}"
  25. )
  26. lines = [f"Metrics for {self.service} matching '{metric_name}':"]
  27. for name, values in matched.items():
  28. series = " | ".join(f"{t}: {v}" for t, v in sorted(values.items()))
  29. lines.append(f" {name}: [{series}]")
  30. return "\n".join(lines)