From fd7a034235cca2150cea114d373a3c4ef7b93c7d Mon Sep 17 00:00:00 2001 From: Alex Justesen Date: Fri, 26 Dec 2025 20:16:11 -0500 Subject: [PATCH 01/12] Rename benchmark healthy/unhealthy event classes and update references (#2607) Co-authored-by: Alex Justesen <1144087+alexjustesen@users.noreply.github.com> --- ...tBenchmarkFailed.php => SpeedtestBenchmarkHealthy.php} | 2 +- ...enchmarkPassed.php => SpeedtestBenchmarkUnhealthy.php} | 2 +- app/Jobs/Ookla/BenchmarkSpeedtestJob.php | 8 ++++---- app/Listeners/ProcessUnhealthySpeedtest.php | 4 ++-- app/Listeners/UserNotificationSubscriber.php | 6 +++--- 5 files changed, 11 insertions(+), 11 deletions(-) rename app/Events/{SpeedtestBenchmarkFailed.php => SpeedtestBenchmarkHealthy.php} (90%) rename app/Events/{SpeedtestBenchmarkPassed.php => SpeedtestBenchmarkUnhealthy.php} (90%) diff --git a/app/Events/SpeedtestBenchmarkFailed.php b/app/Events/SpeedtestBenchmarkHealthy.php similarity index 90% rename from app/Events/SpeedtestBenchmarkFailed.php rename to app/Events/SpeedtestBenchmarkHealthy.php index b00175b13..2838d442b 100644 --- a/app/Events/SpeedtestBenchmarkFailed.php +++ b/app/Events/SpeedtestBenchmarkHealthy.php @@ -6,7 +6,7 @@ use Illuminate\Foundation\Events\Dispatchable; use Illuminate\Queue\SerializesModels; -class SpeedtestBenchmarkFailed +class SpeedtestBenchmarkHealthy { use Dispatchable, SerializesModels; diff --git a/app/Events/SpeedtestBenchmarkPassed.php b/app/Events/SpeedtestBenchmarkUnhealthy.php similarity index 90% rename from app/Events/SpeedtestBenchmarkPassed.php rename to app/Events/SpeedtestBenchmarkUnhealthy.php index ab8e9ae82..92b706e35 100644 --- a/app/Events/SpeedtestBenchmarkPassed.php +++ b/app/Events/SpeedtestBenchmarkUnhealthy.php @@ -6,7 +6,7 @@ use Illuminate\Foundation\Events\Dispatchable; use Illuminate\Queue\SerializesModels; -class SpeedtestBenchmarkPassed +class SpeedtestBenchmarkUnhealthy { use Dispatchable, SerializesModels; diff --git a/app/Jobs/Ookla/BenchmarkSpeedtestJob.php b/app/Jobs/Ookla/BenchmarkSpeedtestJob.php index c1298a147..6f6f0751a 100644 --- a/app/Jobs/Ookla/BenchmarkSpeedtestJob.php +++ b/app/Jobs/Ookla/BenchmarkSpeedtestJob.php @@ -3,9 +3,9 @@ namespace App\Jobs\Ookla; use App\Enums\ResultStatus; -use App\Events\SpeedtestBenchmarkFailed; +use App\Events\SpeedtestBenchmarkHealthy; use App\Events\SpeedtestBenchmarking; -use App\Events\SpeedtestBenchmarkPassed; +use App\Events\SpeedtestBenchmarkUnhealthy; use App\Helpers\Benchmark; use App\Models\Result; use App\Settings\ThresholdSettings; @@ -70,8 +70,8 @@ public function handle(): void ]); $this->healthy - ? SpeedtestBenchmarkPassed::dispatch($this->result) - : SpeedtestBenchmarkFailed::dispatch($this->result); + ? SpeedtestBenchmarkHealthy::dispatch($this->result) + : SpeedtestBenchmarkUnhealthy::dispatch($this->result); } private function benchmark(Result $result, ThresholdSettings $settings): array diff --git a/app/Listeners/ProcessUnhealthySpeedtest.php b/app/Listeners/ProcessUnhealthySpeedtest.php index f2e0d419c..288f60739 100644 --- a/app/Listeners/ProcessUnhealthySpeedtest.php +++ b/app/Listeners/ProcessUnhealthySpeedtest.php @@ -2,7 +2,7 @@ namespace App\Listeners; -use App\Events\SpeedtestBenchmarkFailed; +use App\Events\SpeedtestBenchmarkUnhealthy; use App\Helpers\Number; use App\Mail\UnhealthySpeedtestMail; use App\Models\Result; @@ -29,7 +29,7 @@ public function __construct( /** * Handle the event. */ - public function handle(SpeedtestBenchmarkFailed $event): void + public function handle(SpeedtestBenchmarkUnhealthy $event): void { $result = $event->result; diff --git a/app/Listeners/UserNotificationSubscriber.php b/app/Listeners/UserNotificationSubscriber.php index 4ff7dc7c8..aefa0eaae 100644 --- a/app/Listeners/UserNotificationSubscriber.php +++ b/app/Listeners/UserNotificationSubscriber.php @@ -2,7 +2,7 @@ namespace App\Listeners; -use App\Events\SpeedtestBenchmarkFailed; +use App\Events\SpeedtestBenchmarkUnhealthy; use App\Events\SpeedtestCompleted; use App\Events\SpeedtestFailed; use Filament\Actions\Action; @@ -38,7 +38,7 @@ public function handleCompleted(SpeedtestCompleted $event): void /** * Handle the event. */ - public function handleBenchmarkFailed(SpeedtestBenchmarkFailed $event): void + public function handleBenchmarkFailed(SpeedtestBenchmarkUnhealthy $event): void { $result = $event->result; @@ -97,7 +97,7 @@ public function subscribe(Dispatcher $events): array { return [ SpeedtestCompleted::class => 'handleCompleted', - SpeedtestBenchmarkFailed::class => 'handleBenchmarkFailed', + SpeedtestBenchmarkUnhealthy::class => 'handleBenchmarkFailed', SpeedtestFailed::class => 'handleFailed', ]; } From 190b7ef486885ee6efba09e725bbbd6da3e12077 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 2 Jan 2026 16:02:43 -0500 Subject: [PATCH 02/12] gh actions: bump actions/create-github-app-token from 1 to 2 (#2621) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/cd.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/cd.yml b/.github/workflows/cd.yml index 73817d100..b383b2c34 100644 --- a/.github/workflows/cd.yml +++ b/.github/workflows/cd.yml @@ -11,7 +11,7 @@ jobs: steps: - name: Generate GitHub App token id: generate_token - uses: actions/create-github-app-token@v1 + uses: actions/create-github-app-token@v2 with: app-id: ${{ secrets.APP_ID }} private-key: ${{ secrets.APP_PRIVATE_KEY }} From 1ea93d2b3b3ce3fe0faa1f1f74e24022319fd1b0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 2 Jan 2026 16:03:51 -0500 Subject: [PATCH 03/12] gh actions: bump actions/cache from 4 to 5 (#2622) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Alex Justesen --- .github/workflows/ci.yml | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index abe74743b..1e6db763d 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -22,7 +22,7 @@ jobs: php-version: '8.4' - name: Cache Composer dependencies - uses: actions/cache@v4 + uses: actions/cache@v5 with: path: vendor key: composer-${{ runner.os }}-${{ hashFiles('**/composer.lock') }} @@ -57,7 +57,7 @@ jobs: php-version: '8.4' - name: Cache Composer dependencies - uses: actions/cache@v4 + uses: actions/cache@v5 with: path: vendor key: composer-${{ runner.os }}-${{ hashFiles('**/composer.lock') }} @@ -65,7 +65,7 @@ jobs: composer-${{ runner.os }}- - name: Cache NPM dependencies - uses: actions/cache@v4 + uses: actions/cache@v5 with: path: ~/.npm key: npm-${{ runner.os }}-${{ hashFiles('**/package-lock.json') }} @@ -115,7 +115,7 @@ jobs: php-version: '8.4' - name: Cache Composer dependencies - uses: actions/cache@v4 + uses: actions/cache@v5 with: path: vendor key: composer-${{ runner.os }}-${{ hashFiles('**/composer.lock') }} @@ -123,7 +123,7 @@ jobs: composer-${{ runner.os }}- - name: Cache NPM dependencies - uses: actions/cache@v4 + uses: actions/cache@v5 with: path: ~/.npm key: npm-${{ runner.os }}-${{ hashFiles('**/package-lock.json') }} @@ -173,7 +173,7 @@ jobs: php-version: '8.4' - name: Cache Composer dependencies - uses: actions/cache@v4 + uses: actions/cache@v5 with: path: vendor key: composer-${{ runner.os }}-${{ hashFiles('**/composer.lock') }} @@ -181,7 +181,7 @@ jobs: composer-${{ runner.os }}- - name: Cache NPM dependencies - uses: actions/cache@v4 + uses: actions/cache@v5 with: path: ~/.npm key: npm-${{ runner.os }}-${{ hashFiles('**/package-lock.json') }} @@ -231,7 +231,7 @@ jobs: php-version: '8.4' - name: Cache Composer dependencies - uses: actions/cache@v4 + uses: actions/cache@v5 with: path: vendor key: composer-${{ runner.os }}-${{ hashFiles('**/composer.lock') }} @@ -239,7 +239,7 @@ jobs: composer-${{ runner.os }}- - name: Cache NPM dependencies - uses: actions/cache@v4 + uses: actions/cache@v5 with: path: ~/.npm key: npm-${{ runner.os }}-${{ hashFiles('**/package-lock.json') }} @@ -289,7 +289,7 @@ jobs: php-version: '8.4' - name: Cache Composer dependencies - uses: actions/cache@v4 + uses: actions/cache@v5 with: path: vendor key: composer-${{ runner.os }}-${{ hashFiles('**/composer.lock') }} @@ -297,7 +297,7 @@ jobs: composer-${{ runner.os }}- - name: Cache NPM dependencies - uses: actions/cache@v4 + uses: actions/cache@v5 with: path: ~/.npm key: npm-${{ runner.os }}-${{ hashFiles('**/package-lock.json') }} @@ -347,7 +347,7 @@ jobs: php-version: '8.4' - name: Cache Composer dependencies - uses: actions/cache@v4 + uses: actions/cache@v5 with: path: vendor key: composer-${{ runner.os }}-${{ hashFiles('**/composer.lock') }} @@ -355,7 +355,7 @@ jobs: composer-${{ runner.os }}- - name: Cache NPM dependencies - uses: actions/cache@v4 + uses: actions/cache@v5 with: path: ~/.npm key: npm-${{ runner.os }}-${{ hashFiles('**/package-lock.json') }} @@ -405,7 +405,7 @@ jobs: php-version: '8.4' - name: Cache Composer dependencies - uses: actions/cache@v4 + uses: actions/cache@v5 with: path: vendor key: composer-${{ runner.os }}-${{ hashFiles('**/composer.lock') }} @@ -413,7 +413,7 @@ jobs: composer-${{ runner.os }}- - name: Cache NPM dependencies - uses: actions/cache@v4 + uses: actions/cache@v5 with: path: ~/.npm key: npm-${{ runner.os }}-${{ hashFiles('**/package-lock.json') }} @@ -454,7 +454,7 @@ jobs: php-version: '8.4' - name: Cache Composer dependencies - uses: actions/cache@v4 + uses: actions/cache@v5 with: path: vendor key: composer-${{ runner.os }}-${{ hashFiles('**/composer.lock') }} @@ -462,7 +462,7 @@ jobs: composer-${{ runner.os }}- - name: Cache NPM dependencies - uses: actions/cache@v4 + uses: actions/cache@v5 with: path: ~/.npm key: npm-${{ runner.os }}-${{ hashFiles('**/package-lock.json') }} From f9be7c6cc2afab778bb5813d9de728f13d363d23 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 2 Jan 2026 16:05:14 -0500 Subject: [PATCH 04/12] gh actions: bump peter-evans/repository-dispatch from 3 to 4 (#2623) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Alex Justesen --- .github/workflows/cd.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/cd.yml b/.github/workflows/cd.yml index b383b2c34..f6e40687f 100644 --- a/.github/workflows/cd.yml +++ b/.github/workflows/cd.yml @@ -19,7 +19,7 @@ jobs: repositories: docker-speedtest-tracker - name: Trigger docker-speedtest-tracker build - uses: peter-evans/repository-dispatch@v3 + uses: peter-evans/repository-dispatch@v4 with: token: ${{ steps.generate_token.outputs.token }} repository: alexjustesen/docker-speedtest-tracker From 0e405e3f63d62b3fc936c847fa820d51c332c49b Mon Sep 17 00:00:00 2001 From: Sven van Ginkel Date: Fri, 2 Jan 2026 22:07:57 +0100 Subject: [PATCH 05/12] chore: update bug report template with support guidelines (#2591) Co-authored-by: Alex Justesen --- .github/ISSUE_TEMPLATE/bug_report.yml | 79 ++++++++++++++++------ .github/ISSUE_TEMPLATE/feature_request.yml | 37 +++++++--- 2 files changed, 84 insertions(+), 32 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index cf8b5abcb..ab4407dcc 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -2,67 +2,100 @@ name: Bug Report description: Use this template to report a bug or issue. title: "[Question] " labels: ["question", "needs review"] -body: - - type: markdown - attributes: - value: | - Thanks for taking the time to report this issue! We appreciate your help in improving the project. If this report is confirmed as a bug, we’ll update its type accordingly. - Please note: - - For **feature requests or changes**, use the [feature request form](https://github.com/alexjustesen/speedtest-tracker/issues/new?template=feature_request.yml). - - For **general questions**, **setup or configuration help**, or if you’re not sure this is a bug, please use **[GitHub Discussions](https://github.com/alexjustesen/speedtest-tracker/discussions)** instead. - - Any isseus with translations should be reported/solved within the [crowdin project](https://crowdin.com/project/speedtest-tracker). +body: - type: checkboxes + id: terms attributes: - label: Pre-work + label: Welcome! description: | - Before opening an issue make sure you've checked the resources below first, any issues that could have been solved by reading the docs or existing issues will be closed. + The issue tracker is for reporting bugs and feature requests only. For end-user related support questions, please use the **[GitHub Discussions](https://github.com/alexjustesen/speedtest-tracker/discussions)** instead + + Please note: + - For translation-related issues or requests, please use the [Crowdin project](https://crowdin.com/project/speedtest-tracker). + - Any issues that can be resolved by consulting the documentation or by reviewing existing open or closed issues will be closed. + - We only support installations that follow the methods described in the documentation. Installations using third-party or undocumented methods are not supported by the project. + options: - - label: I have read the [docs](https://docs.speedtest-tracker.dev). + - label: I have read the [documentation](https://docs.speedtest-tracker.dev) and my problem was not listed in the help section. + required: true + - label: I have searched open and closed issues and my problem was not mentioned before. required: true - - label: I have searched open and closed issues. + - label: I have verified I am using the latest version available. You can check the latest release [here](https://github.com/alexjustesen/speedtest-tracker/releases). required: true - label: I agree to follow this project's [Code of Conduct](https://www.contributor-covenant.org/version/2/1/code_of_conduct/code_of_conduct.md). required: true + - type: textarea id: description attributes: - label: Description - description: Explain the issue you experienced, please be clear and concise. - placeholder: I went to the coffee pot and it was empty. + label: What did you do? + description: | + How to write a good bug report? + + - Respect the issue template as much as possible. + - The title should be short and descriptive. + - Explain the conditions which led you to report this issue: the context. + - The context should lead to something, a problem that you’re facing. + - Remain clear and concise. + - Format your messages to help the reader focus on what matters and understand the structure of your message, use [Markdown syntax](https://help.github.com/articles/github-flavored-markdown) validations: required: true + - type: textarea id: expected-behavior attributes: label: Expected Behavior - description: In a perfect world, what should have happened? + description: | + In a perfect world, what should have happened? + **Important:** Be specific. Vague descriptions like "it should work" are not helpful. placeholder: When I got to the coffee pot, it should have been full. validations: required: true + - type: textarea id: steps-to-reproduce attributes: label: Steps to Reproduce - description: Describe how to reproduce the issue in repeatable steps. + description: | + Provide detailed, numbered steps that someone else can follow to reproduce the issue. + **Important:** Vague descriptions like "it doesn't work" or "it's broken" will result in the issue being closed. + Include specific actions, URLs, button clicks, and any relevant data or configuration. placeholder: | 1. Go to the coffee pot. 2. Make more coffee. 3. Pour it into a cup. + 4. Observe that the cup is empty instead of full. validations: required: true + - type: dropdown id: deployment-environment attributes: label: Deployment Environment - description: How did you deploy the application? + description: How did you deploy the application? Only supported deployment methods are listed. options: - Docker Compose - Docker Run - - Other default: 0 validations: required: true + + - type: textarea + id: environment-configuration + attributes: + label: What is your environment & configuration? + description: Please add your docker compose file or docker run command used to deploy the application. + placeholder: Add information here. + value: | + ```yaml + # (paste your configuration here) + ``` + + Add more configuration information here. + validations: + required: true + - type: textarea id: application-information attributes: @@ -71,6 +104,7 @@ body: render: json validations: required: true + - type: input id: browsers attributes: @@ -78,9 +112,12 @@ body: placeholder: Chrome, Firefox, Safari, etc. validations: required: true + - type: textarea id: logs attributes: label: Logs - description: Please copy and paste any relevant log output. This will be automatically formatted into code, so no need for backticks. + description: Please copy and paste any relevant log output. This will be automatically formatted into code, so no need for backticks. If you are unsure which logs to include, include all logs. You can get the logs by running `docker logs `. render: shell + validations: + required: true diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml index aa13ebc08..bdd144689 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.yml +++ b/.github/ISSUE_TEMPLATE/feature_request.yml @@ -2,22 +2,28 @@ name: Feature Request description: Use this template for requesting a new feature or change. title: "[Feature] " labels: ["feature", "needs review"] + body: - - type: markdown - attributes: - value: | - You should only use this form to request a change or new feature, to report a bug or issue use the [bug report form](https://github.com/alexjustesen/speedtest-tracker). - Any reqeusts for new translations should be reqeusted within the [crowdin project](https://crowdin.com/project/speedtest-tracker). - type: checkboxes attributes: - label: Pre-work + label: Welcome! + description: | + The issue tracker is for reporting bugs and feature requests only. For end-user related support questions, please use the **[GitHub Discussions](https://github.com/alexjustesen/speedtest-tracker/discussions)** instead + + Please note: + - For **Bug reports**, use the [Bug Form](https://github.com/alexjustesen/speedtest-tracker/issues/new?template=bug_report.yml). + - Any requests for new translations should be requested within the [crowdin project](https://crowdin.com/project/speedtest-tracker). + options: - - label: I have searched open and closed feature request to make sure this or similar feature request does not already exist. + - label: I have searched open and closed feature requests to make sure this or similar feature request does not already exist. + required: true + - label: I have reviewed the [Milestones](https://github.com/alexjustesen/speedtest-tracker/milestones) to ensure that this feature request, or a similar one, has not already been proposed. required: true - - label: I have reviewed the [milestones](https://github.com/alexjustesen/speedtest-tracker/milestones) to ensure that this feature request, or a similar one, has not already been proposed. + - label: This is a feature request, not a bug report or support question. required: true - - label: I agree to follow this project's [Code of Conduct](). + - label: I agree to follow this project's [Code of Conduct](https://www.contributor-covenant.org/version/2/1/code_of_conduct/code_of_conduct.md). required: true + - type: dropdown id: idea-section attributes: @@ -28,14 +34,23 @@ body: - Notifications - Speedtest - Web UI/UX + - Other default: 0 validations: required: true + - type: textarea id: description attributes: label: Description - description: Describe the solution or feature you'd like, you should also mention if this solves a problem. - placeholder: Be sure to keep it clear and concise. + description: | + Describe the solution or feature you'd like. Explain what problem this solves or what value it adds. + **Important:** Be specific and detailed. Vague requests like "make it better" will be closed. + placeholder: | + Example: + - What is the feature? + - What problem does it solve? + - How should it work? + - Why would this be valuable? validations: required: true From 07aaf84a4bcd0a43cc43818bf73175ae96ce6476 Mon Sep 17 00:00:00 2001 From: Sven van Ginkel Date: Sat, 3 Jan 2026 14:09:51 +0100 Subject: [PATCH 06/12] Fix: Apprise test button shown without saving (#2627) --- app/Filament/Pages/Settings/Notification.php | 7 ++++++- lang/en/settings/notifications.php | 1 + 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/app/Filament/Pages/Settings/Notification.php b/app/Filament/Pages/Settings/Notification.php index 7e1c1a58a..27d26bc39 100755 --- a/app/Filament/Pages/Settings/Notification.php +++ b/app/Filament/Pages/Settings/Notification.php @@ -257,6 +257,7 @@ public function form(Schema $schema): Schema ]), Repeater::make('apprise_channel_urls') ->label(__('settings/notifications.apprise_channels')) + ->helperText(__('settings/notifications.apprise_save_to_test')) ->schema([ TextInput::make('channel_url') ->label(__('settings/notifications.apprise_channel_url')) @@ -274,7 +275,11 @@ public function form(Schema $schema): Schema ->action(fn (Get $get) => SendAppriseTestNotification::run( channel_urls: $get('apprise_channel_urls'), )) - ->hidden(fn (Get $get) => ! count($get('apprise_channel_urls'))), + ->hidden(function () { + $settings = app(NotificationSettings::class); + + return empty($settings->apprise_server_url) || ! count($settings->apprise_channel_urls ?? []); + }), ]), ]), ]), diff --git a/lang/en/settings/notifications.php b/lang/en/settings/notifications.php index 788f31d91..87c82e7da 100644 --- a/lang/en/settings/notifications.php +++ b/lang/en/settings/notifications.php @@ -25,6 +25,7 @@ 'apprise_channel_url' => 'Service URL', 'apprise_hint_description' => 'Apprise allows you to send notifications to 90+ services. You need to run an Apprise server and configure service URLs below.', 'apprise_channel_url_helper' => 'Use Apprise URL format. Examples: discord://WebhookID/Token, slack://TokenA/TokenB/TokenC', + 'apprise_save_to_test' => 'Save your settings to test the notification.', 'test_apprise_channel' => 'Test Apprise', 'apprise_channel_url_validation_error' => 'Invalid Apprise URL. Must use Apprise format (e.g., discord://, slack://), not http:// or https://. See the Apprise documentation for more information', From d0377e15a711ec68b9e8a2a985959280de987b9f Mon Sep 17 00:00:00 2001 From: Sven van Ginkel Date: Sat, 3 Jan 2026 14:14:31 +0100 Subject: [PATCH 07/12] Fix: Skip SkipSpeedtestJob when env var is empty (#2626) Co-authored-by: Alex Justesen --- app/Jobs/Ookla/SkipSpeedtestJob.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/Jobs/Ookla/SkipSpeedtestJob.php b/app/Jobs/Ookla/SkipSpeedtestJob.php index 948fe792d..773d4a793 100644 --- a/app/Jobs/Ookla/SkipSpeedtestJob.php +++ b/app/Jobs/Ookla/SkipSpeedtestJob.php @@ -40,9 +40,9 @@ public function middleware(): array public function handle(): void { /** - * Only skip IPs for scheduled tests. + * Skip if test is not scheduled or no IPs are configured to skip. */ - if ($this->result->scheduled === false) { + if ($this->result->scheduled === false || empty(config('speedtest.preflight.skip_ips'))) { return; } From 5bb28c23a9ed7c6deb2faefb4ae39501bfbb77f2 Mon Sep 17 00:00:00 2001 From: Sven van Ginkel Date: Sun, 4 Jan 2026 15:31:00 +0100 Subject: [PATCH 08/12] Fix: Increase timeout for Apprise notifications (#2628) Co-authored-by: Alex Justesen --- app/Notifications/AppriseChannel.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Notifications/AppriseChannel.php b/app/Notifications/AppriseChannel.php index 0e9ed1087..c6fe6a1c3 100644 --- a/app/Notifications/AppriseChannel.php +++ b/app/Notifications/AppriseChannel.php @@ -33,7 +33,7 @@ public function send(object $notifiable, Notification $notification): void } try { - $request = Http::timeout(5) + $request = Http::timeout(30) ->withHeaders([ 'Content-Type' => 'application/json', ]); From 82fdd6fa79cfb773050b17470b0bc586d03de307 Mon Sep 17 00:00:00 2001 From: Sven van Ginkel Date: Sun, 4 Jan 2026 15:32:11 +0100 Subject: [PATCH 09/12] Chore: clean up ping logs (#2629) Co-authored-by: Alex Justesen --- app/Actions/PingHostname.php | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/app/Actions/PingHostname.php b/app/Actions/PingHostname.php index 5bbf15ddf..04884fe31 100644 --- a/app/Actions/PingHostname.php +++ b/app/Actions/PingHostname.php @@ -23,9 +23,12 @@ public function handle(?string $hostname = null, int $count = 1): PingResult count: $count, ))->run(); - Log::info('Pinged hostname', [ + $data = $ping->toArray(); + unset($data['raw_output'], $data['lines']); + + Log::debug('Pinged hostname', [ 'host' => $hostname, - 'data' => $ping->toArray(), + 'data' => $data, ]); return $ping; From f1480e4c0529ecd5bd4098b59e795ade1d366234 Mon Sep 17 00:00:00 2001 From: Sven van Ginkel Date: Thu, 8 Jan 2026 23:20:46 +0100 Subject: [PATCH 10/12] chore: add missing translation strings (#2639) --- lang/en/general.php | 4 ++++ resources/views/dashboard.blade.php | 2 +- resources/views/livewire/latest-result-stats.blade.php | 2 +- resources/views/livewire/next-speedtest-banner.blade.php | 2 +- resources/views/livewire/platform-stats.blade.php | 6 +++--- 5 files changed, 10 insertions(+), 6 deletions(-) diff --git a/lang/en/general.php b/lang/en/general.php index 9b8aa7d95..2d39844c2 100644 --- a/lang/en/general.php +++ b/lang/en/general.php @@ -73,6 +73,10 @@ 'healthy' => 'Healthy', 'not_measured' => 'Not measured', 'unhealthy' => 'Unhealthy', + 'last_results' => 'Last results', + 'total_failed' => 'Total failed tests', + 'total_complted' => 'Total completed tests', + 'total' => 'Total', // Units 'ms' => 'ms', diff --git a/resources/views/dashboard.blade.php b/resources/views/dashboard.blade.php index 967996d47..c66c27c1c 100644 --- a/resources/views/dashboard.blade.php +++ b/resources/views/dashboard.blade.php @@ -9,7 +9,7 @@

- Metrics + {{ __('general.metrics') }}

@livewire(\App\Filament\Widgets\RecentDownloadChartWidget::class) diff --git a/resources/views/livewire/latest-result-stats.blade.php b/resources/views/livewire/latest-result-stats.blade.php index c1c69eeec..f6997016a 100644 --- a/resources/views/livewire/latest-result-stats.blade.php +++ b/resources/views/livewire/latest-result-stats.blade.php @@ -6,7 +6,7 @@

- Latest result + {{ __('general.last_results') }}

{{ $this->latestResult->created_at->timezone(config('app.display_timezone'))->format(config('app.datetime_format')) }}

diff --git a/resources/views/livewire/next-speedtest-banner.blade.php b/resources/views/livewire/next-speedtest-banner.blade.php index e66d3c1ee..f7f9211c0 100644 --- a/resources/views/livewire/next-speedtest-banner.blade.php +++ b/resources/views/livewire/next-speedtest-banner.blade.php @@ -8,7 +8,7 @@

- Next scheduled test at {{ $this->nextSpeedtest->timezone(config('app.display_timezone'))->format(config('app.datetime_format')) }}. + {{ __('dashboard.next_speedtest_at') }} {{ $this->nextSpeedtest->timezone(config('app.display_timezone'))->format(config('app.datetime_format')) }}.

diff --git a/resources/views/livewire/platform-stats.blade.php b/resources/views/livewire/platform-stats.blade.php index f8f149e6e..00caf7a17 100644 --- a/resources/views/livewire/platform-stats.blade.php +++ b/resources/views/livewire/platform-stats.blade.php @@ -25,7 +25,7 @@ - Total tests + {{ __('general.total') }}

{{ $this->platformStats['total'] }}

@@ -33,7 +33,7 @@ - Total completed tests + {{ __('general.total_complted') }}

{{ $this->platformStats['completed'] }}

@@ -41,7 +41,7 @@ - Total failed tests + {{ __('general.total_failed') }}

{{ $this->platformStats['failed'] }}

From 0e104db343df968a303556e1e60002ed97bcc870 Mon Sep 17 00:00:00 2001 From: Sven van Ginkel Date: Thu, 8 Jan 2026 23:23:11 +0100 Subject: [PATCH 11/12] Chore: Add helpertext for notification triggers (#2640) Co-authored-by: Alex Justesen --- app/Filament/Pages/Settings/Notification.php | 23 ++++++++++++-------- lang/en/settings/notifications.php | 4 +++- 2 files changed, 17 insertions(+), 10 deletions(-) diff --git a/app/Filament/Pages/Settings/Notification.php b/app/Filament/Pages/Settings/Notification.php index 27d26bc39..c01ee4e1f 100755 --- a/app/Filament/Pages/Settings/Notification.php +++ b/app/Filament/Pages/Settings/Notification.php @@ -86,10 +86,11 @@ public function form(Schema $schema): Schema ->columns(1) ->schema([ Checkbox::make('database_on_speedtest_run') - ->label(__('settings/notifications.notify_on_every_speedtest_run')), - + ->label(__('settings/notifications.notify_on_every_speedtest_run')) + ->helpertext(__('settings/notifications.notify_on_every_speedtest_run_helper')), Checkbox::make('database_on_threshold_failure') - ->label(__('settings/notifications.notify_on_threshold_failures')), + ->label(__('settings/notifications.notify_on_threshold_failures')) + ->helpertext(__('settings/notifications.notify_on_threshold_failures_helper')), ]), Actions::make([ @@ -118,10 +119,11 @@ public function form(Schema $schema): Schema ->columns(1) ->schema([ Checkbox::make('mail_on_speedtest_run') - ->label(__('settings/notifications.notify_on_every_speedtest_run')), - + ->label(__('settings/notifications.notify_on_every_speedtest_run')) + ->helpertext(__('settings/notifications.notify_on_every_speedtest_run_helper')), Checkbox::make('mail_on_threshold_failure') - ->label(__('settings/notifications.notify_on_threshold_failures')), + ->label(__('settings/notifications.notify_on_threshold_failures')) + ->helpertext(__('settings/notifications.notify_on_threshold_failures_helper')), ]), Repeater::make('mail_recipients') @@ -176,10 +178,11 @@ public function form(Schema $schema): Schema ->columns(1) ->schema([ Checkbox::make('webhook_on_speedtest_run') - ->label(__('settings/notifications.notify_on_every_speedtest_run')), - + ->label(__('settings/notifications.notify_on_every_speedtest_run')) + ->helpertext(__('settings/notifications.notify_on_every_speedtest_run_helper')), Checkbox::make('webhook_on_threshold_failure') - ->label(__('settings/notifications.notify_on_threshold_failures')), + ->label(__('settings/notifications.notify_on_threshold_failures')) + ->helpertext(__('settings/notifications.notify_on_threshold_failures_helper')), ]), Repeater::make('webhook_urls') @@ -250,9 +253,11 @@ public function form(Schema $schema): Schema ->schema([ Checkbox::make('apprise_on_speedtest_run') ->label(__('settings/notifications.notify_on_every_speedtest_run')) + ->helpertext(__('settings/notifications.notify_on_every_speedtest_run_helper')) ->columnSpanFull(), Checkbox::make('apprise_on_threshold_failure') ->label(__('settings/notifications.notify_on_threshold_failures')) + ->helpertext(__('settings/notifications.notify_on_threshold_failures_helper')) ->columnSpanFull(), ]), Repeater::make('apprise_channel_urls') diff --git a/lang/en/settings/notifications.php b/lang/en/settings/notifications.php index 87c82e7da..8c3145532 100644 --- a/lang/en/settings/notifications.php +++ b/lang/en/settings/notifications.php @@ -36,8 +36,10 @@ 'webhook_hint_description' => 'These are generic webhooks. For payload examples and implementation details, view the documentation. For services like Discord, Ntfy etc please use Apprise.', // Common notification messages - 'notify_on_every_speedtest_run' => 'Notify on every scheduled speedtest run', + 'notify_on_every_speedtest_run' => 'Notify on every completed scheduled speedtest run', + 'notify_on_every_speedtest_run_helper' => 'This will send a notification for every completed scheduled speedtest run, only for healthy or unbenchmarked tests', 'notify_on_threshold_failures' => 'Notify on threshold failures for scheduled speedtests', + 'notify_on_threshold_failures_helper' => 'This will send a notification when a scheduled speedtest fails any configured thresholds', // Test notification messages 'test_notifications' => [ From cc0f0d36e3ce64eadce286c909f5a76353b77298 Mon Sep 17 00:00:00 2001 From: Alex Justesen Date: Thu, 8 Jan 2026 17:34:20 -0500 Subject: [PATCH 12/12] Release v1.13.5 (#2641) Co-authored-by: Alex Justesen <1144087+alexjustesen@users.noreply.github.com> --- config/speedtest.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/config/speedtest.php b/config/speedtest.php index 79c2e84b4..4226f5a0a 100644 --- a/config/speedtest.php +++ b/config/speedtest.php @@ -6,9 +6,9 @@ /** * General settings. */ - 'build_date' => Carbon::parse('2025-12-26'), + 'build_date' => Carbon::parse('2026-01-08'), - 'build_version' => 'v1.13.4', + 'build_version' => 'v1.13.5', 'content_width' => env('CONTENT_WIDTH', '7xl'),