]> git.nbdom.net Git - nb.git/commitdiff
Fix bug with extras=0, add ui.php
authorNicolas Boisselier <nicolas.boisselier@gmail.com>
Mon, 11 Apr 2016 15:41:08 +0000 (16:41 +0100)
committerNicolas Boisselier <nicolas.boisselier@gmail.com>
Mon, 11 Apr 2016 15:41:08 +0000 (16:41 +0100)
etc/dbs.php
etc/dbs.yaml
etc/dbs/ui.php [new file with mode: 0644]
lib/php/db/table.php

index 1abb7b515793cfad754d245460919c694174998f..7065f4261b4bac966a7ac23be584824ff8fdaa92 100644 (file)
@@ -1,11 +1,12 @@
 <?php
 $CONF = array();
-$dir = dirname(__FILE__);
+$dir = dirname(__FILE__).'/dbs';
 foreach (array(
   'postfix',
   'nb',
   'rent',
   'puppetdb',
+  'ui',
 ) as $file) {
   if (file_exists("$dir/$file.php")) require_once("$dir/$file.php");
 }
index e55fe28cc69a157891d5c1b9b44c7be74e0fe498..1df31c3b60c1e74dc0dd5f1dd7165471ff6e082a 100644 (file)
@@ -12,18 +12,18 @@ wp:
   type: mysql
   _import:
     - _nico
-ui:
-  pdo: 'sqlite:/opt/semantico/product/releases/sem_ui/db/semantico.db'
-  title: 'Semantico UI'
-  #default_table: view_puppet_error
-  default_table: node
-  tables:
-    node:
-      orderby: "(SELECT value FROM fact WHERE idnode=id AND name='date_install') DESC"
-      replace_:
-        iddc: dc.id
-  replace:
-    "SELECT name FROM dc WHERE id='@id'": ".node td.iddc"
+# NB 11.04.16 ui:
+# NB 11.04.16   pdo: 'sqlite:/opt/semantico/product/releases/sem_ui/db/semantico.db'
+# NB 11.04.16   title: 'Semantico UI'
+# NB 11.04.16   #default_table: view_puppet_error
+# NB 11.04.16   default_table: node
+# NB 11.04.16   tables:
+# NB 11.04.16     node:
+# NB 11.04.16       orderby: "(SELECT value FROM fact WHERE idnode=id AND name='date_install') DESC"
+# NB 11.04.16       replace_:
+# NB 11.04.16         iddc: dc.id
+# NB 11.04.16   replace:
+# NB 11.04.16     "SELECT name FROM dc WHERE id='@id'": ".node td.iddc"
 
 rt:
   pdo: 'pgsql:host=db.rt.semantico.net;port=5432;dbname=rtdb;user=rtuser;password='
