<feed xmlns='http://www.w3.org/2005/Atom'>
<title>luci/modules/luci-mod-dashboard/htdocs/luci-static/resources, branch master</title>
<subtitle>Lua Configuration Interface (mirror)</subtitle>
<id>https://git.openwrt.org/project/luci/atom?h=master</id>
<link rel='self' href='https://git.openwrt.org/project/luci/atom?h=master'/>
<link rel='alternate' type='text/html' href='https://git.openwrt.org/project/luci/'/>
<updated>2026-11-07T17:16:16Z</updated>
<entry>
<title>luci-mod-dashboard: organize chart and sensor settings</title>
<updated>2026-11-07T17:16:16Z</updated>
<author>
<name>Eamon Xiong</name>
</author>
<published>2026-11-03T08:27:39Z</published>
<link rel='alternate' type='text/html' href='https://git.openwrt.org/project/luci/commit/?id=0ad9563ee0579a27962a2fb577908815f09ebed7'/>
<id>urn:sha1:0ad9563ee0579a27962a2fb577908815f09ebed7</id>
<content type='text'>
Rename Layout to Settings and display status cards, live charts and
detail tabs in full-width list rows. Keep the existing add, remove and
drag-to-reorder interactions.

Put sensor selection inside the expandable Temperature history item.
Each checkbox shows the same colour and short name as its chart legend,
with the original sensor name available on hover. Select up to eight
sensors initially and let users select more when needed.

Preserve unsaved sensor choices when the chart is removed and added
again, and retain saved choices after applying settings and reloading.

Centralize temperature component labels, recognition rules and CPU
selection priorities in the existing collector. Recognize LPASS, DDR
and additional thermal zones, and share channel names across chart
legends, the Component column and sensor settings.

Register temperature RPC methods through the existing dashboard service
and keep sampling state in the temperature module, removing the
separate RPC plugin while preserving the public interface.

Keep an input callback on temperature collection tasks so ucode versions
with conditional pipe cleanup release descriptors after every sample.
This prevents long-running collectors from exhausting rpcd file handles.

Signed-off-by: Eamon Xiong &lt;eamonxiong@gmail.com&gt;
</content>
</entry>
<entry>
<title>luci-mod-dashboard: add temperature monitoring</title>
<updated>2026-11-07T17:16:16Z</updated>
<author>
<name>Eamon Xiong</name>
</author>
<published>2026-11-03T08:27:39Z</published>
<link rel='alternate' type='text/html' href='https://git.openwrt.org/project/luci/commit/?id=db359f6ad2aeb51cea3b83bbbe15f338ca4958ba'/>
<id>urn:sha1:db359f6ad2aeb51cea3b83bbbe15f338ca4958ba</id>
<content type='text'>
Show processor temperature and component summaries in a status card.
Add a five-minute temperature history chart and a detail tab listing the
individual sensors and their original names.

Keep recent temperature history available when navigating away from the
dashboard or reloading the page. Refresh readings every ten seconds, and
leave gaps for unavailable sensors while healthy sensors keep updating.

Signed-off-by: Eamon Xiong &lt;eamonxiong@gmail.com&gt;
</content>
</entry>
<entry>
<title>luci-mod-dashboard: improve live chart display and scrolling</title>
<updated>2026-11-07T17:16:16Z</updated>
<author>
<name>Eamon Xiong</name>
</author>
<published>2026-11-03T08:25:26Z</published>
<link rel='alternate' type='text/html' href='https://git.openwrt.org/project/luci/commit/?id=b95bf421b172616aa3b824f1e08a6bd1599b980c'/>
<id>urn:sha1:b95bf421b172616aa3b824f1e08a6bd1599b980c</id>
<content type='text'>
Keep the page at the reader's current position while the WAN traffic and
system load charts refresh. Use consistent headings, subtitle spacing
and legends across the live charts.

Signed-off-by: Eamon Xiong &lt;eamonxiong@gmail.com&gt;
</content>
</entry>
<entry>
<title>luci-mod-dashboard: fix WAN traffic reporting and chart styling</title>
<updated>2026-10-31T09:15:08Z</updated>
<author>
<name>Eamon Xiong</name>
</author>
<published>2026-09-28T09:28:20Z</published>
<link rel='alternate' type='text/html' href='https://git.openwrt.org/project/luci/commit/?id=c529296696945db23b19c8e40c490f4d7e9125fe'/>
<id>urn:sha1:c529296696945db23b19c8e40c490f4d7e9125fe</id>
<content type='text'>
The WAN chart can miss traffic when IPv4 and IPv6 use different
logical devices over the same uplink.

Sample the carrier of a WAN with a main-table default route and avoid
misleading rates across source changes or invalid samples.

