update python version and add build job
All checks were successful
Disk Report Image / build-and-push-ddns (push) Successful in 22s

This commit is contained in:
2026-01-22 09:42:36 -05:00
parent addcbaf39a
commit e570df6c1b
7 changed files with 142 additions and 120 deletions

View File

@@ -0,0 +1,30 @@
name: Disk Report Image
run-name: Build and Push the Disk Report Application Image
on:
push:
paths:
- disk_report.py
- .gitea/workflows/disk_report.yaml
schedule:
- cron: '@daily'
jobs:
build-and-push-ddns:
runs-on: ubuntu-latest
if: gitea.ref == 'refs/heads/main'
steps:
- name: Check out repository code
uses: actions/checkout@v4
- name: Login to Gitea Registry
uses: docker/login-action@v2
with:
registry: gitea.reeseapps.com
username: ${{ secrets.REGISTRY_USERNAME }}
password: ${{ secrets.REGISTRY_PASSWORD }}
- name: Build and push Docker image
uses: https://github.com/docker/build-push-action@v5
with:
context: ${{ gitea.workspace }}
file: ${{ gitea.workspace }}/disk_report.Containerfile
push: true
tags: "gitea.reeseapps.com/services/disk_report:latest,gitea.reeseapps.com/services/disk_report:${{gitea.sha}}"
no-cache: true

View File

@@ -1 +1 @@
3.10
3.14

View File

@@ -1,9 +1,21 @@
# LLM Server Monitor
## summarize.sh
## Disk Report
### Run with UV
Make sure you have python uv installed.
```bash
python post_llama.py --message "summarize this document" ./example.txt
btrfs filesystem usage /btrfs/pool0 | grep 'Overall:' -A 12 > /tmp/input.txt
uv run disk_report.py --message "summarize this document" /tmp/input.txt
```
### Run with container
```bash
btrfs filesystem usage /btrfs/pool0 | grep 'Overall:' -A 12 > /tmp/input.txt
podman run -it --rm -v /tmp/input.txt:/input/input.txt:z gitea.reeseapps.com/services/disk_report:latest
```
## Prompts

14
disk_report.Containerfile Normal file
View File

@@ -0,0 +1,14 @@
FROM ghcr.io/astral-sh/uv:alpine3.22
# Copy the project into the image
COPY . /app
COPY example.txt /input/input.txt
# Disable development dependencies
ENV UV_NO_DEV=1
# Sync the project into a new environment, asserting the lockfile is up to date
WORKDIR /app
RUN uv sync --locked
CMD ["uv", "run", "post_llama.py", "/input/input.txt"]

View File

