|
@@ -4,7 +4,7 @@ namespace StatsBundle\Services;
|
|
|
|
|
|
use Doctrine\ORM\EntityManagerInterface;
|
|
|
use Doctrine\ORM\EntityRepository;
|
|
|
-use StatsBundle\Entity\StatsDevice;
|
|
|
+use StatsBundle\Entity\Device;
|
|
|
use Symfony\Component\Validator\Validator\ValidatorInterface;
|
|
|
use WebserviceBundle\Services\Webservice;
|
|
|
|
|
@@ -29,7 +29,7 @@ class DeviceManager
|
|
|
/**
|
|
|
* @var EntityRepository
|
|
|
*/
|
|
|
- private $statsDeviceRepository;
|
|
|
+ private $deviceRepository;
|
|
|
|
|
|
/**
|
|
|
* @var Webservice
|
|
@@ -46,7 +46,7 @@ class DeviceManager
|
|
|
{
|
|
|
$this->em = $em;
|
|
|
$this->deviceServerRepository = $em->getRepository('StatsBundle:DeviceServer');
|
|
|
- $this->statsDeviceRepository = $em->getRepository('StatsBundle:StatsDevice');
|
|
|
+ $this->deviceRepository = $em->getRepository('StatsBundle:Device');
|
|
|
$this->validator = $validator;
|
|
|
$this->webservice = $webservice;
|
|
|
}
|
|
@@ -58,23 +58,55 @@ class DeviceManager
|
|
|
{
|
|
|
$devices = array();
|
|
|
$deviceServers = $this->deviceServerRepository->findAll();
|
|
|
+ $em = $this->em;
|
|
|
+
|
|
|
+ $dateTime = new \DateTime("now");
|
|
|
+ $date = $dateTime->format("Y-m-d H:i:s");
|
|
|
+
|
|
|
foreach ($deviceServers as $deviceServer) {
|
|
|
$deviceTypes = $deviceServer->getDeviceTypes();
|
|
|
+ $deviceServerId = $deviceServer->getId();
|
|
|
+
|
|
|
+ $qb = $em->createQueryBuilder();
|
|
|
+ $qb->delete('StatsBundle:Device', 'd');
|
|
|
+ $qb->where('d.deviceServer = :server');
|
|
|
+ $qb->setParameter('server', $deviceServer);
|
|
|
+
|
|
|
+ $qb->getQuery()->getResult();
|
|
|
+
|
|
|
foreach ($deviceTypes as $deviceType) {
|
|
|
$filters = array(
|
|
|
'deviceType' => $deviceType,
|
|
|
);
|
|
|
- $remoteDevices = $this->webservice->get($deviceServer->getUrl(), $filters);
|
|
|
- foreach ($remoteDevices as $remoteDevice) {
|
|
|
- $deviceType = $remoteDevice['deviceType'];
|
|
|
- $deviceId = $remoteDevice['deviceId'];
|
|
|
- unset($remoteDevice['id']);
|
|
|
- unset($remoteDevice['deviceType']);
|
|
|
- unset($remoteDevice['deviceId']);
|
|
|
- $device = $this->create($deviceType, $deviceId, $remoteDevice);
|
|
|
- if ($device) {
|
|
|
- $devices[] = $device;
|
|
|
+
|
|
|
+ $limit = 2000;
|
|
|
+ $offset = 0;
|
|
|
+
|
|
|
+ $remoteDevices = $this->webservice->get($deviceServer->getUrl(), $filters, array(), $limit, $offset);
|
|
|
+ while(!empty($remoteDevices)) {
|
|
|
+
|
|
|
+ $devices_values = array();
|
|
|
+
|
|
|
+ foreach ($remoteDevices as $remoteDevice) {
|
|
|
+ $deviceType = str_replace("\\","\\\\",$remoteDevice['deviceType']);
|
|
|
+ $deviceId = $remoteDevice['deviceId'];
|
|
|
+ $tenancyId = $remoteDevice['tenancyId'];
|
|
|
+ $deviceIp = $remoteDevice['ip'];
|
|
|
+ $deviceExtraData = $remoteDevice['extraData'];
|
|
|
+ $devicesIds[] = $deviceId;
|
|
|
+ $row = "(NULL, {$deviceServerId}, '{$deviceIp}','{$deviceType}', {$deviceId}, '{$deviceExtraData}', {$tenancyId}, '{$date}')";
|
|
|
+
|
|
|
+ $devices_values[] = $row;
|
|
|
+
|
|
|
}
|
|
|
+
|
|
|
+ $conn = $em->getConnection();
|
|
|
+ $sql = "INSERT LOW_PRIORITY IGNORE INTO `device` (`id`, `device_server_id`, `ip`, `device_type`, `device_id`, `extra_data`, `tenancy_id`, `updated`) VALUES ". implode(",", $devices_values).";";
|
|
|
+ $conn->query($sql);
|
|
|
+ $conn->close();
|
|
|
+
|
|
|
+ $offset += $limit;
|
|
|
+ $remoteDevices = $this->webservice->get($deviceServer->getUrl(), $filters, array(), $limit, $offset);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -82,35 +114,47 @@ class DeviceManager
|
|
|
return $devices;
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+ /*
|
|
|
+ * SE DEJA DE UTILIZAR, SE REALIZA UNA ACTUALIZACIÓN POR SQL PARA AGILIZAR, ELIMINACIÓN PREVIA
|
|
|
+ *
|
|
|
+ */
|
|
|
/**
|
|
|
* @param string $deviceType
|
|
|
* @param int $deviceId
|
|
|
* @param array $data
|
|
|
*
|
|
|
- * @return StatsDevice
|
|
|
+ * @return Device
|
|
|
*/
|
|
|
- public function create($deviceType, $deviceId, $data = array())
|
|
|
+ public function create($deviceType, $deviceId, $deviceServer, $tenancyId, $data = array(), $dateTime)
|
|
|
{
|
|
|
$device = null;
|
|
|
- $statsDevice = $this->statsDeviceRepository->findOneBy(array(
|
|
|
+ $_device = $this->deviceRepository->findOneBy(array(
|
|
|
'deviceType' => $deviceType,
|
|
|
'deviceId' => $deviceId,
|
|
|
+ 'deviceServer' => $deviceServer,
|
|
|
+ 'tenancyId' => $tenancyId,
|
|
|
));
|
|
|
- if (is_null($statsDevice)) {
|
|
|
- $device = new StatsDevice();
|
|
|
- $device->setDeviceType($deviceType);
|
|
|
- $device->setDeviceId($deviceId);
|
|
|
- foreach ($data as $column => $value) {
|
|
|
- $method = 'set'.ucfirst($column);
|
|
|
- if (method_exists($device, $method)) {
|
|
|
- $device->$method($value);
|
|
|
- }
|
|
|
+ if (is_null($_device)) {
|
|
|
+ $device = new Device();
|
|
|
+ } else {
|
|
|
+ $device = $_device;
|
|
|
+ }
|
|
|
+ $device->setDeviceType($deviceType);
|
|
|
+ $device->setDeviceId($deviceId);
|
|
|
+ $device->setDeviceServer($deviceServer);
|
|
|
+ $device->setTenancyId($tenancyId);
|
|
|
+ $device->setUpdated($dateTime);
|
|
|
+ foreach ($data as $column => $value) {
|
|
|
+ $method = 'set'.ucfirst($column);
|
|
|
+ if (method_exists($device, $method)) {
|
|
|
+ $device->$method($value);
|
|
|
}
|
|
|
+ }
|
|
|
|
|
|
- if ($this->validator->validate($device)->count() == 0) {
|
|
|
- $this->em->persist($device);
|
|
|
- $this->em->flush($device);
|
|
|
- }
|
|
|
+ if ($this->validator->validate($device)->count() == 0) {
|
|
|
+ $this->em->persist($device);
|
|
|
+ $this->em->flush($device);
|
|
|
}
|
|
|
|
|
|
return $device;
|