Use consistent rate units within the WAN chart, align download/upload
labels and colors across WAN and wireless charts, and correct wireless
distribution card spacing in Footstrap.

Signed-off-by: Eamon Xiong &lt;eamonxiong@gmail.com&gt;
</content>
</entry>
<entry>
<title>luci-mod-dashboard: preserve scroll position during polling</title>
<updated>2026-09-27T11:45:05Z</updated>
<author>
<name>Eamon Xiong</name>
</author>
<published>2026-09-25T15:07:39Z</published>
<link rel='alternate' type='text/html' href='https://git.openwrt.org/project/luci/commit/?id=1958e9813502e0116471223776e95d9cdcd22332'/>
<id>urn:sha1:1958e9813502e0116471223776e95d9cdcd22332</id>
<content type='text'>
Rebuilding the dashboard on every poll discards DOM nodes, collapsing
document height and resetting vertical scroll position while reading tab
tables.

Keep persistent container shells in the root view and update table rows
in place following LuCI's table update pattern (cbi_update_table).
Preserve active tab selection, restore horizontal chart scroll offsets,
and isolate unsaved layout form edits across background poll ticks.

Signed-off-by: Eamon Xiong &lt;eamonxiong@gmail.com&gt;
</content>
</entry>
<entry>
<title>luci-mod-dashboard: show wireless band in Wireless detail tab</title>
<updated>2026-09-27T11:43:25Z</updated>
<author>
<name>Eamon Xiong</name>
</author>
<published>2026-09-25T15:02:59Z</published>
<link rel='alternate' type='text/html' href='https://git.openwrt.org/project/luci/commit/?id=93db8b2628dd0909d1800e3fc44c8697f73fe530'/>
<id>urn:sha1:93db8b2628dd0909d1800e3fc44c8697f73fe530</id>
<content type='text'>
Add a Band column to the client table in the Wireless detail tab.
Map existing interface runtime frequencies to Sub-1, 2.4, 5, 6 and
60 GHz bands following Linux kernel wireless subsystem boundaries
(net/wireless/util.c and NL80211_BAND_S1GHZ), using a 2.312 GHz lower
bound for the 2.4 GHz band to accommodate extended channels (down to
channel -19 in ath9k/ath5k drivers), and displaying a dash when
unavailable.

Combine upload and download totals into one column to retain seven
columns.

Signed-off-by: Eamon Xiong &lt;eamonxiong@gmail.com&gt;
</content>
</entry>
<entry>
<title>luci-mod-dashboard: show IP addresses for wireless clients</title>
<updated>2026-09-23T15:52:08Z</updated>
<author>
<name>Eamon Xiong</name>
</author>
<published>2026-09-22T11:58:20Z</published>
<link rel='alternate' type='text/html' href='https://git.openwrt.org/project/luci/commit/?id=f4f91aee257bab4eb9c6b7de6160cea294217956'/>
<id>urn:sha1:f4f91aee257bab4eb9c6b7de6160cea294217956</id>
<content type='text'>
Add an IP Address column to the wireless client table so users can
identify devices alongside their traffic without checking DHCP leases.

Match known host addresses by the client MAC and show at most one IPv4
and one IPv6 address, taking the first of each from the host hints after
excluding IPv6 link-local addresses. Show a dash when no address is known
and allow long addresses to wrap on narrow screens.

Signed-off-by: Eamon Xiong &lt;eamonxiong@gmail.com&gt;

</content>
</entry>
<entry>
<title>luci-mod-dashboard: add live charts and a configurable layout</title>
<updated>2026-09-23T15:52:08Z</updated>
<author>
<name>Eamon Xiong</name>
</author>
<published>2026-09-20T16:18:34Z</published>
<link rel='alternate' type='text/html' href='https://git.openwrt.org/project/luci/commit/?id=89764f4a69b8efa3fd3435a044c9c024d1109575'/>
<id>urn:sha1:89764f4a69b8efa3fd3435a044c9c024d1109575</id>
<content type='text'>
Add configurable dashboard cards and tabs, along with five-minute
WAN traffic, CPU and memory history charts. This includes:

- status cards for CPU, memory, load and uptime next to Internet, all
  of one shape: a title, a value and one line of text;
- charts of the WAN traffic and of CPU and memory usage over the last
  five minutes;
- a Layout tab to choose which cards, charts and tabs are shown and in
  what order, kept in UCI as dashboard.layout;
- the time a wireless client has been connected, in the tooltips of
  the wireless client data usage chart and in the client table;
- the IPv4 and the IPv6 address of the uplink on the Internet card,
  one line each, and the IPv6 address in the Internet tab.

