Browse Source

Mejoras en el código. FD3-468

Maxi Schvindt 7 years ago
parent
commit
5e7bc672e1

+ 3 - 0
app/config/parameters.yml.dist

@@ -35,6 +35,9 @@ parameters:
     geoserver_user: admin
     geoserver_pass: geoserver
     geoserver_path_shapes: '/var/www/shapes'
+    geoserver_default_lat: -34.651285198954
+    geoserver_default_lng: -58.4912109375
+    geoserver_default_zoom: 5
     device_server_base: 1
     # Url del webservice de crontab para crear los archivos
     url_crontab: http://127.0.0.1/cron.php?wsdl

+ 3 - 0
app/config/parameters.yml.docker

@@ -42,6 +42,9 @@ parameters:
     geoserver_user: admin
     geoserver_pass: geoserver
     geoserver_path_shapes: '/var/www/shapes'
+    geoserver_default_lat: -34.651285198954
+    geoserver_default_lng: -58.4912109375
+    geoserver_default_zoom: 5
     device_server_base: 1
     url_crontab: http://supervisord/cron.php?wsdl
     env(HOST_BASE): base

+ 201 - 184
src/StatsBundle/Controller/StatsController.php

@@ -27,87 +27,60 @@ class StatsController extends Controller
     }
 
     /**
-     * @Route("/admin/stats/olt/stats/graph", name="stats_graph")
-     * 
-     * @return string
+     * Check value of geoserver_service parameter in parameters.yml
      */