@@ -92,7 +92,13 @@ def main() -> None:
parser.add_argument(
"-m",
"--message",
default="Please analyse the attached file.",
default="""
You are an expert BTRFS system administrator. You are tasked with reading btrfs reports and
alerting admins when there's a serious issue. Attached is a btrfs summary. If everything looks
good reply with a short message saying as such. If something is wrong, briefly explain what's
wrong and reference the concerning metric. Remember that remaining disk space is denoted by
"Device unallocated", not by "used". High used percentages in Data and Metadata (>90%) are expected and normal.
""",
help="User message to send alongside the file.",
)
parser.add_argument(
@@ -139,7 +145,7 @@ def main() -> None:
# ------------------------------------------------------------------
try:
json_resp = resp.json()
print(json.dumps(json_resp["choices"][0]["message"]["content"], indent=2, ensure_ascii=False))
print(json_resp["choices"][0]["message"]["content"])
except ValueError:
# Not JSON just dump raw text
print(resp.text)

View File

@@ -1,114 +1,80 @@
Pool 0
Overall:
Device size: 34.57TiB
Device allocated: 22.82TiB
Device unallocated: 11.75TiB
Device missing: 0.00B
Device slack: 0.00B
Used: 22.75TiB
Free (estimated): 5.90TiB (min: 5.90TiB)
Free (statfs, df): 4.97TiB
Data ratio: 2.00
Metadata ratio: 2.00
Global reserve: 512.00MiB (used: 0.00B)
Multiple profiles: no
Data,RAID1: Size:11.38TiB, Used:11.35TiB (99.74%)
/dev/dm-10 5.43TiB
/dev/dm-15 3.62TiB
/dev/dm-9 7.00TiB
/dev/dm-5 286.00GiB
/dev/dm-6 284.00GiB
/dev/dm-8 3.88TiB
/dev/dm-4 2.27TiB
Metadata,RAID1: Size:27.00GiB, Used:21.15GiB (78.34%)
/dev/dm-10 15.00GiB
/dev/dm-15 10.00GiB
/dev/dm-9 12.00GiB
/dev/dm-8 8.00GiB
/dev/dm-4 9.00GiB
System,RAID1: Size:32.00MiB, Used:1.61MiB (5.03%)
/dev/dm-8 32.00MiB
/dev/dm-4 32.00MiB
Unallocated:
/dev/dm-10 1.83TiB
/dev/dm-15 1.83TiB
/dev/dm-9 2.08TiB
/dev/dm-5 1.54TiB
/dev/dm-6 1.54TiB
/dev/dm-8 1.57TiB
/dev/dm-4 1.36TiB
[/dev/mapper/luks-pool0-5dbed936-760e-487e-911a-a5f0239aa2ad].write_io_errs 0
[/dev/mapper/luks-pool0-5dbed936-760e-487e-911a-a5f0239aa2ad].read_io_errs 0
[/dev/mapper/luks-pool0-5dbed936-760e-487e-911a-a5f0239aa2ad].flush_io_errs 0
[/dev/mapper/luks-pool0-5dbed936-760e-487e-911a-a5f0239aa2ad].corruption_errs 0
[/dev/mapper/luks-pool0-5dbed936-760e-487e-911a-a5f0239aa2ad].generation_errs 0
[/dev/mapper/luks-pool0-e0bdc76d-d4c6-4273-8ac5-21bbc768134c].write_io_errs 0
[/dev/mapper/luks-pool0-e0bdc76d-d4c6-4273-8ac5-21bbc768134c].read_io_errs 0
[/dev/mapper/luks-pool0-e0bdc76d-d4c6-4273-8ac5-21bbc768134c].flush_io_errs 0
[/dev/mapper/luks-pool0-e0bdc76d-d4c6-4273-8ac5-21bbc768134c].corruption_errs 0
[/dev/mapper/luks-pool0-e0bdc76d-d4c6-4273-8ac5-21bbc768134c].generation_errs 0
[/dev/mapper/luks-pool0-193fa31b-5399-41ab-90dc-495143b4a5f1].write_io_errs 0
[/dev/mapper/luks-pool0-193fa31b-5399-41ab-90dc-495143b4a5f1].read_io_errs 0
[/dev/mapper/luks-pool0-193fa31b-5399-41ab-90dc-495143b4a5f1].flush_io_errs 0
[/dev/mapper/luks-pool0-193fa31b-5399-41ab-90dc-495143b4a5f1].corruption_errs 0
[/dev/mapper/luks-pool0-193fa31b-5399-41ab-90dc-495143b4a5f1].generation_errs 0
[/dev/mapper/luks-pool0-2781f419-ce60-4d5c-b584-147865a991a9].write_io_errs 0
[/dev/mapper/luks-pool0-2781f419-ce60-4d5c-b584-147865a991a9].read_io_errs 0
[/dev/mapper/luks-pool0-2781f419-ce60-4d5c-b584-147865a991a9].flush_io_errs 0
[/dev/mapper/luks-pool0-2781f419-ce60-4d5c-b584-147865a991a9].corruption_errs 0
[/dev/mapper/luks-pool0-2781f419-ce60-4d5c-b584-147865a991a9].generation_errs 0
[/dev/mapper/luks-pool0-1c9a755a-2a81-4a2f-9bd7-6b6d7caaa523].write_io_errs 0
[/dev/mapper/luks-pool0-1c9a755a-2a81-4a2f-9bd7-6b6d7caaa523].read_io_errs 0
[/dev/mapper/luks-pool0-1c9a755a-2a81-4a2f-9bd7-6b6d7caaa523].flush_io_errs 0
[/dev/mapper/luks-pool0-1c9a755a-2a81-4a2f-9bd7-6b6d7caaa523].corruption_errs 0
[/dev/mapper/luks-pool0-1c9a755a-2a81-4a2f-9bd7-6b6d7caaa523].generation_errs 0
[/dev/mapper/luks-pool0-0ccc4298-d949-4c58-bd19-804f06d18e8a].write_io_errs 0
[/dev/mapper/luks-pool0-0ccc4298-d949-4c58-bd19-804f06d18e8a].read_io_errs 0
[/dev/mapper/luks-pool0-0ccc4298-d949-4c58-bd19-804f06d18e8a].flush_io_errs 0
[/dev/mapper/luks-pool0-0ccc4298-d949-4c58-bd19-804f06d18e8a].corruption_errs 0
[/dev/mapper/luks-pool0-0ccc4298-d949-4c58-bd19-804f06d18e8a].generation_errs 0
[/dev/mapper/luks-pool0-058dd176-2958-4c99-a7e6-4cc3b0ed7875].write_io_errs 0
[/dev/mapper/luks-pool0-058dd176-2958-4c99-a7e6-4cc3b0ed7875].read_io_errs 0
[/dev/mapper/luks-pool0-058dd176-2958-4c99-a7e6-4cc3b0ed7875].flush_io_errs 0
[/dev/mapper/luks-pool0-058dd176-2958-4c99-a7e6-4cc3b0ed7875].corruption_errs 0
[/dev/mapper/luks-pool0-058dd176-2958-4c99-a7e6-4cc3b0ed7875].generation_errs 0
Pool 1
Overall:
Device size: 7.28TiB
Device allocated: 722.02GiB
Device unallocated: 6.57TiB
Device missing: 0.00B
Device slack: 0.00B
Used: 692.25GiB
Free (estimated): 3.30TiB (min: 3.30TiB)
Free (statfs, df): 2.56TiB
Data ratio: 2.00
Metadata ratio: 2.00
Global reserve: 512.00MiB (used: 0.00B)
Multiple profiles: no
Data,RAID1: Size:357.00GiB, Used:343.92GiB (96.34%)
/dev/dm-2 60.00GiB
/dev/dm-14 60.00GiB
/dev/dm-13 60.00GiB
/dev/dm-1 60.00GiB
/dev/dm-12 357.00GiB
/dev/dm-7 59.00GiB
/dev/dm-3 58.00GiB
Metadata,RAID1: Size:4.00GiB, Used:2.21GiB (55.25%)
/dev/dm-2 1.00GiB
/dev/dm-14 1.00GiB
/dev/dm-12 3.00GiB
/dev/dm-7 1.00GiB
/dev/dm-3 2.00GiB
System,RAID1: Size:8.00MiB, Used:80.00KiB (0.98%)
/dev/dm-7 8.00MiB
/dev/dm-3 8.00MiB
Unallocated:
/dev/dm-2 870.50GiB
/dev/dm-14 870.50GiB
/dev/dm-13 871.50GiB
/dev/dm-1 871.50GiB
/dev/dm-12 1.47TiB
/dev/dm-7 871.49GiB
/dev/dm-3 871.49GiB
[/dev/mapper/luks-pool1-e81bbc30-30e8-4deb-a0bf-b475cc157e54].write_io_errs 0
[/dev/mapper/luks-pool1-e81bbc30-30e8-4deb-a0bf-b475cc157e54].read_io_errs 0
[/dev/mapper/luks-pool1-e81bbc30-30e8-4deb-a0bf-b475cc157e54].flush_io_errs 0
[/dev/mapper/luks-pool1-e81bbc30-30e8-4deb-a0bf-b475cc157e54].corruption_errs 0
[/dev/mapper/luks-pool1-e81bbc30-30e8-4deb-a0bf-b475cc157e54].generation_errs 0
[/dev/mapper/luks-pool1-1efde407-1875-4f41-a25d-2b1d001003fb].write_io_errs 0
[/dev/mapper/luks-pool1-1efde407-1875-4f41-a25d-2b1d001003fb].read_io_errs 0
[/dev/mapper/luks-pool1-1efde407-1875-4f41-a25d-2b1d001003fb].flush_io_errs 0
[/dev/mapper/luks-pool1-1efde407-1875-4f41-a25d-2b1d001003fb].corruption_errs 0
[/dev/mapper/luks-pool1-1efde407-1875-4f41-a25d-2b1d001003fb].generation_errs 0
[/dev/mapper/luks-pool1-1012ac86-2be3-4146-912d-17f2df2b9383].write_io_errs 0
[/dev/mapper/luks-pool1-1012ac86-2be3-4146-912d-17f2df2b9383].read_io_errs 0
[/dev/mapper/luks-pool1-1012ac86-2be3-4146-912d-17f2df2b9383].flush_io_errs 0
[/dev/mapper/luks-pool1-1012ac86-2be3-4146-912d-17f2df2b9383].corruption_errs 0
[/dev/mapper/luks-pool1-1012ac86-2be3-4146-912d-17f2df2b9383].generation_errs 0
[/dev/mapper/luks-pool1-16625cef-acf0-40f3-badc-57c7f8cd9750].write_io_errs 0
[/dev/mapper/luks-pool1-16625cef-acf0-40f3-badc-57c7f8cd9750].read_io_errs 0
[/dev/mapper/luks-pool1-16625cef-acf0-40f3-badc-57c7f8cd9750].flush_io_errs 0
[/dev/mapper/luks-pool1-16625cef-acf0-40f3-badc-57c7f8cd9750].corruption_errs 0
[/dev/mapper/luks-pool1-16625cef-acf0-40f3-badc-57c7f8cd9750].generation_errs 0
[/dev/mapper/luks-pool1-d03204fe-3121-4e20-9396-3fa73b836dbe].write_io_errs 0
[/dev/mapper/luks-pool1-d03204fe-3121-4e20-9396-3fa73b836dbe].read_io_errs 0
[/dev/mapper/luks-pool1-d03204fe-3121-4e20-9396-3fa73b836dbe].flush_io_errs 0
[/dev/mapper/luks-pool1-d03204fe-3121-4e20-9396-3fa73b836dbe].corruption_errs 0
[/dev/mapper/luks-pool1-d03204fe-3121-4e20-9396-3fa73b836dbe].generation_errs 0
[/dev/mapper/luks-pool1-ca9e67e6-f652-4a54-851e-8e5d785554d0].write_io_errs 0
[/dev/mapper/luks-pool1-ca9e67e6-f652-4a54-851e-8e5d785554d0].read_io_errs 0
[/dev/mapper/luks-pool1-ca9e67e6-f652-4a54-851e-8e5d785554d0].flush_io_errs 0
[/dev/mapper/luks-pool1-ca9e67e6-f652-4a54-851e-8e5d785554d0].corruption_errs 0
[/dev/mapper/luks-pool1-ca9e67e6-f652-4a54-851e-8e5d785554d0].generation_errs 0
[/dev/mapper/luks-pool1-08ddca5a-06ff-4b2b-a272-3c95c68142b3].write_io_errs 0
[/dev/mapper/luks-pool1-08ddca5a-06ff-4b2b-a272-3c95c68142b3].read_io_errs 0
[/dev/mapper/luks-pool1-08ddca5a-06ff-4b2b-a272-3c95c68142b3].flush_io_errs 0
[/dev/mapper/luks-pool1-08ddca5a-06ff-4b2b-a272-3c95c68142b3].corruption_errs 0
[/dev/mapper/luks-pool1-08ddca5a-06ff-4b2b-a272-3c95c68142b3].generation_errs 0
Backup 0
Overall:
Device size: 16.37TiB
Device allocated: 14.42TiB
Device unallocated: 1.95TiB
Device missing: 0.00B
Device slack: 0.00B
Used: 14.37TiB
Free (estimated): 2.00TiB (min: 1.03TiB)
Free (statfs, df): 2.00TiB
Data ratio: 1.00
Metadata ratio: 2.00
Global reserve: 512.00MiB (used: 0.00B)
Multiple profiles: no
Data,single: Size:14.38TiB, Used:14.33TiB (99.64%)
/dev/mapper/luks-backup0-4ade71f9-e9fe-4a9c-84ea-12fc716626c1 14.38TiB
Metadata,DUP: Size:22.00GiB, Used:21.01GiB (95.51%)
/dev/mapper/luks-backup0-4ade71f9-e9fe-4a9c-84ea-12fc716626c1 44.00GiB
System,DUP: Size:8.00MiB, Used:1.52MiB (18.95%)
/dev/mapper/luks-backup0-4ade71f9-e9fe-4a9c-84ea-12fc716626c1 16.00MiB
Unallocated:
/dev/mapper/luks-backup0-4ade71f9-e9fe-4a9c-84ea-12fc716626c1 1.95TiB
[/dev/mapper/luks-backup0-4ade71f9-e9fe-4a9c-84ea-12fc716626c1].write_io_errs 0
[/dev/mapper/luks-backup0-4ade71f9-e9fe-4a9c-84ea-12fc716626c1].read_io_errs 0
[/dev/mapper/luks-backup0-4ade71f9-e9fe-4a9c-84ea-12fc716626c1].flush_io_errs 0
[/dev/mapper/luks-backup0-4ade71f9-e9fe-4a9c-84ea-12fc716626c1].corruption_errs 0
[/dev/mapper/luks-backup0-4ade71f9-e9fe-4a9c-84ea-12fc716626c1].generation_errs 0

View File

@@ -1,6 +0,0 @@
def main():
print("Hello from llm-server-monitor!")
if __name__ == "__main__":
main()