From c6e714ef4ec491388fafe3dce99259eb6c8861dd Mon Sep 17 00:00:00 2001 From: sayliraut Date: Tue, 1 Apr 2025 15:37:41 +0530 Subject: [PATCH 1/2] changes in telemntry data asset api --- .../CustomerDeviceInfoController.php | 8 +- .../APIS/CustomerApi/TelemetryController.php | 75 ++++++++----------- .../CustomerApi/UserAssetLinkController.php | 8 +- 3 files changed, 39 insertions(+), 52 deletions(-) diff --git a/app/Http/Controllers/APIS/CustomerApi/CustomerDeviceInfoController.php b/app/Http/Controllers/APIS/CustomerApi/CustomerDeviceInfoController.php index 63074dd..1c21b20 100644 --- a/app/Http/Controllers/APIS/CustomerApi/CustomerDeviceInfoController.php +++ b/app/Http/Controllers/APIS/CustomerApi/CustomerDeviceInfoController.php @@ -252,12 +252,12 @@ class CustomerDeviceInfoController extends Controller // Log::info("Telemetry data: " . json_encode($telemetryData)); $engineName = $telemetryData['Engine_Name'][0]['value'] ?? null; - $mechanicalHealthValue1 = isset($telemetryData['MechanicalHealth_value'][0]['value']) - ? (float) $telemetryData['MechanicalHealth_value'][0]['value'] + $mechanicalHealthValue1 = isset($telemetryData['MechanicalHealth_valueInPercent'][0]['value']) + ? (float) $telemetryData['MechanicalHealth_valueInPercent'][0]['value'] : null; - $engineEfficiencyValue1 = isset($telemetryData['EngineEfficiency_value'][0]['value']) - ? (float) $telemetryData['EngineEfficiency_value'][0]['value'] + $engineEfficiencyValue1 = isset($telemetryData['EngineEfficiency_valueInPercent'][0]['value']) + ? (float) $telemetryData['EngineEfficiency_valueInPercent'][0]['value'] : null; $engineEfficiencyValue4 = isset($telemetryData['EngineEfficiency_valueInHealth'][0]['value']) diff --git a/app/Http/Controllers/APIS/CustomerApi/TelemetryController.php b/app/Http/Controllers/APIS/CustomerApi/TelemetryController.php index 08c7247..7c4d847 100644 --- a/app/Http/Controllers/APIS/CustomerApi/TelemetryController.php +++ b/app/Http/Controllers/APIS/CustomerApi/TelemetryController.php @@ -4,8 +4,10 @@ namespace App\Http\Controllers\APIS\CustomerApi; use App\Http\Controllers\Controller; use App\Models\Asset; +use App\Models\Customer; use App\Models\Device; use App\Models\TimeseriesKeyMaster; +use App\Models\User; use App\Services\CustomerInfoService; use Illuminate\Container\Attributes\DB; use Illuminate\Http\Request; @@ -24,9 +26,11 @@ class TelemetryController extends Controller } - public function telemetryDataAsset(Request $request) { + $token = readHeaderToken(); + $customerId = User::where('id', $token['sub'])->value('customer_id'); + $validator = Validator::make($request->all(), [ 'asset_id' => 'required|string', 'startTs' => 'nullable|string', @@ -41,61 +45,44 @@ class TelemetryController extends Controller $startTs = $request->input('startTs') ?: null; $endTs = $request->input('endTs') ?: null; - // Fetch devices associated with the asset - $devices = Device::with('deviceProfile') - ->where('asset_id', $assetId) + // Fetch devices with profiles and keys in a single query + $devices = Device::with([ + 'deviceProfile', + 'timeseriesKeys' => function ($query) { + $query->where('display_on_dashboard', true) + ->orWhere('display_on_popup', true) + ->select(['device_profile_xid', 'key_name', 'display_name', 'display_on_dashboard', 'display_on_popup']); + } + ])->where('asset_id', $assetId) + ->where('customer_id', $customerId) ->get(); if ($devices->isEmpty()) { return response()->json(['error' => 'No devices found for the asset'], 404); } - $response = []; - - foreach ($devices as $device) { - $telemetry = []; - - // Fetch key names and additional columns from TimeseriesKeyMaster - $keysData = TimeseriesKeyMaster::where('device_profile_xid', $device->device_profile_id) - ->where(function ($query) { - $query->where('display_on_dashboard', true) - ->orWhere('display_on_popup', true); - }) - ->get(['key_name', 'display_name', 'display_on_dashboard', 'display_on_popup']); - - $keyNames = $keysData->pluck('key_name')->toArray(); - - // Log key names for debugging - // Log::info('Key Names for Device', ['device_id' => $device->id, 'key_names' => $keyNames]); - - // Fetch telemetry data + // Map devices and structure response + $response = $devices->map(function ($device) use ($startTs, $endTs) { + $keyNames = $device->timeseriesKeys->pluck('key_name')->toArray(); $telemetryResponse = $this->customerInfoService->getTelemetryData($device, $keyNames, $startTs, $endTs); - foreach ($keysData as $keyData) { - $keyName = $keyData->key_name; - - if (isset($telemetryResponse[$keyName])) { - foreach ($telemetryResponse[$keyName] as $item) { - $telemetry[] = [ - 'key_name' => $keyName, - 'display_name' => $keyData->display_name, - 'display_on_dashboard' => $keyData->display_on_dashboard, - 'display_on_popup' => $keyData->display_on_popup, - 'timestamp' => $item['ts'] ?? null, - 'value' => $item['value'] ?? null, - ]; - } - } - } - - $response[] = [ + return [ 'device_id' => (string) $device->id, 'device_profile_name' => (string) $device->deviceProfile->name, 'asset_id' => (string) $device->asset_id, 'device_profile_id' => (string) $device->device_profile_id, - 'telemetry' => $telemetry, + 'telemetry' => $device->timeseriesKeys->map(function ($keyData) use ($telemetryResponse) { + return collect($telemetryResponse[$keyData->key_name] ?? [])->map(fn($item) => [ + 'key_name' => $keyData->key_name, + 'display_name' => $keyData->display_name, + 'display_on_dashboard' => $keyData->display_on_dashboard, + 'display_on_popup' => $keyData->display_on_popup, + 'timestamp' => $item['ts'] ?? null, + 'value' => $item['value'] ?? null, + ]); + })->flatten(1), ]; - } + }); return response()->json(['telemetry' => $response]); } @@ -322,4 +309,4 @@ class TelemetryController extends Controller // return response()->json(['telemetry' => $response]); // } -} \ No newline at end of file +} diff --git a/app/Http/Controllers/APIS/CustomerApi/UserAssetLinkController.php b/app/Http/Controllers/APIS/CustomerApi/UserAssetLinkController.php index 6193881..a90a013 100644 --- a/app/Http/Controllers/APIS/CustomerApi/UserAssetLinkController.php +++ b/app/Http/Controllers/APIS/CustomerApi/UserAssetLinkController.php @@ -99,12 +99,12 @@ class UserAssetLinkController extends Controller $engineName = $telemetryData['Engine_Name'][0]['value'] ?? null; // Extract values from telemetry data - $mechanicalHealthValue1 = isset($telemetryData['MechanicalHealth_value'][0]['value']) - ? (float) $telemetryData['MechanicalHealth_value'][0]['value'] + $mechanicalHealthValue1 = isset($telemetryData['MechanicalHealth_valueInPercent'][0]['value']) + ? (float) $telemetryData['MechanicalHealth_valueInPercent'][0]['value'] : null; - $engineEfficiencyValue1 = isset($telemetryData['EngineEfficiency_value'][0]['value']) - ? (float) $telemetryData['EngineEfficiency_value'][0]['value'] + $engineEfficiencyValue1 = isset($telemetryData['EngineEfficiency_valueInPercent'][0]['value']) + ? (float) $telemetryData['EngineEfficiency_valueInPercent'][0]['value'] : null; $engineEfficiencyValue4 = isset($telemetryData['EngineEfficiency_valueInHealth'][0]['value']) -- 2.34.1 From 4840c389794c40fe521bba2b6510d72c422c1ea5 Mon Sep 17 00:00:00 2001 From: sayliraut Date: Tue, 1 Apr 2025 19:42:42 +0530 Subject: [PATCH 2/2] color code --- .../APIS/CustomerApi/TelemetryController.php | 70 ++++++++++++------- 1 file changed, 46 insertions(+), 24 deletions(-) diff --git a/app/Http/Controllers/APIS/CustomerApi/TelemetryController.php b/app/Http/Controllers/APIS/CustomerApi/TelemetryController.php index 3c30288..5a63a9b 100644 --- a/app/Http/Controllers/APIS/CustomerApi/TelemetryController.php +++ b/app/Http/Controllers/APIS/CustomerApi/TelemetryController.php @@ -6,6 +6,7 @@ use App\Http\Controllers\Controller; use App\Models\Asset; use App\Models\Customer; use App\Models\Device; +use App\Models\TimeseriesAlertMessage; use App\Models\TimeseriesKeyMaster; use App\Models\User; use App\Services\AlarmService; @@ -382,13 +383,12 @@ class TelemetryController extends Controller $startTs = $request->input('startTs') ?: now()->subHours(24)->timestamp * 1000; $endTs = $request->input('endTs') ?: now()->timestamp * 1000; - $devices = Device::with([ 'deviceProfile', 'timeseriesKeys' => function ($query) { $query->where('display_on_dashboard', true) ->orWhere('display_on_popup', true) - ->select(['device_profile_xid', 'key_name', 'display_name', 'display_on_dashboard', 'display_on_popup']); + ->select(['id', 'device_profile_xid', 'key_name', 'display_name', 'display_on_dashboard', 'display_on_popup']); } ])->where('asset_id', $assetId) ->where('customer_id', $customerId) @@ -398,33 +398,57 @@ class TelemetryController extends Controller return response()->json(['error' => 'No devices found for the asset'], 404); } - $response = $devices->map(function ($device) use ($startTs, $endTs) { - - $keysData = TimeseriesKeyMaster::where('device_profile_xid', $device->device_profile_id) - ->where('display_on_dashboard', true) - ->get(['key_name', 'display_name', 'display_on_dashboard', 'display_on_popup']); - + $keysData = $device->timeseriesKeys; $keyNames = $keysData->pluck('key_name')->toArray(); $telemetryResponse = $this->customerInfoService->getTelemetryData($device, $keyNames, $startTs, $endTs); $alarmMap = $this->getDeviceAlarmsForTelemetry($device->id); - // Use map() instead of foreach - $telemetry = $keysData->map(function ($keyData) use ($telemetryResponse, $alarmMap) { - $keyName = $keyData->key_name; - $alert = isset($alarmMap[$keyName]); + $alertMessages = TimeseriesAlertMessage::whereIn('timeseries_key_master_xid', $keysData->pluck('id')) + ->orderBy('min_value', 'asc') + ->get() + ->groupBy('timeseries_key_master_xid'); + $telemetry = $keysData->map(function ($keyData) use ($telemetryResponse, $alarmMap, $alertMessages) { + return collect($telemetryResponse[$keyData->key_name] ?? [])->map(function ($item) use ($keyData, $alarmMap, $alertMessages) { + $keyName = $keyData->key_name; + $alert = isset($alarmMap[$keyName]); + $value = floatval($item['value'] ?? 0); + $colorCode = null; - return collect($telemetryResponse[$keyName] ?? [])->map(fn($item) => [ - 'key_name' => $keyName, - 'display_name' => $keyData->display_name, - 'display_on_dashboard' => $keyData->display_on_dashboard, - 'display_on_popup' => $keyData->display_on_popup, - 'timestamp' => $item['ts'] ?? null, - 'value' => $item['value'] ?? null, - 'alert' => $alert - ]); + // Default to grey if value is 0 + if ($value == 0) { + $colorCode = "grey"; + } else { + // Check alert messages for this key + if (isset($alertMessages[$keyData->id])) { + foreach ($alertMessages[$keyData->id] as $alertMsg) { + // If min_value or max_value is null, return null + if (is_null($alertMsg->min_value) || is_null($alertMsg->max_value)) { + $colorCode = 'green'; + break; + } + + if ($value >= floatval($alertMsg->min_value) && $value <= floatval($alertMsg->max_value)) { + $colorCode = $alertMsg->color_code; + break; + } + } + } + } + + return [ + 'key_name' => $keyName, + 'display_name' => $keyData->display_name, + 'display_on_dashboard' => $keyData->display_on_dashboard, + 'display_on_popup' => $keyData->display_on_popup, + 'timestamp' => $item['ts'] ?? null, + 'value' => $value, + 'alert' => $alert, + 'color_code' => $colorCode, // Now handles null & grey cases + ]; + }); })->flatten(1); return [ @@ -436,14 +460,12 @@ class TelemetryController extends Controller ]; }); - return response()->json(['telemetry' => $response]); } - private function getDeviceAlarmsForTelemetry($deviceId) { Log::info("Fetching alarms for device: {$deviceId}"); @@ -857,4 +879,4 @@ class TelemetryController extends Controller // return response()->json(['telemetry' => $response]); // } -} \ No newline at end of file +} -- 2.34.1