浏览代码

FD3-233 Nueva gráfica con tiempos de respuesta para el reporte de OLT.

Maximiliano Schvindt 7 年之前
父节点
当前提交
729d713ff4

+ 38 - 0
src/StatsBundle/Controller/OltReportController.php

@@ -91,5 +91,43 @@ class OltReportController extends Controller
             'device' => $device
         ));
     }
+
+    public function oltCommandsAction($oltServerId, $oltDeviceId) {
+        
+        $filter = array('deviceId' => $oltDeviceId, 'deviceServer' => $oltServerId, 'deviceType' => 'FTTHBundle\Entity\OLT');
+        $em = $this->get('doctrine')->getManager();
+        $device = $em->getRepository('StatsBundle:Device')->findOneBy($filter);
+
+        $data = $device->jsonExtraData();
+        $mark = strtolower($data['mark']);
+        $subName = "d_{$oltDeviceId}_s_{$oltServerId}_cmd_{$mark}";
+
+        $result = $targets = array();
+        $endpoint = $this->get('endpoint.mysql');
+
+        $targets["onu_stats"] = array("target" => "{$subName}_onu_stats");
+        $targets["pon_stats"] = array("target" => "{$subName}_pon_stats");
+        $targets["pon_octets"] = array("target" => "{$subName}_pon_octets");
+        $targets["pon_scan"] = array("target" => "{$subName}_pon_scan");
+        $targets["onu_scan"] = array("target" => "{$subName}_onu_scan");
+        
+        foreach($targets as $index => $t) {
+            $search = array('targets' => array(0 => $t), 'maxDataPoints' => 10);
+            $data = $endpoint->get(json_encode($search),'last');
+            if(isset($data[0]) && isset($data[0]['datapoints'])) {
+                $points = $data[0]['datapoints']; krsort($points);
+                $result[$index] = $points;
+            } else {
+                $result[$index] = array();
+            }
+        }
+        
+        return $this->render('StatsBundle:Device:Report/oltCommands.html.twig', array(
+            'data' => $data,
+            'mark' => $mark,
+            'device' => $device,
+            'times' => $result
+        ));
+    }
     
 }

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

@@ -130,4 +130,5 @@ onu_state: Estado
 onu_state_count: Cantidad
 onu_total_count: Total
 yes: Si
-no: No
+no: No
+olt_cmd_time: Tiempos de respuesta (en seg)

+ 63 - 0
src/StatsBundle/Resources/views/Device/Report/oltCommands.html.twig

@@ -0,0 +1,63 @@
+<div class="box box-widget">
+    <div class="box-header">
+        <h4 class="box-title">{{ 'olt_cmd_time'|trans({}, 'StatsBundle') }}</h4>
+        <div class="box-tools pull-right">
+            <button type="button" class="btn btn-box-tool" data-widget="collapse"><i class="fa fa-minus"></i></button>
+        </div>
+    </div>
+    <div class="box-body">
+        <div class="nav-tabs-custom">
+            <ul class="nav nav-tabs">
+                <li class="active"><a href="#tab_1" data-toggle="tab">ONU Scan</a></li>
+                <li><a href="#tab_2" data-toggle="tab">PON Scan</a></li>
+                <li><a href="#tab_3" data-toggle="tab">ONU Stats</a></li>
+                <li><a href="#tab_4" data-toggle="tab">PON Stats</a></li>
+                <li><a href="#tab_5" data-toggle="tab">PON Octets</a></li>
+            </ul>
+            <div class="tab-content">
+                <div class="tab-pane active" id="tab_1"><canvas id="onu_scan"></canvas></div>
+                <div class="tab-pane" id="tab_2"><canvas id="pon_scan"></canvas></div>
+                <div class="tab-pane" id="tab_3"><canvas id="onu_stats"></canvas></div>
+                <div class="tab-pane" id="tab_4"><canvas id="pon_stats"></canvas></div>
+                <div class="tab-pane" id="tab_5"><canvas id="pon_octets"></canvas></div>
+            </div>
+          </div>
+    </div>
+</div>
+
+{% if times|length > 0  %}
+<script>
+    {% for cmd, points in times %}
+        {% set items, labels, colors = [], [], [] %}
+        {% if points|length > 0  %}
+            {% for i,point in points %}
+                {% set items = items|merge([point[0]]) %}
+                {% set d = (point[1]/1000)|date('d') %}
+                {% set hour = (point[1]/1000)|date('H:i') %}
+                {% set labels = labels|merge([hour]) %}
+            {% endfor %}
+        {% endif %}
+
+    var occhart_{{cmd}} = new Chart( $('#{{cmd}}'), {
+        type: 'line',
+        data: {
+            datasets: [{
+                data: [{{ items|join(',') }}],
+                borderColor: "#FFA500",
+                backgroundColor: "#FFDB99",
+            }],
+            labels: ["{{ labels|join('","')|raw }}"]
+        },
+        options: {
+            legend: {
+                display: false
+            },
+            title: {
+                display: false,
+                text: 'Tiempos'
+            }
+        }
+    });
+    {% endfor %}
+</script>
+{% endif %}

+ 4 - 9
src/StatsBundle/Resources/views/Device/report.html.twig

@@ -14,7 +14,7 @@
             <h3 class="box-title">{{ data['name'] }}</h3>
         </div> #}
         <div class="box-body">
-            <div class="col-sm-4">
+            <div class="col-sm-3">
                 {{ render_hinclude(controller("StatsBundle:OltReport:oltInformation", {'oltServerId': device.getDeviceServer.getId(), 'oltDeviceId': device.getDeviceId()}),
                     {'default':  include("@Stats/Device/Report/default.html.twig")})
                 }}
@@ -24,16 +24,11 @@
                     {'default':  include("@Stats/Device/Report/default.html.twig")})
                 }}
             </div>
-            <div class="col-sm-4">
-
-                {# {{ render_hinclude(controller("MapBundle:MapReport:splitterObjectsCount", {'mapId': map.id}),
-                    {'default':  include('@Map/Map/Report/default.html.twig')})
+            <div class="col-sm-5">
+                {{ render_hinclude(controller("StatsBundle:OltReport:oltCommands", {'oltServerId': device.getDeviceServer.getId(), 'oltDeviceId': device.getDeviceId()}),
+                    {'default':  include("@Stats/Device/Report/default.html.twig")})
                 }}
 
-                {{ render_hinclude(controller("MapBundle:MapReport:napObjectsCount", {'mapId': map.id}),
-                    {'default':  include('@Map/Map/Report/default.html.twig')})
-                }} #}
-
             </div>
         </div>
     </div>