sneha #57
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user