Browse Source

FD3-753 fix update fixed ip cablemodem al editar o eliminar un host DHCP

Espinoza Guillermo 6 years ago
parent
commit
9ac451fb57

+ 2 - 2
composer.lock

@@ -1550,7 +1550,7 @@
             "source": {
                 "type": "git",
                 "url": "ssh://git@200.50.168.30:222/VendorSoftwareFlowdat3/BaseOAuthClientBundle.git",
-                "reference": "596bc7b28ad90ba558da5b3eb5d7f26c583b148d"
+                "reference": "1c60fd91f1bb0fe5125da70908670629d4d341e6"
             },
             "require": {
                 "ext-curl": "*",
@@ -1569,7 +1569,7 @@
                 "bundle",
                 "oauth"
             ],
-            "time": "2018-10-23T15:06:48+00:00"
+            "time": "2018-12-04T13:12:24+00:00"
         },
         {
             "name": "ik/owner-voter-bundle",

+ 80 - 32
src/HostBundle/Command/CablemodemUpdateCommand.php

@@ -75,6 +75,7 @@ EOT
             'username' => $input->getOption('api-username'),
             'password' => $input->getOption('api-password'),
         ];
+        $this->connection = $this->getContainer()->get('database_connection');
         $this->webservice = $this->getContainer()->get('webservice');
         $em = $this->getContainer()->get('doctrine.orm.entity_manager');
         
@@ -108,15 +109,35 @@ EOT
      */
     private function findCablemodem($mac)
     {
-        $ws = $this->webservice;
-        $urlGET = $this->input->getOption('url-get');
-        
-        // Consulto en Cablemodem
-        $cablemodem = null;
-        $url = $ws->buildUrl($urlGET, compact('mac'));
-        $cablemodemJSON = $ws->makeGetRequest($url);
-        if ($cablemodemJSON) {
-            $cablemodem = current(json_decode($cablemodemJSON, true));
+        // Se consulta MySQL, de lo contrario se consulta por ws
+        try {
+            $cablemodem = null;
+            
+            $query = "SELECT * FROM fd3_cablemodem.cablemodem WHERE mac=:mac;";
+            $stmt = $this->connection->prepare($query);
+            $stmt->bindValue('mac', $mac);
+            $stmt->execute();
+            $result = $stmt->fetchAll();
+            if (isset($result[0])) {
+                $cablemodem  = $result[0];
+            } else {
+                $ws = $this->webservice;
+                $urlGET = $this->input->getOption('url-get');
+                
+                // Consulto en Cablemodem por ws
+                $url = $ws->buildUrl($urlGET, compact('mac'));
+                $cablemodemJSON = $ws->makeGetRequest($url);
+                if ($cablemodemJSON) {
+                    $decode = json_decode($cablemodemJSON, true);
+                    if (json_last_error() == JSON_ERROR_NONE) {
+                        $cablemodem = current($decode);
+                    } else {
+                        var_dump(json_last_error_msg());
+                    }
+                }
+            }
+        } catch (\Exception $ex) {
+            var_dump($ex->getMessage());
         }
         
         return $cablemodem;
@@ -130,29 +151,56 @@ EOT
      */
     private function updateCablemodem($cablemodem, $host)
     {
-        $ws = $this->webservice;
-        $id = $cablemodem['id'];
-        $urlPUT = str_replace('{id}', $id, $this->input->getOption('url-put'));
-        $fixedAddress = $host->getFixedAddress();
-        $data = [];
-        switch ($host->getHostType()->getShortname()) {
-            case 'cablemodem':
-                $data['fixedIP'] = $fixedAddress;
-                break;
-            case 'cpe':
-                $data['cpeFixedIP'] = $fixedAddress;
-                break;
-            case 'mta':
-                $data['mtaFixedIP'] = $fixedAddress;
-                break;
-            default:
-                $data['fixedIP'] = $fixedAddress;
-                break;
-        }
-        
-        $cablemodemJSON = $ws->makeGetRequest($urlPUT, HttpRequestInterface::METHOD_PUT, $data);
-        if ($cablemodemJSON) {
-            $cablemodem = current(json_decode($cablemodemJSON, true));
+        // actualizo por db o ws
+        try {
+            $fixedAddress = $host->getFixedAddress();
+            $data = [];
+            switch ($host->getHostType()->getShortname()) {
+                case 'cablemodem':
+                    $data['fixedIP'] = $fixedAddress;
+                    $set = 'fixed_ip=:fixed_ip';
+                    break;
+                case 'cpe':
+                    $data['cpeFixedIP'] = $fixedAddress;
+                    $set = 'cpe_fixed_ip=:fixed_ip';
+                    break;
+                case 'mta':
+                    $data['mtaFixedIP'] = $fixedAddress;
+                    $set = 'mta_fixed_ip=:fixed_ip';
+                    break;
+                default:
+                    $data['fixedIP'] = $fixedAddress;
+                    $set = 'fixed_ip=:fixed_ip';
+                    break;
+            }
+            
+            $query = sprintf("UPDATE fd3_cablemodem.cablemodem 
+                      SET %s
+                      WHERE mac=:mac;
+            ", $set);
+            
+            $stmt = $this->connection->prepare($query);
+            $stmt->bindValue('mac', $cablemodem['mac']);
+            $stmt->bindValue('fixed_ip', $fixedAddress);
+            $result = $stmt->execute();
+            
+            if (!$result) {
+                $ws = $this->webservice;
+                $id = $cablemodem['id'];
+                $urlPUT = str_replace('{id}', $id, $this->input->getOption('url-put'));
+                
+                $cablemodemJSON = $ws->makeGetRequest($urlPUT, HttpRequestInterface::METHOD_PUT, $data);
+                if ($cablemodemJSON) {
+                    $decode = json_decode($cablemodemJSON, true);
+                    if (json_last_error() == JSON_ERROR_NONE) {
+                        $cablemodem = current($decode);
+                    } else {
+                        var_dump(json_last_error_msg());
+                    }
+                }
+            }
+        } catch (\Exception $ex) {
+            var_dump($ex->getMessage());
         }
         
         return $cablemodem;

+ 34 - 0
src/HostBundle/EventListener/KEAHostReservationSubscriber.php

@@ -58,6 +58,40 @@ class KEAHostReservationSubscriber implements EventSubscriber
     public function preRemove(LifecycleEventArgs $args)
     {
         $this->execute($args, true);
+        
+        // antes de eliminar un host actualizo las fixed ip 
+        // del cablemodem que tenga asociado
+        try {
+            $entity = $args->getEntity();
+            if ($entity instanceof Host) {
+                switch ($entity->getHostType()->getShortname()) {
+                    case 'cablemodem':
+                        $set = 'fixed_ip=:fixed_ip';
+                        break;
+                    case 'cpe':
+                        $set = 'cpe_fixed_ip=:fixed_ip';
+                        break;
+                    case 'mta':
+                        $set = 'mta_fixed_ip=:fixed_ip';
+                        break;
+                    default:
+                        $set = 'fixed_ip=:fixed_ip';
+                        break;
+                }
+                
+                $query = sprintf("UPDATE fd3_cablemodem.cablemodem 
+                    SET %s
+                    WHERE mac=:mac;
+                    ", $set);
+                $this->connection = $this->serviceContainer->get('database_connection');    
+                $stmt = $this->connection->prepare($query);
+                $stmt->bindValue('mac', $entity->getMac());
+                $stmt->bindValue('fixed_ip', null);
+                $result = $stmt->execute();
+            }
+        } catch (\Exception $ex) {
+            var_dump($ex->getMessage());
+        }
     }
 
     /**