src/Centralstage/DeviceBundle/EventSubscriber/SensorRawPacketSubscriber.php line 21

Open in your IDE?
  1. <?php
  2. namespace App\Centralstage\DeviceBundle\EventSubscriber;
  3. use App\Centralstage\CoreBundle\Models\mongoDBDataModel;
  4. use App\Centralstage\CoreBundle\Utils\DateTimeHelper;
  5. use App\Centralstage\DeviceBundle\Event\SensorRawPacketEvent;
  6. use App\Centralstage\DeviceBundle\Models\DeviceDataModel;
  7. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  8. use Doctrine\ODM\MongoDB\DocumentManager;
  9. use MongoDB\BSON\UTCDateTime;
  10. class SensorRawPacketSubscriber implements EventSubscriberInterface
  11. {
  12.     private $documentManager;
  13.     public function __construct(DocumentManager $documentManager)
  14.     {
  15.         $this->documentManager $documentManager;
  16.     }
  17.     public function onProcessRawData(SensorRawPacketEvent $RawObject) : void
  18.     {   
  19.         try {
  20.             $context $RawObject->getData();
  21.             list($deviceChannelID$data$orgKey$currentDate,$MachineType) = array_values($context);
  22.             $currentDT         DateTimeHelper::parseDateTime($currentDate'Y-m-d'DateTimeHelper::ServerTimeZone);
  23.             $conDetails        mongoDBDataModel::getDataBaseSensorCollection($orgKey,$deviceChannelID$currentDT,$MachineType);
  24.             $dataBase          $conDetails["database"];
  25.             $collectionName    $conDetails["collection"];
  26.             $data              json_decode($datatrue);
  27.             $deviceTimestamp   $data['timestamp'];
  28.             $timestamp         = new UTCDateTime($deviceTimestamp 1000); // Convert to milliseconds
  29.             $data['timestamp'] = $timestamp;
  30.             $data['deviceChannelID'] = $deviceChannelID;
  31.           
  32.         
  33.             $database $this->documentManager->getClient()->selectDatabase($dataBase);
  34.         
  35.             // Check if collection exists and create if not
  36.             $collections $database->listCollections(['filter' => ['name' => $collectionName]]);
  37.             if (iterator_count($collections) === 0) {
  38.                 $database->command([
  39.                     'create' => $collectionName,
  40.                     'timeseries' => [
  41.                         'timeField' => 'timestamp',
  42.                     ],
  43.                 ]);
  44.                 // Create index on the timestamp field
  45.                 $database->selectCollection($collectionName)->createIndex(['timestamp' => 1]);
  46.             }
  47.         
  48.             // Insert data into the collection
  49.             $database->selectCollection($collectionName)->insertOne($data);
  50.         } catch (\Exception $exception) {
  51.             $error $exception->getMessage();
  52.         }
  53.     }
  54.     public static function getSubscribedEvents(): array
  55.     {
  56.         return [
  57.             'device.raw' => 'onProcessRawData'
  58.         ];
  59.     }
  60.     public function __destruct(){}
  61. }