Browse Source

Se agrega grafana.

Maximiliano Schvindt 7 years ago
parent
commit
4adfddbc0e

+ 2 - 2
composer.lock

@@ -1397,7 +1397,7 @@
             "source": {
                 "type": "git",
                 "url": "ssh://git@infra.flowdat.com:222/VendorSoftwareFlowdat3/BaseAdmin.git",
-                "reference": "5349832b5c1c6f49af985b6856acfdc73abf022f"
+                "reference": "c08dad3a6e83f1d7a71167952c5615ef48cf8b49"
             },
             "type": "library",
             "autoload": {
@@ -1412,7 +1412,7 @@
                 "bootstrap",
                 "sonata"
             ],
-            "time": "2017-09-01 18:28:22"
+            "time": "2017-09-05 17:38:28"
         },
         {
             "name": "ik/device-bundle",

+ 23 - 2
src/StatsBundle/Admin/OnuAdmin.php

@@ -34,11 +34,32 @@ class OnuAdmin extends BaseAdmin
      */
     protected function configureListFields(ListMapper $listMapper)
     {
+        $em = $this->get("doctrine.orm.entity_manager");
+        $servers = $em->getRepository("StatsBundle:DeviceServer")->findAll();
+        
+        $olts_server = $urls_server = array();
+
+        foreach($servers as $deviceServer) {
+            $urls = $this->get('webservice')->getData($deviceServer->getUrl());
+            $urls_server[$deviceServer->getId()] = $urls;
+            $olts = $em->getRepository("StatsBundle:device")->findBy(array('deviceServer'=>$deviceServer, 'deviceType' => 'FTTHBundle\Entity\OLT'));
+            $olts_server[$deviceServer->getId()] = array();
+            foreach($olts as $olt) {
+                $data = $olt->jsonExtraData();
+                $name = null;
+                if(isset($data['name'])) $name = $data['name'];
+                $olts_server[$deviceServer->getId()][$olt->getDeviceId()] = $name;
+            }
+        }
+
+        //print_r($urls_server);die;
+        $this->parameters = array('urls_server' => $urls_server, 'olts_server' => $olts_server);
+
+
         $listMapper
             ->add('deviceServer')
-            ->add('oltDeviceId')
+            ->add('oltDeviceId', 'string', array('template' => 'StatsBundle:Onu:base_list_field_olt.html.twig'))
             ->add('tenancyId')
-            /* ->add('ponSerialNumber') */
             ->addIdentifier('ponSerialNumber')
             ->add('ponPort')
             ->add('status')

+ 29 - 0
src/StatsBundle/Controller/StatsController.php

@@ -234,4 +234,33 @@ class StatsController extends Controller
  
     }
 
+    /**
+     * @Route("/admin/stats/onu/grafana", name="grafana_onu")
+     * 
+     * @return string
+     */
+     public function grafanaOnuAction(Request $request)
+     {
+         $grafana_url = $this->getParameter('grafana_url');
+ 
+         $ponSerialNumber = $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,
+         ));
+     }
+
 }

+ 32 - 41
src/StatsBundle/Entity/Onu.php

