sayali #59
@@ -639,24 +639,28 @@ class TelemetryController extends Controller
|
||||
public function telemetryDataDevice(Request $request)
|
||||
{
|
||||
try {
|
||||
Log::info('Telemetry request received', ['request_data' => $request->all()]);
|
||||
|
||||
$token = readHeaderToken();
|
||||
if (!$token) {
|
||||
Log::warning('Unauthorized access attempt: Missing token');
|
||||
return response()->json([
|
||||
'success' => false,
|
||||
'error' => 'Authorization token required'
|
||||
'error' => 'Authorization token required'
|
||||
], 401);
|
||||
}
|
||||
|
||||
$validator = Validator::make($request->all(), [
|
||||
'device_id' => 'required|string',
|
||||
'startTs' => 'nullable|string',
|
||||
'endTs' => 'nullable|string',
|
||||
'startTs' => 'nullable|string',
|
||||
'endTs' => 'nullable|string',
|
||||
]);
|
||||
|
||||
if ($validator->fails()) {
|
||||
Log::error('Validation failed', ['errors' => $validator->errors()]);
|
||||
return response()->json([
|
||||
'success' => false,
|
||||
'error' => $validator->errors()->first()
|
||||
'error' => $validator->errors()->first()
|
||||
], 400);
|
||||
}
|
||||
|
||||
@@ -665,6 +669,8 @@ class TelemetryController extends Controller
|
||||
$endTs = $request->input('endTs') ?: null;
|
||||
|
||||
try {
|
||||
Log::info('Fetching device telemetry', ['device_id' => $deviceId]);
|
||||
|
||||
$deviceWithTelemetry = Device::with([
|
||||
'deviceProfile',
|
||||
'timeseriesKeys' => function ($query) {
|
||||
@@ -679,19 +685,16 @@ class TelemetryController extends Controller
|
||||
->firstOrFail();
|
||||
|
||||
$displayKeys = $deviceWithTelemetry->timeseriesKeys->pluck('key_name')->toArray();
|
||||
$deviceProfileName = strtolower($deviceWithTelemetry->deviceProfile->name ?? '');
|
||||
|
||||
if (empty($displayKeys)) {
|
||||
return response()->json([
|
||||
'success' => true,
|
||||
'telemetry' => [
|
||||
'device_id' => (string) $deviceWithTelemetry->id,
|
||||
'device_name' => $deviceWithTelemetry->name,
|
||||
'device_profile_name' => $deviceWithTelemetry->deviceProfile->name,
|
||||
'device_profile_id' => (string) $deviceWithTelemetry->device_profile_id,
|
||||
'telemetry_data' => [],
|
||||
]
|
||||
], 200);
|
||||
}
|
||||
Log::info('Device profile and keys retrieved', [
|
||||
'device_profile' => $deviceProfileName,
|
||||
'display_keys' => $displayKeys
|
||||
]);
|
||||
|
||||
// Pressure key condition
|
||||
$pressureKey = 'Pressure_value';
|
||||
$pressureActive = false;
|
||||
|
||||
$telemetryResponse = $this->customerInfoService->getTelemetryDataDevice(
|
||||
$deviceWithTelemetry,
|
||||
@@ -701,62 +704,99 @@ class TelemetryController extends Controller
|
||||
$token
|
||||
);
|
||||
|
||||
|
||||
|
||||
if (!is_array($telemetryResponse)) {
|
||||
Log::error('Invalid telemetry data format received');
|
||||
throw new \Exception("Invalid telemetry data format received from service");
|
||||
}
|
||||
|
||||
// Check if the device has "Gas Engine Profile" or "Engine Profile" in its profile name
|
||||
if (
|
||||
(strpos($deviceProfileName, 'gas engine profile') !== false || strpos($deviceProfileName, 'engine profile') !== false)
|
||||
&& isset($telemetryResponse[$pressureKey])
|
||||
&& is_array($telemetryResponse[$pressureKey])
|
||||
) {
|
||||
foreach ($telemetryResponse[$pressureKey] as $pressureData) {
|
||||
if (!empty($pressureData['value']) && floatval($pressureData['value']) > 0) {
|
||||
$pressureActive = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Log::info('Telemetry data processed', [
|
||||
'pressure_value' => $pressureActive,
|
||||
'telemetry_keys' => array_keys($telemetryResponse)
|
||||
]);
|
||||
|
||||
// Filter telemetry data based on display keys
|
||||
$filteredResponse = array_intersect_key($telemetryResponse, array_flip($displayKeys));
|
||||
|
||||
// Add Pressure key if condition is met
|
||||
if (isset($telemetryResponse[$pressureKey])) {
|
||||
$filteredResponse[$pressureKey] = $telemetryResponse[$pressureKey];
|
||||
}
|
||||
|
||||
$telemetry = collect($filteredResponse)
|
||||
->flatMap(function ($items, $keyName) use ($deviceWithTelemetry) {
|
||||
$keyData = $deviceWithTelemetry->timeseriesKeys->firstWhere('key_name', $keyName);
|
||||
|
||||
return collect($items)->map(function ($item) use ($keyName, $keyData) {
|
||||
return [
|
||||
'key_name' => $keyName,
|
||||
'timestamp' => $item['ts'] ?? null,
|
||||
'value' => $item['value'] ?? null,
|
||||
'display_name' => $keyData->display_name ?? $keyName,
|
||||
'display_on_dashboard' => $keyData->display_on_dashboard ?? false,
|
||||
'display_on_popup' => $keyData->display_on_popup ?? false
|
||||
'key_name' => $keyName,
|
||||
'timestamp' => $item['ts'] ?? null,
|
||||
'value' => $item['value'] ?? null,
|
||||
'display_name' => $keyData->display_name ?? $keyName,
|
||||
'display_on_dashboard' => $keyData->display_on_dashboard ?? false,
|
||||
'display_on_popup' => $keyData->display_on_popup ?? false
|
||||
];
|
||||
});
|
||||
})
|
||||
->values()
|
||||
->all();
|
||||
|
||||
Log::info('Telemetry response successfully generated', ['device_id' => $deviceId]);
|
||||
|
||||
return response()->json([
|
||||
'success' => true,
|
||||
'telemetry' => [
|
||||
'device_id' => (string) $deviceWithTelemetry->id,
|
||||
'device_name' => $deviceWithTelemetry->name,
|
||||
'device_profile_name' => $deviceWithTelemetry->deviceProfile->name,
|
||||
'device_profile_id' => (string) $deviceWithTelemetry->device_profile_id,
|
||||
'telemetry_data' => $telemetry,
|
||||
'device_id' => (string) $deviceWithTelemetry->id,
|
||||
'device_name' => $deviceWithTelemetry->name,
|
||||
'device_profile_name' => $deviceWithTelemetry->deviceProfile->name,
|
||||
'device_profile_id' => (string) $deviceWithTelemetry->device_profile_id,
|
||||
'pressure_value' => $pressureActive, // Updated response
|
||||
'telemetry_data' => $telemetry,
|
||||
]
|
||||
], 200);
|
||||
} catch (\Illuminate\Database\Eloquent\ModelNotFoundException $e) {
|
||||
Log::error('Device not found', ['device_id' => $deviceId]);
|
||||
return response()->json([
|
||||
'success' => false,
|
||||
'error' => 'Device not found'
|
||||
'error' => 'Device not found'
|
||||
], 404);
|
||||
} catch (\Exception $e) {
|
||||
Log::error('Failed to fetch telemetry data', [
|
||||
'device_id' => $deviceId,
|
||||
'error' => $e->getMessage()
|
||||
]);
|
||||
return response()->json([
|
||||
'success' => false,
|
||||
'error' => 'Failed to fetch telemetry data',
|
||||
'error' => 'Failed to fetch telemetry data',
|
||||
'details' => config('app.debug') ? $e->getMessage() : null
|
||||
], 503);
|
||||
}
|
||||
} catch (\Exception $e) {
|
||||
Log::critical('Internal server error', ['error' => $e->getMessage()]);
|
||||
return response()->json([
|
||||
'success' => false,
|
||||
'error' => 'Internal server error',
|
||||
'error' => 'Internal server error',
|
||||
'details' => config('app.debug') ? $e->getMessage() : null
|
||||
], 500);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
// public function telemetryDataDeviceDiagnostic(Request $request, $deviceId)
|
||||
// {
|
||||
// $devices = Device::with('deviceProfile')
|
||||
|
||||
Reference in New Issue
Block a user