diff --git a/app/Http/Controllers/APIS/CustomerApi/TimeseriesAlertMessageController.php b/app/Http/Controllers/APIS/CustomerApi/TimeseriesAlertMessageController.php index f528ee2..26debba 100644 --- a/app/Http/Controllers/APIS/CustomerApi/TimeseriesAlertMessageController.php +++ b/app/Http/Controllers/APIS/CustomerApi/TimeseriesAlertMessageController.php @@ -190,7 +190,6 @@ class TimeseriesAlertMessageController extends Controller public function alertMessage(Request $request) { try { - // Authentication $token = readHeaderToken(); if (!$token) { return response()->json([ @@ -199,7 +198,6 @@ class TimeseriesAlertMessageController extends Controller ], 401); } - // Validation $validator = Validator::make($request->all(), [ 'device_id' => 'required|string|exists:devices,id', 'startTs' => 'nullable|numeric', @@ -213,9 +211,7 @@ class TimeseriesAlertMessageController extends Controller ], 400); } - // Fetch device with relationships $device = Device::with([ - 'deviceProfile', 'timeseriesKeys' => function ($query) { $query->where(function ($q) { $q->where('display_on_dashboard', true) @@ -223,12 +219,11 @@ class TimeseriesAlertMessageController extends Controller }) ->select('id', 'device_profile_xid', 'key_name', 'display_name') ->with(['timeseriesAlert' => function ($query) { - $query->select('id', 'timeseries_key_master_xid', 'min_value', 'max_value', 'color_code', 'alert_msg'); + $query->select('id', 'timeseries_key_master_xid', 'min_value', 'max_value', 'alert_msg'); }]); } ])->findOrFail($request->device_id); - // Get telemetry data FIRST $telemetryData = $this->customerInfoService->getTelemetryDataDevice( $device, $device->timeseriesKeys->pluck('key_name')->toArray(), @@ -240,18 +235,11 @@ class TimeseriesAlertMessageController extends Controller throw new \Exception($telemetryData['error']); } - // Get only the keys that actually exist in ThingsBoard response $existingKeys = array_keys($telemetryData); - - // Process data - $result = [ - 'alerts' => [], - 'normal_telemetry' => [] - ]; + $result = []; foreach ($device->timeseriesKeys as $key) { - // Skip if this key doesn't exist in ThingsBoard response - if (!in_array($key->key_name, $existingKeys)) { + if (!in_array($key->key_name, $existingKeys, true)) { continue; } @@ -260,19 +248,9 @@ class TimeseriesAlertMessageController extends Controller continue; } - // Convert values to float for proper comparison $currentValue = (float)$dataPoint['value']; - $item = [ - 'key' => $key->key_name, - 'display_name' => $key->display_name, - 'value' => $currentValue, - 'timestamp' => $dataPoint['ts'] ?? null - ]; - - $alertTriggered = false; foreach ($key->timeseriesAlert as $alert) { - // Convert thresholds to float $minValue = $alert->min_value !== null ? (float)$alert->min_value : null; $maxValue = $alert->max_value !== null ? (float)$alert->max_value : null; @@ -280,42 +258,30 @@ class TimeseriesAlertMessageController extends Controller $isAboveMax = $maxValue !== null && $currentValue > $maxValue; if ($isBelowMin || $isAboveMax) { - Log::warning("Alert triggered", [ - 'device' => $device->id, - 'key' => $key->key_name, - 'value' => $currentValue, - 'threshold_min' => $minValue, - 'threshold_max' => $maxValue, - 'condition' => $isBelowMin ? 'below_min' : 'above_max' - ]); + // Convert alert message into an array and remove existing numbers + $formattedAlertMsg = array_map( + fn($line, $index) => ($index + 1) . ". " . preg_replace('/^\d+\.\s*/', '', trim($line)), + explode(";", $alert->alert_msg), + array_keys(explode(";", $alert->alert_msg)) + ); - $item['alert'] = [ - 'message' => $alert->alert_msg, - 'color_code' => $alert->color_code, - 'thresholds' => [ - 'min' => $minValue, - 'max' => $maxValue - ] + $result[] = [ + 'device_id' => $device->id, + 'key_name' => $key->key_name, + 'display_name' => $key->display_name, + 'alert_msg' => $formattedAlertMsg, // Return as an array ]; - $result['alerts'][] = $item; - $alertTriggered = true; - break; + break; // Stop at the first matching alert } } - if (!$alertTriggered) { - $result['normal_telemetry'][] = $item; - } + + } return response()->json([ 'success' => true, - 'device' => [ - 'id' => $device->id, - 'name' => $device->name, - 'profile' => $device->deviceProfile - ], - 'data' => $result + 'alerts' => $result ]); } catch (\Exception $e) { @@ -330,4 +296,5 @@ class TimeseriesAlertMessageController extends Controller ], 500); } } + }