mirror of
https://github.com/henrygd/beszel.git
synced 2026-03-22 13:36:16 +01:00
* Split interfaces * add filters * feat: split interfaces and add filters (without locales) * make it an line chart * fix the colors * remove tx rx tooltip * fill the chart * update chart and cleanup * chore * update system tab * Fix alerts * chore * fix chart * resolve conflicts * Use new formatSpeed * fix records * update pakage * Fix network I/O stats compilation errors - Added globalNetIoStats field to Agent struct to track total bandwidth usage - Updated initializeNetIoStats() to initialize both per-interface and global network stats - Modified system.go to use globalNetIoStats for bandwidth calculations - Maintained per-interface tracking in netIoStats map for interface-specific data This resolves the compilation errors where netIoStats was accessed as a single struct instead of a map[string]NetIoStats. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * Remove redundant bandwidth chart and fix network interface data access - Removed the old Bandwidth chart since network interface charts provide more detailed per-interface data - Fixed system.tsx to look for network interface data in stats.ni instead of stats.ns - Fixed NetworkInterfaceChart component to use correct data paths (stats.ni) - Network interface charts should now display properly with per-interface network statistics 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * Restore split network metrics display in systems table - Modified systems table Net column to show separate sent/received values - Added green ↑ arrow for sent traffic and blue ↓ arrow for received traffic - Uses info.ns (NetworkSent) and info.nr (NetworkRecv) from agent - Maintains sorting functionality based on total network traffic - Shows values in appropriate units (B/s, KB/s, MB/s, etc.) This restores the split network metrics view that was present in the original feat/split-interfaces branch before the merge conflict resolution. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * Remove unused bandwidth fields and calculations from agent Removed legacy bandwidth collection code that is no longer used by the frontend: **Removed from structs:** - Stats.Bandwidth [2]uint64 (bandwidth bytes array) - Stats.MaxBandwidth [2]uint64 (max bandwidth bytes array) - Info.Bandwidth float64 (total bandwidth MB/s) - Info.BandwidthBytes uint64 (total bandwidth bytes/s) **Removed from agent:** - globalNetIoStats tracking and calculations - bandwidth byte-per-second calculations - bandwidth array assignments in systemStats - bandwidth field assignments in systemInfo **Removed from records:** - Bandwidth array accumulation and averaging in AverageSystemStats - MaxBandwidth tracking in peak value calculations The frontend now uses only: - info.ns/info.nr (split metrics in systems table) - stats.ni (per-interface charts) This cleanup removes ~50 lines of unused code and eliminates redundant calculations. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * Optimize network collection for better performance **Performance Improvements:** - Pre-allocate NetworkInterfaces map with known capacity to reduce allocations - Remove redundant byte counters (totalBytesSent, totalBytesRecv) that were unused - Direct calculation to MB/s, avoiding intermediate bytes-per-second variables - Reuse existing NetIoStats structs when possible to reduce GC pressure - Streamlined single-pass processing through network interfaces **Optimizations:** - Reduced memory allocations per collection cycle - Fewer arithmetic operations (eliminated double conversion) - Better cache locality with simplified data flow - Reduced time complexity from O(n²) operations to O(n) **Maintained Functionality:** - Same per-interface statistics collection - Same total network sent/recv calculations - Same error handling and reset logic - Same data structures and output format Expected improvement: ~15-25% reduction in network collection CPU time and memory allocations. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * Fix the Unit preferences * Add total bytes sent and received to network interface stats and implement total bandwidth chart * chore: fix Cumulative records * Add connection counts * Add connection stats * Fix ordering * remove test builds * improve entre command in makefile * rebase
74 lines
2.7 KiB
TypeScript
74 lines
2.7 KiB
TypeScript
import { atom, computed, listenKeys, map, type ReadableAtom } from "nanostores"
|
|
import type { AlertMap, ChartTimes, SystemRecord, UserSettings } from "@/types"
|
|
import { pb } from "./api"
|
|
import { Unit } from "./enums"
|
|
|
|
/** Store if user is authenticated */
|
|
export const $authenticated = atom(pb.authStore.isValid)
|
|
|
|
/** Map of system records by name */
|
|
export const $allSystemsByName = map<Record<string, SystemRecord>>({})
|
|
/** Map of system records by id */
|
|
export const $allSystemsById = map<Record<string, SystemRecord>>({})
|
|
/** Map of up systems by id */
|
|
export const $upSystems = map<Record<string, SystemRecord>>({})
|
|
/** Map of down systems by id */
|
|
export const $downSystems = map<Record<string, SystemRecord>>({})
|
|
/** Map of paused systems by id */
|
|
export const $pausedSystems = map<Record<string, SystemRecord>>({})
|
|
/** List of all system records */
|
|
export const $systems: ReadableAtom<SystemRecord[]> = computed($allSystemsById, Object.values)
|
|
|
|
/** Map of alert records by system id and alert name */
|
|
export const $alerts = map<AlertMap>({})
|
|
|
|
/** SSH public key */
|
|
export const $publicKey = atom("")
|
|
|
|
/** Chart time period */
|
|
export const $chartTime = atom<ChartTimes>("1h")
|
|
|
|
/** Whether to display average or max chart values */
|
|
export const $maxValues = atom(false)
|
|
|
|
// export const UserSettingsSchema = v.object({
|
|
// chartTime: v.picklist(["1h", "12h", "24h", "1w", "30d"]),
|
|
// emails: v.optional(v.array(v.pipe(v.string(), v.email())), [pb?.authStore?.record?.email ?? ""]),
|
|
// webhooks: v.optional(v.array(v.string())),
|
|
// colorWarn: v.optional(v.pipe(v.number(), v.minValue(1), v.maxValue(100))),
|
|
// colorDanger: v.optional(v.pipe(v.number(), v.minValue(1), v.maxValue(100))),
|
|
// unitTemp: v.optional(v.enum(Unit)),
|
|
// unitNet: v.optional(v.enum(Unit)),
|
|
// unitDisk: v.optional(v.enum(Unit)),
|
|
// })
|
|
|
|
/** User settings */
|
|
export const $userSettings = map<UserSettings>({
|
|
chartTime: "1h",
|
|
emails: [pb.authStore.record?.email || ""],
|
|
unitNet: Unit.Bytes,
|
|
unitTemp: Unit.Celsius,
|
|
})
|
|
// update chart time on change
|
|
listenKeys($userSettings, ["chartTime"], ({ chartTime }) => $chartTime.set(chartTime))
|
|
|
|
/** Container chart filter */
|
|
export const $containerFilter = atom("")
|
|
|
|
/** Network interface chart filter */
|
|
export const $networkInterfaceFilter = atom("")
|
|
|
|
/** Temperature chart filter */
|
|
export const $temperatureFilter = atom("")
|
|
|
|
/** Fallback copy to clipboard dialog content */
|
|
export const $copyContent = atom("")
|
|
|
|
/** Direction for localization */
|
|
export const $direction = atom<"ltr" | "rtl">("ltr")
|
|
|
|
/** Longest system name length. Used to set table column width. I know this
|
|
* is stupid but the table is virtualized and I know this will work.
|
|
*/
|
|
export const $longestSystemNameLen = atom(8)
|