Commit Graph

20 Commits

Author SHA1 Message Date
c7ff9f162c new version 2026-04-20 09:00:42 +02:00
a2358ed0c3 Update CLAUDE.md: OID col 7, visible name formula, template group permissions
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-17 10:58:27 +02:00
2034f275d0 Improve template-not-found diagnostics
When template.get returns nothing, make a second call to list up to 5
visible templates so the log shows whether the API token can see any
templates at all. This pinpoints whether the issue is a name mismatch
or a template-group permission gap.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-17 10:54:29 +02:00
3889bc971a Fix template lookup and surface template-not-found errors to web UI
- get_template_id: switch from filter to search so the API token user
  can find templates they have read access to (filter requires exact
  visibility that search does not)
- When the template is not found, write the warning to the DB log so
  it appears in the web dashboard, not only in Docker container logs

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-17 10:52:10 +02:00
adadf9de76 Fix: per-host error handling in sync loop
A single host failure (e.g. macro already exists, permission error)
was aborting the entire sync loop for all 310 hosts. Each host is
now wrapped in try/except — failures are logged as warnings and the
loop continues. Also logs when template is linked to an existing host.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-17 10:47:18 +02:00
0a992615ae Fix template UUIDs: use 32-char hex without hyphens (Zabbix format)
Zabbix expects UUIDv4 as 32 hex characters without hyphens,
not the standard hyphenated UUID format.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-17 10:43:37 +02:00
79b4266d2b Fix template: move triggers inside items (Zabbix 7.x format)
In Zabbix 7.x, triggers must be nested within their parent item
rather than defined at the template level.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-17 10:41:52 +02:00
e16b542d1b Add Zabbix template with offline and last-seen triggers
- zabbix_template.yaml: importable template "Yodmon Yodeck Player"
  - 5 SNMP items using {$YODECK_ID} host macro for per-host OIDs
  - Trigger: offline warning after 30 minutes (yodeck.online < 1)
  - Trigger: last seen > 4 hours (now() - yodeck.last_seen_ts > 14400)
- snmp/pass_persist.py: add col 7 — last_seen as Unix timestamp
- app/zabbix.py: link hosts to template, upsert {$YODECK_ID} macro;
  existing hosts get template linked on next sync automatically
- app/config.py: add ZABBIX_TEMPLATE setting

Import zabbix_template.yaml once via Zabbix UI, then redeploy.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-17 10:39:48 +02:00
c35850dc3d Change visible name format to QRS-{site}MB-{screen}
New format: QRS- + first 4 chars + MB- + remainder
Example: AMS-COF1 -> QRS-AMS-MB-COF1

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-17 10:32:21 +02:00
1c95f9a097 Update CLAUDE.md with current state
- Correct web UI port (8088 not 8080 in Docker)
- Add ZABBIX_API_TOKEN to config table
- Document hostname format (yodeck- not yodeck#)
- Document visible name format (QRS- prefix)
- Add Zabbix 7.x setup requirements (group permissions, admin role)
- Document Bearer token auth approach

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-17 10:27:11 +02:00
5db8beb847 Replace # with - in Zabbix host names (Zabbix 7.x compatibility)
Zabbix 7.x rejects '#' in host names. Changed hostname format from
'yodeck#<id>' to 'yodeck-<id>' (e.g. yodeck-54239).
Updated SNMP col 1 value and docs for consistency.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-17 10:21:05 +02:00
fc6a0c1605 Improve hostgroup permission error message
When the API token user cannot see the host group (returns empty from
hostgroup.get), the code fell through to hostgroup.create and gave a
confusing permissions error. Now catches this and explains exactly what
to fix in Zabbix (User groups -> Permissions).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-17 10:16:49 +02:00
b53f6c9aed Fix Zabbix API token auth for Zabbix 6.4+
Zabbix 6.4+ rejects API tokens in the JSON-RPC "auth" field.
Tokens must now be sent as "Authorization: Bearer <token>" HTTP header.
User/password sessions still use the payload auth field as before.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-17 10:11:53 +02:00
525158e9c6 Update docker-compose.yml 2026-04-17 10:10:02 +02:00
2695379589 Add Zabbix API token authentication support
ZABBIX_API_TOKEN env var can now be used instead of ZABBIX_USER +
ZABBIX_PASSWORD. When set, the token is passed directly as the auth
value in JSON-RPC calls and no login/logout session is created.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-17 10:07:47 +02:00
7d18f20bf1 Update docker-compose.yml 2026-04-17 10:05:18 +02:00
38357725c4 Prefix Zabbix visible name with QRS-
Zabbix host visible name is now "QRS-<yodeck_name>" (e.g. QRS-AMS-COF1).
Existing hosts will be renamed on the next Yodeck poll.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-17 10:03:50 +02:00
779126327c Update docker-compose.yml 2026-04-17 10:01:51 +02:00
b5afb79021 Update docker-compose.yml 2026-04-17 09:36:34 +02:00
9fc3e97546 Initial commit: Yodmon Yodeck→Zabbix bridge
- Yodeck API poller (every 10 min, paginated, 310 players)
- SQLite persistence (players + activity logs)
- SNMP v2c agent via net-snmp pass_persist
- Zabbix API auto host creation/update (6.0+)
- Flask web dashboard with live player status and log
- Docker deployment with persistent volume
- dev_server.py for local testing without Docker

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-17 09:31:00 +02:00