Skip to content

Commit 8f3aec7

Browse files
authored
Merge branch 'alexjustesen:main' into feat/avg-notifications
2 parents 3d1ad12 + d27000f commit 8f3aec7

File tree

13 files changed

+604
-8
lines changed

13 files changed

+604
-8
lines changed

.github/workflows/cd.yml

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
name: Trigger Docker Image Build
2+
3+
on:
4+
release:
5+
types: [published]
6+
7+
jobs:
8+
trigger-docker-build:
9+
runs-on: ubuntu-24.04
10+
11+
steps:
12+
- name: Generate GitHub App token
13+
id: generate_token
14+
uses: actions/create-github-app-token@v1
15+
with:
16+
app-id: ${{ secrets.APP_ID }}
17+
private-key: ${{ secrets.APP_PRIVATE_KEY }}
18+
owner: alexjustesen
19+
repositories: docker-speedtest-tracker
20+
21+
- name: Trigger docker-speedtest-tracker build
22+
uses: peter-evans/repository-dispatch@v3
23+
with:
24+
token: ${{ steps.generate_token.outputs.token }}
25+
repository: alexjustesen/docker-speedtest-tracker
26+
event-type: speedtest-tracker-release
27+
client-payload: '{"tag_name": "${{ github.event.release.tag_name }}"}'

app/Filament/Pages/Settings/DataIntegration.php

Lines changed: 28 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,18 @@
77
use App\Settings\DataIntegrationSettings;
88
use Filament\Actions\Action;
99
use Filament\Forms\Components\Checkbox;
10+
use Filament\Forms\Components\TagsInput;
1011
use Filament\Forms\Components\TextInput;
1112
use Filament\Forms\Components\Toggle;
1213
use Filament\Notifications\Notification;
1314
use Filament\Pages\SettingsPage;
1415
use Filament\Schemas\Components\Actions;
1516
use Filament\Schemas\Components\Grid;
16-
use Filament\Schemas\Components\Section;
17+
use Filament\Schemas\Components\Tabs;
18+
use Filament\Schemas\Components\Tabs\Tab;
1719
use Filament\Schemas\Components\Utilities\Get;
1820
use Filament\Schemas\Schema;
21+
use Filament\Support\Icons\Heroicon;
1922
use Illuminate\Support\Facades\Auth;
2023

2124
class DataIntegration extends SettingsPage
@@ -52,16 +55,14 @@ public function form(Schema $schema): Schema
5255
{
5356
return $schema
5457
->components([
55-
Grid::make([
56-
'default' => 1,
57-
'md' => 3,
58-
])
58+
Tabs::make()
5959
->schema([
60-
Section::make(__('settings/data_integration.influxdb_v2'))
61-
->description(__('settings/data_integration.influxdb_v2_description'))
60+
Tab::make(__('settings/data_integration.influxdb_v2'))
61+
->icon(Heroicon::OutlinedCircleStack)
6262
->schema([
6363
Toggle::make('influxdb_v2_enabled')
6464
->label(__('settings/data_integration.influxdb_v2_enabled'))
65+
->helpertext(__('settings/data_integration.influxdb_v2_description'))
6566
->reactive()
6667
->columnSpanFull(),
6768
Grid::make(['default' => 1, 'md' => 3])
@@ -127,7 +128,26 @@ public function form(Schema $schema): Schema
127128
]),
128129
]),
129130
])
130-
->compact()
131+
->columnSpanFull(),
132+
Tab::make(__('settings/data_integration.prometheus'))
133+
->icon(Heroicon::OutlinedChartBar)
134+
->schema([
135+
Toggle::make('prometheus_enabled')
136+
->label(__('settings/data_integration.prometheus_enabled'))
137+
->helperText(__('settings/data_integration.influxdb_v2_description'))
138+
->reactive()
139+
->columnSpanFull(),
140+
Grid::make(['default' => 1, 'md' => 3])
141+
->hidden(fn (Get $get) => $get('prometheus_enabled') !== true)
142+
->schema([
143+
TagsInput::make('prometheus_allowed_ips')
144+
->label(__('settings/data_integration.prometheus_allowed_ips'))
145+
->helperText(__('settings/data_integration.prometheus_allowed_ips_helper'))
146+
->placeholder('192.168.1.100')
147+
->splitKeys(['Tab', ',', ' '])
148+
->columnSpanFull(),
149+
]),
150+
])
131151
->columnSpanFull(),
132152
])
133153
->columnSpanFull(),
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
<?php
2+
3+
namespace App\Http\Controllers;
4+
5+
use App\Services\PrometheusMetricsService;
6+
use App\Settings\DataIntegrationSettings;
7+
use Illuminate\Http\Response;
8+
9+
class MetricsController extends Controller
10+
{
11+
public function __construct(
12+
protected PrometheusMetricsService $metricsService,
13+
protected DataIntegrationSettings $settings
14+
) {}
15+
16+
public function __invoke(): Response
17+
{
18+
if (! $this->settings->prometheus_enabled) {
19+
abort(404);
20+
}
21+
22+
$metrics = $this->metricsService->generateMetrics();
23+
24+
return response($metrics, 200, [
25+
'Content-Type' => 'text/plain; version=0.0.4; charset=utf-8',
26+
]);
27+
}
28+
}
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
<?php
2+
3+
namespace App\Http\Middleware;
4+
5+
use App\Helpers\Network;
6+
use App\Settings\DataIntegrationSettings;
7+
use Closure;
8+
use Illuminate\Http\Request;
9+
use Symfony\Component\HttpFoundation\Response;
10+
11+
class PrometheusAllowedIpMiddleware
12+
{
13+
public function __construct(
14+
protected DataIntegrationSettings $settings
15+
) {}
16+
17+
/**
18+
* Handle an incoming request.
19+
*
20+
* @param Closure(Request):Response $next
21+
*/
22+
public function handle(Request $request, Closure $next): Response
23+
{
24+
if (blank($this->settings->prometheus_allowed_ips)) {
25+
return $next($request);
26+
}
27+
28+
$clientIp = $request->ip();
29+
$allowedIps = $this->settings->prometheus_allowed_ips;
30+
31+
foreach ($allowedIps as $allowedIp) {
32+
if (str_contains($allowedIp, '/')) {
33+
if (Network::ipInRange($clientIp, $allowedIp)) {
34+
return $next($request);
35+
}
36+
} elseif ($clientIp === $allowedIp) {
37+
return $next($request);
38+
}
39+
}
40+
41+
abort(403);
42+
}
43+
}

app/Listeners/ProcessSpeedtestDataIntegrations.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
use App\Events\SpeedtestFailed;
77
use App\Jobs\Influxdb\v2\WriteResult;
88
use App\Settings\DataIntegrationSettings;
9+
use Illuminate\Support\Facades\Cache;
910

1011
class ProcessSpeedtestDataIntegrations
1112
{
@@ -24,5 +25,9 @@ public function handle(SpeedtestCompleted|SpeedtestFailed $event): void
2425
if ($this->settings->influxdb_v2_enabled) {
2526
WriteResult::dispatch($event->result);
2627
}
28+
29+
if ($this->settings->prometheus_enabled) {
30+
Cache::forever('prometheus:latest_result', $event->result->id);
31+
}
2732
}
2833
}

0 commit comments

Comments
 (0)