Explorar o código

FD3-208 Se agrega listado de PonPorts con valores de estadísticas.
Perfil de PonPort con Onus conectadas y sus respectivos valores de rx y
tx. Se agregan gráficas históricas desde Grafana.

Maximiliano Schvindt %!s(int64=7) %!d(string=hai) anos
pai
achega
49ca37e63c

+ 35 - 0
src/StatsBundle/Admin/PonPortAdmin.php

@@ -80,6 +80,41 @@ class PonPortAdmin extends BaseAdmin
      */
     protected function configureShowFields(ShowMapper $showMapper)
     {
+        $ponPort = $this->getSubject();
+        $oltDeviceId = $ponPort->getOltDeviceId();
+        $deviceServer = $ponPort->getDeviceServer();
+        
+        $em = $this->get("doctrine.orm.entity_manager");
+        $q = $em->getRepository("StatsBundle:Onu")->createQueryBuilder('o');
+        $onus = $q->where($q->expr()->like('o.ponPort', ':ponPort'))
+                ->andWhere('o.oltDeviceId = :oltDeviceId')
+                ->andWhere('o.deviceServer = :deviceServer')
+                ->setParameter('ponPort', "{$ponPort->getPonPort()}%")
+                ->setParameter('oltDeviceId', $oltDeviceId)
+                ->setParameter('deviceServer', $deviceServer)
+                ->getQuery()
+                ->getResult();
+
+        $onuPonPorts = $_onus = array();
+        if($onus) {
+            $onuPonPorts = $ponPort->getArrayRxPower();
+        }
+        foreach($onus as $onu) {
+            $p = $onu->getPonPort();
+            $data = explode("/",$p);
+            if(isset($data[2])) {
+                $rxPower = NULL;
+                if(isset($onuPonPorts[$data[2]])) {
+                    $rxPower = $onuPonPorts[$data[2]];
+                }
+                $_onus[$data[2]] = array('onu' => $onu, 'rxPower' => $rxPower);
+            }
+        }
+        
+        ksort($_onus);
+
+        $this->parameters = array('onus' => $_onus);
+
         $showMapper
             /* ->add('oltDeviceId')
             ->add('ponSerialNumber') */

+ 59 - 23
src/StatsBundle/Controller/StatsController.php

@@ -239,28 +239,64 @@ class StatsController extends Controller
      * 
      * @return string
      */
-     public function grafanaOnuAction(Request $request)
-     {
-         $grafana_url = $this->getParameter('grafana_url');
- 
-         $ponSerialNumber = strtolower($request->get('ponSerialNumber'));
-         
-         $panelIds = array(1, 2, 3, 4, 5);
-         foreach ($panelIds as $panelId) {
-             $urls[] = "onu?orgId=1&var-serialnumber={$ponSerialNumber}&panelId={$panelId}&theme=light";
-         }
- 
-         if ($request->isMethod('GET')) {
-             return $this->render('StatsBundle:Stats:onu_graph.html.twig', array(
-                         'grafana_url' => $grafana_url,
-                         'urls' => $urls,
-                         'serial_number' => $ponSerialNumber,
-             ));
-         }
- 
-         return new JsonResponse(array(
-             'urls' => $urls,
-         ));
-     }
+    public function grafanaOnuAction(Request $request)
+    {
+        $grafana_url = $this->getParameter('grafana_url');
+
+        $ponSerialNumber = strtolower($request->get('ponSerialNumber'));
+        
+        $panelIds = array(1, 2, 3, 4, 5);
+        foreach ($panelIds as $panelId) {
+            $urls[] = "onu?orgId=1&var-serialnumber={$ponSerialNumber}&panelId={$panelId}&theme=light";
+        }
+
+        if ($request->isMethod('GET')) {
+            return $this->render('StatsBundle:Stats:onu_graph.html.twig', array(
+                        'grafana_url' => $grafana_url,
+                        'urls' => $urls,
+                        'serial_number' => $ponSerialNumber,
+            ));
+        }
+
+        return new JsonResponse(array(
+            'urls' => $urls,
+        ));
+    }
+
+    /**
+     * @Route("/admin/stats/ponport/grafana", name="grafana_ponport")
+     * 
+     * @return string
+     */
+    public function grafanaPonPortAction(Request $request)
+    {
+        $grafana_url = $this->getParameter('grafana_url');
+       
+        $em = $this->get("doctrine.orm.entity_manager");
+        $ponPortId = $request->get('id');
+        
+        $ponPort = $em->getRepository("StatsBundle:PonPort")->findOneById($ponPortId);
+        $oltDeviceId = $ponPort->getOltDeviceId();
+        $deviceServerId = $ponPort->getDeviceServer()->getId();
+        
+        $data = explode("/", $ponPort->getPonPort());
+        $card = $data[0];
+        $slot = $data[1];
+
+
+        $panelIds = array(1, 2, 3, 4);
+        foreach ($panelIds as $panelId) {
+            $urls[] = "olt-pon-ports?orgId=1&var-olt={$oltDeviceId}&var-server={$deviceServerId}&var-card={$card}&var-slot={$slot}&panelId={$panelId}&theme=light";
+        }
+        if ($request->isMethod('GET')) {
+            return $this->render('StatsBundle:Stats:ponport_graph.html.twig', array(
+                        'grafana_url' => $grafana_url,
+                        'urls' => $urls
+            ));
+        }
+        return new JsonResponse(array(
+            'urls' => $urls,
+        ));
+    }
 
 }

