Skip to content

Add filtering controls to Grafana dashboard tools - #1213

Closed
aantn wants to merge 4 commits into
masterfrom
codex/linear-mention-rob-39-update-grafana-tool-to-handle-large
Closed

aantn wants to merge 4 commits into
masterfrom
codex/linear-mention-rob-39-update-grafana-tool-to-handle-large

Conversation

@aantn

@aantn aantn commented Dec 21, 2025 •

Copy link
Copy Markdown
Collaborator

Summary

  • add optional jsonpath/jq filtering and depth truncation to Grafana dashboard fetch tools
  • document response-size controls and add regression tests for filters and truncation
  • add jsonpath-ng and jq dependencies and refresh poetry.lock

Testing

  • poetry run pytest tests/plugins/toolsets/grafana/test_dashboard_filters.py --cov-config=pyproject.toml --cov=holmes --cov-fail-under=0

Codex Task

Summary by CodeRabbit

  • New Features

    • Added optional filtering parameters (max_depth, jsonpath, jq) to Grafana dashboard tools so users can limit response size and scope returned content.
  • Documentation

    • Added guidance on controlling response size, combining filters, and how filtering interacts with depth truncation.
  • Tests

    • Added unit tests covering depth truncation, jsonpath/jq filtering, error handling, and filter+depth interaction.

✏️ Tip: You can customize this high-level summary in your review settings.

Signed-off-by: Codex <codex@openai.com>
@coderabbitai

coderabbitai Bot commented Dec 21, 2025 •

Copy link
Copy Markdown
Contributor

Walkthrough

This pull request adds three optional parameters—max_depth, jsonpath, and jq—to Grafana tooling, implements helper functions to apply jsonpath/jq filtering and depth truncation to Grafana responses, and adds documentation and tests describing and verifying the behavior.

Changes

Cohort / File(s) Summary
Documentation
docs/data-sources/builtin-toolsets/grafanadashboards.md
Adds a "Controlling response size" section describing max_depth (depth truncation), jsonpath (path-based filtering), and jq (jq-style filtering); notes filters apply before depth truncation and can be combined.
Grafana Toolset Implementation
holmes/plugins/toolsets/grafana/toolset_grafana.py
Adds helpers _truncate_to_depth, _apply_jsonpath_filter, _apply_jq_filter; wires optional parameters max_depth, jsonpath, jq into SearchDashboards, GetDashboardByUID, and GetHomeDashboard; applies filters (jsonpath/jq) then depth truncation before returning data; adds error logging for filter failures.
Dependencies
pyproject.toml
Adds jq (^1.8.0) and jsonpath-ng (^1.6.1) to support filtering functionality.
Tests
tests/plugins/toolsets/grafana/test_dashboard_filters.py
New test module covering _truncate_to_depth, jsonpath and jq filtering, invalid jsonpath error handling, and ordering of filters vs depth truncation.

Sequence Diagram(s)

sequenceDiagram
  participant User as Client
  participant Tool as Grafana Tool (Get/Search)
  participant API as Grafana API
  participant Filter as Filter Engine (jsonpath/jq)
  participant Trunc as Depth Truncator

  rect rgb(230, 248, 255)
    User->>Tool: invoke tool(max_depth?, jsonpath?, jq?)
    Tool->>API: request dashboard(s)
    API-->>Tool: return JSON payload
    alt jsonpath or jq provided
      Tool->>Filter: apply jsonpath/jq filters
      Filter-->>Tool: filtered JSON (or error)
    end
    alt max_depth provided
      Tool->>Trunc: truncate to max_depth
      Trunc-->>Tool: truncated JSON
    end
    Tool-->>User: return resulting JSON (or error)
  end
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Possibly related PRs

Suggested reviewers

  • moshemorad

Pre-merge checks

