--- /dev/null
+<?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>\'',
+ ),
+ ),
+ ),
+);
+?>
// 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']);
}
}
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,
));
$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();
$format = $this->p('format');
if (!$format) bye("No param format");
-
+
//
// Select
//
}
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',