Merge pull request 'sayliR' (#38) from sayliR into main

Reviewed-on: Nikhil.Kadam/vib360#38
This commit is contained in:
2025-03-26 11:25:47 +00:00
6 changed files with 88 additions and 76 deletions

View File

@@ -11,6 +11,8 @@ use Illuminate\Http\Request;
use Exception;
use Illuminate\Support\Facades\Http;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Validator;
class CustomerController extends Controller
@@ -135,14 +137,18 @@ class CustomerController extends Controller
}
public function deleteCustomers($customerId)
public function deleteCustomers(Request $request)
{
try {
if (!$customerId) {
return jsonResponseWithErrorMessage('Customer ID is required', 400);
}
$validator = Validator::make($request->all(), [
'customer_id' => 'required|string',
]);
if ($validator->fails()) {
return jsonResponseWithErrorMessage($validator->errors()->first(), 400);
}
$customerId = $request->input('customer_id');
$response = $this->adminService->deleteCustomer(['customerId' => $customerId]);

View File

@@ -10,6 +10,8 @@ use Illuminate\Http\Request;
use Illuminate\Support\Str;
use Illuminate\Support\Facades\Log;
use Exception;
use Illuminate\Support\Facades\Validator;
class DeviceController extends Controller
@@ -65,6 +67,7 @@ class DeviceController extends Controller
// Call Service to create/update device
$apiResponse = $this->deviceService->createOrUpdateDevice($deviceData);
// Log::info("API Response: " . json_encode($apiResponse));
// Store device in the database
$device = Device::updateOrCreate(
@@ -120,13 +123,19 @@ class DeviceController extends Controller
}
public function deleteDevice($deviceId)
public function deleteDevice(Request $request)
{
try {
if (!$deviceId) {
return jsonResponseWithErrorMessage('Device ID is required', 400);
$validator = Validator::make($request->all(), [
'device_id' => 'required|string',
]);
if ($validator->fails()) {
return jsonResponseWithErrorMessage($validator->errors()->first(), 400);
}
$deviceId = $request->input('device_id');
$response = $this->deviceService->deleteDevice(['deviceId' => $deviceId]);

View File

@@ -11,6 +11,7 @@ use Illuminate\Container\Attributes\DB;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB as FacadesDB;
use Illuminate\Support\Facades\Http;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Validator;
class TelemetryController extends Controller
@@ -50,7 +51,6 @@ class TelemetryController extends Controller
foreach ($devices as $device) {
$telemetry = [];
// ✅ Fetch key names along with additional columns from timeseries_key_master
$keysData = TimeseriesKeyMaster::where('device_profile_xid', $device->device_profile_id)
->where(function ($query) {
@@ -58,14 +58,15 @@ class TelemetryController extends Controller
->orWhere('display_on_popup', true);
})
->get(['key_name', 'display_name', 'display_on_dashboard', 'display_on_popup']);
$keyNames = $keysData->pluck('key_name')->toArray();
// dd($keyNames);
// Log::info('keyNames count', ['count' => count($keyNames)]);
$telemetryResponse = $this->customerInfoService->getTelemetryData($device, $keyNames, $startTs, $endTs);
// dd($telemetryResponse);
foreach ($keysData as $keyData) {
$keyName = $keyData->key_name;
if (isset($telemetryResponse[$keyName])) {
foreach ($telemetryResponse[$keyName] as $item) {
$telemetry[] = [

View File

@@ -30,28 +30,27 @@ class UserAssetLinkController extends Controller
try {
// $token = readHeaderToken();
// $token = readHeaderToken();
// $token = readHeaderToken();
// $userAssetLinks = UserAssetLink::with(['user', 'asset.devices'])
// ->withCount([
// 'assets as active_devices_count' => function ($query) {
// $query->whereHas('devices', function ($q) {
// $q->where('active', 1);
// });
// },
// 'assets as inactive_devices_count' => function ($query) {
// $query->whereHas('devices', function ($q) {
// $q->where('active', 0);
// });
// }
// ])
// ->where('id', $token['sub'])
// ->first();
// $userAssetLinks = UserAssetLink::with(['user', 'asset.devices'])
// ->withCount([
// 'assets as active_devices_count' => function ($query) {
// $query->whereHas('devices', function ($q) {
// $q->where('active', 1);
// });
// },
// 'assets as inactive_devices_count' => function ($query) {
// $query->whereHas('devices', function ($q) {
// $q->where('active', 0);
// });
// }
// ])
// ->where('id', $token['sub'])
// ->first();
// return response()->json($userAssetLinks);
// return response()->json($userAssetLinks);
$token = readHeaderToken();
// dd($token);
$token = readHeaderToken();
// Fetch user with assets and device counts
$user = User::with(['assets.devices'])
@@ -79,50 +78,47 @@ class UserAssetLinkController extends Controller
foreach ($user->assets as $asset) {
foreach ($asset->devices as $device) {
$device->health_status = null;
foreach ($user->assets->flatMap->devices as $device) {
$device->health_status = null;
$device->online = null;
// Fetch device details from API using customer_id and device_id
$deviceResponse = Http::withHeaders([
'accept' => 'application/json',
'Authorization' => 'Bearer ' . $bearerToken,
])->get("$apiBaseUrl/api/customer/{$device->customer_id}/deviceInfos", [
'pageSize' => 100, // Fetch more devices in one request
'page' => 0
]);
// Fetch device details from API using customer_id
$deviceResponse = Http::withHeaders([
'accept' => 'application/json',
'Authorization' => 'Bearer ' . $bearerToken,
])->get("$apiBaseUrl/api/customer/{$device->customer_id}/deviceInfos", [
'pageSize' => 100,
'page' => 0
]);
if (!$deviceResponse->successful()) {
Log::error("Failed to fetch device info for Customer ID: {$device->customer_id}, Error: " . $deviceResponse->body());
$device->online = null; // Set to false if API call fails
continue;
}
$deviceData = $deviceResponse->json();
$matchingDevice = collect($deviceData['data'] ?? [])
->firstWhere('id.id', $device->id);
// Explicitly set online status for all devices
$device->online = $matchingDevice['active'] ?? null;
// Fetch telemetry data for the device
$telemetryResponse = Http::withHeaders([
'accept' => 'application/json',
'Authorization' => 'Bearer ' . $bearerToken,
])->get("$apiBaseUrl/api/plugins/telemetry/DEVICE/{$device->id}/values/timeseries", [
'useStrictDataTypes' => 'false'
]);
if (!$telemetryResponse->successful()) {
Log::error("Failed to fetch telemetry for Device ID: {$device->id}, Error: " . $telemetryResponse->body());
$device->health_status = null;
continue;
}
$telemetryData = $telemetryResponse->json();
$device->health_status = !empty($telemetryData['MechanicalHealth_valueInPercent'])
? (float) $telemetryData['MechanicalHealth_valueInPercent'][0]['value']
: null;
if (!$deviceResponse->successful()) {
Log::error("Failed to fetch device info for Customer ID: {$device->customer_id}, Error: " . $deviceResponse->body());
continue;
}
$deviceData = collect($deviceResponse->json()['data'] ?? []);
$matchingDevice = $deviceData->firstWhere('id.id', $device->id);
// Explicitly set online status for all devices
$device->online = $matchingDevice['active'] ?? null;
// Fetch telemetry data for the device
$telemetryResponse = Http::withHeaders([
'accept' => 'application/json',
'Authorization' => 'Bearer ' . $bearerToken,
])->get("$apiBaseUrl/api/plugins/telemetry/DEVICE/{$device->id}/values/timeseries", [
'useStrictDataTypes' => 'false'
]);
if (!$telemetryResponse->successful()) {
Log::error("Failed to fetch telemetry for Device ID: {$device->id}, Error: " . $telemetryResponse->body());
continue;
}
$telemetryData = $telemetryResponse->json();
$device->health_status = !empty($telemetryData['MechanicalHealth_valueInPercent'])
? (float) $telemetryData['MechanicalHealth_valueInPercent'][0]['value']
: null;
}
return response()->json($user);
@@ -132,4 +128,3 @@ class UserAssetLinkController extends Controller
}
}
}

View File

@@ -82,8 +82,8 @@ public function getThingsBoardDevices($customerId)
// 'keys' => 'MechanicalHealth_valueInPercent',
// 'startTs' => $startTs,
// 'interval' => $endTs,
'limit' => 100,
'useStrictDataTypes' => false
// 'limit' => 100,
// 'useStrictDataTypes' => false
]);
@@ -101,6 +101,7 @@ public function getThingsBoardDevices($customerId)
// Decode the telemetry response
$telemetry = $response->json();
Log::info("telemetry", $telemetry);
if (json_last_error() !== JSON_ERROR_NONE) {
Log::error("Failed to decode telemetry response for device: {$device->name}", [

View File

@@ -34,7 +34,7 @@ Route::get('/assets/{customer_id}', [AssetadmintController::class, 'assestlistCu
Route::post('/customer/create-or-update', [CustomerController::class, 'createOrUpdateCustomer'])->name('customer.create-or-update');
Route::get('/customer/list', [CustomerController::class, 'listCustomers'])->name('customer.list');
Route::post('/customer/delete/{customerId}', [CustomerController::class, 'deleteCustomers'])->name('customer.delete');
Route::post('/customer/delete', [CustomerController::class, 'deleteCustomers'])->name('customer.delete');
//******************************************************* User API********************************************************
@@ -52,7 +52,7 @@ Route::get('/users/{customer_id}', [UsersController::class, 'userlistCustomer'])
//******************************************************* Device API********************************************************
Route::post('/device/create-or-update', [DeviceController::class, 'createOrUpdateDevice'])->name('device.create-or-update');
Route::get('/device/list', [DeviceController::class, 'listDevices'])->name('device.list');
Route::post('/device/delete/{deviceId}', [DeviceController::class, 'deleteDevice'])->name('device.delete');
Route::post('/device/delete', [DeviceController::class, 'deleteDevice'])->name('device.delete');
Route::get('/device/{customer_id}', [DeviceController::class, 'devicelistCustomer'])->name('devicetList.customer');