sayali #59

Merged
Sayli.Parab merged 2 commits from sayali into main 2025-04-01 14:38:23 +00:00

View File

@@ -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')