@@ -19,70 +19,69 @@ use Symfony\Component\Workflow\Exception\ExceptionInterface;
 class Onu
 {
 
-     
-     /**
-     * @var int
+    /**
+     * @var string
      *
-     * @ORM\Column(type="integer", nullable=true)
-     * 
+     * @ORM\Id
+     * @ORM\Column(type="string", length=25, nullable=true)
      */
-     private $deviceId;
-     
-     /**
+    private $ponSerialNumber;
+
+    /**
      * @var int
      *
-     * @ORM\Column(type="integer", nullable=true)
      * @ORM\Id
+     * @ORM\Column(type="integer", nullable=true)
      * 
      */
      private $oltDeviceId;
      
      /**
-     * @ORM\ManyToOne(targetEntity="DeviceServer", inversedBy="devices", fetch="EXTRA_LAZY")
      * @ORM\Id
+     * @ORM\ManyToOne(targetEntity="DeviceServer", inversedBy="devices", fetch="EXTRA_LAZY")
      * 
      */
-     protected $deviceServer;
-     
-     /**
+    protected $deviceServer;
+
+    /**
+     * @var int
+     *
+     * @ORM\Column(type="integer", nullable=true)
+     * 
+     */
+     private $deviceId;
+    
+    /**
      * @var int
      *
      * @ORM\Column(type="integer", nullable=false, options={"default":1})
      */
-     protected $tenancyId = 1;
-     
-     /**
+    protected $tenancyId = 1;
+    
+    /**
      * @var string
      *
      * @ORM\Column(type="string", length=255, nullable=true)
      * 
      * @Assert\Ip
      */
-     private $ip;
-     
-     /**
+    private $ip;
+    
+    /**
      * @var string
      *
      * @ORM\Column(type="string", length=12, nullable=true)
      */
-     private $mac;
-     
-     /**
-     * @var string
-     *
-     * @ORM\Column(type="string", length=25, nullable=true)
-     */
-     private $serialNumber;
-     
-     /**
+    private $mac;
+    
+    /**
      * @var string
      *
      * @ORM\Column(type="string", length=25, nullable=true)
-     * @ORM\Id
      */
-     private $ponSerialNumber;
-     
-     /**
+    private $serialNumber;
+    
+    /**
      * @ORM\Column(type="string", length=25, nullable=true)
      */
     private $ponPort;
@@ -131,14 +130,6 @@ class Onu
         return sprintf('%s %s', $this->ponSerialNumber, $this->ip);
     }
 
-    /**
-     * @return string
-     */
-    public function getId()
-    {
-        return $this->id;
-    }
-
     /**
      * @param string $ip
      *

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

@@ -28,3 +28,4 @@ services:
             - { name: sonata.admin, manager_type: orm, group: List, label: ONU, label_catalogue: StatsBundle, label_translator_strategy: sonata.admin.label.strategy.underscore }
         calls:    
             - [setTranslationDomain, [StatsBundle]]
+            - [setTemplate, ['show','StatsBundle:Onu:base_show.html.twig']]

+ 21 - 0
src/StatsBundle/Resources/views/Onu/base_list_field_olt.html.twig

@@ -0,0 +1,21 @@
+{% extends 'SonataAdminBundle:CRUD:base_list_field.html.twig' %}
+
+{% block field %}
+    {% set server = object.getDeviceServer.getId() %}
+    {% set urls = admin.parameters.urls_server %}
+    {% set olts = admin.parameters.olts_server %}
+    {% set oltId = object.getOltDeviceId() %}
+
+    {% if urls[server]['url_ftth'] is defined and oltId is not null %}
+        {% set url = urls[server]['url_ftth'] ~ "/admin/ftth/olt/" ~ oltId ~ "/show" %}
+    {% else %}
+        {% set url = "#" %}
+    {% endif %}
+
+    {% if olts[server][oltId] is defined %}
+        <a href="{{url}}" target="_blank">{{olts[server][oltId]}}</a>
+    {% else %}
+        {{oltId}}
+    {% endif %}
+
+{% endblock %}

+ 8 - 0
src/StatsBundle/Resources/views/Onu/base_show.html.twig

@@ -0,0 +1,8 @@
+{% extends 'SonataAdminBundle:CRUD:base_show.html.twig' %}
+
+{% block show %}
+    {{ parent() }}
+    
+    {{ render(controller('StatsBundle:Stats:grafanaOnu', { 'ponSerialNumber':object.ponSerialNumber })) }}
+    
+{% endblock %}

+ 5 - 5
src/StatsBundle/Resources/views/Stats/onu_graph.html.twig

@@ -1,13 +1,13 @@
 <div>
-    <h4>{{ 'Statistics'|trans({}, 'StatsBundle') }}</h4>
+    
     <div style="margin: 0 auto;">
-        {{ 'Serial number'|trans({}, 'StatsBundle') }}: <b>{{ serial_number }}</b>
-        <div id="stats-iframe">
+        
         {% 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='450' frameborder='0' style='margin-bottom: 10px; width: 100%;'></iframe>" %}
+        {% set iframe = "<iframe src='#{url_iframe}' height='300' frameborder='0' style='margin-bottom: 10px; width: 100%;'></iframe>" %}
         {{ iframe|raw }}
-        {% endfor %}
         </div>
+        {% endfor %}
     </div>
 </div>