❌ Failed checks (1 warning)
Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 13.33% which is insufficient. The required threshold is 80.00%. You can run @coderabbitai generate docstrings to improve docstring coverage.
✅ Passed checks (2 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately captures the main changes: adding optional filtering controls (jsonpath, jq, and max_depth) to multiple Grafana dashboard tools.

📜 Recent review details

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 9a47bef and 9f3426a.

📒 Files selected for processing (1)
  • pyproject.toml
🚧 Files skipped from review as they are similar to previous changes (1)
  • pyproject.toml
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (5)
  • GitHub Check: build
  • GitHub Check: llm_evals
  • GitHub Check: build (3.12)
  • GitHub Check: build (3.11)
  • GitHub Check: build (3.10)

Comment @coderabbitai help to get the list of available commands and usage tips.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🧹 Nitpick comments (4)
docs/data-sources/builtin-toolsets/grafanadashboards.md (1)

61-69: LGTM! Clear and helpful documentation.

The section clearly explains the three filtering controls and their execution order, which aligns with the implementation. The examples help users understand when to use each control.

Optional: Minor style refinement

Consider replacing "very big" with "large" for a more concise tone:

-Large dashboards can produce very big JSON payloads. To keep tool outputs readable you can:
+Large dashboards can produce large JSON payloads. To keep tool outputs readable you can:

This is a minor stylistic suggestion and entirely optional.

holmes/plugins/toolsets/grafana/toolset_grafana.py (2)

155-165: Consider including the filter expression in error messages.

The error handling is solid, but per coding guidelines, toolsets should return detailed error messages to enable LLM self-correction. Include the actual expression that failed to help the LLM adjust its parameters.

As per coding guidelines, "All toolsets MUST return detailed error messages from underlying APIs to enable LLM self-correction, including the exact query/command executed."

Proposed enhancement
 def _apply_jsonpath_filter(data: Any, expression: str) -> Tuple[Optional[Any], Optional[str]]:
     try:
         jsonpath_expr = jsonpath_parse(expression)
         matches = [match.value for match in jsonpath_expr.find(data)]
         if len(matches) == 1:
             return matches[0], None
         return matches, None
     except Exception as exc:  # pragma: no cover - defensive
         logger.debug("Failed to apply jsonpath filter", exc_info=exc)
-        return None, f"Invalid jsonpath expression: {exc}"
+        return None, f"Invalid jsonpath expression '{expression}': {exc}"

167-177: Consider including the filter expression in error messages.

Same recommendation as for _apply_jsonpath_filter: include the actual jq expression in the error message to help LLM self-correction.

As per coding guidelines.

Proposed enhancement
 def _apply_jq_filter(data: Any, expression: str) -> Tuple[Optional[Any], Optional[str]]:
     try:
         compiled = jq.compile(expression)
         results = compiled.input(data).all()
         if len(results) == 1:
             return results[0], None
         return results, None
     except Exception as exc:  # pragma: no cover - defensive
         logger.debug("Failed to apply jq filter", exc_info=exc)
-        return None, f"Invalid jq filter: {exc}"
+        return None, f"Invalid jq filter '{expression}': {exc}"
tests/plugins/toolsets/grafana/test_dashboard_filters.py (1)

12-22: Consider prefixing unused parameter with underscore.

The helper correctly mocks _make_grafana_request, but the endpoint parameter is unused. Prefix it with an underscore to indicate it's intentionally unused and suppress the linter warning.

Proposed refinement
-    tool._make_grafana_request = lambda endpoint, params: StructuredToolResult(
+    tool._make_grafana_request = lambda _endpoint, params: StructuredToolResult(
         status=StructuredToolResultStatus.SUCCESS,
         data=data,
         params=params,
         url="http://api",
     )
📜 Review details

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between af8b2a5 and 9a47bef.

⛔ Files ignored due to path filters (1)
  • poetry.lock is excluded by !**/*.lock
📒 Files selected for processing (4)
  • docs/data-sources/builtin-toolsets/grafanadashboards.md (1 hunks)
  • holmes/plugins/toolsets/grafana/toolset_grafana.py (5 hunks)
  • pyproject.toml (1 hunks)
  • tests/plugins/toolsets/grafana/test_dashboard_filters.py (1 hunks)
🧰 Additional context used
📓 Path-based instructions (4)
**/*.py

📄 CodeRabbit inference engine (CLAUDE.md)

**/*.py: Use Ruff for formatting and linting (configured in pyproject.toml)
Type hints required (mypy configuration in pyproject.toml)
ALWAYS place Python imports at the top of the file, not inside functions or methods

Files:

  • holmes/plugins/toolsets/grafana/toolset_grafana.py
  • tests/plugins/toolsets/grafana/test_dashboard_filters.py
holmes/plugins/toolsets/**

📄 CodeRabbit inference engine (CLAUDE.md)

holmes/plugins/toolsets/**: Toolsets: holmes/plugins/toolsets/{name}.yaml or {name}/ directory structure
All toolsets MUST return detailed error messages from underlying APIs to enable LLM self-correction, including the exact query/command executed, time ranges, parameters, filters used, and full API error response

Files:

  • holmes/plugins/toolsets/grafana/toolset_grafana.py
tests/**

📄 CodeRabbit inference engine (CLAUDE.md)

Tests: Match source structure under tests/

Files:

  • tests/plugins/toolsets/grafana/test_dashboard_filters.py
docs/**/*.md

📄 CodeRabbit inference engine (CLAUDE.md)

When writing documentation in the docs/ directory, always add a blank line between headers/bold text and lists for proper MkDocs rendering

Files:

  • docs/data-sources/builtin-toolsets/grafanadashboards.md
🧬 Code graph analysis (2)
holmes/plugins/toolsets/grafana/toolset_grafana.py (1)
holmes/core/tools.py (3)
  • ToolParameter (157-163)
  • StructuredToolResult (79-105)
  • StructuredToolResultStatus (52-76)
tests/plugins/toolsets/grafana/test_dashboard_filters.py (2)
holmes/core/tools.py (2)
  • StructuredToolResult (79-105)
  • StructuredToolResultStatus (52-76)
holmes/plugins/toolsets/grafana/toolset_grafana.py (7)
  • GetDashboardByUID (292-360)
  • _truncate_to_depth (132-152)
  • _make_grafana_request (95-129)
  • _invoke (234-286)
  • _invoke (322-357)
  • _invoke (388-424)
  • _invoke (439-450)
🪛 LanguageTool
docs/data-sources/builtin-toolsets/grafanadashboards.md

[style] ~63-~63: As an alternative to the over-used intensifier ‘very’, consider replacing this phrase.
Context: ...onse size Large dashboards can produce very big JSON payloads. To keep tool outputs rea...

(EN_WEAK_ADJECTIVE)

🪛 Ruff (0.14.8)
holmes/plugins/toolsets/grafana/toolset_grafana.py

161-161: Consider moving this statement to an else block

(TRY300)


162-162: Do not catch blind exception: Exception

(BLE001)


173-173: Consider moving this statement to an else block

(TRY300)


174-174: Do not catch blind exception: Exception

(BLE001)


322-322: Unused method argument: context

(ARG002)


388-388: Unused method argument: context

(ARG002)

tests/plugins/toolsets/grafana/test_dashboard_filters.py

16-16: Unused lambda argument: endpoint

(ARG005)

⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (2)
  • GitHub Check: llm_evals
  • GitHub Check: build
🔇 Additional comments (10)
holmes/plugins/toolsets/grafana/toolset_grafana.py (5)

21-25: LGTM! Imports properly placed.

The new dependencies are correctly imported at the top of the file, and the logger follows standard Python conventions.


132-152: LGTM! Truncation logic is correct.

The depth truncation helper properly handles edge cases including max_depth=0, empty collections, and deeply nested structures. The recursive approach cleanly separates concerns by incrementing depth at each level.


304-318: LGTM! Well-defined optional parameters.

The three new parameters are clearly described, appropriately typed, and optional to maintain backward compatibility. The descriptions align with the user documentation.


322-357: LGTM! Filtering and truncation logic correctly implemented.

The implementation properly applies filters in the documented order (jsonpath → jq → depth), handles errors gracefully by returning ERROR status, and maintains the filtered data through the pipeline. The unused context parameter flagged by Ruff is required by the Tool interface.


369-424: LGTM! Consistent implementation with GetDashboardByUID.

The filtering and truncation logic mirrors GetDashboardByUID, maintaining consistency across the toolset. Line 414 correctly uses the original result.data to extract the UID for URL building, since filtered data might not contain this field.

tests/plugins/toolsets/grafana/test_dashboard_filters.py (4)

25-29: LGTM! Truncation test covers key scenarios.

The test validates truncation for both dictionaries and lists, ensuring the function handles mixed nested structures correctly.


32-41: LGTM! JSONPath filter test validates extraction.

The test correctly verifies that JSONPath filtering extracts specific fields before returning data, and properly expects a single value when only one match is found.


44-51: LGTM! JQ filter test validates extraction.

The test correctly verifies jq filtering functionality and the single-value unwrapping behavior, maintaining consistency with the JSONPath test.


54-61: LGTM! Error handling test validates invalid input.

The test ensures malformed JSONPath expressions result in an ERROR status with an appropriate message, validating the defensive error handling.

pyproject.toml (1)

58-59: Both jq and jsonpath-ng are current and secure. jq version 1.10.0 was released July 14, 2025, making the ^1.8.0 constraint compatible with the latest version. jsonpath-ng 1.7.0 was released October 11, 2024, compatible with ^1.6.1. The jq package was scanned for known vulnerabilities and missing license, and no issues were found. The jsonpath-ng package was scanned for known vulnerabilities and missing license, and no issues were found. Both packages are actively maintained with healthy release cadences.

Comment on lines +64 to +70
def test_depth_applies_after_filters():
data = {"dashboard": {"panels": [{"id": 1, "title": "CPU"}]}}
tool = _build_tool(data)

result = tool._invoke({"uid": "abc", "max_depth": 1}, context=None)

assert result.data["dashboard"] == "...truncated at depth 1"

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Test name doesn't match implementation.

The test name suggests it verifies that depth truncation happens after filters, but it only tests depth truncation without any filters. To properly test the execution order, the test should apply both a filter and depth truncation.

Proposed fix

Either rename the test to match what it actually tests:

-def test_depth_applies_after_filters():
+def test_depth_truncates_nested_structures():
     data = {"dashboard": {"panels": [{"id": 1, "title": "CPU"}]}}
     tool = _build_tool(data)

     result = tool._invoke({"uid": "abc", "max_depth": 1}, context=None)

     assert result.data["dashboard"] == "...truncated at depth 1"

Or enhance the test to actually verify filter→depth order:

 def test_depth_applies_after_filters():
     data = {"dashboard": {"panels": [{"id": 1, "title": "CPU"}]}}
     tool = _build_tool(data)

-    result = tool._invoke({"uid": "abc", "max_depth": 1}, context=None)
+    # Apply jsonpath filter first to extract dashboard, then truncate to depth 1
+    result = tool._invoke({"uid": "abc", "jsonpath": "$.dashboard", "max_depth": 1}, context=None)

-    assert result.data["dashboard"] == "...truncated at depth 1"
+    # Verify the filtered result (just dashboard) is then truncated at depth 1
+    assert result.data["panels"] == "...truncated at depth 1"
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
def test_depth_applies_after_filters():
data = {"dashboard": {"panels": [{"id": 1, "title": "CPU"}]}}
tool = _build_tool(data)
result = tool._invoke({"uid": "abc", "max_depth": 1}, context=None)
assert result.data["dashboard"] == "...truncated at depth 1"
def test_depth_truncates_nested_structures():
data = {"dashboard": {"panels": [{"id": 1, "title": "CPU"}]}}
tool = _build_tool(data)
result = tool._invoke({"uid": "abc", "max_depth": 1}, context=None)
assert result.data["dashboard"] == "...truncated at depth 1"
🤖 Prompt for AI Agents
In tests/plugins/toolsets/grafana/test_dashboard_filters.py around lines 64 to
70, the test name claims it verifies that depth truncation occurs after filters,
but the implementation only exercises depth truncation with no filters; either
rename the test to reflect it only checks depth truncation, or modify the test
to apply a filter and a max_depth and assert the filter is applied first and
then the result is truncated—specifically: build tool with data that would be
affected by a filter, invoke tool._invoke with both filter criteria and
max_depth, and assert that the filtered content appears and then the dashboard
is "...truncated at depth 1" (or equivalent) to prove filter→depth ordering.

@github-actions

Copy link
Copy Markdown
Contributor

Results of HolmesGPT evals

  • ask_holmes: 31/37 test cases were successful, 2 regressions, 1 setup failures, 3 mock failures
Test suite Test case Status
ask 01_how_many_pods ✅
ask 02_what_is_wrong_with_pod ✅
ask 04_related_k8s_events ✅
ask 05_image_version ✅
ask 09_crashpod ✅
ask 10_image_pull_backoff ✅
ask 110_k8s_events_image_pull ✅
ask 11_init_containers ✅
ask 13a_pending_node_selector_basic ✅
ask 14_pending_resources ✅
ask 15_failed_readiness_probe ✅
ask 163_compaction_follow_up ✅
ask 17_oom_kill ✅
ask 18_oom_kill_from_issues_history ✅
ask 19_detect_missing_app_details ✅
ask 20_long_log_file_search ❌
ask 24_misconfigured_pvc ✅
ask 24a_misconfigured_pvc_basic ✅
ask 28_permissions_error 🚧
ask 39_failed_toolset ✅
ask 41_setup_argo ✅
ask 42_dns_issues_steps_new_tools ✅
ask 43_current_datetime_from_prompt ✅
ask 45_fetch_deployment_logs_simple ✅
ask 51_logs_summarize_errors ✅
ask 53_logs_find_term ✅
ask 54_not_truncated_when_getting_pods ✅
ask 59_label_based_counting ✅
ask 60_count_less_than ❌
ask 61_exact_match_counting ✅
ask 63_fetch_error_logs_no_errors ✅
ask 79_configmap_mount_issue ✅
ask 83_secret_not_found ✅
ask 86_configmap_like_but_secret ✅
ask 93_calling_datadog[0] 🔧
ask 93_calling_datadog[1] 🔧
ask 93_calling_datadog[2] 🔧

Legend

  • ✅ the test was successful
  • :minus: the test was skipped
  • ⚠️ the test failed but is known to be flaky or known to fail
  • 🚧 the test had a setup failure (not a code regression)
  • 🔧 the test failed due to mock data issues (not a code regression)
  • 🚫 the test was throttled by API rate limits/overload
  • ❌ the test failed and should be fixed before merging the PR

@aantn
aantn marked this pull request as draft December 25, 2025 05:33
@github-actions

github-actions Bot commented Dec 29, 2025 •

Copy link
Copy Markdown
Contributor

Results of HolmesGPT evals

Duration: 4m 3s | View workflow logs

Results of HolmesGPT evals

  • ask_holmes: 9/9 test cases were successful, 0 regressions
Test suite Test case Status
ask 09_crashpod ✅
ask 101_loki_historical_logs_pod_deleted ✅
ask 111_pod_names_contain_service ✅
ask 12_job_crashing ✅
ask 162_get_runbooks ✅
ask 176_network_policy_blocking_traffic_no_runbooks ✅
ask 24_misconfigured_pvc ✅
ask 43_current_datetime_from_prompt ✅
ask 61_exact_match_counting ✅

Legend

  • ✅ the test was successful
  • :minus: the test was skipped
  • ⚠️ the test failed but is known to be flaky or known to fail
  • 🚧 the test had a setup failure (not a code regression)
  • 🔧 the test failed due to mock data issues (not a code regression)
  • 🚫 the test was throttled by API rate limits/overload
  • ❌ the test failed and should be fixed before merging the PR

🔄 Re-run evals manually

Option 1: Comment on this PR with /eval:

/eval

Or with options (one per line):

/eval
model: gpt-4o
filter: 09_crashpod
iterations: 5
Option Description
model Model(s) to test (default: same as automatic runs)
markers Pytest markers (default: regression)
filter Pytest -k filter
iterations Number of runs, max 10

Option 2: Trigger via GitHub Actions UI → "Run workflow"

@github-actions

github-actions Bot commented Dec 29, 2025 •

Copy link
Copy Markdown
Contributor

✅ Docker image ready for d569495 (built in 4m 54s)

⚠️ Warning: does not support ARM (ARM images are built on release only - not on every PR)

Use this tag to pull the image for testing.

📋 Copy commands

⚠️ Temporary images are deleted after 30 days. Copy to a permanent registry before using them:

gcloud auth configure-docker us-central1-docker.pkg.dev
docker pull us-central1-docker.pkg.dev/robusta-development/temporary-builds/holmes:d569495
docker tag us-central1-docker.pkg.dev/robusta-development/temporary-builds/holmes:d569495 me-west1-docker.pkg.dev/robusta-development/development/holmes-dev:d569495
docker push me-west1-docker.pkg.dev/robusta-development/development/holmes-dev:d569495

Patch Helm values in one line (choose the chart you use):

HolmesGPT chart:

helm upgrade --install holmesgpt ./helm/holmes \
  --set registry=me-west1-docker.pkg.dev/robusta-development/development \
  --set image=holmes-dev:d569495

Robusta wrapper chart:

helm upgrade --install robusta robusta/robusta \
  --reuse-values \
  --set holmes.registry=me-west1-docker.pkg.dev/robusta-development/development \
  --set holmes.image=holmes-dev:d569495

@aantn

aantn commented Dec 29, 2025

Copy link
Copy Markdown
Collaborator Author

/eval
filter: grafana
iterations: 2

@github-actions

github-actions Bot commented Dec 29, 2025 •

Copy link
Copy Markdown
Contributor

🧪 Manual Eval Results

Parameter Value
Triggered via /eval comment
Model bedrock/eu.anthropic.claude-sonnet-4-5-20250929-v1:0
Markers regression
Filter (-k) grafana
Iterations 2
Duration 50s
Workflow View logs

⚠️ No eval report was generated.

@aantn

aantn commented Dec 29, 2025

Copy link
Copy Markdown
Collaborator Author

/eval
markers:
filter: grafana
iterations: 2

@github-actions

github-actions Bot commented Dec 29, 2025 •

Copy link
Copy Markdown
Contributor

🧪 Manual Eval Results

Parameter Value
Triggered via /eval comment
Model bedrock/eu.anthropic.claude-sonnet-4-5-20250929-v1:0
Markers regression
Filter (-k) grafana
Iterations 2
Duration 48s
Workflow View logs

⚠️ No eval report was generated.

@aantn

aantn commented Dec 29, 2025

Copy link
Copy Markdown
Collaborator Author

/eval
markers: ""
filter: grafana
iterations: 2

@aantn

aantn commented Dec 29, 2025

Copy link
Copy Markdown
Collaborator Author

/eval
filter: grafana
iterations: 2

@github-actions

github-actions Bot commented Dec 29, 2025 •

Copy link
Copy Markdown
Contributor

✅ Results of HolmesGPT evals

Automatically triggered by commit f5af1d4

View workflow logs

Results of HolmesGPT evals

  • ask_holmes: 9/9 test cases were successful, 0 regressions
Test suite Test case Status
ask 09_crashpod ✅
ask 101_loki_historical_logs_pod_deleted ✅
ask 111_pod_names_contain_service ✅
ask 12_job_crashing ✅
ask 162_get_runbooks ✅
ask 176_network_policy_blocking_traffic_no_runbooks ✅
ask 24_misconfigured_pvc ✅
ask 43_current_datetime_from_prompt ✅
ask 61_exact_match_counting ✅

Legend

  • ✅ the test was successful
  • :minus: the test was skipped
  • ⚠️ the test failed but is known to be flaky or known to fail
  • 🚧 the test had a setup failure (not a code regression)
  • 🔧 the test failed due to mock data issues (not a code regression)
  • 🚫 the test was throttled by API rate limits/overload
  • ❌ the test failed and should be fixed before merging the PR

📖 Legend

🔄 Re-run evals manually

⚠️ Warning: Manual re-runs have NO default markers and will run ALL LLM tests (~100+), which can take 1+ hours. Use markers: regression or filter: test_name to limit scope.

Option 1: Comment on this PR with /eval:

/eval
markers: regression

Or with more options (one per line):

/eval
model: gpt-4o
markers: regression
filter: 09_crashpod
iterations: 5
Option Description
model Model(s) to test (default: same as automatic runs)
markers Pytest markers (no default - runs all tests!)
filter Pytest -k filter
iterations Number of runs, max 10

Option 2: Trigger via GitHub Actions UI → "Run workflow"

🏷️ Valid markers

  • chain-of-causation
  • compaction
  • context_window
  • coralogix
  • counting
  • database
  • datadog
  • datetime
  • easy
  • embeds
  • grafana-dashboard
  • hard
  • kafka
  • kubernetes
  • leaked-information
  • log_cli_level = "INFO"
  • log_file = "tests.log"
  • log_file_level = "INFO" # Changed from DEBUG to reduce noise in HTML report
  • logs
  • loki
  • medium
  • metrics
  • network
  • newrelic
  • no-cicd
  • numerical
  • one-test
  • port-forward
  • prometheus
  • question-answer
  • regression
  • runbooks
  • slackbot
  • storage
  • toolset-limitation
  • traces
  • transparency

📋 Valid eval names (use with filter)

test_ask_holmes:

  • 01_how_many_pods
  • 02_what_is_wrong_with_pod
  • 03_what_is_the_command_to_port_forward
  • 04_related_k8s_events
  • 05_image_version
  • 06_explain_issue
  • 07_high_latency
  • 08_sock_shop_frontend
  • 09_crashpod
  • 100a_loki_historical_logs
  • 100b_loki_historical_logs_nonstandard_label
  • 101_loki_historical_logs_pod_deleted
  • 102_loki_label_discovery
  • 102a_loki_logs_transparency
  • 102b_loki_multiple_pods
  • 103_logs_transparency_default_limit
  • 104a_postgres_root_issue
  • 104b_postgres_missing_index_pgstat
  • 104c_postgres_minimal_missing_index
  • 105_redis_wrong_data_structure
  • 107_log_filter_http_status_code
  • 108_logs_nearby_lines
  • 109_logs_transparency_not_found
  • 10_image_pull_backoff
  • 110_cpu_graph_robusta_runner
  • 110_k8s_events_image_pull
  • 111_disabled_datadog_traces
  • 111_pod_names_contain_service
  • 111_tool_hallucination
  • 112_find_pvcs_by_uuid
  • 114_checkout_latency_tracing_rebuild
  • 115_checkout_errors_tracing
  • 117_new_relic_tracing
  • 117b_new_relic_block_embed
  • 118_new_relic_logs
  • 119_new_relic_metrics
  • 11_init_containers
  • 120_new_relic_traces2
  • 121_new_relic_checkout_errors_tracing
  • 122_new_relic_checkout_latency_tracing_rebuild
  • 123_new_relic_checkout_errors_tracing
  • 124_checkout_latency_prometheus
  • 12_job_crashing
  • 13a_pending_node_selector_basic
  • 13b_pending_node_selector_detailed
  • 14_pending_resources
  • 151_disabled_toolsets_fallback_only
  • 156_kafka_opensearch_latency
  • 157_disk_full_statefulset
  • 158_slack_chat_correct_date
  • 159_prometheus_high_cardinality_cpu
  • 15_failed_readiness_probe
  • 160_electricity_market_bidding_bug
  • 160a_cpu_per_namespace_graph
  • 160b_cpu_per_namespace_graph_with_prom_truncation
  • 160c_cpu_per_namespace_graph_with_global_truncation
  • 161_bidding_version_performance
  • 161_conversation_compaction
  • 162_get_runbooks
  • 163_compaction_follow_up
  • 164_datadog_traces_coupon_code
  • 165_alert_with_multiple_runbooks
  • 16_failed_no_toolset_found
  • 173_coralogix_logs
  • 174_coralogix_traces_ad
  • 175_coralogix_metrics_frontend
  • 176_network_policy_blocking_traffic_no_runbooks
  • 177_grafana_home_dashboard
  • 178_grafana_search_dashboard_query
  • 179_grafana_big_dashboard_query
  • 17_oom_kill
  • 18_oom_kill_from_issues_history
  • 19_detect_missing_app_details
  • 20_long_log_file_search
  • 21_job_fail_curl_no_svc_account
  • 22_high_latency_dbi_down
  • 23_app_error_in_current_logs
  • 24_misconfigured_pvc
  • 25_misconfigured_ingress_class
  • 26_page_render_times
  • 27a_multi_container_logs
  • 27b_multi_container_logs
  • 28_permissions_error
  • 30_basic_promql_graph_cluster_memory
  • 32_basic_promql_graph_pod_cpu
  • 33_cpu_metrics_discovery
  • 34_memory_graph
  • 35_tempo
  • 36_argocd_find_resource
  • 37_argocd_wrong_namespace
  • 38_rabbitmq_split_head
  • 39_failed_toolset
  • 41_setup_argo
  • 42_dns_issues_result_all_tools
  • 42_dns_issues_result_new_tools
  • 42_dns_issues_result_new_tools_no_runbook
  • 42_dns_issues_result_old_tools
  • 42_dns_issues_steps_new_all_tools
  • 42_dns_issues_steps_new_tools
  • 42_dns_issues_steps_old_tools
  • 43_current_datetime_from_prompt
  • 43_slack_deployment_logs
  • 44_slack_statefulset_logs
  • 45_fetch_deployment_logs_simple
  • 46_job_crashing_no_longer_exists
  • 47_truncated_logs_context_window
  • 48_logs_since_thursday
  • 49_logs_since_last_week
  • 50_logs_since_specific_date
  • 50a_logs_since_last_specific_month
  • 51_logs_summarize_errors
  • 52_logs_login_issues
  • 53_logs_find_term
  • 54_azure_sql
  • 54_not_truncated_when_getting_pods
  • 55_kafka_runbook
  • 57_cluster_name_confusion
  • 57_wrong_namespace
  • 58_counting_pods_by_status
  • 59_label_based_counting
  • 60_count_less_than
  • 61_exact_match_counting
  • 62_fetch_error_logs_with_errors
  • 63_fetch_error_logs_no_errors
  • 64_keda_vs_hpa_confusion
  • 65_health_check_followup
  • 66_http_error_needle
  • 67_performance_degradation
  • 68_cascading_failures
  • 69_rate_limit_exhaustion
  • 70_memory_leak_detection
  • 71_connection_pool_starvation
  • 73a_time_window_anomaly
  • 73b_time_window_anomaly
  • 74_config_change_impact
  • 75_network_flapping
  • 76_service_discovery_issue
  • 77_liveness_probe_misconfiguration
  • 78a_missing_cpu_limits
  • 78b_cpu_quota_exceeded
  • 79_configmap_mount_issue
  • 80_pvc_storage_class_mismatch
  • 81_service_account_permission_denied
  • 82_pod_anti_affinity_conflict
  • 83_secret_not_found
  • 84_network_policy_blocking_traffic
  • 85_hpa_not_scaling
  • 86_configmap_like_but_secret
  • 89_runbook_missing_cloudwatch
  • 90_runbook_basic_selection
  • 91a_datadog_metrics_missing_namespace
  • 91b_datadog_metrics_pod_exists
  • 91c_datadog_metrics_deployment
  • 91d_datadog_metrics_historical_pod
  • 91e_datadog_custom_metrics
  • 91f_datadog_logs_historical_pod
  • 91g_datadog_metrics_mismatched_pod
  • 91h_datadog_logs_empty_query_with_url
  • 91i_datadog_metrics_empty_query_with_url
  • 92_cpu_graph_conversation
  • 93_calling_datadog
  • 93_events_since_specific_date
  • 94_runbook_transparency
  • 95_runbook_memory_leak_detection
  • 96_no_matching_runbook
  • 97_logs_clarification_needed
  • 99_logs_transparency_custom_time

test_investigate:

  • 01_oom_kill
  • 02_crashloop_backoff
  • 03_cpu_throttling
  • 04_image_pull_backoff
  • 05_crashpod
  • 06_job_failure
  • 07_job_syntax_error
  • 08_memory_pressure
  • 09_high_latency
  • 10_KubeDeploymentReplicasMismatch
  • 11_KubePodCrashLooping
  • 12_KubePodNotReady
  • 13_Watchdog
  • 14_tempo
  • 15_dns_resolution
  • 16_dns_resolution_no_tool
  • 17_investigate_correct_date

@github-actions

github-actions Bot commented Dec 29, 2025 •

Copy link
Copy Markdown
Contributor

🧪 Manual Eval Results

Parameter Value
Triggered via /eval comment
Model bedrock/eu.anthropic.claude-sonnet-4-5-20250929-v1:0
Markers all LLM tests
Filter (-k) grafana
Iterations 2
Duration 2m 32s
Workflow View logs

Results of HolmesGPT evals

  • ask_holmes: 6/6 test cases were successful, 0 regressions
Test suite Test case Status
ask 177_grafana_home_dashboard ✅
ask 177_grafana_home_dashboard ✅
ask 178_grafana_search_dashboard_query ✅
ask 178_grafana_search_dashboard_query ✅
ask 179_grafana_big_dashboard_query ✅
ask 179_grafana_big_dashboard_query ✅

Legend

  • ✅ the test was successful
  • :minus: the test was skipped
  • ⚠️ the test failed but is known to be flaky or known to fail
  • 🚧 the test had a setup failure (not a code regression)
  • 🔧 the test failed due to mock data issues (not a code regression)
  • 🚫 the test was throttled by API rate limits/overload
  • ❌ the test failed and should be fixed before merging the PR

@github-actions

Copy link
Copy Markdown
Contributor

@aantn Your eval run has finished. ✅ Completed successfully

👆 See updated results above.

@github-actions

github-actions Bot commented Dec 30, 2025 •

Copy link
Copy Markdown
Contributor

✅ Results of HolmesGPT evals

Automatically triggered by commit 9e32f73

View workflow logs

Results of HolmesGPT evals

  • ask_holmes: 9/9 test cases were successful, 0 regressions
Status Test case Time Turns Tools Cost
✅ 09_crashpod 35.2s 5 13 $0.1535
✅ 101_loki_historical_logs_pod_deleted 43.6s 6 12 $0.1734
✅ 111_pod_names_contain_service 47.1s 8 17 $0.1860
✅ 12_job_crashing 56.6s 9 18 $0.2249
✅ 162_get_runbooks 65.7s 8 18 $0.2475
✅ 176_network_policy_blocking_traffic_no_runbooks 54.5s 7 18 $0.2089
✅ 24_misconfigured_pvc 40.2s 7 15 $0.1707
✅ 43_current_datetime_from_prompt 4.2s 1 — $0.0616
✅ 61_exact_match_counting 11.9s 3 3 $0.0854
Total 39.9s avg 6.0 avg 14.2 avg $1.5120

📖 Legend
Icon Meaning
✅ The test was successful
➖ The test was skipped
⚠️ The test failed but is known to be flaky or known to fail
🚧 The test had a setup failure (not a code regression)
🔧 The test failed due to mock data issues (not a code regression)
🚫 The test was throttled by API rate limits/overload
❌ The test failed and should be fixed before merging the PR
🔄 Re-run evals manually

⚠️ Warning: Manual re-runs have NO default markers and will run ALL LLM tests (~100+), which can take 1+ hours. Use markers: regression or filter: test_name to limit scope.

Option 1: Comment on this PR with /eval:

/eval
markers: regression

Or with more options (one per line):

/eval
model: gpt-4o
markers: regression
filter: 09_crashpod
iterations: 5
Option Description
model Model(s) to test (default: same as automatic runs)
markers Pytest markers (no default - runs all tests!)
filter Pytest -k filter
iterations Number of runs, max 10

Option 2: Trigger via GitHub Actions UI → "Run workflow"

🏷️ Valid markers
  • chain-of-causation
  • compaction
  • context_window
  • coralogix
  • counting
  • database
  • datadog
  • datetime
  • easy
  • embeds
  • grafana-dashboard
  • hard
  • kafka
  • kubernetes
  • leaked-information
  • logs
  • loki
  • medium
  • metrics
  • network
  • newrelic
  • no-cicd
  • numerical
  • one-test
  • port-forward
  • prometheus
  • question-answer
  • regression
  • runbooks
  • slackbot
  • storage
  • toolset-limitation
  • traces
  • transparency
📋 Valid eval names (use with filter)

test_ask_holmes:

  • 01_how_many_pods
  • 02_what_is_wrong_with_pod
  • 03_what_is_the_command_to_port_forward
  • 04_related_k8s_events
  • 05_image_version
  • 06_explain_issue
  • 07_high_latency
  • 08_sock_shop_frontend
  • 09_crashpod
  • 100a_loki_historical_logs
  • 100b_loki_historical_logs_nonstandard_label
  • 101_loki_historical_logs_pod_deleted
  • 102_loki_label_discovery
  • 102a_loki_logs_transparency
  • 102b_loki_multiple_pods
  • 103_logs_transparency_default_limit
  • 104a_postgres_root_issue
  • 104b_postgres_missing_index_pgstat
  • 104c_postgres_minimal_missing_index
  • 105_redis_wrong_data_structure
  • 107_log_filter_http_status_code
  • 108_logs_nearby_lines
  • 109_logs_transparency_not_found
  • 10_image_pull_backoff
  • 110_cpu_graph_robusta_runner
  • 110_k8s_events_image_pull
  • 111_disabled_datadog_traces
  • 111_pod_names_contain_service
  • 111_tool_hallucination
  • 112_find_pvcs_by_uuid
  • 114_checkout_latency_tracing_rebuild
  • 115_checkout_errors_tracing
  • 117_new_relic_tracing
  • 117b_new_relic_block_embed
  • 118_new_relic_logs
  • 119_new_relic_metrics
  • 11_init_containers
  • 120_new_relic_traces2
  • 121_new_relic_checkout_errors_tracing
  • 122_new_relic_checkout_latency_tracing_rebuild
  • 123_new_relic_checkout_errors_tracing
  • 124_checkout_latency_prometheus
  • 12_job_crashing
  • 13a_pending_node_selector_basic
  • 13b_pending_node_selector_detailed
  • 14_pending_resources
  • 151_disabled_toolsets_fallback_only
  • 156_kafka_opensearch_latency
  • 157_disk_full_statefulset
  • 158_slack_chat_correct_date
  • 159_prometheus_high_cardinality_cpu
  • 15_failed_readiness_probe
  • 160_electricity_market_bidding_bug
  • 160a_cpu_per_namespace_graph
  • 160b_cpu_per_namespace_graph_with_prom_truncation
  • 160c_cpu_per_namespace_graph_with_global_truncation
  • 161_bidding_version_performance
  • 161_conversation_compaction
  • 162_get_runbooks
  • 163_compaction_follow_up
  • 164_datadog_traces_coupon_code
  • 165_alert_with_multiple_runbooks
  • 16_failed_no_toolset_found
  • 173_coralogix_logs
  • 174_coralogix_traces_ad
  • 175_coralogix_metrics_frontend
  • 176_network_policy_blocking_traffic_no_runbooks
  • 177_grafana_home_dashboard
  • 178_grafana_search_dashboard_query
  • 179_grafana_big_dashboard_query
  • 17_oom_kill
  • 18_oom_kill_from_issues_history
  • 19_detect_missing_app_details
  • 20_long_log_file_search
  • 21_job_fail_curl_no_svc_account
  • 22_high_latency_dbi_down
  • 23_app_error_in_current_logs
  • 24_misconfigured_pvc
  • 25_misconfigured_ingress_class
  • 26_page_render_times
  • 27a_multi_container_logs
  • 27b_multi_container_logs
  • 28_permissions_error
  • 30_basic_promql_graph_cluster_memory
  • 32_basic_promql_graph_pod_cpu
  • 33_cpu_metrics_discovery
  • 34_memory_graph
  • 35_tempo
  • 36_argocd_find_resource
  • 37_argocd_wrong_namespace
  • 38_rabbitmq_split_head
  • 39_failed_toolset
  • 41_setup_argo
  • 42_dns_issues_result_all_tools
  • 42_dns_issues_result_new_tools
  • 42_dns_issues_result_new_tools_no_runbook
  • 42_dns_issues_result_old_tools
  • 42_dns_issues_steps_new_all_tools
  • 42_dns_issues_steps_new_tools
  • 42_dns_issues_steps_old_tools
  • 43_current_datetime_from_prompt
  • 43_slack_deployment_logs
  • 44_slack_statefulset_logs
  • 45_fetch_deployment_logs_simple
  • 46_job_crashing_no_longer_exists
  • 47_truncated_logs_context_window
  • 48_logs_since_thursday
  • 49_logs_since_last_week
  • 50_logs_since_specific_date
  • 50a_logs_since_last_specific_month
  • 51_logs_summarize_errors
  • 52_logs_login_issues
  • 53_logs_find_term
  • 54_azure_sql
  • 54_not_truncated_when_getting_pods
  • 55_kafka_runbook
  • 57_cluster_name_confusion
  • 57_wrong_namespace
  • 58_counting_pods_by_status
  • 59_label_based_counting
  • 60_count_less_than
  • 61_exact_match_counting
  • 62_fetch_error_logs_with_errors
  • 63_fetch_error_logs_no_errors
  • 64_keda_vs_hpa_confusion
  • 65_health_check_followup
  • 66_http_error_needle
  • 67_performance_degradation
  • 68_cascading_failures
  • 69_rate_limit_exhaustion
  • 70_memory_leak_detection
  • 71_connection_pool_starvation
  • 73a_time_window_anomaly
  • 73b_time_window_anomaly
  • 74_config_change_impact
  • 75_network_flapping
  • 76_service_discovery_issue
  • 77_liveness_probe_misconfiguration
  • 78a_missing_cpu_limits
  • 78b_cpu_quota_exceeded
  • 79_configmap_mount_issue
  • 80_pvc_storage_class_mismatch
  • 81_service_account_permission_denied
  • 82_pod_anti_affinity_conflict
  • 83_secret_not_found
  • 84_network_policy_blocking_traffic
  • 85_hpa_not_scaling
  • 86_configmap_like_but_secret
  • 89_runbook_missing_cloudwatch
  • 90_runbook_basic_selection
  • 91a_datadog_metrics_missing_namespace
  • 91b_datadog_metrics_pod_exists
  • 91c_datadog_metrics_deployment
  • 91d_datadog_metrics_historical_pod
  • 91e_datadog_custom_metrics
  • 91f_datadog_logs_historical_pod
  • 91g_datadog_metrics_mismatched_pod
  • 91h_datadog_logs_empty_query_with_url
  • 91i_datadog_metrics_empty_query_with_url
  • 92_cpu_graph_conversation
  • 93_calling_datadog
  • 93_events_since_specific_date
  • 94_runbook_transparency
  • 95_runbook_memory_leak_detection
  • 96_no_matching_runbook
  • 97_logs_clarification_needed
  • 99_logs_transparency_custom_time

test_investigate:

  • 01_oom_kill
  • 02_crashloop_backoff
  • 03_cpu_throttling
  • 04_image_pull_backoff
  • 05_crashpod
  • 06_job_failure
  • 07_job_syntax_error
  • 08_memory_pressure
  • 09_high_latency
  • 10_KubeDeploymentReplicasMismatch
  • 11_KubePodCrashLooping
  • 12_KubePodNotReady
  • 13_Watchdog
  • 14_tempo
  • 15_dns_resolution
  • 16_dns_resolution_no_tool
  • 17_investigate_correct_date

@aantn

aantn commented Dec 30, 2025

Copy link
Copy Markdown
Collaborator Author

/eval
filter: grafana
iterations: 5

@github-actions

github-actions Bot commented Dec 30, 2025 •

Copy link
Copy Markdown
Contributor

🧪 Manual Eval Results

Parameter Value
Triggered via /eval comment
Model bedrock/eu.anthropic.claude-sonnet-4-5-20250929-v1:0
Markers all LLM tests
Filter (-k) grafana
Iterations 5
Duration 2m 53s
Workflow View logs

Results of HolmesGPT evals

  • ask_holmes: 15/15 test cases were successful, 0 regressions
Status Test case Time Turns Tools Cost
✅ 177_grafana_home_dashboard 15.9s 3 3 $0.0985
✅ 177_grafana_home_dashboard 16.4s 3 3 $0.0999
✅ 177_grafana_home_dashboard 17.3s 3 3 $0.0988
✅ 177_grafana_home_dashboard 15.1s 3 3 $0.0411
✅ 177_grafana_home_dashboard 16.1s 3 3 $0.0409
✅ 178_grafana_search_dashboard_query 20.8s 4 5 $0.1156
✅ 178_grafana_search_dashboard_query 21.0s 4 5 $0.1160
✅ 178_grafana_search_dashboard_query 22.2s 4 5 $0.1169
✅ 178_grafana_search_dashboard_query 21.5s 4 5 $0.0580
✅ 178_grafana_search_dashboard_query 21.2s 4 5 $0.0583
✅ 179_grafana_big_dashboard_query 27.3s 5 6 $0.1298
✅ 179_grafana_big_dashboard_query 27.8s 5 6 $0.1298
✅ 179_grafana_big_dashboard_query 28.1s 5 6 $0.1296
✅ 179_grafana_big_dashboard_query 33.3s 6 7 $0.1292
✅ 179_grafana_big_dashboard_query 22.0s 5 6 $0.0724
Total 21.7s avg 4.1 avg 4.7 avg $1.4347

📖 Legend
Icon Meaning
✅ The test was successful
➖ The test was skipped
⚠️ The test failed but is known to be flaky or known to fail
🚧 The test had a setup failure (not a code regression)
🔧 The test failed due to mock data issues (not a code regression)
🚫 The test was throttled by API rate limits/overload
❌ The test failed and should be fixed before merging the PR
🔄 Re-run evals manually

⚠️ Warning: Manual re-runs have NO default markers and will run ALL LLM tests (~100+), which can take 1+ hours. Use markers: regression or filter: test_name to limit scope.

Option 1: Comment on this PR with /eval:

/eval
markers: regression

Or with more options (one per line):

/eval
model: gpt-4o
markers: regression
filter: 09_crashpod
iterations: 5
Option Description
model Model(s) to test (default: same as automatic runs)
markers Pytest markers (no default - runs all tests!)
filter Pytest -k filter
iterations Number of runs, max 10

Option 2: Trigger via GitHub Actions UI → "Run workflow"

🏷️ Valid markers
  • chain-of-causation
  • compaction
  • context_window
  • coralogix
  • counting
  • database
  • datadog
  • datetime
  • easy
  • embeds
  • grafana-dashboard
  • hard
  • kafka
  • kubernetes
  • leaked-information
  • logs
  • loki
  • medium
  • metrics
  • network
  • newrelic
  • no-cicd
  • numerical
  • one-test
  • port-forward
  • prometheus
  • question-answer
  • regression
  • runbooks
  • slackbot
  • storage
  • toolset-limitation
  • traces
  • transparency
📋 Valid eval names (use with filter)

test_ask_holmes:

  • 01_how_many_pods
  • 02_what_is_wrong_with_pod
  • 03_what_is_the_command_to_port_forward
  • 04_related_k8s_events
  • 05_image_version
  • 06_explain_issue
  • 07_high_latency
  • 08_sock_shop_frontend
  • 09_crashpod
  • 100a_loki_historical_logs
  • 100b_loki_historical_logs_nonstandard_label
  • 101_loki_historical_logs_pod_deleted
  • 102_loki_label_discovery
  • 102a_loki_logs_transparency
  • 102b_loki_multiple_pods
  • 103_logs_transparency_default_limit
  • 104a_postgres_root_issue
  • 104b_postgres_missing_index_pgstat
  • 104c_postgres_minimal_missing_index
  • 105_redis_wrong_data_structure
  • 107_log_filter_http_status_code
  • 108_logs_nearby_lines
  • 109_logs_transparency_not_found
  • 10_image_pull_backoff
  • 110_cpu_graph_robusta_runner
  • 110_k8s_events_image_pull
  • 111_disabled_datadog_traces
  • 111_pod_names_contain_service
  • 111_tool_hallucination
  • 112_find_pvcs_by_uuid
  • 114_checkout_latency_tracing_rebuild
  • 115_checkout_errors_tracing
  • 117_new_relic_tracing
  • 117b_new_relic_block_embed
  • 118_new_relic_logs
  • 119_new_relic_metrics
  • 11_init_containers
  • 120_new_relic_traces2
  • 121_new_relic_checkout_errors_tracing
  • 122_new_relic_checkout_latency_tracing_rebuild
  • 123_new_relic_checkout_errors_tracing
  • 124_checkout_latency_prometheus
  • 12_job_crashing
  • 13a_pending_node_selector_basic
  • 13b_pending_node_selector_detailed
  • 14_pending_resources
  • 151_disabled_toolsets_fallback_only
  • 156_kafka_opensearch_latency
  • 157_disk_full_statefulset
  • 158_slack_chat_correct_date
  • 159_prometheus_high_cardinality_cpu
  • 15_failed_readiness_probe
  • 160_electricity_market_bidding_bug
  • 160a_cpu_per_namespace_graph
  • 160b_cpu_per_namespace_graph_with_prom_truncation
  • 160c_cpu_per_namespace_graph_with_global_truncation
  • 161_bidding_version_performance
  • 161_conversation_compaction
  • 162_get_runbooks
  • 163_compaction_follow_up
  • 164_datadog_traces_coupon_code
  • 165_alert_with_multiple_runbooks
  • 16_failed_no_toolset_found
  • 173_coralogix_logs
  • 174_coralogix_traces_ad
  • 175_coralogix_metrics_frontend
  • 176_network_policy_blocking_traffic_no_runbooks
  • 177_grafana_home_dashboard
  • 178_grafana_search_dashboard_query
  • 179_grafana_big_dashboard_query
  • 17_oom_kill
  • 18_oom_kill_from_issues_history
  • 19_detect_missing_app_details
  • 20_long_log_file_search
  • 21_job_fail_curl_no_svc_account
  • 22_high_latency_dbi_down
  • 23_app_error_in_current_logs
  • 24_misconfigured_pvc
  • 25_misconfigured_ingress_class
  • 26_page_render_times
  • 27a_multi_container_logs
  • 27b_multi_container_logs
  • 28_permissions_error
  • 30_basic_promql_graph_cluster_memory
  • 32_basic_promql_graph_pod_cpu
  • 33_cpu_metrics_discovery
  • 34_memory_graph
  • 35_tempo
  • 36_argocd_find_resource
  • 37_argocd_wrong_namespace
  • 38_rabbitmq_split_head
  • 39_failed_toolset
  • 41_setup_argo
  • 42_dns_issues_result_all_tools
  • 42_dns_issues_result_new_tools
  • 42_dns_issues_result_new_tools_no_runbook
  • 42_dns_issues_result_old_tools
  • 42_dns_issues_steps_new_all_tools
  • 42_dns_issues_steps_new_tools
  • 42_dns_issues_steps_old_tools
  • 43_current_datetime_from_prompt
  • 43_slack_deployment_logs
  • 44_slack_statefulset_logs
  • 45_fetch_deployment_logs_simple
  • 46_job_crashing_no_longer_exists
  • 47_truncated_logs_context_window
  • 48_logs_since_thursday
  • 49_logs_since_last_week
  • 50_logs_since_specific_date
  • 50a_logs_since_last_specific_month
  • 51_logs_summarize_errors
  • 52_logs_login_issues
  • 53_logs_find_term
  • 54_azure_sql
  • 54_not_truncated_when_getting_pods
  • 55_kafka_runbook
  • 57_cluster_name_confusion
  • 57_wrong_namespace
  • 58_counting_pods_by_status
  • 59_label_based_counting
  • 60_count_less_than
  • 61_exact_match_counting
  • 62_fetch_error_logs_with_errors
  • 63_fetch_error_logs_no_errors
  • 64_keda_vs_hpa_confusion
  • 65_health_check_followup
  • 66_http_error_needle
  • 67_performance_degradation
  • 68_cascading_failures
  • 69_rate_limit_exhaustion
  • 70_memory_leak_detection
  • 71_connection_pool_starvation
  • 73a_time_window_anomaly
  • 73b_time_window_anomaly
  • 74_config_change_impact
  • 75_network_flapping
  • 76_service_discovery_issue
  • 77_liveness_probe_misconfiguration
  • 78a_missing_cpu_limits
  • 78b_cpu_quota_exceeded
  • 79_configmap_mount_issue
  • 80_pvc_storage_class_mismatch
  • 81_service_account_permission_denied
  • 82_pod_anti_affinity_conflict
  • 83_secret_not_found
  • 84_network_policy_blocking_traffic
  • 85_hpa_not_scaling
  • 86_configmap_like_but_secret
  • 89_runbook_missing_cloudwatch
  • 90_runbook_basic_selection
  • 91a_datadog_metrics_missing_namespace
  • 91b_datadog_metrics_pod_exists
  • 91c_datadog_metrics_deployment
  • 91d_datadog_metrics_historical_pod
  • 91e_datadog_custom_metrics
  • 91f_datadog_logs_historical_pod
  • 91g_datadog_metrics_mismatched_pod
  • 91h_datadog_logs_empty_query_with_url
  • 91i_datadog_metrics_empty_query_with_url
  • 92_cpu_graph_conversation
  • 93_calling_datadog
  • 93_events_since_specific_date
  • 94_runbook_transparency
  • 95_runbook_memory_leak_detection
  • 96_no_matching_runbook
  • 97_logs_clarification_needed
  • 99_logs_transparency_custom_time

test_investigate:

  • 01_oom_kill
  • 02_crashloop_backoff
  • 03_cpu_throttling
  • 04_image_pull_backoff
  • 05_crashpod
  • 06_job_failure
  • 07_job_syntax_error
  • 08_memory_pressure
  • 09_high_latency
  • 10_KubeDeploymentReplicasMismatch
  • 11_KubePodCrashLooping
  • 12_KubePodNotReady
  • 13_Watchdog
  • 14_tempo
  • 15_dns_resolution
  • 16_dns_resolution_no_tool
  • 17_investigate_correct_date

@github-actions

Copy link
Copy Markdown
Contributor

@aantn Your eval run has finished. ✅ Completed successfully

👆 See updated results above.

@aantn aantn closed this Dec 31, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant