{
  "title": "Gaffer Test Metrics",
  "description": "Test run health and coverage metrics exported from Gaffer via OpenTelemetry.",
  "widgets": [
    {
      "id": 1,
      "definition": {
        "title": "Pass Rate",
        "type": "query_value",
        "requests": [
          {
            "formulas": [{ "formula": "query1" }],
            "queries": [
              {
                "data_source": "metrics",
                "name": "query1",
                "query": "avg:gaffer.tests.pass_rate{$project}",
                "aggregator": "last"
              }
            ],
            "response_format": "scalar"
          }
        ],
        "autoscale": false,
        "precision": 1,
        "custom_unit": "%"
      },
      "layout": { "x": 0, "y": 0, "width": 3, "height": 2 }
    },
    {
      "id": 2,
      "definition": {
        "title": "Total Tests",
        "type": "query_value",
        "requests": [
          {
            "formulas": [{ "formula": "query1" }],
            "queries": [
              {
                "data_source": "metrics",
                "name": "query1",
                "query": "avg:gaffer.tests.total{$project}",
                "aggregator": "last"
              }
            ],
            "response_format": "scalar"
          }
        ],
        "autoscale": true,
        "precision": 0
      },
      "layout": { "x": 3, "y": 0, "width": 3, "height": 2 }
    },
    {
      "id": 3,
      "definition": {
        "title": "Failed Tests",
        "type": "query_value",
        "requests": [
          {
            "formulas": [{ "formula": "query1" }],
            "queries": [
              {
                "data_source": "metrics",
                "name": "query1",
                "query": "avg:gaffer.tests.failed{$project}",
                "aggregator": "last"
              }
            ],
            "response_format": "scalar"
          }
        ],
        "autoscale": true,
        "precision": 0,
        "custom_links": []
      },
      "layout": { "x": 6, "y": 0, "width": 3, "height": 2 }
    },
    {
      "id": 4,
      "definition": {
        "title": "Skipped Tests",
        "type": "query_value",
        "requests": [
          {
            "formulas": [{ "formula": "query1" }],
            "queries": [
              {
                "data_source": "metrics",
                "name": "query1",
                "query": "avg:gaffer.tests.skipped{$project}",
                "aggregator": "last"
              }
            ],
            "response_format": "scalar"
          }
        ],
        "autoscale": true,
        "precision": 0
      },
      "layout": { "x": 9, "y": 0, "width": 3, "height": 2 }
    },
    {
      "id": 5,
      "definition": {
        "title": "Pass Rate Over Time",
        "type": "timeseries",
        "requests": [
          {
            "formulas": [{ "formula": "query1" }],
            "queries": [
              {
                "data_source": "metrics",
                "name": "query1",
                "query": "avg:gaffer.tests.pass_rate{$project} by {gaffer.branch}"
              }
            ],
            "response_format": "timeseries",
            "style": {
              "palette": "dog_classic",
              "line_type": "solid",
              "line_width": "normal"
            },
            "display_type": "line"
          }
        ],
        "yaxis": {
          "min": "0",
          "max": "100",
          "label": "Pass Rate %"
        },
        "time": { "live_span": "30d" }
      },
      "layout": { "x": 0, "y": 2, "width": 12, "height": 3 }
    },
    {
      "id": 6,
      "definition": {
        "title": "Test Counts by Result",
        "type": "timeseries",
        "requests": [
          {
            "formulas": [
              { "formula": "query1", "alias": "Passed" },
              { "formula": "query2", "alias": "Failed" },
              { "formula": "query3", "alias": "Skipped" }
            ],
            "queries": [
              {
                "data_source": "metrics",
                "name": "query1",
                "query": "avg:gaffer.tests.passed{$project}"
              },
              {
                "data_source": "metrics",
                "name": "query2",
                "query": "avg:gaffer.tests.failed{$project}"
              },
              {
                "data_source": "metrics",
                "name": "query3",
                "query": "avg:gaffer.tests.skipped{$project}"
              }
            ],
            "response_format": "timeseries",
            "style": {
              "palette": "semantic"
            },
            "display_type": "bars"
          }
        ],
        "time": { "live_span": "30d" }
      },
      "layout": { "x": 0, "y": 5, "width": 12, "height": 3 }
    },
    {
      "id": 7,
      "definition": {
        "title": "Code Coverage Over Time",
        "type": "timeseries",
        "requests": [
          {
            "formulas": [
              { "formula": "query1", "alias": "Line Coverage" },
              { "formula": "query2", "alias": "Branch Coverage" }
            ],
            "queries": [
              {
                "data_source": "metrics",
                "name": "query1",
                "query": "avg:gaffer.coverage.line_percent{$project}"
              },
              {
                "data_source": "metrics",
                "name": "query2",
                "query": "avg:gaffer.coverage.branch_percent{$project}"
              }
            ],
            "response_format": "timeseries",
            "style": {
              "palette": "cool",
              "line_type": "solid",
              "line_width": "normal"
            },
            "display_type": "line"
          }
        ],
        "yaxis": {
          "min": "0",
          "max": "100",
          "label": "Coverage %"
        },
        "time": { "live_span": "30d" }
      },
      "layout": { "x": 0, "y": 8, "width": 12, "height": 3 }
    }
  ],
  "template_variables": [
    {
      "name": "project",
      "prefix": "gaffer.project.name",
      "available_values": [],
      "default": "*"
    }
  ],
  "layout_type": "ordered",
  "notify_list": [],
  "reflow_type": "fixed"
}
