📄 manage.sql
字号:
to_netboxid INT4 REFERENCES netbox (netboxid) ON UPDATE CASCADE ON DELETE SET NULL, to_swportid INT4 REFERENCES swport (swportid) ON UPDATE CASCADE ON DELETE SET NULL, UNIQUE(moduleid, ifindex));CREATE TABLE swp_netbox ( swp_netboxid SERIAL PRIMARY KEY, netboxid INT4 NOT NULL REFERENCES netbox ON UPDATE CASCADE ON DELETE CASCADE, ifindex INT4 NOT NULL, to_netboxid INT4 NOT NULL REFERENCES netbox ON UPDATE CASCADE ON DELETE CASCADE, to_swportid INT4 REFERENCES swport (swportid) ON UPDATE CASCADE ON DELETE SET NULL, misscnt INT4 NOT NULL DEFAULT '0', UNIQUE(netboxid, ifindex, to_netboxid));CREATE TABLE gwport ( gwportid SERIAL PRIMARY KEY, moduleid INT4 NOT NULL REFERENCES module ON UPDATE CASCADE ON DELETE CASCADE, ifindex INT4 NOT NULL, link CHAR(1) CHECK (link='y' OR link='n' OR link='d'), -- y=up, n=down (operDown), d=down (admDown) masterindex INT4, interface VARCHAR, speed DOUBLE PRECISION NOT NULL, metric INT4, portname VARCHAR, to_netboxid INT4 REFERENCES netbox (netboxid) ON UPDATE CASCADE ON DELETE SET NULL, to_swportid INT4 REFERENCES swport (swportid) ON UPDATE CASCADE ON DELETE SET NULL, UNIQUE(moduleid, ifindex));CREATE INDEX gwport_to_swportid_btree ON gwport USING btree (to_swportid);CREATE TABLE gwportprefix ( gwportid INT4 NOT NULL REFERENCES gwport ON UPDATE CASCADE ON DELETE CASCADE, prefixid INT4 NOT NULL REFERENCES prefix ON UPDATE CASCADE ON DELETE CASCADE, gwip INET NOT NULL, hsrp BOOL NOT NULL DEFAULT false, UNIQUE(gwip));CREATE INDEX gwportprefix_gwportid_btree ON gwportprefix USING btree (gwportid);CREATE INDEX gwportprefix_prefixid_btree ON gwportprefix USING btree (prefixid);CREATE TABLE swportvlan ( swportvlanid SERIAL PRIMARY KEY, swportid INT4 NOT NULL REFERENCES swport ON UPDATE CASCADE ON DELETE CASCADE, vlanid INT4 NOT NULL REFERENCES vlan ON UPDATE CASCADE ON DELETE CASCADE, direction CHAR(1) NOT NULL DEFAULT 'x', -- u=up, d=down, ... UNIQUE (swportid, vlanid));CREATE INDEX swportvlan_swportid_btree ON swportvlan USING btree (swportid);CREATE INDEX swportvlan_vlanid_btree ON swportvlan USING btree (vlanid);CREATE TABLE swportallowedvlan ( swportid INT4 NOT NULL PRIMARY KEY REFERENCES swport ON UPDATE CASCADE ON DELETE CASCADE, hexstring VARCHAR);CREATE TABLE swportblocked ( swportid INT4 NOT NULL REFERENCES swport ON UPDATE CASCADE ON DELETE CASCADE, vlan INT4 NOT NULL, PRIMARY KEY(swportid, vlan));CREATE TABLE alertengine ( lastalertqid integer);INSERT INTO alertengine (lastalertqid) values(0);CREATE TABLE cabling ( cablingid SERIAL PRIMARY KEY, roomid VARCHAR(30) NOT NULL REFERENCES room ON UPDATE CASCADE ON DELETE CASCADE, jack VARCHAR NOT NULL, building VARCHAR NOT NULL, targetroom VARCHAR NOT NULL, descr VARCHAR, category VARCHAR NOT NULL,UNIQUE(roomid,jack));CREATE TABLE patch ( patchid SERIAL PRIMARY KEY, swportid INT4 NOT NULL REFERENCES swport ON UPDATE CASCADE ON DELETE CASCADE, cablingid INT4 NOT NULL REFERENCES cabling ON UPDATE CASCADE ON DELETE CASCADE, split VARCHAR NOT NULL DEFAULT 'no',UNIQUE(swportid,cablingid));-------------------------------------------------------------------------------------------------------------------------------------- Attach a trigger to arp and cam, to make sure records are closed as-- netboxes are deleted.-- The pl/pgsql scripting language must be installed on this database first.CREATE FUNCTION netboxid_null_upd_end_time () RETURNS opaque AS 'BEGIN IF old.netboxid IS NOT NULL AND new.netboxid IS NULL THEN new.end_time = current_timestamp; END IF; RETURN new; end' LANGUAGE plpgsql;CREATE TABLE arp ( arpid SERIAL PRIMARY KEY, netboxid INT4 REFERENCES netbox ON UPDATE CASCADE ON DELETE SET NULL, prefixid INT4 REFERENCES prefix ON UPDATE CASCADE ON DELETE SET NULL, sysname VARCHAR NOT NULL, ip INET NOT NULL, mac CHAR(12) NOT NULL, start_time TIMESTAMP NOT NULL, end_time TIMESTAMP NOT NULL DEFAULT 'infinity');CREATE TRIGGER update_arp BEFORE UPDATE ON arp FOR EACH ROW EXECUTE PROCEDURE netboxid_null_upd_end_time();CREATE INDEX arp_mac_btree ON arp USING btree (mac);CREATE INDEX arp_ip_btree ON arp USING btree (ip);CREATE INDEX arp_start_time_btree ON arp USING btree (start_time);CREATE INDEX arp_end_time_btree ON arp USING btree (end_time);CREATE INDEX arp_prefixid_btree ON arp USING btree (prefixid);CREATE TABLE cam ( camid SERIAL PRIMARY KEY, netboxid INT4 REFERENCES netbox ON UPDATE CASCADE ON DELETE SET NULL, sysname VARCHAR NOT NULL, ifindex INT4 NOT NULL, module VARCHAR(4), port INT4, mac CHAR(12) NOT NULL, start_time TIMESTAMP NOT NULL, end_time TIMESTAMP NOT NULL DEFAULT 'infinity', misscnt INT4 DEFAULT '0', UNIQUE(netboxid,sysname,module,port,mac,start_time));CREATE TRIGGER update_cam BEFORE UPDATE ON cam FOR EACH ROW EXECUTE PROCEDURE netboxid_null_upd_end_time();CREATE INDEX cam_mac_btree ON cam USING btree (mac);CREATE INDEX cam_start_time_btree ON cam USING btree (start_time);CREATE INDEX cam_end_time_btree ON cam USING btree (end_time);CREATE INDEX cam_misscnt_btree ON cam USING btree (misscnt);-- VIEWs -----------------------CREATE VIEW netboxmac AS (SELECT DISTINCT ON (mac) netbox.netboxid, arp.mac FROM netbox JOIN arp ON (arp.arpid = (SELECT arp.arpid FROM arp WHERE arp.ip=netbox.ip AND end_time='infinity' LIMIT 1)))UNION DISTINCT(SELECT DISTINCT ON (mac) module.netboxid,mac FROM arp JOIN gwportprefix gwp ON (arp.ip=gwp.gwip AND (hsrp=true OR (SELECT COUNT(*) FROM gwportprefix WHERE gwp.prefixid=gwportprefix.prefixid AND hsrp=true) = 0)) JOIN gwport USING(gwportid) JOIN module USING (moduleid) WHERE arp.end_time='infinity');CREATE VIEW prefix_active_ip_cnt AS(SELECT prefix.prefixid, COUNT(arp.ip) AS active_ip_cnt FROM prefix LEFT JOIN arp ON arp.ip << prefix.netaddr WHERE arp.end_time = 'infinity' GROUP BY prefix.prefixid);CREATE VIEW prefix_max_ip_cnt AS(SELECT prefixid, CASE POW(2,32-MASKLEN(netaddr))-2 WHEN -1 THEN 0 ELSE POW(2,32-MASKLEN(netaddr))-2 END AS max_ip_cnt FROM prefix);-- This view gives the allowed vlan for a given hexstring i swportallowedvlanCREATE TABLE range ( num INT NOT NULL PRIMARY KEY);INSERT INTO range VALUES (0);INSERT INTO range (SELECT num+(SELECT COUNT(*) FROM range) FROM range);INSERT INTO range (SELECT num+(SELECT COUNT(*) FROM range) FROM range);INSERT INTO range (SELECT num+(SELECT COUNT(*) FROM range) FROM range);INSERT INTO range (SELECT num+(SELECT COUNT(*) FROM range) FROM range);INSERT INTO range (SELECT num+(SELECT COUNT(*) FROM range) FROM range);INSERT INTO range (SELECT num+(SELECT COUNT(*) FROM range) FROM range);INSERT INTO range (SELECT num+(SELECT COUNT(*) FROM range) FROM range);INSERT INTO range (SELECT num+(SELECT COUNT(*) FROM range) FROM range);INSERT INTO range (SELECT num+(SELECT COUNT(*) FROM range) FROM range);INSERT INTO range (SELECT num+(SELECT COUNT(*) FROM range) FROM range);DELETE FROM range WHERE num >= 1000;CREATE VIEW allowedvlan AS (SELECT swportid,num AS allowedvlan FROM swportallowedvlan CROSS JOIN range WHERE num < length(decode(hexstring,'hex'))*8 AND (CASE WHEN length(hexstring)=256 THEN get_bit(decode(hexstring,'hex'),(num/8)*8+7-(num%8)) ELSE get_bit(decode(hexstring,'hex'),(length(decode(hexstring,'hex'))*8-num+7>>3<<3)-8+(num%8)) END)=1);CREATE VIEW allowedvlan_both AS (select swportid,swportid as swportid2,allowedvlan from allowedvlan ORDER BY allowedvlan) union (select swport.swportid,to_swportid as swportid2,allowedvlan from swport join allowedvlan on (swport.to_swportid=allowedvlan.swportid) ORDER BY allowedvlan);-------- vlanPlot tables ------CREATE TABLE vp_netbox_grp_info ( vp_netbox_grp_infoid SERIAL PRIMARY KEY, name VARCHAR NOT NULL, hideicons BOOL NOT NULL DEFAULT false, iconname VARCHAR, x INT4 NOT NULL DEFAULT '0', y INT4 NOT NULL DEFAULT '0');-- Default networkINSERT INTO vp_netbox_grp_info (vp_netbox_grp_infoid,name,hideicons) VALUES (0,'_Top',false);CREATE TABLE vp_netbox_grp ( vp_netbox_grp_infoid INT4 REFERENCES vp_netbox_grp_info ON UPDATE CASCADE ON DELETE CASCADE, pnetboxid INT4 NOT NULL, UNIQUE(vp_netbox_grp_infoid, pnetboxid));CREATE TABLE vp_netbox_xy ( vp_netbox_xyid SERIAL PRIMARY KEY, pnetboxid INT4 NOT NULL, x INT4 NOT NULL, y INT4 NOT NULL, vp_netbox_grp_infoid INT4 NOT NULL REFERENCES vp_netbox_grp_info ON UPDATE CASCADE ON DELETE CASCADE, UNIQUE(pnetboxid, vp_netbox_grp_infoid));-------- vlanPlot end -------------------------------------------------------------------------------------- rrd metadb tables-------------------------------------------------------------------------------- This table contains the different systems that has rrd-data.-- Replaces table eventprocessCREATE TABLE subsystem ( name VARCHAR PRIMARY KEY, -- name of the system, e.g. Cricket descr VARCHAR -- description of the system);INSERT INTO subsystem (name) VALUES ('eventEngine');INSERT INTO subsystem (name) VALUES ('pping');INSERT INTO subsystem (name) VALUES ('serviceping');INSERT INTO subsystem (name) VALUES ('moduleMon');INSERT INTO subsystem (name) VALUES ('thresholdMon');INSERT INTO subsystem (name) VALUES ('trapParser');INSERT INTO subsystem (name) VALUES ('cricket');INSERT INTO subsystem (name) VALUES ('deviceTracker');INSERT INTO subsystem (name) VALUES ('getDeviceData');INSERT INTO subsystem (name) VALUES ('devBrowse');INSERT INTO subsystem (name) VALUES ('maintenance');-- Each rrdfile should be registered here. We need the path to find it,-- and also a link to which unit or service it has data about to easily be-- able to select all relevant files to a unit or service. Key and value-- are meant to be combined and thereby point to a specific row in the db.CREATE TABLE rrd_file ( rrd_fileid SERIAL PRIMARY KEY, path VARCHAR NOT NULL, -- complete path to the rrdfile filename VARCHAR NOT NULL, -- name of the rrdfile (including the .rrd) step INT, -- the number of seconds between each update subsystem VARCHAR REFERENCES subsystem (name) ON UPDATE CASCADE ON DELETE CASCADE, netboxid INT REFERENCES netbox ON UPDATE CASCADE ON DELETE SET NULL, key VARCHAR, value VARCHAR);-- Each datasource for each rrdfile is registered here. We need the name and-- desc for instance in Cricket. Cricket has the name ds0, ds1 and so on, and-- to understand what that is for humans we need the descr.CREATE TABLE rrd_datasource ( rrd_datasourceid SERIAL PRIMARY KEY, rrd_fileid INT REFERENCES rrd_file ON UPDATE CASCADE ON DELETE CASCADE, name VARCHAR, -- name of the datasource in the file descr VARCHAR, -- human-understandable name of the datasource dstype VARCHAR CHECK (dstype='GAUGE' OR dstype='DERIVE' OR dstype='COUNTER' OR dstype='ABSOLUTE'), units VARCHAR, -- textual decription of the y-axis (percent, kilo, giga, etc.) threshold VARCHAR, max VARCHAR, delimiter CHAR(1) CHECK (delimiter='>' OR delimiter='<'), thresholdstate VARCHAR CHECK (thresholdstate='active' OR thresholdstate='inactive'));-- CREATE VIEW rrddatasourcenetbox AS(SELECT DISTINCT rrd_datasource.descr, rrd_datasource.rrd_datasourceid, sysname FROM rrd_datasource JOIN rrd_file USING (rrd_fileid) JOIN netbox USING (netboxid));-------------------------------------------------------------------------------------------- event system tables-------------------------------------------------------------------------------------------- event tablesCREATE TABLE eventtype ( eventtypeid VARCHAR(32) PRIMARY KEY, eventtypedesc VARCHAR, stateful CHAR(1) NOT NULL CHECK (stateful='y' OR stateful='n'));INSERT INTO eventtype (eventtypeid,eventtypedesc,stateful) VALUES ('boxState','Tells us whether a network-unit is down or up.','y');INSERT INTO eventtype (eventtypeid,eventtypedesc,stateful) VALUES
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -