Skip to content

fix(container): update image ghcr.io/home-operations/charts/kopiur ( 0.4.4 ➔ 0.4.5 )#1421

Merged
daddy-ro[bot] merged 1 commit into
mainfrom
renovate/ghcr.io-home-operations-charts-kopiur-0.x
Jun 14, 2026
Merged

fix(container): update image ghcr.io/home-operations/charts/kopiur ( 0.4.4 ➔ 0.4.5 )#1421
daddy-ro[bot] merged 1 commit into
mainfrom
renovate/ghcr.io-home-operations-charts-kopiur-0.x

Conversation

@daddy-ro

@daddy-ro daddy-ro Bot commented Jun 14, 2026

Copy link
Copy Markdown
Contributor

This PR contains the following updates:

Package Update Change
ghcr.io/home-operations/charts/kopiur patch 0.4.40.4.5

Release Notes

home-operations/kopiur (ghcr.io/home-operations/charts/kopiur)

v0.4.5

Compare Source

Features
  • observability: refresh dashboard + implement snapshot verified-timestamp metric (#​106) (4b962d1)
Bug Fixes
  • deps: update rust crate time (0.3.47 → 0.3.49) (#​94) (c62518a)
Miscellaneous Chores
  • krew: kopiur 0.4.4 manifest (226f7b9)
  • mise: update tool aqua:astral-sh/uv (0.9.9 → 0.11.21) (#​62) (d537044)
  • mise: update tool helm (4.2.0 → 4.2.1) (#​96) (63c7df2)
  • mise: update tool kubectl (1.36.1 → 1.36.2) (#​95) (e055a1e)

Configuration

📅 Schedule: (in timezone America/Los_Angeles)

  • Branch creation
    • At any time (no schedule defined)
  • Automerge
    • At any time (no schedule defined)

🚦 Automerge: Enabled.

Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 Ignore: Close this PR and you won't be reminded about this update again.


  • If you want to rebase/retry this PR, check this box

This PR has been generated by Mend Renovate.

@github-actions

Copy link
Copy Markdown
Kustomization diff
spec.ref.tag  (source.toolkit.fluxcd.io/v1/OCIRepository/kopiur-system/kopiur)
  ± value change
    - 0.4.4
    + 0.4.5

HelmRelease diff
spec.template.spec.containers.controller.env.KOPIUR_MOVER_IMAGE.value  (apps/v1/Deployment/kopiur-system/kopiur-controller)
  ± value change
    - ghcr.io/home-operations/kopiur-mover@sha256:5b6a7faf478460669c12794b4f9c605e290e970a58d037bec109dfaa697ddfff
    + ghcr.io/home-operations/kopiur-mover@sha256:0f9c14771cbee9728e946dd03b2f360ebdfa7d686cb891f1b845548ed1da0ee1
  

spec.template.spec.containers.controller.image  (apps/v1/Deployment/kopiur-system/kopiur-controller)
  ± value change
    - ghcr.io/home-operations/kopiur-controller@sha256:8b24137915f9a7b5f98b52005b9689452d297460d93ebd59dcc799a92c9e5af0
    + ghcr.io/home-operations/kopiur-controller@sha256:8469c26e590c03384421cc76016875ab8c6fa3d5872d2c202fee0edf812e127e
  

spec.template.spec.containers.webhook.image  (apps/v1/Deployment/kopiur-system/kopiur-webhook)
  ± value change
    - ghcr.io/home-operations/kopiur-webhook@sha256:09999e36563b3c179b95a3d9814e925f87f687b3245525d16acaff24d79e46af
    + ghcr.io/home-operations/kopiur-webhook@sha256:23e6091f5f4cb521f9596bcb8828902bbaba955ece4e6c7a07702c88c953e86d
  

spec.json  (grafana.integreatly.org/v1beta1/GrafanaDashboard/kopiur-system/kopiur-dashboard)
  ± value change in multiline text (56 inserts, 43 deletions)
      {
        "__inputs": [],
        "annotations": { "list": [] },
        "editable": true,
      
      [one line unchanged)]
      
        "schemaVersion": 39,
        "tags": ["kopiur", "backup"],
        "title": "Kopiur — Backup Operator",
        "uid": "kopiur-overview",
    +   "description": "Fleet health and per-resource detail for the Kopiur backup operator. The top band is the at-a-glance status; the rows below drill into backups, restores, repositories/maintenance, and operator internals.",
        "templating": {
          "list": [
            {
              "name": "datasource",
      
      [19 lines unchanged)]
      
        },
        "time": { "from": "now-24h", "to": "now" },
        "refresh": "30s",
        "panels": [
    -     { "type": "row", "title": "Fleet", "gridPos": { "h": 1, "w": 24, "x": 0, "y": 0 }, "id": 1 },
    +     { "type": "row", "title": "Overview", "gridPos": { "h": 1, "w": 24, "x": 0, "y": 0 }, "id": 1 },
          {
            "id": 2,
            "type": "stat",
    -       "title": "Backups Succeeded",
    +       "title": "Backups OK",
    +       "description": "Snapshot CRs currently in the Succeeded phase.",
            "datasource": { "type": "prometheus", "uid": "${datasource}" },
    -       "gridPos": { "h": 4, "w": 6, "x": 0, "y": 1 },
    +       "gridPos": { "h": 4, "w": 4, "x": 0, "y": 1 },
    +       "fieldConfig": {
    +         "defaults": {
    +           "thresholds": { "mode": "absolute", "steps": [{ "color": "green", "value": null }] }
    +         }
    +       },
            "options": {
              "colorMode": "value",
              "graphMode": "none",
    +         "textMode": "value",
              "reduceOptions": { "calcs": ["lastNotNull"] }
            },
            "targets": [
              {
    -           "expr": "count(kopiur_resource_phase{kind=\"Backup\", phase=\"Succeeded\", namespace=~\"$namespace\"} == 1) or vector(0)",
    +           "expr": "count(kopiur_resource_phase{kind=\"Snapshot\", phase=\"Succeeded\", namespace=~\"$namespace\"} == 1) or vector(0)",
                "refId": "A"
              }
            ]
          },
          {
            "id": 3,
            "type": "stat",
            "title": "Backups Failed",
    +       "description": "Snapshot CRs currently in the Failed phase. Non-zero = backups are not completing.",
            "datasource": { "type": "prometheus", "uid": "${datasource}" },
    -       "gridPos": { "h": 4, "w": 6, "x": 6, "y": 1 },
    +       "gridPos": { "h": 4, "w": 4, "x": 4, "y": 1 },
            "fieldConfig": {
              "defaults": {
                "thresholds": {
    +             "mode": "absolute",
                  "steps": [
                    { "color": "green", "value": null },
                    { "color": "red", "value": 1 }
                  ]
      
      [two lines unchanged)]
      
            },
            "options": {
              "colorMode": "background",
              "graphMode": "none",
    +         "textMode": "value",
              "reduceOptions": { "calcs": ["lastNotNull"] }
            },
            "targets": [
              {
    -           "expr": "count(kopiur_resource_phase{kind=\"Backup\", phase=\"Failed\", namespace=~\"$namespace\"} == 1) or vector(0)",
    +           "expr": "count(kopiur_resource_phase{kind=\"Snapshot\", phase=\"Failed\", namespace=~\"$namespace\"} == 1) or vector(0)",
                "refId": "A"
              }
            ]
          },
          {
            "id": 4,
            "type": "stat",
    -       "title": "Repositories Ready",
    +       "title": "Oldest Backup Age",
    +       "description": "Time since the most recent successful backup, across all sources (the worst case). Yellow >26h, red >48h — tune to your schedule.",
            "datasource": { "type": "prometheus", "uid": "${datasource}" },
    -       "gridPos": { "h": 4, "w": 6, "x": 12, "y": 1 },
    +       "gridPos": { "h": 4, "w": 4, "x": 8, "y": 1 },
    +       "fieldConfig": {
    +         "defaults": {
    +           "unit": "s",
    +           "thresholds": {
    +             "mode": "absolute",
    +             "steps": [
    +               { "color": "green", "value": null },
    +               { "color": "yellow", "value": 93600 },
    +               { "color": "red", "value": 172800 }
    +             ]
    +           }
    +         }
    +       },
    +       "options": {
    +         "colorMode": "background",
    +         "graphMode": "area",
    +         "textMode": "value",
    +         "reduceOptions": { "calcs": ["lastNotNull"] }
    +       },
    +       "targets": [
    +         {
    +           "expr": "max(time() - kopiur_snapshot_last_success_timestamp_seconds{namespace=~\"$namespace\"})",
    +           "refId": "A"
    +         }
    +       ]
    +     },
    +     {
    +       "id": 5,
    +       "type": "stat",
    +       "title": "Repos Ready",
    +       "description": "Repository + ClusterRepository resources in the Ready phase.",
    +       "datasource": { "type": "prometheus", "uid": "${datasource}" },
    +       "gridPos": { "h": 4, "w": 4, "x": 12, "y": 1 },
    +       "fieldConfig": {
    +         "defaults": {
    +           "thresholds": { "mode": "absolute", "steps": [{ "color": "green", "value": null }] }
    +         }
    +       },
            "options": {
              "colorMode": "value",
              "graphMode": "none",
    +         "textMode": "value",
              "reduceOptions": { "calcs": ["lastNotNull"] }
            },
            "targets": [
              {
      
      [two lines unchanged)]
      
              }
            ]
          },
          {
    -       "id": 5,
    +       "id": 6,
            "type": "stat",
            "title": "Repos Degraded/Failed",
    +       "description": "Repository + ClusterRepository resources in the Degraded or Failed phase.",
            "datasource": { "type": "prometheus", "uid": "${datasource}" },
    -       "gridPos": { "h": 4, "w": 6, "x": 18, "y": 1 },
    +       "gridPos": { "h": 4, "w": 4, "x": 16, "y": 1 },
            "fieldConfig": {
              "defaults": {
                "thresholds": {
    +             "mode": "absolute",
                  "steps": [
                    { "color": "green", "value": null },
                    { "color": "red", "value": 1 }
                  ]
      
      [two lines unchanged)]
      
            },
            "options": {
              "colorMode": "background",
              "graphMode": "none",
    +         "textMode": "value",
              "reduceOptions": { "calcs": ["lastNotNull"] }
            },
            "targets": [
              {
      
      [two lines unchanged)]
      
              }
            ]
          },
          {
    -       "id": 6,
    +       "id": 7,
    +       "type": "stat",
    +       "title": "Unmaintained Repos",
    +       "description": "Repositories with no Maintenance CR. These never reclaim storage and grow unbounded — non-zero needs attention.",
    +       "datasource": { "type": "prometheus", "uid": "${datasource}" },
    +       "gridPos": { "h": 4, "w": 4, "x": 20, "y": 1 },
    +       "fieldConfig": {
    +         "defaults": {
    +           "thresholds": {
    +             "mode": "absolute",
    +             "steps": [
    +               { "color": "green", "value": null },
    +               { "color": "red", "value": 1 }
    +             ]
    +           }
    +         }
    +       },
    +       "options": {
    +         "colorMode": "background",
    +         "graphMode": "none",
    +         "textMode": "value",
    +         "reduceOptions": { "calcs": ["lastNotNull"] }
    +       },
    +       "targets": [
    +         {
    +           "expr": "count(kopiur_repository_maintenance_configured == 0) or vector(0)",
    +           "refId": "A"
    +         }
    +       ]
    +     },
    +     {
    +       "id": 8,
    +       "type": "stat",
    +       "title": "Restores Completed",
    +       "description": "Restore CRs currently in the Completed phase.",
    +       "datasource": { "type": "prometheus", "uid": "${datasource}" },
    +       "gridPos": { "h": 4, "w": 4, "x": 0, "y": 5 },
    +       "fieldConfig": {
    +         "defaults": {
    +           "thresholds": { "mode": "absolute", "steps": [{ "color": "green", "value": null }] }
    +         }
    +       },
    +       "options": {
    +         "colorMode": "value",
    +         "graphMode": "none",
    +         "textMode": "value",
    +         "reduceOptions": { "calcs": ["lastNotNull"] }
    +       },
    +       "targets": [
    +         {
    +           "expr": "count(kopiur_resource_phase{kind=\"Restore\", phase=\"Completed\", namespace=~\"$namespace\"} == 1) or vector(0)",
    +           "refId": "A"
    +         }
    +       ]
    +     },
    +     {
    +       "id": 9,
    +       "type": "stat",
    +       "title": "Restores Failed",
    +       "description": "Restore CRs currently in the Failed phase.",
    +       "datasource": { "type": "prometheus", "uid": "${datasource}" },
    +       "gridPos": { "h": 4, "w": 4, "x": 4, "y": 5 },
    +       "fieldConfig": {
    +         "defaults": {
    +           "thresholds": {
    +             "mode": "absolute",
    +             "steps": [
    +               { "color": "green", "value": null },
    +               { "color": "red", "value": 1 }
    +             ]
    +           }
    +         }
    +       },
    +       "options": {
    +         "colorMode": "background",
    +         "graphMode": "none",
    +         "textMode": "value",
    +         "reduceOptions": { "calcs": ["lastNotNull"] }
    +       },
    +       "targets": [
    +         {
    +           "expr": "count(kopiur_resource_phase{kind=\"Restore\", phase=\"Failed\", namespace=~\"$namespace\"} == 1) or vector(0)",
    +           "refId": "A"
    +         }
    +       ]
    +     },
    +     {
    +       "id": 10,
    +       "type": "stat",
    +       "title": "Max Consecutive Failures",
    +       "description": "Largest run of consecutive backup failures across policies. Yellow ≥1, red ≥3.",
    +       "datasource": { "type": "prometheus", "uid": "${datasource}" },
    +       "gridPos": { "h": 4, "w": 4, "x": 8, "y": 5 },
    +       "fieldConfig": {
    +         "defaults": {
    +           "thresholds": {
    +             "mode": "absolute",
    +             "steps": [
    +               { "color": "green", "value": null },
    +               { "color": "yellow", "value": 1 },
    +               { "color": "red", "value": 3 }
    +             ]
    +           }
    +         }
    +       },
    +       "options": {
    +         "colorMode": "background",
    +         "graphMode": "none",
    +         "textMode": "value",
    +         "reduceOptions": { "calcs": ["lastNotNull"] }
    +       },
    +       "targets": [
    +         {
    +           "expr": "max(kopiur_snapshot_consecutive_failures{namespace=~\"$namespace\"}) or vector(0)",
    +           "refId": "A"
    +         }
    +       ]
    +     },
    +     {
    +       "id": 11,
    +       "type": "stat",
    +       "title": "Backups Refused (24h)",
    +       "description": "Backups deliberately refused by policy in the last 24h (e.g. ReadOnly repo, ungated privileged mover).",
    +       "datasource": { "type": "prometheus", "uid": "${datasource}" },
    +       "gridPos": { "h": 4, "w": 4, "x": 12, "y": 5 },
    +       "fieldConfig": {
    +         "defaults": {
    +           "thresholds": {
    +             "mode": "absolute",
    +             "steps": [
    +               { "color": "green", "value": null },
    +               { "color": "yellow", "value": 1 }
    +             ]
    +           }
    +         }
    +       },
    +       "options": {
    +         "colorMode": "background",
    +         "graphMode": "none",
    +         "textMode": "value",
    +         "reduceOptions": { "calcs": ["lastNotNull"] }
    +       },
    +       "targets": [
    +         {
    +           "expr": "sum(increase(kopiur_snapshot_refusals_total{namespace=~\"$namespace\"}[24h])) or vector(0)",
    +           "refId": "A"
    +         }
    +       ]
    +     },
    +     {
    +       "id": 12,
    +       "type": "stat",
    +       "title": "Snapshot Delete Failures (24h)",
    +       "description": "kopia snapshot-delete failures during finalizer handling in the last 24h. Non-zero risks leaked snapshots.",
    +       "datasource": { "type": "prometheus", "uid": "${datasource}" },
    +       "gridPos": { "h": 4, "w": 4, "x": 16, "y": 5 },
    +       "fieldConfig": {
    +         "defaults": {
    +           "thresholds": {
    +             "mode": "absolute",
    +             "steps": [
    +               { "color": "green", "value": null },
    +               { "color": "red", "value": 1 }
    +             ]
    +           }
    +         }
    +       },
    +       "options": {
    +         "colorMode": "background",
    +         "graphMode": "none",
    +         "textMode": "value",
    +         "reduceOptions": { "calcs": ["lastNotNull"] }
    +       },
    +       "targets": [
    +         {
    +           "expr": "sum(increase(kopiur_snapshot_deletion_failures_total{namespace=~\"$namespace\"}[24h])) or vector(0)",
    +           "refId": "A"
    +         }
    +       ]
    +     },
    +     {
    +       "id": 13,
    +       "type": "stat",
    +       "title": "Orphaned Snapshots (24h)",
    +       "description": "kopia snapshots intentionally left in the repository (Orphan deletionPolicy or the skip-cleanup escape hatch) in the last 24h.",
    +       "datasource": { "type": "prometheus", "uid": "${datasource}" },
    +       "gridPos": { "h": 4, "w": 4, "x": 20, "y": 5 },
    +       "fieldConfig": {
    +         "defaults": {
    +           "thresholds": { "mode": "absolute", "steps": [{ "color": "blue", "value": null }] }
    +         }
    +       },
    +       "options": {
    +         "colorMode": "value",
    +         "graphMode": "none",
    +         "textMode": "value",
    +         "reduceOptions": { "calcs": ["lastNotNull"] }
    +       },
    +       "targets": [
    +         {
    +           "expr": "sum(increase(kopiur_orphaned_snapshots_total{namespace=~\"$namespace\"}[24h])) or vector(0)",
    +           "refId": "A"
    +         }
    +       ]
    +     },
    +     {
    +       "type": "row",
    +       "title": "Backups",
    +       "gridPos": { "h": 1, "w": 24, "x": 0, "y": 9 },
    +       "id": 20
    +     },
    +     {
    +       "id": 21,
            "type": "table",
            "title": "Backups by phase",
            "datasource": { "type": "prometheus", "uid": "${datasource}" },
    -       "gridPos": { "h": 8, "w": 12, "x": 0, "y": 5 },
    +       "gridPos": { "h": 8, "w": 12, "x": 0, "y": 10 },
            "options": { "showHeader": true },
            "targets": [
              {
    -           "expr": "kopiur_resource_phase{kind=\"Backup\", namespace=~\"$namespace\"} == 1",
    +           "expr": "kopiur_resource_phase{kind=\"Snapshot\", namespace=~\"$namespace\"} == 1",
                "format": "table",
                "instant": true,
                "refId": "A"
              }
      
      [14 lines unchanged)]
      
              }
            ]
          },
          {
    -       "id": 7,
    +       "id": 22,
            "type": "timeseries",
            "title": "Resources by phase",
    +       "description": "Live count of Snapshot/Restore/Repository/ClusterRepository resources in each phase.",
            "datasource": { "type": "prometheus", "uid": "${datasource}" },
    -       "gridPos": { "h": 8, "w": 12, "x": 12, "y": 5 },
    +       "gridPos": { "h": 8, "w": 12, "x": 12, "y": 10 },
            "targets": [
              {
                "expr": "sum by (kind, phase) (kopiur_resource_phase{namespace=~\"$namespace\"} == 1)",
                "legendFormat": "{{kind}}/{{phase}}",
      
      [one line unchanged)]
      
              }
            ]
          },
          {
    -       "type": "row",
    -       "title": "Backups",
    -       "gridPos": { "h": 1, "w": 24, "x": 0, "y": 13 },
    -       "id": 10
    -     },
    -     {
    -       "id": 11,
    +       "id": 23,
            "type": "timeseries",
            "title": "Time since last successful backup",
            "datasource": { "type": "prometheus", "uid": "${datasource}" },
            "fieldConfig": { "defaults": { "unit": "s" } },
    -       "gridPos": { "h": 8, "w": 8, "x": 0, "y": 14 },
    +       "gridPos": { "h": 7, "w": 8, "x": 0, "y": 18 },
            "targets": [
              {
                "expr": "time() - kopiur_snapshot_last_success_timestamp_seconds{namespace=~\"$namespace\"}",
                "legendFormat": "{{namespace}}/{{name}}",
      
      [one line unchanged)]
      
              }
            ]
          },
          {
    -       "id": 12,
    +       "id": 24,
            "type": "timeseries",
            "title": "Last backup size",
            "datasource": { "type": "prometheus", "uid": "${datasource}" },
            "fieldConfig": { "defaults": { "unit": "bytes" } },
    -       "gridPos": { "h": 8, "w": 8, "x": 8, "y": 14 },
    +       "gridPos": { "h": 7, "w": 8, "x": 8, "y": 18 },
            "targets": [
              {
                "expr": "kopiur_snapshot_size_bytes{namespace=~\"$namespace\"}",
                "legendFormat": "{{namespace}}/{{name}}",
      
      [one line unchanged)]
      
              }
            ]
          },
          {
    -       "id": 13,
    +       "id": 25,
            "type": "timeseries",
            "title": "Last backup duration",
            "datasource": { "type": "prometheus", "uid": "${datasource}" },
            "fieldConfig": { "defaults": { "unit": "s" } },
    -       "gridPos": { "h": 8, "w": 8, "x": 16, "y": 14 },
    +       "gridPos": { "h": 7, "w": 8, "x": 16, "y": 18 },
            "targets": [
              {
                "expr": "kopiur_snapshot_duration_seconds{namespace=~\"$namespace\"}",
                "legendFormat": "{{namespace}}/{{name}}",
      
      [one line unchanged)]
      
              }
            ]
          },
          {
    -       "id": 14,
    +       "id": 26,
    +       "type": "timeseries",
    +       "title": "Last backup files",
    +       "datasource": { "type": "prometheus", "uid": "${datasource}" },
    +       "fieldConfig": { "defaults": { "unit": "short" } },
    +       "gridPos": { "h": 7, "w": 8, "x": 0, "y": 25 },
    +       "targets": [
    +         {
    +           "expr": "kopiur_snapshot_files{namespace=~\"$namespace\"}",
    +           "legendFormat": "{{namespace}}/{{name}}",
    +           "refId": "A"
    +         }
    +       ]
    +     },
    +     {
    +       "id": 27,
            "type": "timeseries",
            "title": "Consecutive backup failures",
            "datasource": { "type": "prometheus", "uid": "${datasource}" },
    -       "gridPos": { "h": 7, "w": 12, "x": 0, "y": 22 },
    +       "gridPos": { "h": 7, "w": 8, "x": 8, "y": 25 },
            "targets": [
              {
                "expr": "kopiur_snapshot_consecutive_failures{namespace=~\"$namespace\"}",
                "legendFormat": "{{namespace}}/{{name}}",
      
      [one line unchanged)]
      
              }
            ]
          },
          {
    -       "id": 15,
    +       "id": 28,
            "type": "timeseries",
            "title": "Scheduled backups created (rate)",
            "datasource": { "type": "prometheus", "uid": "${datasource}" },
    -       "gridPos": { "h": 7, "w": 12, "x": 12, "y": 22 },
    +       "fieldConfig": { "defaults": { "unit": "ops" } },
    +       "gridPos": { "h": 7, "w": 8, "x": 16, "y": 25 },
            "targets": [
              {
                "expr": "sum by (namespace, name) (rate(kopiur_schedule_snapshots_created_total{namespace=~\"$namespace\"}[1h]))",
    +           "legendFormat": "{{namespace}}/{{name}}",
    +           "refId": "A"
    +         }
    +       ]
    +     },
    +     {
    +       "id": 29,
    +       "type": "timeseries",
    +       "title": "Backups refused (rate by reason)",
    +       "datasource": { "type": "prometheus", "uid": "${datasource}" },
    +       "fieldConfig": { "defaults": { "unit": "ops" } },
    +       "gridPos": { "h": 7, "w": 8, "x": 0, "y": 32 },
    +       "targets": [
    +         {
    +           "expr": "sum by (reason) (rate(kopiur_snapshot_refusals_total{namespace=~\"$namespace\"}[1h]))",
    +           "legendFormat": "{{reason}}",
    +           "refId": "A"
    +         }
    +       ]
    +     },
    +     {
    +       "id": 30,
    +       "type": "timeseries",
    +       "title": "Snapshot lifecycle issues (rate)",
    +       "description": "Finalizer-path problems: kopia delete failures and intentionally-orphaned snapshots.",
    +       "datasource": { "type": "prometheus", "uid": "${datasource}" },
    +       "fieldConfig": { "defaults": { "unit": "ops" } },
    +       "gridPos": { "h": 7, "w": 8, "x": 8, "y": 32 },
    +       "targets": [
    +         {
    +           "expr": "sum(rate(kopiur_snapshot_deletion_failures_total{namespace=~\"$namespace\"}[1h]))",
    +           "legendFormat": "delete failures",
    +           "refId": "A"
    +         },
    +         {
    +           "expr": "sum(rate(kopiur_orphaned_snapshots_total{namespace=~\"$namespace\"}[1h]))",
    +           "legendFormat": "orphaned",
    +           "refId": "B"
    +         }
    +       ]
    +     },
    +     {
    +       "id": 31,
    +       "type": "timeseries",
    +       "title": "Time since last verify",
    +       "description": "Age of the most recent successful SnapshotPolicy verification (quick or deep). A growing value means backups aren't being integrity-checked — alert on staleness like the last-backup age (ADR-0005 §4).",
    +       "datasource": { "type": "prometheus", "uid": "${datasource}" },
    +       "fieldConfig": { "defaults": { "unit": "s" } },
    +       "gridPos": { "h": 7, "w": 8, "x": 16, "y": 32 },
    +       "targets": [
    +         {
    +           "expr": "time() - kopiur_snapshot_verified_timestamp_seconds{namespace=~\"$namespace\"}",
    +           "legendFormat": "{{namespace}}/{{name}}",
    +           "refId": "A"
    +         }
    +       ]
    +     },
    +     {
    +       "type": "row",
    +       "title": "Restores",
    +       "gridPos": { "h": 1, "w": 24, "x": 0, "y": 39 },
    +       "id": 40
    +     },
    +     {
    +       "id": 41,
    +       "type": "table",
    +       "title": "Restores by phase",
    +       "datasource": { "type": "prometheus", "uid": "${datasource}" },
    +       "gridPos": { "h": 8, "w": 12, "x": 0, "y": 40 },
    +       "options": { "showHeader": true },
    +       "targets": [
    +         {
    +           "expr": "kopiur_resource_phase{kind=\"Restore\", namespace=~\"$namespace\"} == 1",
    +           "format": "table",
    +           "instant": true,
    +           "refId": "A"
    +         }
    +       ],
    +       "transformations": [
    +         {
    +           "id": "organize",
    +           "options": {
    +             "excludeByName": {
    +               "Time": true,
    +               "Value": true,
    +               "kind": true,
    +               "__name__": true,
    +               "job": true,
    +               "instance": true
    +             }
    +           }
    +         }
    +       ]
    +     },
    +     {
    +       "id": 42,
    +       "type": "timeseries",
    +       "title": "Last restore duration",
    +       "datasource": { "type": "prometheus", "uid": "${datasource}" },
    +       "fieldConfig": { "defaults": { "unit": "s" } },
    +       "gridPos": { "h": 8, "w": 12, "x": 12, "y": 40 },
    +       "targets": [
    +         {
    +           "expr": "kopiur_restore_duration_seconds{namespace=~\"$namespace\"}",
                "legendFormat": "{{namespace}}/{{name}}",
                "refId": "A"
              }
            ]
          },
          {
            "type": "row",
            "title": "Repositories & Maintenance",
    -       "gridPos": { "h": 1, "w": 24, "x": 0, "y": 29 },
    -       "id": 20
    +       "gridPos": { "h": 1, "w": 24, "x": 0, "y": 48 },
    +       "id": 50
          },
          {
    -       "id": 21,
    +       "id": 51,
            "type": "timeseries",
            "title": "Repository size",
            "datasource": { "type": "prometheus", "uid": "${datasource}" },
            "fieldConfig": { "defaults": { "unit": "bytes" } },
    -       "gridPos": { "h": 7, "w": 8, "x": 0, "y": 30 },
    +       "gridPos": { "h": 7, "w": 8, "x": 0, "y": 49 },
            "targets": [
              { "expr": "kopiur_repo_size_bytes", "legendFormat": "{{namespace}}/{{name}}", "refId": "A" }
            ]
          },
          {
    -       "id": 22,
    +       "id": 52,
            "type": "timeseries",
            "title": "Snapshots & discovered backups",
            "datasource": { "type": "prometheus", "uid": "${datasource}" },
    -       "gridPos": { "h": 7, "w": 8, "x": 8, "y": 30 },
    +       "gridPos": { "h": 7, "w": 8, "x": 8, "y": 49 },
            "targets": [
              {
                "expr": "kopiur_repo_snapshot_count",
                "legendFormat": "snapshots {{name}}",
      
      [six lines unchanged)]
      
              }
            ]
          },
          {
    -       "id": 23,
    +       "id": 53,
            "type": "timeseries",
            "title": "Maintenance reclaimed bytes",
            "datasource": { "type": "prometheus", "uid": "${datasource}" },
            "fieldConfig": { "defaults": { "unit": "bytes" } },
    -       "gridPos": { "h": 7, "w": 8, "x": 16, "y": 30 },
    +       "gridPos": { "h": 7, "w": 8, "x": 16, "y": 49 },
            "targets": [
              {
                "expr": "kopiur_maintenance_last_reclaimed_bytes",
                "legendFormat": "{{namespace}}/{{name}}",
      
      [one line unchanged)]
      
              }
            ]
          },
          {
    +       "id": 54,
    +       "type": "table",
    +       "title": "Maintenance configured (per repository)",
    +       "description": "Whether a Maintenance CR references each repository. A repository with no maintenance never reclaims storage.",
    +       "datasource": { "type": "prometheus", "uid": "${datasource}" },
    +       "gridPos": { "h": 7, "w": 12, "x": 0, "y": 56 },
    +       "options": { "showHeader": true },
    +       "targets": [
    +         {
    +           "expr": "kopiur_repository_maintenance_configured",
    +           "format": "table",
    +           "instant": true,
    +           "refId": "A"
    +         }
    +       ],
    +       "transformations": [
    +         {
    +           "id": "organize",
    +           "options": {
    +             "excludeByName": { "Time": true, "__name__": true, "job": true, "instance": true },
    +             "renameByName": { "Value": "Maintenance" }
    +           }
    +         }
    +       ],
    +       "fieldConfig": {
    +         "defaults": {},
    +         "overrides": [
    +           {
    +             "matcher": { "id": "byName", "options": "Maintenance" },
    +             "properties": [
    +               {
    +                 "id": "mappings",
    +                 "value": [
    +                   {
    +                     "type": "value",
    +                     "options": {
    +                       "0": { "text": "✗ none", "index": 0 },
    +                       "1": { "text": "✓ ok", "index": 1 }
    +                     }
    +                   }
    +                 ]
    +               },
    +               { "id": "custom.cellOptions", "value": { "type": "color-background" } },
    +               {
    +                 "id": "thresholds",
    +                 "value": {
    +                   "mode": "absolute",
    +                   "steps": [
    +                     { "color": "red", "value": null },
    +                     { "color": "green", "value": 1 }
    +                   ]
    +                 }
    +               }
    +             ]
    +           }
    +         ]
    +       }
    +     },
    +     {
    +       "id": 55,
    +       "type": "timeseries",
    +       "title": "Credential Secrets projected (rate)",
    +       "description": "Secrets copied into a mover namespace via spec.credentialProjection (opt-in).",
    +       "datasource": { "type": "prometheus", "uid": "${datasource}" },
    +       "fieldConfig": { "defaults": { "unit": "ops" } },
    +       "gridPos": { "h": 7, "w": 12, "x": 12, "y": 56 },
    +       "targets": [
    +         {
    +           "expr": "sum by (namespace) (rate(kopiur_secrets_projected_total{namespace=~\"$namespace\"}[1h]))",
    +           "legendFormat": "{{namespace}}",
    +           "refId": "A"
    +         }
    +       ]
    +     },
    +     {
            "type": "row",
            "title": "Controller, Mover & Webhook",
    -       "gridPos": { "h": 1, "w": 24, "x": 0, "y": 37 },
    -       "id": 30
    +       "gridPos": { "h": 1, "w": 24, "x": 0, "y": 63 },
    +       "id": 60
          },
          {
    -       "id": 31,
    +       "id": 61,
            "type": "timeseries",
            "title": "Reconcile rate by kind",
            "datasource": { "type": "prometheus", "uid": "${datasource}" },
            "fieldConfig": { "defaults": { "unit": "ops" } },
    -       "gridPos": { "h": 7, "w": 8, "x": 0, "y": 38 },
    +       "gridPos": { "h": 7, "w": 8, "x": 0, "y": 64 },
            "targets": [
              {
                "expr": "sum by (kind) (rate(kopiur_controller_reconciliations_total[5m]))",
                "legendFormat": "{{kind}}",
      
      [one line unchanged)]
      
              }
            ]
          },
          {
    -       "id": 32,
    +       "id": 62,
            "type": "timeseries",
            "title": "Reconcile error rate by class",
            "datasource": { "type": "prometheus", "uid": "${datasource}" },
            "fieldConfig": { "defaults": { "unit": "ops" } },
    -       "gridPos": { "h": 7, "w": 8, "x": 8, "y": 38 },
    +       "gridPos": { "h": 7, "w": 8, "x": 8, "y": 64 },
            "targets": [
              {
                "expr": "sum by (kind, class) (rate(kopiur_controller_reconcile_errors_total[5m]))",
                "legendFormat": "{{kind}}/{{class}}",
      
      [one line unchanged)]
      
              }
            ]
          },
          {
    -       "id": 33,
    +       "id": 63,
            "type": "timeseries",
            "title": "Reconcile duration p95",
            "datasource": { "type": "prometheus", "uid": "${datasource}" },
            "fieldConfig": { "defaults": { "unit": "s" } },
    -       "gridPos": { "h": 7, "w": 8, "x": 16, "y": 38 },
    +       "gridPos": { "h": 7, "w": 8, "x": 16, "y": 64 },
            "targets": [
              {
                "expr": "histogram_quantile(0.95, sum by (le, kind) (rate(kopiur_controller_reconcile_duration_seconds_bucket[5m])))",
                "legendFormat": "{{kind}}",
      
      [one line unchanged)]
      
              }
            ]
          },
          {
    -       "id": 34,
    +       "id": 64,
    +       "type": "timeseries",
    +       "title": "Controller memory (RSS)",
    +       "datasource": { "type": "prometheus", "uid": "${datasource}" },
    +       "fieldConfig": { "defaults": { "unit": "bytes" } },
    +       "gridPos": { "h": 7, "w": 8, "x": 0, "y": 71 },
    +       "targets": [
    +         {
    +           "expr": "kopiur_process_resident_memory_bytes",
    +           "legendFormat": "{{instance}}",
    +           "refId": "A"
    +         }
    +       ]
    +     },
    +     {
    +       "id": 65,
            "type": "timeseries",
            "title": "Mover operations (rate by result)",
    +       "description": "Mover Jobs push via OTLP — visible only when an OTLP collector re-exports to Prometheus.",
            "datasource": { "type": "prometheus", "uid": "${datasource}" },
            "fieldConfig": { "defaults": { "unit": "ops" } },
    -       "gridPos": { "h": 7, "w": 12, "x": 0, "y": 45 },
    +       "gridPos": { "h": 7, "w": 8, "x": 8, "y": 71 },
            "targets": [
              {
                "expr": "sum by (operation, result) (rate(kopiur_mover_operations_total[15m]))",
                "legendFormat": "{{operation}}/{{result}}",
      
      [one line unchanged)]
      
              }
            ]
          },
          {
    -       "id": 35,
    +       "id": 66,
    +       "type": "timeseries",
    +       "title": "Mover operation duration p95",
    +       "description": "Mover Jobs push via OTLP — visible only when an OTLP collector re-exports to Prometheus.",
    +       "datasource": { "type": "prometheus", "uid": "${datasource}" },
    +       "fieldConfig": { "defaults": { "unit": "s" } },
    +       "gridPos": { "h": 7, "w": 8, "x": 16, "y": 71 },
    +       "targets": [
    +         {
    +           "expr": "histogram_quantile(0.95, sum by (le, operation) (rate(kopiur_mover_operation_duration_seconds_bucket[1h])))",
    +           "legendFormat": "{{operation}}",
    +           "refId": "A"
    +         }
    +       ]
    +     },
    +     {
    +       "id": 67,
            "type": "timeseries",
            "title": "Webhook admissions (rate by decision)",
            "datasource": { "type": "prometheus", "uid": "${datasource}" },
            "fieldConfig": { "defaults": { "unit": "ops" } },
    -       "gridPos": { "h": 7, "w": 12, "x": 12, "y": 45 },
    +       "gridPos": { "h": 7, "w": 24, "x": 0, "y": 78 },
            "targets": [
              {
                "expr": "sum by (kind, decision) (rate(kopiur_webhook_admission_total[15m]))",
                "legendFormat": "{{kind}}/{{decision}}",
      
      [two lines unchanged)]
      
            ]
          }
        ]
      }
  
  

Diff created by flateWorkflow run

@daddy-ro daddy-ro Bot merged commit 73ff0b5 into main Jun 14, 2026
9 checks passed
@daddy-ro daddy-ro Bot deleted the renovate/ghcr.io-home-operations-charts-kopiur-0.x branch June 14, 2026 18:33
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

0 participants