Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@ each one covers:
| NZBGet | queue with reorder/priority/category, add NZB, speed limit, history |
| Glances | CPU/memory/network/disk monitoring |
| Speedtest Tracker | latest result, history chart, dashboard, confirmed remote test runs |
| MySpeed | status and manual runs, the day's results, history with averages, password auth |
| MySpeed | status and manual runs, the day's results, history with averages, password auth, dashboard widget |
| Beszel | systems list, live metrics, per-system detail screen |
| dashdot | live CPU, memory, disk, and GPU usage with a system-info tab, dashboard widget |
| Gluetun | VPN status, forwarded port, reconnect, dashboard widget |
Expand Down
6 changes: 4 additions & 2 deletions STATUS.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ Atrium is a **controller** app. Video playback was removed by design
- **Dashboard widgets**, reorderable from Customize dashboard: Active
downloads, Now streaming, Upcoming releases, Recently added, Recently
downloaded, Requests (Seerr and Ombi), Glances, Dashdot, Speedtest
results, Gluetun VPN and Wake on LAN
results, MySpeed, Gluetun VPN and Wake on LAN
- **Settings**: theme, biometric lock, profile import/export (SAF,
live-verified), **Wake-on-LAN devices** (profile-stored, magic packets
over pure Dart UDP), **custom HTTP headers** (global + per-instance,
Expand Down Expand Up @@ -155,7 +155,9 @@ Atrium is a **controller** app. Video playback was removed by design
history with averages and a search by test id, the server's config and
storage figures. Password-protected instances work: the password is
sent the way 1.0.9 reads it and the way newer builds prefer it.
Live-verified behind a reverse proxy with a required header as well
Live-verified behind a reverse proxy with a required header as well. A
dashboard widget (lxBlazarxl, PR #162) shows the latest figures and runs
a test from the board
- **Speedtest Tracker** (live-verified): authenticated 1.1+ result history,
latest metrics, combined download / upload chart, multi-instance dashboard
widget, and confirmed 1.6+ remote runs with queued/running/terminal-state
Expand Down
9 changes: 9 additions & 0 deletions app/lib/src/dashboard/dashboard_board.dart
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ import 'package:service_tracearr/service_tracearr.dart';
import 'package:service_rtorrent/service_rtorrent.dart';
import 'package:service_transmission/service_transmission.dart';
import 'package:service_gluetun/service_gluetun.dart';
import 'package:service_myspeed/service_myspeed.dart';

import '../health_providers.dart';
import '../screens/calendar_screen.dart';
Expand All @@ -30,6 +31,7 @@ import 'dashboard_widget_kind.dart';
import 'widgets/dashdot_widget.dart';
import 'widgets/downloads_widget.dart';
import 'widgets/gluetun_status_widget.dart';
import 'widgets/myspeed_widget.dart';
import 'widgets/recently_added_widget.dart';
import 'widgets/recently_downloaded_widget.dart';
import 'widgets/requests_widget.dart';
Expand Down Expand Up @@ -196,6 +198,10 @@ class DashboardBoard extends ConsumerWidget {
return DashboardGluetunStatusWidget(
instances: _byKind(instances, ServiceKind.gluetun),
);
case DashboardWidgetKind.myspeed:
return DashboardMySpeedWidget(
instances: _byKind(instances, ServiceKind.myspeed),
);
case DashboardWidgetKind.wakeOnLan:
return const DashboardWakeOnLanWidget();
}
Expand Down Expand Up @@ -256,6 +262,9 @@ class DashboardBoard extends ConsumerWidget {
case ServiceKind.gluetun:
ref.invalidate(gluetunVpnStatusProvider(i));
ref.invalidate(gluetunPublicIpProvider(i));
case ServiceKind.myspeed:
ref.invalidate(myspeedStatusProvider(i));
ref.invalidate(myspeedRecentTestsProvider(i));
default:
break;
}
Expand Down
6 changes: 6 additions & 0 deletions app/lib/src/dashboard/dashboard_widget_kind.dart
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ enum DashboardWidgetKind {
dashdot,
speedtestResults,
gluetunStatus,
myspeed,
wakeOnLan,
}

Expand All @@ -28,6 +29,7 @@ extension DashboardWidgetKindX on DashboardWidgetKind {
DashboardWidgetKind.dashdot => 'Dashdot',
DashboardWidgetKind.speedtestResults => 'Speedtest results',
DashboardWidgetKind.gluetunStatus => 'Gluetun VPN',
DashboardWidgetKind.myspeed => 'MySpeed',
DashboardWidgetKind.wakeOnLan => 'Wake on LAN',
};

Expand All @@ -42,6 +44,7 @@ extension DashboardWidgetKindX on DashboardWidgetKind {
DashboardWidgetKind.dashdot => Icons.donut_large_rounded,
DashboardWidgetKind.speedtestResults => Icons.speed_outlined,
DashboardWidgetKind.gluetunStatus => Icons.shield_outlined,
DashboardWidgetKind.myspeed => Icons.network_check_outlined,
DashboardWidgetKind.wakeOnLan => Icons.power_settings_new_rounded,
};

Expand Down Expand Up @@ -88,6 +91,9 @@ extension DashboardWidgetKindX on DashboardWidgetKind {
DashboardWidgetKind.gluetunStatus => const <ServiceKind>[
ServiceKind.gluetun
],
DashboardWidgetKind.myspeed => const <ServiceKind>[
ServiceKind.myspeed
],
// Wake-on-LAN answers to no service. Its targets are machines on the
// network, kept on the profile beside the instances, so there is no
// service whose presence could stand in for being set up.
Expand Down
Loading
Loading