-    public function getStatsGraphAction(Request $request)
+    private function checkGeoserverService() 
     {
-        $grafana_url = $this->getParameter('grafana_url');
-
-        // Puertos pon
-        $pons = array();
-        for ($x = 1; $x <= 8; $x++) {
-            for ($y = 1; $y <= 8; $y++) {
-                $index = "{$x}.{$y}";
-                $pons[$index] = "PON PORT $index";
-            }
-        }
-        for ($x = 11; $x <= 18; $x++) {
-            for ($y = 1; $y <= 8; $y++) {
-                $index = "{$x}.{$y}";
-                $pons[$index] = "PON PORT {$index}";
-            }
+        if($this->getParameter('geoserver_service')) {
+            return true;
         }
-
-        $panelIds = array(6, 4, 5, 1, 2, 3,);
-
-        $pon = '1.1';
-        if ($request->isMethod('POST')) {
-            $pon = $request->request->get('pon', $pon);
-        }
-        $urls = array('olt-total-rate?orgId=1&panelId=1',);
-        foreach ($panelIds as $panelId) {
-            $urls[] = "olt-pon-ports?orgId=1&panelId={$panelId}&var-ponport={$pon}";
-        }
-
-        if ($request->isMethod('GET')) {
-            return $this->render('StatsBundle:Stats:graph.html.twig', array(
-                        'grafana_url' => $grafana_url,
-                        'urls' => $urls,
-                        'pons' => $pons,
-            ));
-        }
-
-        return new JsonResponse(array(
-            'urls' => $urls,
-        ));
+        
+        $this->flashMsg('msg_no_enable_geoserver_service');
+        return false;
+        
     }
-    
+
     /**
-     * @Route("/admin/stats/onu/stats/graph", name="onu_stats_graph")
-     * 
-     * @return string
+     * Create simple flash message
      */
-    public function getONUStatsGraphAction(Request $request)
+    private function flashMsg($msg = 'msg', $type = 'error', $bundle = 'StatsBundle') 
     {
-        $grafana_url = $this->getParameter('grafana_url');
+        $translator = $this->get('translator');
+        $flashbag = $this->get('session')->getFlashBag();
+        $flashbag->add($type, $translator->trans($msg, array(), $bundle));
+    }
 
-        $onus = $this->get('webservice')->getData('onu', array(
-            'id' => $request->get('id')
-        ));
+    /**
+     * Set default lat-lng-zoom 
+     */
+    private function setDefaultMap() 
+    {
+        $zoom = $this->getParameter('geoserver_default_zoom') ?? null;
+        $lat = $this->getParameter('geoserver_default_lat') ?? null;
+        $lng = $this->getParameter('geoserver_default_lng') ?? null;
 
-        $urls = array();
-        $serialNumber = 'fhtt000753b0';
-        if (isset($onus[0]) && isset($onus[0]['ponSerialNumber'])) {
-            $serialNumber = $onus[0]['ponSerialNumber'];
-        }
-        $panelIds = array(1, 2, 3, 4, 5);
-        foreach ($panelIds as $panelId) {
-            $urls[] = "onu?orgId=1&var-serialnumber={$serialNumber}&panelId={$panelId}";
-        }
+        return array('zoom' => $zoom, 'lat' => $lat, 'lng' => $lng);
+    }
 
-        if ($request->isMethod('GET')) {
-            return $this->render('StatsBundle:Stats:onu_graph.html.twig', array(
-                        'grafana_url' => $grafana_url,
-                        'urls' => $urls,
-                        'serial_number' => $serialNumber,
-            ));
+    /**
+     * Set layer lat-lng-zoom 
+     */
+    private function setLatLngZoom($srs) 
+    {
+        $lng = $srs['minx'] + ($srs['maxx'] - $srs['minx']) / 2;
+        $lat = $srs['miny'] + ($srs['maxy'] - $srs['miny']) / 2;
+    
+        $lngDiff = $srs['maxx'] - $srs['minx'];
+        $latDiff = $srs['maxy'] - $srs['miny'];
+        $maxDiff = ($lngDiff > $latDiff) ? $lngDiff : $latDiff;
+        if ($maxDiff < 360 / pow(2, 20)) {
+            $zoom = 21;
+        } else {
+            $zoom = (-1*( (log($maxDiff)/log(2)) - (log(360)/log(2)))) + 1;
+            if ($zoom < 1) $zoom = 1;
         }
 
-        return new JsonResponse(array(
-            'urls' => $urls,
-        ));
+        return array('zoom' => $zoom, 'lat' => $lat, 'lng' => $lng);
     }
 
     /**
@@ -118,58 +91,36 @@ class StatsController extends Controller
     public function showMapAction(Request $request)
     {
         
-        $map = array();
-        $map['zoom'] = 12;
-        $map['lng'] = -60.065884467624294;
-        $map['lat'] = -33.902661208376706;
+        if(!$this->checkGeoserverService())
+            return $this->redirect($this->generateUrl('admin_stats_onu_list'));
+        
+        $map = $this->setDefaultMap();
 
-        $em = $this->get('doctrine')->getManager();
         $adminPool = $this->get('sonata.admin.pool');
-
         $api = $this->get('geoserver.api');
-        $tenancyId = $this->get("base_tenancy.tenancy_service")->getTenancyIdCurrent();
-        $deviceServerId = $this->getParameter('device_server_base');
         $gsHost = $this->getParameter('geoserver_host');
         $gsPort = $this->getParameter('geoserver_port');
+        $deviceServerId = $this->getParameter('device_server_base');
+        $tenancyId = $this->get("base_tenancy.tenancy_service")->getTenancyIdCurrent();
+        
         $workspace = "deviceServer_{$deviceServerId}";
         $layer = "onu_stats_tenancy_{$tenancyId}";
         
         $data = $api->getLayerData($workspace, $layer);
-        $setLatLng = $setZoom = false;
+        $srs = false;
 
-        if(!empty($data)) {
+        if(!empty($data) && is_array($data)) {
             if(isset($data['featureType']['latLonBoundingBox'])) {
-                $setLatLng = $setZoom = true;
                 $srs = $data['featureType']['latLonBoundingBox'];
             } elseif(isset($data['featureType']['nativeBoundingBox'])) {
-                $setLatLng = $setZoom = true;
                 $srs = $data['featureType']['nativeBoundingBox'];
             }
         } else {
-            $translator = $this->get('translator');
-            $flashbag = $this->get('session')->getFlashBag();
-            $flashbag->add("error", $translator->trans("msg_no_exist_map",array(),"StatsBundle"));
+            $this->flashMsg('msg_no_exist_map');
             return $this->redirect($this->generateUrl('admin_stats_onu_list'));
         }
 
-        if($setLatLng) {
-            $lng = $srs['minx'] + ($srs['maxx'] - $srs['minx']) / 2;
-            $lat = $srs['miny'] + ($srs['maxy'] - $srs['miny']) / 2;
-        }
-
-        if($setZoom) {
-            $lngDiff = $srs['maxx'] - $srs['minx'];
-            $latDiff = $srs['maxy'] - $srs['miny'];
-            $maxDiff = ($lngDiff > $latDiff) ? $lngDiff : $latDiff;
-            if ($maxDiff < 360 / pow(2, 20)) {
-                $zoom = 21;
-            } else {
-                $zoom = (-1*( (log($maxDiff)/log(2)) - (log(360)/log(2)))) + 1;
-                if ($zoom < 1) $zoom = 1;
-            }
-        }
-
-        $map = array('lat' => $lat, 'lng' => $lng, 'zoom' => $zoom);
+        if(is_array($srs)) $map = $this->setLatLngZoom($srs);
 
         return $this->render('StatsBundle:Stats:onu_map.html.twig', array(
             'base_template' => $adminPool->getTemplate('layout'),
@@ -183,6 +134,69 @@ class StatsController extends Controller
         ));
     }
 
+    /**
+     * @Route("/admin/stats/ponport/stats/map", name="ponport_stats_map")
+     * 
+     * @return string
+     */
+    public function showPonPortMapAction(Request $request)
+    {
+        
+        if(!$this->checkGeoserverService())
+            return $this->redirect($this->generateUrl('admin_stats_ponport_list'));
+        
+        $map = $this->setDefaultMap();
+
+        $ponPortId = $request->get('id');
+
+        $em = $this->get('doctrine')->getManager();
+        $adminPool = $this->get('sonata.admin.pool');
+        $api = $this->get('geoserver.api');
+        $gsHost = $this->getParameter('geoserver_host');
+        $gsPort = $this->getParameter('geoserver_port');
+        
+        $ponPort = $em->getRepository("StatsBundle:PonPort")->findOneById($ponPortId);
+        $oltDeviceId = $ponPort->getOltDeviceId();
+        $deviceServerId = $ponPort->getDeviceServer()->getId();
+        $tenancyId = $ponPort->getTenancyId();
+       
+        $data = explode("/", $ponPort->getPonPort());
+        $card = $data[0];
+        $slot = $data[1];
+       
+        $workspace = "deviceServer_{$deviceServerId}";
+        $layer = "ponport_stats_t_{$tenancyId}_o_{$oltDeviceId}_s_{$deviceServerId}_c_{$card}_s_{$slot}";
+
+        $data = $api->getLayerData($workspace, $layer);
+
+        $srs = false;
+       
+        if(!empty($data) && is_array($data)) {
+            if(isset($data['featureType']['latLonBoundingBox'])) {
+                $srs = $data['featureType']['latLonBoundingBox'];
+            } elseif(isset($data['featureType']['nativeBoundingBox'])) {
+                $srs = $data['featureType']['nativeBoundingBox'];
+            }
+        } else {
+            $this->flashMsg('msg_no_exist_map');
+            return $this->redirect($this->generateUrl('admin_stats_ponport_list'));
+        }
+
+        if(is_array($srs)) $map = $this->setLatLngZoom($srs);
+
+        return $this->render('StatsBundle:Stats:ponport_map.html.twig', array(
+            'base_template' => $adminPool->getTemplate('layout'),
+            'admin_pool' => $adminPool,
+            'admin' => $adminPool->getAdminByClass("StatsBundle\Entity\PonPort"),
+            'map'   => $map,
+            'layer' => $layer,
+            'ponPort' => $ponPort,
+            'ws'    => $workspace,
+            'gsHost'=> $gsHost,
+            'gsPort'=> $gsPort
+        ));
+   }
+
     /**
      * @Route("/admin/stats/onu/stats/api_feature_json", name="api_feature_json")
      * 
@@ -249,6 +263,90 @@ class StatsController extends Controller
  
     }
 
+    /**
+     * @Route("/admin/stats/olt/stats/graph", name="stats_graph")
+     * 
+     * @return string
+     */
+    public function getStatsGraphAction(Request $request)
+    {
+        $grafana_url = $this->getParameter('grafana_url');
+
+        // Puertos pon
+        $pons = array();
+        for ($x = 1; $x <= 8; $x++) {
+            for ($y = 1; $y <= 8; $y++) {
+                $index = "{$x}.{$y}";
+                $pons[$index] = "PON PORT $index";
+            }
+        }
+        for ($x = 11; $x <= 18; $x++) {
+            for ($y = 1; $y <= 8; $y++) {
+                $index = "{$x}.{$y}";
+                $pons[$index] = "PON PORT {$index}";
+            }
+        }
+
+        $panelIds = array(6, 4, 5, 1, 2, 3,);
+
+        $pon = '1.1';
+        if ($request->isMethod('POST')) {
+            $pon = $request->request->get('pon', $pon);
+        }
+        $urls = array('olt-total-rate?orgId=1&panelId=1',);
+        foreach ($panelIds as $panelId) {
+            $urls[] = "olt-pon-ports?orgId=1&panelId={$panelId}&var-ponport={$pon}";
+        }
+
+        if ($request->isMethod('GET')) {
+            return $this->render('StatsBundle:Stats:graph.html.twig', array(
+                        'grafana_url' => $grafana_url,
+                        'urls' => $urls,
+                        'pons' => $pons,
+            ));
+        }
+
+        return new JsonResponse(array(
+            'urls' => $urls,
+        ));
+    }
+    
+    /**
+     * @Route("/admin/stats/onu/stats/graph", name="onu_stats_graph")
+     * 
+     * @return string
+     */
+    public function getONUStatsGraphAction(Request $request)
+    {
+        $grafana_url = $this->getParameter('grafana_url');
+
+        $onus = $this->get('webservice')->getData('onu', array(
+            'id' => $request->get('id')
+        ));
+
+        $urls = array();
+        $serialNumber = 'fhtt000753b0';
+        if (isset($onus[0]) && isset($onus[0]['ponSerialNumber'])) {
+            $serialNumber = $onus[0]['ponSerialNumber'];
+        }
+        $panelIds = array(1, 2, 3, 4, 5);
+        foreach ($panelIds as $panelId) {
+            $urls[] = "onu?orgId=1&var-serialnumber={$serialNumber}&panelId={$panelId}";
+        }
+
+        if ($request->isMethod('GET')) {
+            return $this->render('StatsBundle:Stats:onu_graph.html.twig', array(
+                        'grafana_url' => $grafana_url,
+                        'urls' => $urls,
+                        'serial_number' => $serialNumber,
+            ));
+        }
+
+        return new JsonResponse(array(
+            'urls' => $urls,
+        ));
+    }
+
     /**
      * @Route("/admin/stats/onu/grafana", name="grafana_onu")
      * 
@@ -323,88 +421,7 @@ class StatsController extends Controller
         ));
     }
 
-    /**
-     * @Route("/admin/stats/ponport/stats/map", name="ponport_stats_map")
-     * 
-     * @return string
-     */
-     public function showPonPortMapAction(Request $request)
-     {
-         
-        $map = array();
-        $map['zoom'] = 12;
-        $map['lng'] = -60.065884467624294;
-        $map['lat'] = -33.902661208376706;
-        $ponPortId = $request->get('id');
-
-        $em = $this->get('doctrine')->getManager();
-        $ponPort = $em->getRepository("StatsBundle:PonPort")->findOneById($ponPortId);
-        $oltDeviceId = $ponPort->getOltDeviceId();
-        $deviceServerId = $ponPort->getDeviceServer()->getId();
-        $tenancyId = $ponPort->getTenancyId();
-        
-        $data = explode("/", $ponPort->getPonPort());
-        $card = $data[0];
-        $slot = $data[1];
-        
-
-        $adminPool = $this->get('sonata.admin.pool');
-        $api = $this->get('geoserver.api');
-        $gsHost = $this->getParameter('geoserver_host');
-        $gsPort = $this->getParameter('geoserver_port');
-        $workspace = "deviceServer_{$deviceServerId}";
-        $layer = "ponport_stats_t_{$tenancyId}_o_{$oltDeviceId}_s_{$deviceServerId}_c_{$card}_s_{$slot}";
-
-        $data = $api->getLayerData($workspace, $layer);
-
-        $setLatLng = $setZoom = false;
-        
-        if(!empty($data)) {
-            if(isset($data['featureType']['latLonBoundingBox'])) {
-                $setLatLng = $setZoom = true;
-                $srs = $data['featureType']['latLonBoundingBox'];
-            } elseif(isset($data['featureType']['nativeBoundingBox'])) {
-                $setLatLng = $setZoom = true;
-                $srs = $data['featureType']['nativeBoundingBox'];
-            }
-        } else {
-            $translator = $this->get('translator');
-            $flashbag = $this->get('session')->getFlashBag();
-            $flashbag->add("error", $translator->trans("msg_no_exist_map",array(),"StatsBundle"));
-            return $this->redirect($this->generateUrl('admin_stats_ponport_list'));
-        }
- 
-        if($setLatLng) {
-            $lng = $srs['minx'] + ($srs['maxx'] - $srs['minx']) / 2;
-            $lat = $srs['miny'] + ($srs['maxy'] - $srs['miny']) / 2;
-        }
- 
-        if($setZoom) {
-            $lngDiff = $srs['maxx'] - $srs['minx'];
-            $latDiff = $srs['maxy'] - $srs['miny'];
-            $maxDiff = ($lngDiff > $latDiff) ? $lngDiff : $latDiff;
-            if ($maxDiff < 360 / pow(2, 20)) {
-                $zoom = 21;
-            } else {
-                $zoom = (-1*( (log($maxDiff)/log(2)) - (log(360)/log(2)))) + 1;
-                if ($zoom < 1) $zoom = 1;
-            }
-        }
-
-        $map = array('lat' => $lat, 'lng' => $lng, 'zoom' => $zoom);
-
-        return $this->render('StatsBundle:Stats:ponport_map.html.twig', array(
-            'base_template' => $adminPool->getTemplate('layout'),
-            'admin_pool' => $adminPool,
-            'admin' => $adminPool->getAdminByClass("StatsBundle\Entity\PonPort"),
-            'map'   => $map,
-            'layer' => $layer,
-            'ponPort' => $ponPort,
-            'ws'    => $workspace,
-            'gsHost'=> $gsHost,
-            'gsPort'=> $gsPort
-        ));
-    }
+    
 
     /**
      * @Route("/admin/stats/ponport/grafana", name="grafana_ponport")

+ 2 - 1
src/StatsBundle/Resources/translations/StatsBundle.es.yml

@@ -225,4 +225,5 @@ cm_total_count: Total
 cmts_consumption: Consumo de CMTS (medido por interfaces y en Gb)
 cmts_bandwidth: Bandwidth de CMTS (medido por interfaces y en Mb)
 cm_signals: Señal de CM(TX Power, RX Power en CMTS)
-cmts_reports: Alertas sobre el CMTS (últimos 5 días)
+cmts_reports: Alertas sobre el CMTS (últimos 5 días)
+msg_no_enable_geoserver_service: El servicio Geoserver no se encuentra habilitado.