Class: RailsVitals::MCP::Tools::GetSlowQueries
- Defined in:
- lib/rails_vitals/mcp/tools/get_slow_queries.rb
Constant Summary collapse
- TOOL_NAME =
"railsvitals_get_slow_queries"- DESCRIPTION =
"Returns individual slow queries detected across recent requests, ordered by\nduration descending. Each result includes the SQL, execution time, and the\nendpoint that fired it. Use threshold_ms to override the default slow query\nthreshold (configured via mcp_slow_query_threshold_ms, default 100ms).\nUse this after railsvitals_get_score to find which specific queries are\ndragging down database performance.\n".strip
- INPUT_SCHEMA =
{ type: "object", properties: { threshold_ms: { type: "integer", description: "Minimum query duration in ms to include. Defaults to config.mcp_slow_query_threshold_ms (100ms)." }, limit: { type: "integer", description: "Maximum number of queries to return, ordered by duration desc. Defaults to 10." } } }.freeze
- DEFAULT_LIMIT =
10
Instance Method Summary collapse
Methods inherited from Base
Instance Method Details
#call(params) ⇒ Object
32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
# File 'lib/rails_vitals/mcp/tools/get_slow_queries.rb', line 32 def call(params) records = RailsVitals.store.all return no_data_response if records.empty? threshold = (params[:threshold_ms] || params["threshold_ms"] || RailsVitals.config.mcp_slow_query_threshold_ms).to_i limit = (params[:limit] || params["limit"] || DEFAULT_LIMIT).to_i slow = collect_slow_queries(records, threshold) return no_slow_queries_response(threshold) if slow.empty? { total_slow_queries: slow.size, shown: [ limit, slow.size ].min, threshold_ms: threshold, queries: slow.first(limit).map { |q| serialize(q) } } end |