The samples behind the charts are taken on the router by a small rpcd
ucode plugin, luci.dashboard, every five seconds whether or not
somebody is looking, so the charts are full whenever the page is
opened. It keeps the raw counters of /proc/stat, /proc/meminfo and
/proc/net/dev with the router's monotonic clock in a ring of 60
samples. The page fetches what is new since its last poll and takes
the differences, so a reload or a hidden tab leaves no gap and the
rates do not depend on the browser's timing. One pass takes 2 to 3 ms
on a quad-core IPQ60xx, about 0.07% of one core, and the ring about
360 kB of memory.

Includes declare their widgets with a slot, an order and whether they
show by default. An include with nothing on the page is not polled,
and polling stops while the page is hidden. The layout form is a
form.Map of three DynamicLists in the last tab; while it is open the
poll redraws the cards and charts only. ui.DynamicList greys out a
choice only once it is picked and always offers a custom value, so the
form marks the values a list starts out with and drops the custom
entry. All of it stays within luci-mod-dashboard.

Name the charts WAN traffic, Wireless client distribution and
Wireless client data usage to make their scope clear.

Remove &lt;code&gt; formatting for consistent data display in tab tables,
and add CPU usage breakdown tooltips to the total and per-core rows.

Signed-off-by: Eamon Xiong &lt;eamonxiong@gmail.com&gt;

</content>
</entry>
<entry>
<title>luci-mod-dashboard: fix low contrast of muted elements</title>
<updated>2026-09-20T14:07:54Z</updated>
<author>
<name>Eamon Xiong</name>
</author>
<published>2026-09-20T01:58:22Z</published>
<link rel='alternate' type='text/html' href='https://git.openwrt.org/project/luci/commit/?id=7c91cb278d7cf19878069a44d5d1992f65c4e315'/>
<id>urn:sha1:7c91cb278d7cf19878069a44d5d1992f65c4e315</id>
<content type='text'>
--dashboard-text-muted used --text-color-low, the step closest to the
page background, which left everything it paints hard to read: the
ifacebox property labels in the wireless tab, the chart axis ticks and
bar labels, the legends and the donut caption. They are all normal-size
text, so the token now takes --text-color-high and the muted look is
carried by size and weight instead of colour. The light fallback, used
by the themes that define no colour tokens, moves a step darker so it
stays legible on their grey card backgrounds as well.

The donut track and the no-signal bar are not text and must not follow
the token up to full emphasis. Both now use --dashboard-border, the
colour the chart gridlines already use.

Signed-off-by: Eamon Xiong &lt;eamonxiong@gmail.com&gt;
</content>
</entry>
<entry>
<title>luci-mod-dashboard: rework the layout using standard LuCI markup</title>
<updated>2026-09-17T20:01:15Z</updated>
<author>
<name>Eamon Xiong</name>
</author>
<published>2026-09-17T05:14:07Z</published>
<link rel='alternate' type='text/html' href='https://git.openwrt.org/project/luci/commit/?id=1a7ea5810c48239b5835c300dbab351ac5f08157'/>
<id>urn:sha1:1a7ea5810c48239b5835c300dbab351ac5f08157</id>
<content type='text'>
Give each kind of data the form that suits it: a row of KPI cards for
the values you check at a glance, a row of charts for the per-client
data, and a tabbed panel for the details you look up once. Every field
the page showed before is still there, only shaped differently.

Build it from the markup LuCI and the themes already provide, so the
page takes the look of whatever theme it runs in instead of carrying
one of its own: .cbi-section with h3 and .cbi-section-descr for the
cards and KPI tiles, .cbi-map with a .cbi-map-tabbed group for the tab
panel and ui.tabs for its menu, .table with a .table-titles row and
cbi-rowstyle stripes for the tables, .ifacebox for the wireless radios,
the theme's .label for badges, and code, em, small and strong for
values. ui.tabs also keeps the selected tab across the poll re-render.

The charts are the one part LuCI has no component for, so they are
drawn in a new lib/charts.js as plain DOM and SVG, with no dependency.
Their colours, and the few rules left in custom.css, read the generic
LuCI colour variables. Not every theme defines those, so each one now
falls back to both a light and a dark literal, keyed on the theme's
darkmode attribute and on prefers-color-scheme. custom.css used to
fall back to light literals only, which left the page dark grey on
dark under a theme that has a dark mode but not the variables.

The five icons are redrawn as one stroke set and applied as a CSS
mask, so they take their colour from the theme as well.

The wireless signal is plotted as the RSSI the driver reports, in dBm,
rather than a percentage derived from an assumed noise floor, and
clients are graded against -67 dBm. Byte counters are formatted with
%1024.2mB and the traffic axis labelled in KiB/MiB/GiB, matching how
the status pages present the same values.

No new data is collected and no new ACL entry or RPC method is needed.

Signed-off-by: Eamon Xiong &lt;eamonxiong@gmail.com&gt;
</content>
</entry>
</feed>