+ 7 - 0
src/StatsBundle/Entity/Onu.php

@@ -121,6 +121,13 @@ class Onu
      */
     protected $updated;
     
+    /**
+     * @return string
+     */
+    public function getId() 
+    {
+        return sprintf('%s~%s~%s', strtolower($this->ponSerialNumber), $this->oltDeviceId, $this->deviceServer->getId());
+    }
 
     /**
      * @return string

+ 1 - 0
src/StatsBundle/Resources/config/services.yml

@@ -38,3 +38,4 @@ services:
         calls:    
             - [setTranslationDomain, [StatsBundle]]
             - [setTemplate, ['show','StatsBundle:PonPort:base_show.html.twig']]
+            - [setTemplate, ['list','StatsBundle:PonPort:base_list.html.twig']]

+ 3 - 0
src/StatsBundle/Resources/translations/StatsBundle.es.yml

@@ -65,6 +65,9 @@ show:
     label_updated: Actualizado
     label_bias_current: Bias Current
     label_array_rx_power: Rx Power
+    label_rx_power_pon_port: Rx Power PonPort
+    label_rx_power_onu: Rx Power ONU
+    label_tx_power_onu: Tx Power ONU
 
 list:
     label_name: Nombre

+ 3 - 23
src/StatsBundle/Resources/views/Onu/base_list_field_rx.html.twig

@@ -1,27 +1,7 @@
 {% extends 'SonataAdminBundle:CRUD:base_list_field.html.twig' %}
 
 {% block field %}
-    {% if object.getRxPower() is null %}
-        <span class="text_column_stats">{{ 'macroFields.notavailable'|trans({},'StatsBundle') }}</span>
-    {% else %}
-       
-        {% set value = object.getRxPower() %}
-        {% set style = "rx_ftth_bordo" %}
-        {% if value < -30 %}
-            {% set style = "rx_ftth_bordo" %}
-        {% elseif value >= -30 and value < -28 %}
-            {% set style = "rx_ftth_rojo" %}
-        {% elseif value >= -28 and value < -26 %}
-            {% set style = "rx_ftth_amarillo" %}
-        {% elseif value >= -26 and value < -20 %}
-            {% set style = "rx_ftth_verde" %}
-        {% elseif value >= -20 and value < -15 %}
-            {% set style = "rx_ftth_amarillo" %}
-        {% elseif value >= -15 and value < -13 %}
-            {% set style = "rx_ftth_rojo" %}
-        {% endif %}
-        
-        <span class="{{style}}">{{ value|number_format(2, '.', ',')}}</span> <span class="text_column_stats">dBm</span>
-        
-    {% endif %}
+    
+    {% include 'StatsBundle:Templates:onu_field_rx.html.twig' with {'value': object.getRxPower()} only %}
+    
 {% endblock %}

+ 3 - 21
src/StatsBundle/Resources/views/Onu/base_list_field_tx.html.twig

@@ -1,25 +1,7 @@
 {% extends 'SonataAdminBundle:CRUD:base_list_field.html.twig' %}
 
 {% block field %}
-    {% if object.getTxPower() is null %}
-        <span class="text_column_stats">{{ 'macroFields.notavailable'|trans({},'StatsBundle') }}</span>
-    {% else %}
-       
-        {% set value = object.getTxPower() %}
-        {% set style = "tx_ftth_bordo" %}
-        {% if value < 1 %}
-            {% set style = "tx_ftth_rojo" %}
-        {% elseif value >= 1 and value < 1.5 %}
-            {% set style = "tx_ftth_amarillo" %}
-        {% elseif value >= 1.5 and value < 3.5 %}
-            {% set style = "tx_ftth_verde" %}
-        {% elseif value >= 3.5 and value < 4.5 %}
-            {% set style = "tx_ftth_amarillo" %}
-        {% elseif value >= 4.5 and value < 5 %}
-            {% set style = "tx_ftth_rojo" %}
-        {% endif %}
-        
-        <span class="{{style}}">{{ value|number_format(2, '.', ',')}}</span> <span class="text_column_stats">dBm</span>
-        
-    {% endif %}
+
+    {% include 'StatsBundle:Templates:onu_field_tx.html.twig' with {'value': object.getTxPower()} only %}
+
 {% endblock %}

+ 3 - 23
src/StatsBundle/Resources/views/Onu/base_show_field_rx.html.twig

@@ -1,27 +1,7 @@
 {% extends 'SonataAdminBundle:CRUD:base_show_field.html.twig' %}
 
 {% block field %}
-    {% if object.getRxPower() is null %}
-        <span class="text_column_stats">{{ 'macroFields.notavailable'|trans({},'StatsBundle') }}</span>
-    {% else %}
-       
-        {% set value = object.getRxPower() %}
-        {% set style = "rx_ftth_bordo" %}
-        {% if value < -30 %}
-            {% set style = "rx_ftth_bordo" %}
-        {% elseif value >= -30 and value < -28 %}
-            {% set style = "rx_ftth_rojo" %}
-        {% elseif value >= -28 and value < -26 %}
-            {% set style = "rx_ftth_amarillo" %}
-        {% elseif value >= -26 and value < -20 %}
-            {% set style = "rx_ftth_verde" %}
-        {% elseif value >= -20 and value < -15 %}
-            {% set style = "rx_ftth_amarillo" %}
-        {% elseif value >= -15 and value < -13 %}
-            {% set style = "rx_ftth_rojo" %}
-        {% endif %}
-        
-        <span class="{{style}}">{{ value|number_format(2, '.', ',')}}</span> <span class="text_column_stats">dBm</span>
-        
-    {% endif %}
+
+    {% include 'StatsBundle:Templates:onu_field_rx.html.twig' with {'value': object.getRxPower()} only %}
+    
 {% endblock %}

+ 3 - 21
src/StatsBundle/Resources/views/Onu/base_show_field_tx.html.twig

@@ -1,25 +1,7 @@
 {% extends 'SonataAdminBundle:CRUD:base_show_field.html.twig' %}
 
 {% block field %}
-    {% if object.getTxPower() is null %}
-        <span class="text_column_stats">{{ 'macroFields.notavailable'|trans({},'StatsBundle') }}</span>
-    {% else %}
-       
-        {% set value = object.getTxPower() %}
-        {% set style = "tx_ftth_bordo" %}
-        {% if value < 1 %}
-            {% set style = "tx_ftth_rojo" %}
-        {% elseif value >= 1 and value < 1.5 %}
-            {% set style = "tx_ftth_amarillo" %}
-        {% elseif value >= 1.5 and value < 3.5 %}
-            {% set style = "tx_ftth_verde" %}
-        {% elseif value >= 3.5 and value < 4.5 %}
-            {% set style = "tx_ftth_amarillo" %}
-        {% elseif value >= 4.5 and value < 5 %}
-            {% set style = "tx_ftth_rojo" %}
-        {% endif %}
-        
-        <span class="{{style}}">{{ value|number_format(2, '.', ',')}}</span> <span class="text_column_stats">dBm</span>
-        
-    {% endif %}
+
+    {% include 'StatsBundle:Templates:onu_field_tx.html.twig' with {'value': object.getTxPower()} only %}
+
 {% endblock %}

+ 8 - 0
src/StatsBundle/Resources/views/PonPort/base_list.html.twig

@@ -0,0 +1,8 @@
+{% extends 'SonataAdminBundle:CRUD:base_list.html.twig' %}
+
+{% block list_table %}
+    <style>
+    table.sonata-ba-list {table-layout: fixed}
+    </style>
+    {{ parent() }}
+{% endblock %}

+ 0 - 2
src/StatsBundle/Resources/views/PonPort/base_list_field_rx.html.twig

@@ -29,7 +29,5 @@
         {% endfor %}
         </tr></table>
         </div>
-
-        
     {% endif %}
 {% endblock %}

+ 35 - 2
src/StatsBundle/Resources/views/PonPort/base_show.html.twig

@@ -2,7 +2,40 @@
 
 {% block show %}
     {{ parent() }}
-    
-    {# {{ render(controller('StatsBundle:Stats:grafanaPonPort', { 'ponSerialNumber':object.ponSerialNumber })) }} #}
+
+    <div class="row">
+        <div class="col-md-12">
+            <div class="box box-primary">
+                <div class="box-header"><h4 class="box-title">{{ 'breadcrumb.link_onu_list'|trans({},'StatsBundle') }}</h4></div>
+                <div class="box-body table-responsive no-padding">
+                    <table class="table">
+                        <tbody>
+                        {% if admin.parameters.onus|length > 0 %}
+                            <tr class="sonata-ba-view-container">
+                                <th>{{ 'show.label_pon_port'|trans({},'StatsBundle') }}</th>
+                                <th>{{ 'show.label_pon_serial_number'|trans({},'StatsBundle') }}</th>
+                                <th>{{ 'show.label_rx_power_pon_port'|trans({},'StatsBundle') }}</th>
+                                <th>{{ 'show.label_tx_power_onu'|trans({},'StatsBundle') }}</th>
+                                <th>{{ 'show.label_rx_power_onu'|trans({},'StatsBundle') }}</th>
+                            </tr>
+                            {% for onu in admin.parameters.onus %}
+                                {% set o = onu['onu'] %}
+                                <tr class="sonata-ba-view-container">
+                                    <td>{{o.getPonPort()}}</td>
+                                    <td><a href="{{path('admin_stats_onu_show',{'id': o.getId() })}}">{{o.getPonSerialNumber()}}</a></td>
+                                    <td>{% include 'StatsBundle:Templates:onu_field_rx.html.twig' with {'value': onu['rxPower']} only %}</td>
+                                    <td>{% include 'StatsBundle:Templates:onu_field_tx.html.twig' with {'value': o.getTxPower()} only %}</td>
+                                    <td>{% include 'StatsBundle:Templates:onu_field_rx.html.twig' with {'value': o.getRxPower()} only %}</td>
+                                </tr>
+                            {% endfor %}
+                        {% endif %}
+                        </tbody>
+                    </table>
+                </div>
+            </div>
+        </div>
+    </div>
+
+    {{ render(controller('StatsBundle:Stats:grafanaPonPort', { 'id':object.getId() })) }}
     
 {% endblock %}

+ 11 - 0
src/StatsBundle/Resources/views/Stats/ponport_graph.html.twig

@@ -0,0 +1,11 @@
+<div>
+    <div style="margin: 0 auto;">
+        {% for url in urls %}
+        <div style="border-top: 3px solid orange; border-top-color: orange !important;">
+        {% set url_iframe = grafana_url ~ url %}
+        {% set iframe = "<iframe src='#{url_iframe}' height='300' frameborder='0' style='margin-bottom: 10px; width: 100%;'></iframe>" %}
+        {{ iframe|raw }}
+        </div>
+        {% endfor %}
+    </div>
+</div>

+ 20 - 0
src/StatsBundle/Resources/views/Templates/onu_field_rx.html.twig

@@ -0,0 +1,20 @@
+{% if value is null %}
+    <span class="text_column_stats">{{ 'macroFields.notavailable'|trans({},'StatsBundle') }}</span>
+{% else %}
+    {% set style = "rx_ftth_bordo" %}
+    {% if value < -30 %}
+        {% set style = "rx_ftth_bordo" %}
+    {% elseif value >= -30 and value < -28 %}
+        {% set style = "rx_ftth_rojo" %}
+    {% elseif value >= -28 and value < -26 %}
+        {% set style = "rx_ftth_amarillo" %}
+    {% elseif value >= -26 and value < -20 %}
+        {% set style = "rx_ftth_verde" %}
+    {% elseif value >= -20 and value < -15 %}
+        {% set style = "rx_ftth_amarillo" %}
+    {% elseif value >= -15 and value < -13 %}
+        {% set style = "rx_ftth_rojo" %}
+    {% endif %}
+    
+    <span class="{{style}}">{{ value|number_format(2, '.', ',')}}</span> <span class="text_column_stats">dBm</span>
+{% endif %}

+ 18 - 0
src/StatsBundle/Resources/views/Templates/onu_field_tx.html.twig

@@ -0,0 +1,18 @@
+{% if value is null %}
+    <span class="text_column_stats">{{ 'macroFields.notavailable'|trans({},'StatsBundle') }}</span>
+{% else %}
+    {% set style = "tx_ftth_bordo" %}
+    {% if value < 1 %}
+        {% set style = "tx_ftth_rojo" %}
+    {% elseif value >= 1 and value < 1.5 %}
+        {% set style = "tx_ftth_amarillo" %}
+    {% elseif value >= 1.5 and value < 3.5 %}
+        {% set style = "tx_ftth_verde" %}
+    {% elseif value >= 3.5 and value < 4.5 %}
+        {% set style = "tx_ftth_amarillo" %}
+    {% elseif value >= 4.5 and value < 5 %}
+        {% set style = "tx_ftth_rojo" %}
+    {% endif %}
+    
+    <span class="{{style}}">{{ value|number_format(2, '.', ',')}}</span> <span class="text_column_stats">dBm</span>
+{% endif %}