sneha #57

Merged
Sneha.Yadav merged 2 commits from sneha into main 2025-04-01 14:06:41 +00:00

View File

@@ -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);
}
}
}