From 6bc74b2c5c95ba9771704ff4c74e8696619872f7 Mon Sep 17 00:00:00 2001 From: Benjamin Nussbaum Date: Tue, 29 Jul 2025 07:02:39 +0200 Subject: [PATCH] fix(#70): support revised log format --- .../views/livewire/devices/logs.blade.php | 63 +++++++++++-------- routes/api.php | 12 +++- tests/Feature/Api/DeviceEndpointsTest.php | 28 +++++++++ 3 files changed, 77 insertions(+), 26 deletions(-) diff --git a/resources/views/livewire/devices/logs.blade.php b/resources/views/livewire/devices/logs.blade.php index 7bbaf7b..18d5bec 100644 --- a/resources/views/livewire/devices/logs.blade.php +++ b/resources/views/livewire/devices/logs.blade.php @@ -45,37 +45,48 @@ new class extends Component { @foreach ($logs as $log) - @if (!isset($log->log_entry['log_message'])) + @php + $message = $log->log_entry['message'] ?? $log->log_entry['log_message'] ?? null; + @endphp + @if (!$message) @continue @endif + @php + // Support both previous and revised log formats + $timestamp = $log->log_entry['created_at'] ?? $log->log_entry['creation_timestamp'] ?? null; + $wifiStatus = $log->log_entry['wifi_status'] ?? $log->log_entry['device_status_stamp']['wifi_status'] ?? 'Unknown'; + $wifiRssi = $log->log_entry['wifi_signal'] ?? $log->log_entry['device_status_stamp']['wifi_rssi_level'] ?? null; + $hasDeviceStatus = isset($log->log_entry['device_status_stamp']) || + (isset($log->log_entry['wifi_status']) && $log->log_entry['wifi_status'] !== 'Unknown'); + @endphp - @if (isset($log->log_entry['creation_timestamp'])) - {{ \Carbon\Carbon::createFromTimestamp($log->log_entry['creation_timestamp'])->setTimezone(config('app.timezone'))->format('Y-m-d H:i:s') }} + @if ($timestamp) + {{ \Carbon\Carbon::createFromTimestamp($timestamp)->setTimezone(config('app.timezone'))->format('Y-m-d H:i:s') }} @endif
- {{ str_contains(strtolower($log->log_entry['log_message']), 'error') ? 'Error' : - (str_contains(strtolower($log->log_entry['log_message']), 'warning') ? 'Warning' : 'Info') }} + {{ str_contains(strtolower($message), 'error') ? 'Error' : + (str_contains(strtolower($message), 'warning') ? 'Warning' : 'Info') }}
- {{ $log->log_entry['device_status_stamp']['wifi_status'] ?? 'Unknown' }} - @if(isset($log->log_entry['device_status_stamp']['wifi_rssi_level'])) - ({{ $log->log_entry['device_status_stamp']['wifi_rssi_level'] }}dBm) + {{ $wifiStatus }} + @if($wifiRssi) + ({{ $wifiRssi }}dBm) @endif
- @if(isset($log->log_entry['device_status_stamp'])) + @if($hasDeviceStatus) @@ -84,7 +95,7 @@ new class extends Component {
- {{ $log->log_entry['log_message'] }} + {{ $message }} @@ -92,7 +103,7 @@ new class extends Component { - @if(isset($log->log_entry['device_status_stamp'])) + @if($hasDeviceStatus)
@@ -102,44 +113,46 @@ new class extends Component {
WiFi Status:
-
{{ $log->log_entry['device_status_stamp']['wifi_status'] ?? 'Unknown' }}
+
{{ $wifiStatus }}
WiFi RSSI:
-
{{ $log->log_entry['device_status_stamp']['wifi_rssi_level'] ?? 'Unknown' }} dBm
+
{{ $wifiRssi ?? 'Unknown' }} dBm
Refresh Rate:
-
{{ $log->log_entry['device_status_stamp']['refresh_rate'] ?? 'Unknown' }}s
+
{{ $log->log_entry['refresh_rate'] ?? $log->log_entry['device_status_stamp']['refresh_rate'] ?? 'Unknown' }}s
Time Since Sleep:
-
{{ $log->log_entry['device_status_stamp']['time_since_last_sleep_start'] ?? 'Unknown' }}s
+
{{ $log->log_entry['sleep_duration'] ?? $log->log_entry['device_status_stamp']['time_since_last_sleep_start'] ?? 'Unknown' }}s
Firmware Version:
-
{{ $log->log_entry['device_status_stamp']['current_fw_version'] ?? 'Unknown' }}
+
{{ $log->log_entry['firmware_version'] ?? $log->log_entry['device_status_stamp']['current_fw_version'] ?? 'Unknown' }}
Special Function:
-
{{ $log->log_entry['device_status_stamp']['special_function'] ?? 'None' }}
+
{{ $log->log_entry['special_function'] ?? $log->log_entry['device_status_stamp']['special_function'] ?? 'None' }}
Battery Voltage:
-
{{ $log->log_entry['device_status_stamp']['battery_voltage'] ?? 'Unknown' }}V
+
{{ $log->log_entry['battery_voltage'] ?? $log->log_entry['device_status_stamp']['battery_voltage'] ?? 'Unknown' }}V
Wakeup Reason:
-
{{ $log->log_entry['device_status_stamp']['wakeup_reason'] ?? 'Unknown' }}
+
{{ $log->log_entry['wake_reason'] ?? $log->log_entry['device_status_stamp']['wakeup_reason'] ?? 'Unknown' }}
Free Heap:
-
{{ $log->log_entry['device_status_stamp']['free_heap_size'] ?? 'Unknown' }} bytes
+
{{ $log->log_entry['free_heap_size'] ?? $log->log_entry['device_status_stamp']['free_heap_size'] ?? 'Unknown' }} bytes
+ @if(isset($log->log_entry['device_status_stamp']['max_alloc_size']))
Max Alloc Size:
-
{{ $log->log_entry['device_status_stamp']['max_alloc_size'] ?? 'Unknown' }} bytes
+
{{ $log->log_entry['device_status_stamp']['max_alloc_size'] }} bytes
+ @endif
@@ -161,11 +174,11 @@ new class extends Component {
Source File:
-
{{ $log->log_entry['log_sourcefile'] ?? 'Unknown' }}
+
{{ $log->log_entry['source_path'] ?? $log->log_entry['log_sourcefile'] ?? 'Unknown' }}
Line Number:
-
{{ $log->log_entry['log_codeline'] ?? 'Unknown' }}
+
{{ $log->log_entry['source_line'] ?? $log->log_entry['log_codeline'] ?? 'Unknown' }}
@if(isset($log->log_entry['additional_info']))
diff --git a/routes/api.php b/routes/api.php index 9b2ef70..bbe274d 100644 --- a/routes/api.php +++ b/routes/api.php @@ -8,6 +8,7 @@ use App\Models\User; use App\Services\ImageGenerationService; use Illuminate\Http\Request; use Illuminate\Support\Facades\Blade; +use Illuminate\Support\Facades\Log; use Illuminate\Support\Facades\Route; use Illuminate\Support\Facades\Storage; use Illuminate\Support\Str; @@ -222,7 +223,16 @@ Route::post('/log', function (Request $request) { 'last_log_request' => $request->json()->all(), ]); - $logs = $request->json('log.logs_array', []); + $logs = []; + // Revised format: {"logs": [...]} + if ($request->has('logs')) { + $logs = $request->json('logs', []); + } + // Fall back to old format: {"log": {"logs_array": [...]}} + elseif ($request->has('log.logs_array')) { + $logs = $request->json('log.logs_array', []); + } + foreach ($logs as $log) { Log::info('Device Log', $log); DeviceLog::create([ diff --git a/tests/Feature/Api/DeviceEndpointsTest.php b/tests/Feature/Api/DeviceEndpointsTest.php index db1791c..7e8fbdf 100644 --- a/tests/Feature/Api/DeviceEndpointsTest.php +++ b/tests/Feature/Api/DeviceEndpointsTest.php @@ -192,6 +192,34 @@ test('device can submit logs', function () { expect($device->fresh()->last_log_request) ->toBe($logData); + + expect($device->logs()->count())->toBe(1); +}); + +test('device can submit logs in revised format', function () { + $device = Device::factory()->create([ + 'mac_address' => '00:11:22:33:44:55', + 'api_key' => 'test-api-key', + ]); + + $logData = [ + 'logs' => [ + ['message' => 'Test log message', 'level' => 'info'], + ], + ]; + + $response = $this->withHeaders([ + 'id' => $device->mac_address, + 'access-token' => $device->api_key, + ])->postJson('/api/log', $logData); + + $response->assertOk() + ->assertJson(['status' => '200']); + + expect($device->fresh()->last_log_request) + ->toBe($logData); + + expect($device->logs()->count())->toBe(1); }); // test('authenticated user can update device display', function () {