Repository navigation
Releases
v1.0.9
v1.0.8
New per-embed toggles: hide_variables / hide_time_picker / hide_links for whole-dashboard mode. See CHANGELOG.
v1.0.7
Hotfix: forward kiosk_prefix to whole-dashboard iframe template. See CHANGELOG for details.
v1.0.6
Added
-
New setting
kiosk_mode(global default'', overridable per-embed)
controls the value passed to Grafana's?kiosk=URL param in
whole-dashboard mode.Value Resulting URL fragment Grafana effect ''(default)?kioskHides top nav + hamburger, keeps dashboard's own subnav. 'tv'?kiosk=tvLegacy alias for the same hide-top-nav behaviour. None/False(omitted) Embed shows full Grafana chrome (breadcrumb, search, etc.). other string ?kiosk=<value>Forwarded verbatim — for future Grafana kiosk values.
Changed
- Whole-dashboard mode now defaults to
?kiosk(bare) instead of
?kiosk=tv. In Grafana 13 the two values are documented as
equivalent but?kiosk=tvstill rendered the top breadcrumb +
hamburger toggle inside the embedded iframe, while?kiosk(bare,
boolean true) hides them. The new default produces a much cleaner
embed. Existing setups that prefer the v1.0.5 behaviour can opt
back in with'kiosk_mode': 'tv'.
Install
pip install git+https://github.com/AlphaCompute/netbox-grafana-embed.git@v1.0.6
v1.0.5
Added
-
New per-embed option
whole_dashboard: Truerenders the configured
dashboard as a single iframe (/d/<uid>/<slug>?kiosk=tv&var-...)
instead of oned-soloiframe per panel ID. One Grafana boot and
one batch of Prometheus queries instead of 2 ×len(stat_panels + timeseries_panels), at the cost of giving up per-panel height
control and the stat-tile bootstrap row — Grafana lays the panels
out using the dashboard's own grid. -
New setting
whole_dashboard_height_px(global default800,
overridable per-embed). Controls the iframe height in whole-
dashboard mode. Default is short enough to not dominate the device
page; the iframe scrolls internally for taller dashboards.
In whole-dashboard mode stat_panels and timeseries_panels are
ignored. The "Full dashboard" header button and the optional footer
behave as before. theme_sync still works (renders dual light + dark
iframes).
Install
pip install git+https://github.com/AlphaCompute/netbox-grafana-embed.git@v1.0.5
v1.0.4
Changed
__version__innetbox_grafana_embed/__init__.pyis now resolved
at import time from the installed package's metadata via
importlib.metadata.version('netbox-grafana-embed'), with a
'0.0.0+unknown'fallback for source-checkout use.PluginConfig.version
continues to wire to__version__, so/api/status/shows both
installed_apps[…]andplugins[…]correctly without anyone having
to remember to bump a hardcoded string.
pyproject.toml's version field becomes the single source of truth
— future releases only need to bump it in one place.
Install
pip install git+https://github.com/AlphaCompute/netbox-grafana-embed.git@v1.0.4
v1.0.3
Fixed
-
__version__innetbox_grafana_embed/__init__.pywas still pinned
to'1.0.0'whilepyproject.tomlhad been bumped to1.0.2for
the v1.0.1 and v1.0.2 releases. NetBox reports both
/api/status/'splugins[…](viaPluginConfig.version, wired to
__version__) andinstalled_apps[…](via
getattr(app_module, '__version__')) from the plugin module's
__version__attribute — pyproject'sversionis only used by pip
METADATA and is not surfaced by NetBox. So upgrading from v1.0.0 →
v1.0.2 left/api/status/still reporting1.0.0even though the
iframe-URL fix from v1.0.2 was live in the container.This release just bumps
__version__and pyproject'sversionto
1.0.3so the two stay in sync. No code change.
Install
pip install git+https://github.com/AlphaCompute/netbox-grafana-embed.git@v1.0.3
v1.0.2
Fixed
-
Malformed iframe URLs: every embedded Grafana iframe was loading a
URL missing both?andpanelId=N, e.g.
/d-solo/<uid>/<slug>&var-device=.... Grafana responded with a 404
whose defaultX-Frame-Options: denymade the browser show the
iframe as<host> refused to connect, masquerading as a Grafana
embedding/CSP problem.Root cause: in
_iframe_pair.html,"?panelId="|add:panel_id|stringformat:"s"
evaluated asstringformat(add("?panelId=", 3), "s"). Django'sadd
filter, given a string and an int, fails both theint()+int()and
str+strbranches and returns the empty string, deleting the whole
?panelId=Nprefix from the query string. Coercepanel_idto a
string before feeding it intoadd. -
URL-encode
device_valueandcomponent_valuein the iframesrc
so Device/component names containing spaces or&produce valid URLs.
Install
pip install git+https://github.com/AlphaCompute/netbox-grafana-embed.git@v1.0.2
v1.0.1
Fixed
- Render error on
dcim.devicepages whenstat_panelsis configured.
The device template tried to compute the Bootstrap column width via
{{ 12|divisibleby:block.stat_panels|yesno:'4,4' }}, which raised
TypeError: int() argument must be a string, a bytes-like object or a real number, not 'list'. Column width is now computed in Python
(mirroring the existing InventoryItem behaviour) and the template
reads it asblock.stat_col_md. (#1)
Install
pip install git+https://github.com/AlphaCompute/netbox-grafana-embed.git@v1.0.1
v1.0.0 — initial public release
Generic NetBox plugin embedding Grafana panels on dcim.device and dcim.inventoryitem pages.
See CHANGELOG.md for the full feature list.
Install
pip install git+https://github.com/AlphaCompute/netbox-grafana-embed.git@v1.0.0Highlights
- Configurable through
PLUGINS_CONFIG['netbox_grafana_embed']— no vendor names hard-coded - Theme-synced (NetBox dark ↔ Grafana dark), instant switch via dual iframe
- Multiple device dashboards per page, per-role inventory item dashboards
- Optional gates (custom-field checks), flexible variable mapping