An extension widget API for the Glance dashboard.
A simple widget that shows information about the latest snapshot in a restic repo. Displays the short ID of the latest snapshot, and the time it was created in a human readable form. Also includes general information about the repo. Optionally, if autorestic is being used to back up it can show a small icon to indicate whether the backup was automatic or manual.
Add the following to your existing glance docker compose
services:
glance:
image: glanceapp/glance
# ...
restic-glance-extension:
image: ghcr.io/not-first/restic-glance-extension
ports:
- '8675:8675'
volumes:
- /my/backup/location/repo1:/app/repos/repo1
- /my/backup/location/repo2-different-name:/app/repos/repo1
restart: unless-stopped
env_file: .envThis widget must be set up be providing environment variables, which can be added to your existing glance .env file. A full environment file might look like this:
RESTIC_REPOS=repo1,repo2
RESTIC_STATS_MODE=repository-size
REPO1_RESTIC_PASSWORD=mypassword1
REPO2_RESTIC_ENV__GOOGLE_APPLICATION_CREDENTIALS=app/config/credentials.json
REPO2_RESTIC_URL=gs:be18b21d-4de1-4a41-a6dc-20a51251b058-repo2:repo2
REPO2_RESTIC_PASSWORD=mypassword2
REPO2_RESTIC_STATS_MODE=latest-snapshot
RESTIC_CACHE_INTERVAL=3600The REPOS variable must contain comma seperated list of repo aliases, which are simple names you assign to allow the program to differentiate between repos. Additional configuration for the alias can be supplied with an environment variable starting with {PREFIX}_RESTIC_, where {PREFIX} is the capitalised alias of the repo.
{PREFIX}_RESTIC_PASSWORD: the password for the repo (required){PREFIX}_RESTIC_URL: for restic operations, the repo url will be/app/repos/{alias}. This env var can be used to replace the url entirely{PREFIX}_RESTIC_STATS_MODE: override the global stats mode for this specific repo (optional){PREFIX}_RESTIC_ENV__{MY_ENV_VAR}: any env var provided in this format will be passed down to any restic commands run on that repo, with the{PREFIX}_RESTIC_ENV__part of the name removed
Local repos must have a corresponding volume mount to the folder /app/repos/{alias}. See the provided .env.example and docker-compose.yml file above for a simple example.
Note that this alias does not have to correspond to the name of the repo folder on your machine. Just where it is mounted to.
REPOS_BASE_PATH can be set to change the base directory from /app/repos, so the local repo urls will be computed as {REPOS_BASE_PATH}/{alias}.
RESTIC_CACHE_INTERVAL can be set to a time in seconds, where the cache will be updated with the repo info every interval. If not supplied it defaults to 3600 (1 hour).
- When the cache is updated, it fetches the restic repo stats and snapshot info. The humanised time difference is calculated for each request.
RESTIC_STATS_MODE determines what statistics are displayed for your repositories. Valid values are:
repository-size(default): Shows the actual disk space used by the repository on your storage backend. This represents the total size of all backup data including deduplication.latest-snapshot: Shows the restore size of only the most recent snapshot. This represents how much disk space would be needed to restore the latest backup.
You can override this setting per-repository using {PREFIX}_RESTIC_STATS_MODE. For example, you might want most repos to show disk usage but one specific repo to show latest snapshot size.
Next, add the extension widget into your glance page by adding this to your glance.yml.
- type: extension
title: My Backups
url: http://restic-extension:8675/{repo-alias}
cache: 1s # set to any time of your choice.
allow-potentially-dangerous-html: trueThe endpoint for your restic repo is accessible on the path /{repo-alias}, where {repo-alias} is the alias set for the repo in your .env file. In the example .env above, /repo1 or /repo2 would be used.
parameters:
autorestic-icon: true
hide-file-count: true
limit: 1autorestic-icon: An icon can be shown to indicate the method of backup (manual or cron). Give a value of 'true' to render it.
This is detected using the tags that autorestic applies to snapshots, therefore using autorestic to manage the repo is required.
hide-file-count: Set to 'true' to hide the file count from the widget, showing only the number of snapshots and total size.
limit: The number of snapshots to render. Snapshots before the most recent one will render in a compressed list. See example below with limit set to 3