diff --git a/etc/dbs/ui.php b/etc/dbs/ui.php
new file mode 100644 (file)
index 0000000..f153a70
--- /dev/null
@@ -0,0 +1,116 @@
+<?php
+$CONF['ui'] = array(
+  'title' => 'Semantico UI',
+  'pdo' => 'sqlite:/opt/semantico/product/releases/sem_ui/db/semantico.db',
+  'default_table' => 'node',
+  'tables' => array(
+
+    'aws_az' => array(
+      'extras'=> array(
+        #'network_idsubnet' => "(SELECT code FROM network WHERE network.id='subnet-' || aws_az.id)",
+        'aws_region_cidr' => "(SELECT cidr FROM aws_region WHERE aws_region.id=idaws_region)",
+        'aws_region_idvpc' => "(SELECT idvpc FROM aws_region WHERE aws_region.id=idaws_region)",
+        'aws_region_sg' => "(SELECT sg FROM aws_region WHERE aws_region.id=idaws_region)",
+        'aws_instances' => "(SELECT count(*) FROM aws_instance WHERE aws_az.id=idaws_az)",
+        'idnetwork' => "(SELECT id FROM network WHERE network.id='subnet-' || aws_az.id)",
+        'network_subnet' => "(SELECT network FROM network WHERE network.id='subnet-' || aws_az.id)",
+        'ec2' => "'--region '||(SELECT id FROM aws_region WHERE aws_region.id=idaws_region)||' --subnet-id '||(SELECT id FROM aws_subnet WHERE aws_subnet.aws_azid=aws_az.id)||' --security-group-ids '||(SELECT sg FROM aws_region WHERE aws_region.id=idaws_region)||' --associate-public-ip-address --key-name semadm'"
+        #'subnet' => "(SELECT 'subnet' || aws_az.id)",
+      )
+    ),
+
+    'aws_region' => array(
+      'extras'=> array(
+        'aws_az' => "(SELECT count(*) FROM aws_az WHERE idaws_region=aws_region.id)",
+        'aws_instance' => "(SELECT count(*) FROM aws_instance JOIN aws_az ON idaws_region=aws_region.id)",
+        'aws_rds' => "(SELECT count(*) FROM aws_rds WHERE idaws_region=aws_region.id)",
+        'aws_elb' => "(SELECT count(*) FROM aws_elb WHERE idaws_region=aws_region.id)",
+      ),
+    ),
+
+    'contact' => array(
+      'extras'=> array(
+      ' pic' => '\'<img src="/scripts/gravatar/?email=\' || contact.email || \'" />\'',
+      ),
+    ),
+
+    'vmware' => array(
+      'extras'=> array(
+        'vms' => "(SELECT count(*) FROM vms WHERE vms.idvmware = vmware.id)",
+        'Rack' => "(SELECT idrack FROM rack_node WHERE id=idnode LIMIT 1)",
+      ),
+    ),
+
+    'firewall' => array(
+      'extras'=> array(
+        ' Rack' => "(SELECT idrack FROM rack_node WHERE id=idnode LIMIT 1)",
+      ),
+    ),
+
+    'vms' => array(
+      'extras'=> array(
+        'Rack' => "(SELECT idrack FROM rack_node WHERE idvmware=idnode LIMIT 1)",
+      ),
+    ),
+
+    'company' => array(
+      'extras'=> array(
+        'nodes' => "(SELECT count(*) FROM node WHERE node.idcompany = company.id)",
+        'peoples' => "(SELECT count(*) FROM people WHERE people.idcompany = company.id)",
+      ),
+    ),
+
+    'service' => array(
+      'extras'=> array(
+        'products' => '(SELECT GROUP_CONCAT(idproduct,", ") FROM product_service WHERE idservice=id)',
+      ),
+    ),
+
+    'product' => array(
+      'extras'=> array(
+        'service' => '(SELECT GROUP_CONCAT(idservice,", ") FROM product_service WHERE idproduct=id)',
+        #'nodes' => "(SELECT count(*) FROM node WHERE node.id LIKE '___' || product.id || '%')",
+      ),
+    ),
+
+    'dc' => array(
+      #'nodes' => "(SELECT count(*) FROM node WHERE node.id LIKE '%' || dc.id || '_')",
+      'nodes' => "(SELECT count(*) FROM node WHERE node.iddc = dc.id)",
+      #'dns-scr' => "(SELECT count(*) FROM dns WHERE dns.src LIKE '%' || dc.id || '%')",
+      #'dns-dst' => "(SELECT count(*) FROM dns WHERE dns.dst LIKE '%' || dc.id || '%')",
+    ),
+
+    'node' => array(
+      'extras'=> array(
+        'ips' => false,
+        'file' => false, # printed in meta
+        # n => v
+        'metas' => preg_replace('/(^\t|\n$)/',' ',"(SELECT GROUP_CONCAT(n || '=' || v,'\n') FROM (
+          SELECT 'dell-rac' as 'n',replace(src,'.semantico.net','') as 'v' FROM dns WHERE src LIKE id || '-rac.%'
+          UNION SELECT 'idvmware' as 'n',idvmware as 'v' FROM vms WHERE vms.idnode=node.id
+          UNION SELECT 'rack' as'n',idrack as 'v' FROM rack_node WHERE id=idnode OR idnode IN (SELECT idvmware FROM vms WHERE vms.idnode=node.id)
+          UNION SELECT 'env' as 'n',value as 'v' FROM fact WHERE fact.idnode=node.id AND name='environment'
+          UNION SELECT 'aws_instance' as 'n',id as 'v' FROM aws_instance WHERE aws_instance.idnode=node.id
+          UNION SELECT 'file' as 'n',file as 'v'
+          UNION SELECT 'last_backup' as 'n','<a href=\"#\" onclick=\"alert(''Directories:\\n\\n '||replace(dirs,' ','\\n')||''');return false\">'||max(date)||'</a>' as 'v' FROM backup WHERE idnode=node.id
+          UNION SELECT name as 'n', strftime('%Y-%m-%d',value) as 'v' FROM fact WHERE idnode=id AND name='last_run' AND value < date(CURRENT_DATE,'-7 days') || ' 00:00:00'
+        ))"),
+        'fact' => "(SELECT count(*) FROM fact WHERE fact.idnode=node.id)",
+        'keyevent' => "(SELECT count(*) FROM keyevent WHERE keyevent.idnode=node.id)",
+        'graph' => '\'<a target="_blank" href="/graphite/?Hosts=\' || id || \'"><img src="/images/graphite.png" /></a>\'',
+      ),
+
+      'view_backup' => array(
+        'Details' => '\'<a target="_blank" class="view_backup" href="?table=backup&idnode=\' || idnode || \'">Go</a>\'',
+      ),
+
+      'view_pingdom_per_month' => array(
+        'Checks' => '\'<a target="_blank" class="pingdom_check_report" href="?table=pingdom_check_policy&idpingdom_policy=\' || idpingdom_policy || \'">\'||(SELECT count(*) FROM pingdom_check_policy pcp WHERE pcp.idpingdom_policy=view_pingdom_per_month.idpingdom_policy)||\'</a>\'',
+      ),
+      'pingdom_check' => array(
+        'View' => '\'<a target="_blank" class="pingdom_check_report" href="https://my.pingdom.com/reports/uptime#check=\' || id || \'"><img src="/images/graphite.png" /></a>\'',
+      ),
+    ),
+  ),
+);
+?>
index 945291937113b78cc5ee7221f3106c64faedc4e6..8c3305cbb95d1bf7bc50234a8baaa9fc34f5302b 100644 (file)
@@ -52,10 +52,7 @@ Class Table extends nb {
     // Extras - We dont want to affect $this
 
     // Extras
-    if ($this->p('extras')==='0') {
-        $this->extras = array();
-
-    } elseif (isset($opt['extras'])) {
+    if (isset($opt['extras'])) {
       $this->add_extras($opt['extras']);
       unset($opt['extras']);
     }
@@ -499,13 +496,20 @@ Class Table extends nb {
   }
 
   public function add_extras($extras) {
+    if ($this->p('extras') === '0') return false;
+
     $this->fields();
 
     foreach ($extras as $k => $v) {
 
+      if ($v === null or $v === false) {
+        if (isset($this->fields[$k])) unset($this->fields[$k]);
+        continue;
+      }
+
       $v = new Field( ( is_array($v) ? $v : array() ) + array(
-        'name' => $k, 
-        'type' => 'text', 
+        'name' => $k,
+        'type' => 'text',
         'extra' => $v,
       ));
 
@@ -513,13 +517,12 @@ Class Table extends nb {
       $this->extras[$k] = $v;
 
     }
-#bye($this->extras);
 
   }
 
   public function select_extras() {
 
-    if (!$this->extras) return '';
+    if (empty($this->extras)) return '';
 
     $select = array(); foreach ($this->extras as $name => $field) {
       $select[] = $field->extra." AS ".$field->sql_name();
@@ -537,7 +540,7 @@ Class Table extends nb {
 
     $format = $this->p('format');
     if (!$format) bye("No param format");
-    
+
     //
     // Select
     //
@@ -1382,16 +1385,14 @@ Class Table extends nb {
   }
 
   public function __sleep() {
-#bye(get_class_vars(__CLASS__));
     return array(
       'name',
       'sql',
       'type',
       'fields',
-# NB 28.03.16       'fields_keys',
-# NB 28.03.16       'replace',
       'extras',
-      #'params',
+      'row_parse_pre',
+      'row_parse_post',
       'count',
       'engine',
       'created',