feat: inspect device logs

feat: create DeviceLog model on log request

feat: implement logs route, logs view

feat: implement details on device log

timezone, latest 50 log items

sort by latest device timestamp

cleanup job

add tests
This commit is contained in:
Benjamin Nussbaum 2025-06-01 22:08:37 +02:00
parent 04d089c445
commit c045dc1e85
12 changed files with 425 additions and 0 deletions

View file

@ -2,6 +2,7 @@
use App\Jobs\GenerateScreenJob;
use App\Models\Device;
use App\Models\DeviceLog;
use App\Models\User;
use App\Services\ImageGenerationService;
use Illuminate\Http\Request;
@ -185,6 +186,11 @@ Route::post('/log', function (Request $request) {
$logs = $request->json('log.logs_array', []);
foreach ($logs as $log) {
\Log::info('Device Log', $log);
DeviceLog::create([
'device_id' => $device->id,
'device_timestamp' => $log['creation_timestamp'] ?? now(),
'log_entry' => $log,
]);
}
return response()->json([

View file

@ -1,7 +1,9 @@
<?php
use App\Jobs\CleanupDeviceLogsJob;
use App\Jobs\FetchProxyCloudResponses;
use App\Jobs\FirmwarePollJob;
use Illuminate\Support\Facades\Schedule;
Schedule::job(FetchProxyCloudResponses::class, [])->cron(
config('services.trmnl.proxy_refresh_cron') ? config('services.trmnl.proxy_refresh_cron') :
@ -9,3 +11,4 @@ Schedule::job(FetchProxyCloudResponses::class, [])->cron(
);
Schedule::job(FirmwarePollJob::class)->daily();
Schedule::job(CleanupDeviceLogsJob::class)->daily();

View file

@ -18,6 +18,7 @@ Route::middleware(['auth'])->group(function () {
Volt::route('/devices', 'devices.manage')->name('devices');
Volt::route('/devices/{device}/configure', 'devices.configure')->name('devices.configure');
Volt::route('/devices/{device}/logs', 'devices.logs')->name('devices.logs');
Volt::route('plugins', 'plugins.index')->name('plugins.index');