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 diff --git a/.github/workflows/cd.yml b/.github/workflows/cd.yml index 73817d100..f6e40687f 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 }} @@ -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 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') }} 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; 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/Filament/Pages/Settings/Notification.php b/app/Filament/Pages/Settings/Notification.php index 7e1c1a58a..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,13 +253,16 @@ 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') ->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 +280,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/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/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; } 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', ]; } 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', ]); 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'), 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/lang/en/settings/notifications.php b/lang/en/settings/notifications.php index 788f31d91..8c3145532 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', @@ -35,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' => [ 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'] }}