]> git.nbdom.net Git - nb.git/commitdiff
2mysql net.sh
authorNicolas Boisselier <nicolas.boisselier@semantico.com>
Mon, 27 Jun 2016 16:07:11 +0000 (17:07 +0100)
committerNicolas Boisselier <nicolas.boisselier@semantico.com>
Mon, 27 Jun 2016 16:07:11 +0000 (17:07 +0100)
etc/dbs/ui.php
etc/profile.d/net.sh [new file with mode: 0644]
lib/mysql/functions.sql
lib/php/db/table.php

index 7679f3bc4846a9609f4065fd476447c6d54c90c2..fa9e3df03106f2690b950a31d73a65d91d53c405 100644 (file)
@@ -145,7 +145,7 @@ $CONF['_ui'] = array(
       },
 
     ),
-    'network_ips' => array('sql' => "SELECT (SELECT id FROM network WHERE network <>'' AND network IS NOT NULL AND cidr_range(network,ip) ORDER BY hidden LIMIT 1) as idnetwork,code,network,iddc,count(*) as count FROM view_ip_detail JOIN network ON idnetwork=network.id GROUP BY idnetwork HAVING idnetwork NOT NULL ORDER BY count DESC"),
+    'network_ips' => array('sql' => "SELECT (SELECT id FROM network WHERE network <>'' AND network IS NOT NULL AND cidr_range(network,ip) ORDER BY hidden LIMIT 1) as idnetwork,code,network,iddc,count(*) as count FROM view_ip_detail JOIN network ON idnetwork=network.id GROUP BY idnetwork HAVING idnetwork IS NOT NULL ORDER BY count DESC"),
     'view_puppet_error' => array('sql' => "SELECT idnode ,idcompany ,iddc ,value as last_run FROM fact JOIN node ON id=idnode WHERE name='last_run' AND substr(value,1,10) <='".date('Y-m-d', strtotime('-3 days'))."'"),
     'view_backup_error' => array('sql' => "SELECT idnode,idcompany,iddc,server,max(backup.date) as date FROM backup JOIN node ON id=idnode WHERE NOT EXISTS (SELECT 1 FROM node_decommission nd WHERE nd.id=node.id) GROUP BY idnode HAVING date <= '".date('Y-m-d', strtotime('-2 days'))."' ORDER BY backup.date")
 
diff --git a/etc/profile.d/net.sh b/etc/profile.d/net.sh
new file mode 100644 (file)
index 0000000..f0f5496
--- /dev/null
@@ -0,0 +1,17 @@
+mask2cdr ()
+{
+   # Assumes there's no "255." after a non-255 byte in the mask
+   local x=${1##*255.}
+   set -- 0^^^128^192^224^240^248^252^254^ $(( (${#1} - ${#x})*2 )) ${x%%.*}
+   x=${1%%$3*}
+   echo $(( $2 + (${#x}/4) ))
+}
+
+
+cdr2mask ()
+{
+   # Number of args to shift, 255..255, first non-255 byte, zeroes
+   set -- $(( 5 - ($1 / 8) )) 255 255 255 255 $(( (255 << (8 - ($1 % 8))) & 255 )) 0 0 0
+   [ $1 -gt 1 ] && shift $1 || shift
+   echo ${1-0}.${2-0}.${3-0}.${4-0}
+}
index fd4198ae35328c605eee8cdbcbb3afcf30fb3bb7..90b96a4f30dc7129d38cb220300699cfdf15dd1a 100644 (file)
@@ -13,6 +13,31 @@ BEGIN
   RETURN (INET_ATON(ip) & INET_ATON(netmask)) = INET_ATON(subnet);
 END$$
 
+-- See: https://mebsd.com/cheat-sheets/broadcast-from-network-cidr-equation-examples.html
+-- find the broadcast address from 192.168.32.64/26:
+-- 192.168.32.64 + (2^(32-26)) - 1 = 192.168.32.127
+-- RETURNS varchar(20)
+DROP FUNCTION IF EXISTS cidr_range$$
+CREATE FUNCTION cidr_range (cidr VARCHAR(20), ip VARCHAR(20)) RETURNS TINYINT(1)
+DETERMINISTIC
+BEGIN
+  DECLARE subnet int unsigned;
+  DECLARE netmask int unsigned;
+  SET subnet = INET_ATON(substr(cidr,1,position('/' IN cidr)-1));
+  SET netmask = INET_ATON(CONCAT('255.255.255.',(255 << (8 - (substr(cidr,position('/' IN cidr) + 1) % 8)) & 255 )));
+  RETURN (INET_ATON(ip) & netmask) = subnet;
+END$$
+-- select cidr_range('10.3.8.0/22','10.3.8.1');
+
+DROP FUNCTION IF EXISTS cidr2network$$
+CREATE FUNCTION cidr2network (ipadd VARCHAR(15), mask VARCHAR(2)) RETURNS VARCHAR(15)
+RETURN INET_NTOA(
+    INET_ATON(ipadd) &
+    CONV(CONCAT(REPEAT(1, mask), REPEAT(0, 32 - mask)), 2, 10)
+);
+$$
+
+/*
 DROP FUNCTION IF EXISTS INET_CTOA$$
 DELIMITER ;;
 CREATE FUNCTION `INET_CTOA`(`paramCIDR` int) RETURNS varchar(15) CHARSET utf8
@@ -28,4 +53,5 @@ CREATE FUNCTION `INET_CTOA`(`paramCIDR` int) RETURNS varchar(15) CHARSET utf8
       RETURN INET_NTOA(`netmask`);
     END IF;
 END ;;
+*/
 DELIMITER ;
index 086ecd217db443357f9edb76d80c73f572260659..b3c144cc6907ed58a1147794d715a770c263a7f1 100644 (file)
@@ -142,6 +142,7 @@ Class Table extends nb {
       return 'CREATE VIEW '.$this->sql_name().' AS SELECT'.preg_replace('/^CREATE\s+.*?\s+AS\s+.*?SELECT/i','',$this->sql());
       $sql = $this->sql();
       if ( strpos('CREATE ',$sql) !==0 )  $sql = 'CREATE VIEW '.$this->sql_name().' AS '.$sql;
+      #$sql_replace = $this->db()->type('create',false);
       return 'CREATE VIEW '.$this->sql_name().' AS '.$this->sql();
     }