- 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>
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>
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>
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>
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>
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>
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>
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>
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>
- 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>