From 0893f7f3ab7a41ed20b5199e28d026decc154bc8 Mon Sep 17 00:00:00 2001 From: Nicolas Boisselier Date: Mon, 11 Apr 2016 16:41:08 +0100 Subject: [PATCH] Fix bug with extras=0, add ui.php --- etc/dbs.php | 3 +- etc/dbs.yaml | 24 ++++----- etc/dbs/ui.php | 116 +++++++++++++++++++++++++++++++++++++++++++ lib/php/db/table.php | 27 +++++----- 4 files changed, 144 insertions(+), 26 deletions(-) create mode 100644 etc/dbs/ui.php diff --git a/etc/dbs.php b/etc/dbs.php index 1abb7b51..7065f426 100644 --- a/etc/dbs.php +++ b/etc/dbs.php @@ -1,11 +1,12 @@ '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' => '\'\'', + ), + ), + + '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',''||max(date)||'' 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' => '\'\'', + ), + + 'view_backup' => array( + 'Details' => '\'Go\'', + ), + + 'view_pingdom_per_month' => array( + 'Checks' => '\'\'||(SELECT count(*) FROM pingdom_check_policy pcp WHERE pcp.idpingdom_policy=view_pingdom_per_month.idpingdom_policy)||\'\'', + ), + 'pingdom_check' => array( + 'View' => '\'\'', + ), + ), + ), +); +?> diff --git a/lib/php/db/table.php b/lib/php/db/table.php index 94529193..8c3305cb 100644 --- a/lib/php/db/table.php +++ b/lib/php/db/table.php @@ -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', -- 2.47.3