aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorroot <root@colazero.tele.tg18.gathering.org>2018-03-31 22:28:26 +0200
committerroot <root@colazero.tele.tg18.gathering.org>2018-03-31 22:28:26 +0200
commit38b48dd77b57b116f633b1cf5d68cc70a44b1ea8 (patch)
tree52b6b4a1af7c4aff3321f4ce60e88d4a483ba315
parentbe54730288b9925003e88788e65f11199cc8292b (diff)
Throw TG18-stuff over the wall
-rw-r--r--ansible/roles/postgres/files/schema-backup.sql610
-rw-r--r--ansible/roles/postgres/files/schema.sql162
-rwxr-xr-xcollectors/ping.pl85
-rwxr-xr-xcollectors/snmpfetchng.pl92
-rw-r--r--include/nms/snmp.pm1
-rwxr-xr-xtemplating/templating.py7
-rwxr-xr-xweb/api/public/ping4
-rwxr-xr-xweb/api/public/switch-state12
-rwxr-xr-xweb/api/read/switches-management2
-rw-r--r--web/js/nms-draw-chart.js2
-rw-r--r--web/js/nms-info-box.js79
-rw-r--r--web/js/nms-map-handlers.js91
-rw-r--r--web/js/nms-template.js4
-rw-r--r--web/js/nms.js1
14 files changed, 952 insertions, 200 deletions
diff --git a/ansible/roles/postgres/files/schema-backup.sql b/ansible/roles/postgres/files/schema-backup.sql
new file mode 100644
index 0000000..ed94e80
--- /dev/null
+++ b/ansible/roles/postgres/files/schema-backup.sql
@@ -0,0 +1,610 @@
+--
+-- PostgreSQL database dump
+--
+
+SET statement_timeout = 0;
+SET lock_timeout = 0;
+SET client_encoding = 'UTF8';
+SET standard_conforming_strings = on;
+SET check_function_bodies = false;
+SET client_min_messages = warning;
+
+--
+-- Name: plpgsql; Type: EXTENSION; Schema: -; Owner:
+--
+
+CREATE EXTENSION IF NOT EXISTS plpgsql WITH SCHEMA pg_catalog;
+
+
+--
+-- Name: EXTENSION plpgsql; Type: COMMENT; Schema: -; Owner:
+--
+
+COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language';
+
+
+SET search_path = public, pg_catalog;
+
+--
+-- Name: comment_state; Type: TYPE; Schema: public; Owner: nms
+--
+
+CREATE TYPE comment_state AS ENUM (
+ 'active',
+ 'inactive',
+ 'persist',
+ 'delete'
+);
+
+
+ALTER TYPE comment_state OWNER TO nms;
+
+SET default_tablespace = '';
+
+SET default_with_oids = false;
+
+--
+-- Name: config; Type: TABLE; Schema: public; Owner: nms; Tablespace:
+--
+
+CREATE TABLE config (
+ id integer NOT NULL,
+ publicvhost character varying,
+ shortname character varying,
+ data jsonb
+);
+
+
+ALTER TABLE config OWNER TO nms;
+
+--
+-- Name: config_id_seq; Type: SEQUENCE; Schema: public; Owner: nms
+--
+
+CREATE SEQUENCE config_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1;
+
+
+ALTER TABLE config_id_seq OWNER TO nms;
+
+--
+-- Name: config_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: nms
+--
+
+ALTER SEQUENCE config_id_seq OWNED BY config.id;
+
+
+--
+-- Name: dhcp; Type: TABLE; Schema: public; Owner: nms; Tablespace:
+--
+
+CREATE TABLE dhcp (
+ switch integer,
+ "time" timestamp with time zone,
+ mac macaddr,
+ ip inet,
+ dhcp_server integer
+);
+
+
+ALTER TABLE dhcp OWNER TO nms;
+
+--
+-- Name: linknet_ping; Type: TABLE; Schema: public; Owner: nms; Tablespace:
+--
+
+CREATE TABLE linknet_ping (
+ linknet integer NOT NULL,
+ "time" timestamp with time zone DEFAULT now() NOT NULL,
+ latency1_ms double precision,
+ latency2_ms double precision
+);
+
+
+ALTER TABLE linknet_ping OWNER TO nms;
+
+--
+-- Name: linknets; Type: TABLE; Schema: public; Owner: nms; Tablespace:
+--
+
+CREATE TABLE linknets (
+ linknet integer NOT NULL,
+ switch1 integer NOT NULL,
+ addr1 inet,
+ switch2 integer NOT NULL,
+ addr2 inet,
+ port1 character varying(10),
+ port2 character varying(10)
+);
+
+
+ALTER TABLE linknets OWNER TO nms;
+
+--
+-- Name: linknets_linknet_seq; Type: SEQUENCE; Schema: public; Owner: nms
+--
+
+CREATE SEQUENCE linknets_linknet_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1;
+
+
+ALTER TABLE linknets_linknet_seq OWNER TO nms;
+
+--
+-- Name: linknets_linknet_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: nms
+--
+
+ALTER SEQUENCE linknets_linknet_seq OWNED BY linknets.linknet;
+
+
+--
+-- Name: oplog; Type: TABLE; Schema: public; Owner: nms; Tablespace:
+--
+
+CREATE TABLE oplog (
+ id integer NOT NULL,
+ "time" timestamp with time zone DEFAULT now(),
+ systems character varying,
+ username character varying,
+ log text
+);
+
+
+ALTER TABLE oplog OWNER TO nms;
+
+--
+-- Name: oplog_id_seq; Type: SEQUENCE; Schema: public; Owner: nms
+--
+
+CREATE SEQUENCE oplog_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1;
+
+
+ALTER TABLE oplog_id_seq OWNER TO nms;
+
+--
+-- Name: oplog_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: nms
+--
+
+ALTER SEQUENCE oplog_id_seq OWNED BY oplog.id;
+
+
+--
+-- Name: ping; Type: TABLE; Schema: public; Owner: nms; Tablespace:
+--
+
+CREATE TABLE ping (
+ switch integer NOT NULL,
+ "time" timestamp with time zone DEFAULT now() NOT NULL,
+ latency_ms double precision
+);
+
+
+ALTER TABLE ping OWNER TO nms;
+
+--
+-- Name: ping_secondary_ip; Type: TABLE; Schema: public; Owner: nms; Tablespace:
+--
+
+CREATE TABLE ping_secondary_ip (
+ switch integer NOT NULL,
+ "time" timestamp with time zone DEFAULT now() NOT NULL,
+ latency_ms double precision
+);
+
+
+ALTER TABLE ping_secondary_ip OWNER TO nms;
+
+--
+-- Name: seen_mac; Type: TABLE; Schema: public; Owner: nms; Tablespace:
+--
+
+CREATE TABLE seen_mac (
+ mac macaddr NOT NULL,
+ address inet NOT NULL,
+ seen timestamp with time zone DEFAULT now() NOT NULL
+);
+
+
+ALTER TABLE seen_mac OWNER TO nms;
+
+--
+-- Name: snmp; Type: TABLE; Schema: public; Owner: nms; Tablespace:
+--
+
+CREATE TABLE snmp (
+ "time" timestamp without time zone DEFAULT now() NOT NULL,
+ switch integer NOT NULL,
+ data jsonb,
+ id integer NOT NULL
+);
+
+
+ALTER TABLE snmp OWNER TO nms;
+
+--
+-- Name: snmp_id_seq; Type: SEQUENCE; Schema: public; Owner: nms
+--
+
+CREATE SEQUENCE snmp_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1;
+
+
+ALTER TABLE snmp_id_seq OWNER TO nms;
+
+--
+-- Name: snmp_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: nms
+--
+
+ALTER SEQUENCE snmp_id_seq OWNED BY snmp.id;
+
+
+--
+-- Name: switches; Type: TABLE; Schema: public; Owner: nms; Tablespace:
+--
+
+CREATE TABLE switches (
+ switch integer DEFAULT nextval(('"switches_switch_seq"'::text)::regclass) NOT NULL,
+ mgmt_v4_addr inet,
+ mgmt_v6_addr inet,
+ mgmt_vlan character varying,
+ sysname character varying NOT NULL,
+ last_updated timestamp with time zone,
+ locked boolean DEFAULT false NOT NULL,
+ poll_frequency interval DEFAULT '00:01:00'::interval NOT NULL,
+ community character varying DEFAULT 'FullPuppTilNMS'::character varying NOT NULL,
+ placement box,
+ distro_name character varying,
+ distro_phy_port character varying(100),
+ traffic_vlan character varying,
+ tags jsonb DEFAULT '[]'::jsonb
+);
+
+
+ALTER TABLE switches OWNER TO nms;
+
+--
+-- Name: switches_switch_seq; Type: SEQUENCE; Schema: public; Owner: nms
+--
+
+CREATE SEQUENCE switches_switch_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1;
+
+
+ALTER TABLE switches_switch_seq OWNER TO nms;
+
+--
+-- Name: networks; Type: TABLE; Schema: public; Owner: nms; Tablespace:
+--
+
+CREATE TABLE networks (
+ network integer DEFAULT nextval(('"networks_network_seq"'::text)::regclass) NOT NULL,
+ name character varying NOT NULL,
+ last_updated timestamp with time zone,
+ placement box,
+ subnet4 cidr,
+ subnet6 cidr,
+ gw4 inet,
+ gw6 inet,
+ routing_point character varying,
+ vlan integer,
+ tags jsonb DEFAULT '[]'::jsonb
+);
+
+ALTER TABLE networks OWNER TO nms;
+
+CREATE SEQUENCE networks_network_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1;
+
+ALTER TABLE networks_network_seq OWNER TO nms;
+
+--
+-- Name: id; Type: DEFAULT; Schema: public; Owner: nms
+--
+
+ALTER TABLE ONLY config ALTER COLUMN id SET DEFAULT nextval('config_id_seq'::regclass);
+
+
+--
+-- Name: linknet; Type: DEFAULT; Schema: public; Owner: nms
+--
+
+ALTER TABLE ONLY linknets ALTER COLUMN linknet SET DEFAULT nextval('linknets_linknet_seq'::regclass);
+
+
+--
+-- Name: id; Type: DEFAULT; Schema: public; Owner: nms
+--
+
+ALTER TABLE ONLY oplog ALTER COLUMN id SET DEFAULT nextval('oplog_id_seq'::regclass);
+
+
+--
+-- Name: id; Type: DEFAULT; Schema: public; Owner: nms
+--
+
+ALTER TABLE ONLY snmp ALTER COLUMN id SET DEFAULT nextval('snmp_id_seq'::regclass);
+
+
+--
+-- Name: seen_mac_pkey; Type: CONSTRAINT; Schema: public; Owner: nms; Tablespace:
+--
+
+ALTER TABLE ONLY seen_mac
+ ADD CONSTRAINT seen_mac_pkey PRIMARY KEY (mac, address, seen);
+
+
+--
+-- Name: switches_pkey; Type: CONSTRAINT; Schema: public; Owner: nms; Tablespace:
+--
+
+ALTER TABLE ONLY switches
+ ADD CONSTRAINT switches_pkey PRIMARY KEY (switch);
+
+
+--
+-- Name: switches_sysname_key; Type: CONSTRAINT; Schema: public; Owner: nms; Tablespace:
+--
+
+ALTER TABLE ONLY switches
+ ADD CONSTRAINT switches_sysname_key UNIQUE (sysname);
+
+
+--
+-- Name: switches_sysname_key1; Type: CONSTRAINT; Schema: public; Owner: nms; Tablespace:
+--
+
+ALTER TABLE ONLY switches
+ ADD CONSTRAINT switches_sysname_key1 UNIQUE (sysname);
+
+
+--
+-- Name: dhcp_ip; Type: INDEX; Schema: public; Owner: nms; Tablespace:
+--
+
+CREATE INDEX dhcp_ip ON dhcp USING btree (ip);
+
+
+--
+-- Name: dhcp_mac; Type: INDEX; Schema: public; Owner: nms; Tablespace:
+--
+
+CREATE INDEX dhcp_mac ON dhcp USING btree (mac);
+
+
+--
+-- Name: dhcp_switch; Type: INDEX; Schema: public; Owner: nms; Tablespace:
+--
+
+CREATE INDEX dhcp_switch ON dhcp USING btree (switch);
+
+
+--
+-- Name: dhcp_time; Type: INDEX; Schema: public; Owner: nms; Tablespace:
+--
+
+CREATE INDEX dhcp_time ON dhcp USING btree ("time");
+
+
+--
+-- Name: ping_index; Type: INDEX; Schema: public; Owner: nms; Tablespace:
+--
+
+CREATE INDEX ping_index ON ping USING btree ("time");
+
+
+--
+-- Name: ping_secondary_index; Type: INDEX; Schema: public; Owner: nms; Tablespace:
+--
+
+CREATE INDEX ping_secondary_index ON ping_secondary_ip USING btree ("time");
+
+
+--
+-- Name: seen_mac_addr_family; Type: INDEX; Schema: public; Owner: nms; Tablespace:
+--
+
+CREATE INDEX seen_mac_addr_family ON seen_mac USING btree (family(address));
+
+
+--
+-- Name: seen_mac_seen; Type: INDEX; Schema: public; Owner: nms; Tablespace:
+--
+
+CREATE INDEX seen_mac_seen ON seen_mac USING btree (seen);
+
+
+--
+-- Name: snmp_time; Type: INDEX; Schema: public; Owner: nms; Tablespace:
+--
+
+CREATE INDEX snmp_time ON snmp USING btree ("time");
+
+
+--
+-- Name: snmp_time15; Type: INDEX; Schema: public; Owner: nms; Tablespace:
+--
+
+CREATE INDEX snmp_time15 ON snmp USING btree (id, switch);
+
+
+--
+-- Name: snmp_time6; Type: INDEX; Schema: public; Owner: nms; Tablespace:
+--
+
+CREATE INDEX snmp_time6 ON snmp USING btree ("time" DESC, switch);
+
+
+--
+-- Name: switches_switch; Type: INDEX; Schema: public; Owner: nms; Tablespace:
+--
+
+CREATE INDEX switches_switch ON switches USING hash (switch);
+
+
+--
+-- Name: updated_index2; Type: INDEX; Schema: public; Owner: nms; Tablespace:
+--
+
+CREATE INDEX updated_index2 ON linknet_ping USING btree ("time");
+
+
+--
+-- Name: updated_index3; Type: INDEX; Schema: public; Owner: nms; Tablespace:
+--
+
+CREATE INDEX updated_index3 ON ping_secondary_ip USING btree ("time");
+
+
+--
+-- Name: dhcp_switch_fkey; Type: FK CONSTRAINT; Schema: public; Owner: nms
+--
+
+ALTER TABLE ONLY dhcp
+ ADD CONSTRAINT dhcp_switch_fkey FOREIGN KEY (switch) REFERENCES switches(switch);
+
+
+--
+-- Name: snmp_switch_fkey; Type: FK CONSTRAINT; Schema: public; Owner: nms
+--
+
+ALTER TABLE ONLY snmp
+ ADD CONSTRAINT snmp_switch_fkey FOREIGN KEY (switch) REFERENCES switches(switch);
+
+
+--
+-- Name: switchname; Type: FK CONSTRAINT; Schema: public; Owner: nms
+--
+
+ALTER TABLE ONLY ping
+ ADD CONSTRAINT switchname FOREIGN KEY (switch) REFERENCES switches(switch);
+
+
+--
+-- Name: public; Type: ACL; Schema: -; Owner: postgres
+--
+
+REVOKE ALL ON SCHEMA public FROM PUBLIC;
+REVOKE ALL ON SCHEMA public FROM postgres;
+GRANT ALL ON SCHEMA public TO postgres;
+GRANT ALL ON SCHEMA public TO PUBLIC;
+
+
+--
+-- Name: config; Type: ACL; Schema: public; Owner: nms
+--
+
+REVOKE ALL ON TABLE config FROM PUBLIC;
+REVOKE ALL ON TABLE config FROM nms;
+GRANT ALL ON TABLE config TO nms;
+
+
+--
+-- Name: dhcp; Type: ACL; Schema: public; Owner: nms
+--
+
+REVOKE ALL ON TABLE dhcp FROM PUBLIC;
+REVOKE ALL ON TABLE dhcp FROM nms;
+GRANT ALL ON TABLE dhcp TO nms;
+
+
+--
+-- Name: linknet_ping; Type: ACL; Schema: public; Owner: nms
+--
+
+REVOKE ALL ON TABLE linknet_ping FROM PUBLIC;
+REVOKE ALL ON TABLE linknet_ping FROM nms;
+GRANT ALL ON TABLE linknet_ping TO nms;
+
+
+--
+-- Name: linknets; Type: ACL; Schema: public; Owner: nms
+--
+
+REVOKE ALL ON TABLE linknets FROM PUBLIC;
+REVOKE ALL ON TABLE linknets FROM nms;
+GRANT ALL ON TABLE linknets TO nms;
+
+
+--
+-- Name: ping; Type: ACL; Schema: public; Owner: nms
+--
+
+REVOKE ALL ON TABLE ping FROM PUBLIC;
+REVOKE ALL ON TABLE ping FROM nms;
+GRANT ALL ON TABLE ping TO nms;
+
+
+--
+-- Name: ping_secondary_ip; Type: ACL; Schema: public; Owner: nms
+--
+
+REVOKE ALL ON TABLE ping_secondary_ip FROM PUBLIC;
+REVOKE ALL ON TABLE ping_secondary_ip FROM nms;
+GRANT ALL ON TABLE ping_secondary_ip TO nms;
+
+
+--
+-- Name: seen_mac; Type: ACL; Schema: public; Owner: nms
+--
+
+REVOKE ALL ON TABLE seen_mac FROM PUBLIC;
+REVOKE ALL ON TABLE seen_mac FROM nms;
+GRANT ALL ON TABLE seen_mac TO nms;
+
+
+--
+-- Name: snmp; Type: ACL; Schema: public; Owner: nms
+--
+
+REVOKE ALL ON TABLE snmp FROM PUBLIC;
+REVOKE ALL ON TABLE snmp FROM nms;
+GRANT ALL ON TABLE snmp TO nms;
+GRANT ALL ON TABLE snmp TO postgres;
+
+
+--
+-- Name: snmp_id_seq; Type: ACL; Schema: public; Owner: nms
+--
+
+REVOKE ALL ON SEQUENCE snmp_id_seq FROM PUBLIC;
+REVOKE ALL ON SEQUENCE snmp_id_seq FROM nms;
+GRANT ALL ON SEQUENCE snmp_id_seq TO nms;
+GRANT ALL ON SEQUENCE snmp_id_seq TO postgres;
+
+
+--
+-- Name: switches; Type: ACL; Schema: public; Owner: nms
+--
+
+REVOKE ALL ON TABLE switches FROM PUBLIC;
+REVOKE ALL ON TABLE switches FROM nms;
+GRANT ALL ON TABLE switches TO nms;
+
+
+--
+-- PostgreSQL database dump complete
diff --git a/ansible/roles/postgres/files/schema.sql b/ansible/roles/postgres/files/schema.sql
index ed94e80..0be7d17 100644
--- a/ansible/roles/postgres/files/schema.sql
+++ b/ansible/roles/postgres/files/schema.sql
@@ -10,14 +10,14 @@ SET check_function_bodies = false;
SET client_min_messages = warning;
--
--- Name: plpgsql; Type: EXTENSION; Schema: -; Owner:
+-- Name: plpgsql; Type: EXTENSION; Schema: -; Owner:
--
CREATE EXTENSION IF NOT EXISTS plpgsql WITH SCHEMA pg_catalog;
--
--- Name: EXTENSION plpgsql; Type: COMMENT; Schema: -; Owner:
+-- Name: EXTENSION plpgsql; Type: COMMENT; Schema: -; Owner:
--
COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language';
@@ -44,7 +44,7 @@ SET default_tablespace = '';
SET default_with_oids = false;
--
--- Name: config; Type: TABLE; Schema: public; Owner: nms; Tablespace:
+-- Name: config; Type: TABLE; Schema: public; Owner: nms; Tablespace:
--
CREATE TABLE config (
@@ -79,11 +79,11 @@ ALTER SEQUENCE config_id_seq OWNED BY config.id;
--
--- Name: dhcp; Type: TABLE; Schema: public; Owner: nms; Tablespace:
+-- Name: dhcp; Type: TABLE; Schema: public; Owner: nms; Tablespace:
--
CREATE TABLE dhcp (
- switch integer,
+ network integer,
"time" timestamp with time zone,
mac macaddr,
ip inet,
@@ -94,7 +94,7 @@ CREATE TABLE dhcp (
ALTER TABLE dhcp OWNER TO nms;
--
--- Name: linknet_ping; Type: TABLE; Schema: public; Owner: nms; Tablespace:
+-- Name: linknet_ping; Type: TABLE; Schema: public; Owner: nms; Tablespace:
--
CREATE TABLE linknet_ping (
@@ -108,7 +108,7 @@ CREATE TABLE linknet_ping (
ALTER TABLE linknet_ping OWNER TO nms;
--
--- Name: linknets; Type: TABLE; Schema: public; Owner: nms; Tablespace:
+-- Name: linknets; Type: TABLE; Schema: public; Owner: nms; Tablespace:
--
CREATE TABLE linknets (
@@ -146,7 +146,42 @@ ALTER SEQUENCE linknets_linknet_seq OWNED BY linknets.linknet;
--
--- Name: oplog; Type: TABLE; Schema: public; Owner: nms; Tablespace:
+-- Name: networks; Type: TABLE; Schema: public; Owner: nms; Tablespace:
+--
+
+CREATE TABLE networks (
+ network integer DEFAULT nextval(('"networks_network_seq"'::text)::regclass) NOT NULL,
+ name character varying NOT NULL,
+ last_updated timestamp with time zone,
+ placement box,
+ subnet4 cidr,
+ subnet6 cidr,
+ gw4 inet,
+ gw6 inet,
+ routing_point character varying,
+ vlan integer,
+ tags jsonb DEFAULT '[]'::jsonb
+);
+
+
+ALTER TABLE networks OWNER TO nms;
+
+--
+-- Name: networks_network_seq; Type: SEQUENCE; Schema: public; Owner: nms
+--
+
+CREATE SEQUENCE networks_network_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1;
+
+
+ALTER TABLE networks_network_seq OWNER TO nms;
+
+--
+-- Name: oplog; Type: TABLE; Schema: public; Owner: nms; Tablespace:
--
CREATE TABLE oplog (
@@ -182,7 +217,7 @@ ALTER SEQUENCE oplog_id_seq OWNED BY oplog.id;
--
--- Name: ping; Type: TABLE; Schema: public; Owner: nms; Tablespace:
+-- Name: ping; Type: TABLE; Schema: public; Owner: nms; Tablespace:
--
CREATE TABLE ping (
@@ -195,7 +230,7 @@ CREATE TABLE ping (
ALTER TABLE ping OWNER TO nms;
--
--- Name: ping_secondary_ip; Type: TABLE; Schema: public; Owner: nms; Tablespace:
+-- Name: ping_secondary_ip; Type: TABLE; Schema: public; Owner: nms; Tablespace:
--
CREATE TABLE ping_secondary_ip (
@@ -208,7 +243,7 @@ CREATE TABLE ping_secondary_ip (
ALTER TABLE ping_secondary_ip OWNER TO nms;
--
--- Name: seen_mac; Type: TABLE; Schema: public; Owner: nms; Tablespace:
+-- Name: seen_mac; Type: TABLE; Schema: public; Owner: nms; Tablespace:
--
CREATE TABLE seen_mac (
@@ -221,7 +256,7 @@ CREATE TABLE seen_mac (
ALTER TABLE seen_mac OWNER TO nms;
--
--- Name: snmp; Type: TABLE; Schema: public; Owner: nms; Tablespace:
+-- Name: snmp; Type: TABLE; Schema: public; Owner: nms; Tablespace:
--
CREATE TABLE snmp (
@@ -256,24 +291,26 @@ ALTER SEQUENCE snmp_id_seq OWNED BY snmp.id;
--
--- Name: switches; Type: TABLE; Schema: public; Owner: nms; Tablespace:
+-- Name: switches; Type: TABLE; Schema: public; Owner: nms; Tablespace:
--
CREATE TABLE switches (
switch integer DEFAULT nextval(('"switches_switch_seq"'::text)::regclass) NOT NULL,
mgmt_v4_addr inet,
- mgmt_v6_addr inet,
- mgmt_vlan character varying,
sysname character varying NOT NULL,
last_updated timestamp with time zone,
locked boolean DEFAULT false NOT NULL,
poll_frequency interval DEFAULT '00:01:00'::interval NOT NULL,
community character varying DEFAULT 'FullPuppTilNMS'::character varying NOT NULL,
+ mgmt_v6_addr inet,
placement box,
distro_name character varying,
distro_phy_port character varying(100),
+ tags jsonb DEFAULT '[]'::jsonb,
+ deleted boolean DEFAULT false,
+ mgmt_vlan character varying,
traffic_vlan character varying,
- tags jsonb DEFAULT '[]'::jsonb
+ network integer
);
@@ -294,35 +331,6 @@ CREATE SEQUENCE switches_switch_seq
ALTER TABLE switches_switch_seq OWNER TO nms;
--
--- Name: networks; Type: TABLE; Schema: public; Owner: nms; Tablespace:
---
-
-CREATE TABLE networks (
- network integer DEFAULT nextval(('"networks_network_seq"'::text)::regclass) NOT NULL,
- name character varying NOT NULL,
- last_updated timestamp with time zone,
- placement box,
- subnet4 cidr,
- subnet6 cidr,
- gw4 inet,
- gw6 inet,
- routing_point character varying,
- vlan integer,
- tags jsonb DEFAULT '[]'::jsonb
-);
-
-ALTER TABLE networks OWNER TO nms;
-
-CREATE SEQUENCE networks_network_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-ALTER TABLE networks_network_seq OWNER TO nms;
-
---
-- Name: id; Type: DEFAULT; Schema: public; Owner: nms
--
@@ -351,7 +359,7 @@ ALTER TABLE ONLY snmp ALTER COLUMN id SET DEFAULT nextval('snmp_id_seq'::regclas
--
--- Name: seen_mac_pkey; Type: CONSTRAINT; Schema: public; Owner: nms; Tablespace:
+-- Name: seen_mac_pkey; Type: CONSTRAINT; Schema: public; Owner: nms; Tablespace:
--
ALTER TABLE ONLY seen_mac
@@ -359,7 +367,7 @@ ALTER TABLE ONLY seen_mac
--
--- Name: switches_pkey; Type: CONSTRAINT; Schema: public; Owner: nms; Tablespace:
+-- Name: switches_pkey; Type: CONSTRAINT; Schema: public; Owner: nms; Tablespace:
--
ALTER TABLE ONLY switches
@@ -367,7 +375,7 @@ ALTER TABLE ONLY switches
--
--- Name: switches_sysname_key; Type: CONSTRAINT; Schema: public; Owner: nms; Tablespace:
+-- Name: switches_sysname_key; Type: CONSTRAINT; Schema: public; Owner: nms; Tablespace:
--
ALTER TABLE ONLY switches
@@ -375,7 +383,7 @@ ALTER TABLE ONLY switches
--
--- Name: switches_sysname_key1; Type: CONSTRAINT; Schema: public; Owner: nms; Tablespace:
+-- Name: switches_sysname_key1; Type: CONSTRAINT; Schema: public; Owner: nms; Tablespace:
--
ALTER TABLE ONLY switches
@@ -383,112 +391,104 @@ ALTER TABLE ONLY switches
--
--- Name: dhcp_ip; Type: INDEX; Schema: public; Owner: nms; Tablespace:
+-- Name: dhcp_ip; Type: INDEX; Schema: public; Owner: nms; Tablespace:
--
CREATE INDEX dhcp_ip ON dhcp USING btree (ip);
--
--- Name: dhcp_mac; Type: INDEX; Schema: public; Owner: nms; Tablespace:
+-- Name: dhcp_mac; Type: INDEX; Schema: public; Owner: nms; Tablespace:
--
CREATE INDEX dhcp_mac ON dhcp USING btree (mac);
--
--- Name: dhcp_switch; Type: INDEX; Schema: public; Owner: nms; Tablespace:
+-- Name: dhcp_network; Type: INDEX; Schema: public; Owner: nms; Tablespace:
--
-CREATE INDEX dhcp_switch ON dhcp USING btree (switch);
+CREATE INDEX dhcp_network ON dhcp USING btree (network);
--
--- Name: dhcp_time; Type: INDEX; Schema: public; Owner: nms; Tablespace:
+-- Name: dhcp_time; Type: INDEX; Schema: public; Owner: nms; Tablespace:
--
CREATE INDEX dhcp_time ON dhcp USING btree ("time");
--
--- Name: ping_index; Type: INDEX; Schema: public; Owner: nms; Tablespace:
+-- Name: ping_index; Type: INDEX; Schema: public; Owner: nms; Tablespace:
--
CREATE INDEX ping_index ON ping USING btree ("time");
--
--- Name: ping_secondary_index; Type: INDEX; Schema: public; Owner: nms; Tablespace:
+-- Name: ping_secondary_index; Type: INDEX; Schema: public; Owner: nms; Tablespace:
--
CREATE INDEX ping_secondary_index ON ping_secondary_ip USING btree ("time");
--
--- Name: seen_mac_addr_family; Type: INDEX; Schema: public; Owner: nms; Tablespace:
+-- Name: seen_mac_addr_family; Type: INDEX; Schema: public; Owner: nms; Tablespace:
--
CREATE INDEX seen_mac_addr_family ON seen_mac USING btree (family(address));
--
--- Name: seen_mac_seen; Type: INDEX; Schema: public; Owner: nms; Tablespace:
+-- Name: seen_mac_seen; Type: INDEX; Schema: public; Owner: nms; Tablespace:
--
CREATE INDEX seen_mac_seen ON seen_mac USING btree (seen);
--
--- Name: snmp_time; Type: INDEX; Schema: public; Owner: nms; Tablespace:
+-- Name: snmp_time; Type: INDEX; Schema: public; Owner: nms; Tablespace:
--
CREATE INDEX snmp_time ON snmp USING btree ("time");
--
--- Name: snmp_time15; Type: INDEX; Schema: public; Owner: nms; Tablespace:
+-- Name: snmp_time15; Type: INDEX; Schema: public; Owner: nms; Tablespace:
--
CREATE INDEX snmp_time15 ON snmp USING btree (id, switch);
--
--- Name: snmp_time6; Type: INDEX; Schema: public; Owner: nms; Tablespace:
+-- Name: snmp_time6; Type: INDEX; Schema: public; Owner: nms; Tablespace:
--
CREATE INDEX snmp_time6 ON snmp USING btree ("time" DESC, switch);
--
--- Name: switches_switch; Type: INDEX; Schema: public; Owner: nms; Tablespace:
+-- Name: switches_switch; Type: INDEX; Schema: public; Owner: nms; Tablespace:
--
CREATE INDEX switches_switch ON switches USING hash (switch);
--
--- Name: updated_index2; Type: INDEX; Schema: public; Owner: nms; Tablespace:
+-- Name: updated_index2; Type: INDEX; Schema: public; Owner: nms; Tablespace:
--
CREATE INDEX updated_index2 ON linknet_ping USING btree ("time");
--
--- Name: updated_index3; Type: INDEX; Schema: public; Owner: nms; Tablespace:
+-- Name: updated_index3; Type: INDEX; Schema: public; Owner: nms; Tablespace:
--
CREATE INDEX updated_index3 ON ping_secondary_ip USING btree ("time");
--
--- Name: dhcp_switch_fkey; Type: FK CONSTRAINT; Schema: public; Owner: nms
---
-
-ALTER TABLE ONLY dhcp
- ADD CONSTRAINT dhcp_switch_fkey FOREIGN KEY (switch) REFERENCES switches(switch);
-
-
---
-- Name: snmp_switch_fkey; Type: FK CONSTRAINT; Schema: public; Owner: nms
--
@@ -551,6 +551,24 @@ GRANT ALL ON TABLE linknets TO nms;
--
+-- Name: networks; Type: ACL; Schema: public; Owner: nms
+--
+
+REVOKE ALL ON TABLE networks FROM PUBLIC;
+REVOKE ALL ON TABLE networks FROM nms;
+GRANT ALL ON TABLE networks TO nms;
+
+
+--
+-- Name: oplog; Type: ACL; Schema: public; Owner: nms
+--
+
+REVOKE ALL ON TABLE oplog FROM PUBLIC;
+REVOKE ALL ON TABLE oplog FROM nms;
+GRANT ALL ON TABLE oplog TO nms;
+
+
+--
-- Name: ping; Type: ACL; Schema: public; Owner: nms
--
diff --git a/collectors/ping.pl b/collectors/ping.pl
index 82c5c42..e8fcbdd 100755
--- a/collectors/ping.pl
+++ b/collectors/ping.pl
@@ -29,6 +29,9 @@ while (1) {
if ($elapsed < $target) {
sleep($target - ($now - $last));
}
+
+ my @influx_tree = ();
+
$last = time();
# ping loopbacks
my $ping = Net::Oping->new;
@@ -82,27 +85,18 @@ while (1) {
$latency //= "\\N";
$dbh->pg_putcopydata("$switch\t$latency\n");
if($latency ne "\\N") {
- my $cv = AE::cv;
- $influx->write(
- database => $nms::config::influx_database,
- data => [
- {
- measurement => 'ping',
- tags => {
- switch => $sysname,
- ip => $ip,
- version => 'v4'
- },
- fields => {
- latency => $latency,
- },
- }],
- on_success => $cv,
- on_error => sub {
- $cv->croak("Failed to write data: @_");
- }
- );
- $cv->recv;
+ push (@influx_tree,
+ {
+ measurement => 'ping',
+ tags => {
+ switch => $sysname,
+ ip => $ip,
+ version => 'v4'
+ },
+ fields => {
+ latency => $latency,
+ },
+ });
}
}
@@ -120,29 +114,20 @@ while (1) {
$latency //= "\\N";
$dbh->pg_putcopydata("$switch\t$latency\n");
- if($latency ne "\\N") {
- my $cv = AE::cv;
- $influx->write(
- database => $nms::config::influx_database,
- data => [
- {
- measurement => 'ping',
- tags => {
- switch => $sysname,
- ip => $ip,
- version => 'v6'
- },
- fields => {
- latency => $latency,
- },
- }],
- on_success => $cv,
- on_error => sub {
- $cv->croak("Failed to write data: @_");
- }
- );
- $cv->recv;
- }
+ if($latency ne "\\N") {
+ push (@influx_tree,
+ {
+ measurement => 'ping',
+ tags => {
+ switch => $sysname,
+ ip => $ip,
+ version => 'v6'
+ },
+ fields => {
+ latency => $latency,
+ },
+ });
+ }
}
$dbh->pg_putcopyend();
@@ -172,4 +157,16 @@ while (1) {
$dbh->pg_putcopyend();
}
$dbh->commit;
+
+ my $cv = AE::cv;
+ $influx->write(
+ database => $nms::config::influx_database,
+ data => [@influx_tree],
+ on_success => $cv,
+ on_error => sub {
+ $cv->croak("Failed to write data: @_");
+ }
+ );
+ $cv->recv;
+
}
diff --git a/collectors/snmpfetchng.pl b/collectors/snmpfetchng.pl
index 4312606..02b75b8 100755
--- a/collectors/snmpfetchng.pl
+++ b/collectors/snmpfetchng.pl
@@ -4,9 +4,10 @@ use warnings;
use DBI;
use POSIX;
#use Time::HiRes qw(time);
+use lib '/opt/gondul/include';
+use FixedSNMP;
use SNMP;
use Data::Dumper;
-use lib '/opt/gondul/include';
use nms qw(convert_mac convert_decimal);
use IO::Socket::IP;
use Scalar::Util qw(looks_like_number);
@@ -32,7 +33,7 @@ EOF
# Borrowed from snmpfetch.pl
our $qswitch = $dbh->prepare(<<"EOF")
SELECT
- sysname,switch,host(mgmt_v6_addr) as ip,host(mgmt_v4_addr) as ip2,community,
+ sysname,switch,host(mgmt_v6_addr) as ip2,host(mgmt_v4_addr) as ip,community,
DATE_TRUNC('second', now() - last_updated - poll_frequency) AS overdue
FROM
switches
@@ -70,9 +71,7 @@ sub populate_switches
my $ip;
$ip = $ref->{'ip'};
if (!defined($ip) or $ip eq "") {
- $ip = 'udp:[' . $ref->{'ip2'} . ']';
- } else {
- $ip = 'udp6:[' . $ip . ']';
+ $ip = 'udp6:[' . $ref->{'ip2'} . ']';
}
push @switches, {
'sysname' => $ref->{'sysname'},
@@ -97,7 +96,6 @@ sub inner_loop
$dbh->commit;
my $s = SNMP::Session->new(DestHost => $switch{'mgtip'},
Community => $switch{'community'},
- Timeout => 1000000,
UseEnums => 1,
Version => '2');
my $ret = $s->bulkwalk(0, 10, @nms::config::snmp_objects, sub{ callback(\%switch, @_); });
@@ -106,7 +104,7 @@ sub inner_loop
}
}
mylog( "Polling " . @switches . " switches: $poll_todo");
- SNMP::MainLoop(6);
+ SNMP::MainLoop(5);
}
sub callback{
@@ -118,6 +116,7 @@ sub callback{
my @nicids;
my $total = 0;
my %tree2;
+ my @influx_tree = ();
for my $ret (@top) {
for my $var (@{$ret}) {
@@ -171,61 +170,39 @@ sub callback{
} else {
$tmp_field = '"'.$tree{$nic}{$tmp_key}.'"';
}
-
- my $cv = AE::cv;
- if (defined($tree{$nic}{'ifName'}) and $tree{$nic}{'ifName'} ne "") {
- $influx->write(
- database => $nms::config::influx_database,
- data => [
- {
- measurement => 'ports',
- tags => {
- switch => $switch{'sysname'},
- interface => $tree{$nic}{'ifName'},
- },
- fields => { $tmp_key => $tmp_field },
- }],
- on_success => $cv,
- on_error => sub {
- $cv->croak("Failed to write data: @_");
- }
- );
- $cv->recv;
- }
+ push (@influx_tree,
+ {
+ measurement => 'ports',
+ tags => {
+ switch => $switch{'sysname'},
+ interface => $tree{$nic}{'ifName'},
+ },
+ fields => { $tmp_key => $tmp_field },
+ });
}
delete $tree{$nic};
}
+
for my $iid (keys %tree) {
my $tmp_field = '';
for my $key (keys %{$tree{$iid}}) {
$tree2{'misc'}{$key}{$iid} = $tree{$iid}{$key};
- if(looks_like_number($tree{$iid}{$key})) {
+ if(looks_like_number($tree{$iid}{$key})) {
$tmp_field = $tree{$iid}{$key};
} else {
$tmp_field = '"'.$tree{$iid}{$key}.'"';
}
- my $cv = AE::cv;
- $influx->write(
- database => $nms::config::influx_database,
- data => [
+ push (@influx_tree,
{
measurement => 'snmp',
tags => {
switch => $switch{'sysname'},
},
fields => { $key => $tmp_field },
- }],
- on_success => $cv,
- on_error => sub {
- $cv->croak("Failed to write data: @_");
- }
- );
- $cv->recv;
-
-
+ });
}
}
if ($total > 0) {
@@ -235,21 +212,22 @@ sub callback{
or die "Couldn't unlock switch";
$dbh->commit;
if ($total > 0) {
- my $cv = AE::cv;
- $influx->write(
- database => $nms::config::influx_database,
- data => [
- {
- measurement => 'snmp',
- tags => {
- switch => $switch{'sysname'},
- },
- fields => { 'execution_time' => (time - $switch{'start'}) },
- }],
- on_success => $cv,
- on_error => sub {
- $cv->croak("Failed to write data: @_");
- }
+ push (@influx_tree,
+ {
+ measurement => 'snmp',
+ tags => {
+ switch => $switch{'sysname'},
+ },
+ fields => { 'execution_time' => (time - $switch{'start'}) },
+ });
+ my $cv = AE::cv;
+ $influx->write(
+ database => $nms::config::influx_database,
+ data => [@influx_tree],
+ on_success => $cv,
+ on_error => sub {
+ $cv->croak("Failed to write data: @_");
+ }
);
$cv->recv;
diff --git a/include/nms/snmp.pm b/include/nms/snmp.pm
index 45ab6c6..6165a5a 100644
--- a/include/nms/snmp.pm
+++ b/include/nms/snmp.pm
@@ -1,6 +1,7 @@
#! /usr/bin/perl
use strict;
use warnings;
+use FixedSNMP;
use SNMP;
use nms;
package nms::snmp;
diff --git a/templating/templating.py b/templating/templating.py
index 32abb0c..28a6370 100755
--- a/templating/templating.py
+++ b/templating/templating.py
@@ -11,7 +11,7 @@ endpoints = "read/networks read/oplog read/snmp read/switches-management public/
objects = dict()
def getEndpoint(endpoint):
- r = requests.get("http://localhost:8080/api/%s" % endpoint)
+ r = requests.get("http://localhost:80/api/%s" % endpoint)
if (r.status_code != 200):
raise Exception("Bad status code for endpoint %s: %s" % (endpoint, r.status_code))
return r.json()
@@ -34,6 +34,8 @@ def getDistro(src):
return src.split(":")[0]
def getPort(src):
return src.split(":")[1]
+def getFirstFapIp(ip):
+ return netaddr.IPNetwork(ip)[netaddr.IPNetwork(ip).size/2]
env = Environment(loader=FileSystemLoader(['templates/','/opt/gondul/data/templates', '/opt/gondul/web/templates']), trim_blocks=True)
@@ -44,6 +46,7 @@ env.filters["getFirstDhcpIp"] = getFirstDhcpIp
env.filters["getLastDhcpIp"] = getLastDhcpIp
env.filters["agentDistro"] = getDistro
env.filters["agentPort"] = getPort
+env.filters["getFirstFapIP"] = getFirstFapIp
class Mode(Enum):
Get = 1
@@ -105,7 +108,7 @@ class MyHandler(http.server.BaseHTTPRequestHandler):
self.generic(Mode.Post)
def run(server_class=http.server.HTTPServer, handler_class=http.server.BaseHTTPRequestHandler):
- server_address = ('localhost', 8081)
+ server_address = ('localhost', 8084)
httpd = server_class(server_address, handler_class)
httpd.serve_forever()
diff --git a/web/api/public/ping b/web/api/public/ping
index 1928368..be37875 100755
--- a/web/api/public/ping
+++ b/web/api/public/ping
@@ -4,7 +4,7 @@ use strict;
use warnings;
use nms::web;
-nms::web::setwhen('15s');
+nms::web::setwhen('25s');
my $q = $nms::web::dbh->prepare("SELECT DISTINCT ON (sysname) (" . $nms::web::now . " - time) as age,sysname, latency_ms FROM ping NATURAL JOIN switches WHERE time in (select max(time) from ping where "
. $nms::web::when . " group by switch)");
@@ -37,5 +37,5 @@ while ( my $ref = $lq->fetchrow_hashref() ) {
}
$nms::web::cc{'max-age'} = "1";
-$nms::web::cc{'stale-while-revalidate'} = "15";
+$nms::web::cc{'stale-while-revalidate'} = "5";
finalize_output();
diff --git a/web/api/public/switch-state b/web/api/public/switch-state
index 19bd771..919924e 100755
--- a/web/api/public/switch-state
+++ b/web/api/public/switch-state
@@ -14,9 +14,9 @@ my ($switch, $port) = split(/\//,$target,2);
my $q;
if (!defined($switch)) {
- $q = $nms::web::dbh->prepare('select sysname,extract(epoch from date_trunc(\'second\',time)) as time,data from snmp natural join switches where id in (select max(id) from snmp where ' . $nms::web::when . ' and switches.deleted = false group by switch) and switches.deleted = false and not switches.tags \?& array[\'switchstateignore\'];');
+ $q = $nms::web::dbh->prepare('select sysname,extract(epoch from date_trunc(\'second\',time)) as time,data from snmp natural join switches where id in (select max(id) from snmp where ' . $nms::web::when . ' group by switch) and switches.deleted = \'f\' and not switches.tags \?& array[\'ignoreswitchstate\'];');
} else {
- $q = $nms::web::dbh->prepare('select sysname,extract(epoch from date_trunc(\'second\',time)) as time,data from snmp natural join switches where id in (select max(id) from snmp where ' . $nms::web::when . 'group by switch) and sysname = ' . $nms::web::dbh->quote($switch) . ' and switches.deleted = false and not switches.tags \?& array[\'switchstateignore\'];');
+ $q = $nms::web::dbh->prepare('select sysname,extract(epoch from date_trunc(\'second\',time)) as time,data from snmp natural join switches where id in (select max(id) from snmp where ' . $nms::web::when . 'group by switch) and sysname = ' . $nms::web::dbh->quote($switch) . ';');
}
$q->execute();
@@ -42,7 +42,7 @@ while ( my $ref = $q->fetchrow_hashref() ) {
$json{'switches'}{$sysname}{ifs}{$smallport}{'ifAlias'} = $port{'ifAlias'};
}
if ($data{'ports'}{$porti}{'ifType'} ne "propVirtual" and
- $data{'ports'}{$porti}{'ifAlias'} =~ m/LAG member/i) {
+ $data{'ports'}{$porti}{'ifAlias'} =~ m/Fysisk/i) {
if ($port{'ifAdminStatus'} eq "up") {
$json{'switches'}{$sysname}{'uplinks'}{'ifHCInOctets'} += $port{'ifHCInOctets'};
$json{'switches'}{$sysname}{'uplinks'}{'ifHCOutOctets'} += $port{'ifHCOutOctets'};
@@ -83,9 +83,9 @@ while ( my $ref = $q->fetchrow_hashref() ) {
nms::web::setwhen('15m','10m');
my $q2;
if (!defined($switch)) {
- $q2 = $nms::web::dbh->prepare('select sysname,extract(epoch from date_trunc(\'second\',time)) as time,data from snmp natural join switches where id in (select max(id) from snmp where ' . $nms::web::when . ' and switches.deleted = false group by switch) and switches.deleted = false and not switches.tags \?& array[\'switchstateignore\'];');
+ $q2 = $nms::web::dbh->prepare('select sysname,extract(epoch from date_trunc(\'second\',time)) as time,data from snmp natural join switches where id in (select max(id) from snmp where ' . $nms::web::when . ' group by switch) and switches.deleted = \'f\' and not switches.tags \?& array[\'ignoreswitchstate\'];');
} else {
- $q2 = $nms::web::dbh->prepare('select sysname,extract(epoch from date_trunc(\'second\',time)) as time,data from snmp natural join switches where id in (select max(id) from snmp where ' . $nms::web::when . 'group by switch) and sysname = ' . $nms::web::dbh->quote($switch) . ' and switches.deleted = false and not switches.tags \?& array[\'switchstateignore\'];');
+ $q2 = $nms::web::dbh->prepare('select sysname,extract(epoch from date_trunc(\'second\',time)) as time,data from snmp natural join switches where id in (select max(id) from snmp where ' . $nms::web::when . 'group by switch) and switches.deleted = \'f\' and not switches.tags \?& array[\'ignoreswitchstate\'] and sysname = ' . $nms::web::dbh->quote($switch) . ';');
}
$q2->execute();
@@ -109,7 +109,7 @@ while ( my $ref = $q2->fetchrow_hashref() ) {
$json{'then'}{$sysname}{ifs}{$smallport}{'ifAlias'} = $port{'ifAlias'};
}
if ($data{'ports'}{$porti}{'ifType'} ne "propVirtual" and
- $data{'ports'}{$porti}{'ifAlias'} =~ m/LAG member/i) {
+ $data{'ports'}{$porti}{'ifAlias'} =~ m/Fysisk/i) {
if ($port{'ifAdminStatus'} eq "up") {
$json{'then'}{$sysname}{'uplinks'}{'ifHCInOctets'} += $port{'ifHCInOctets'};
$json{'then'}{$sysname}{'uplinks'}{'ifHCOutOctets'} += $port{'ifHCOutOctets'};
diff --git a/web/api/read/switches-management b/web/api/read/switches-management
index 77badf4..c734eef 100755
--- a/web/api/read/switches-management
+++ b/web/api/read/switches-management
@@ -20,7 +20,7 @@ $nms::web::cc{'max-age'} = "5";
$nms::web::cc{'stale-while-revalidate'} = "30";
if (!defined($switch)) {
- $q2 = $nms::web::dbh->prepare('select switches.sysname, host(switches.mgmt_v4_addr) as mgmt_v4_addr, host(switches.mgmt_v6_addr) as mgmt_v6_addr, switches.mgmt_vlan, switches.traffic_vlan, switches.poll_frequency, switches.last_updated, switches.distro_name, switches.distro_phy_port, switches.community, traffic_net.subnet4, traffic_net.subnet6, mgmt_net.gw4 as mgmt_v4_gw, mgmt_net.gw6 as mgmt_v6_gw from switches left join networks as traffic_net on (switches.traffic_vlan = traffic_net.name) left join networks as mgmt_net on (switches.mgmt_vlan = mgmt_net.name) where switches.placement is not null and switches.deleted = false;');
+ $q2 = $nms::web::dbh->prepare('select switches.sysname, host(switches.mgmt_v4_addr) as mgmt_v4_addr, host(switches.mgmt_v6_addr) as mgmt_v6_addr, switches.mgmt_vlan, switches.traffic_vlan, switches.poll_frequency, switches.last_updated, switches.distro_name, switches.distro_phy_port, switches.community, traffic_net.subnet4, traffic_net.subnet6, host(mgmt_net.gw4) as mgmt_v4_gw, host(mgmt_net.gw6) as mgmt_v6_gw from switches left join networks as traffic_net on (switches.traffic_vlan = traffic_net.name) left join networks as mgmt_net on (switches.mgmt_vlan = mgmt_net.name) where switches.placement is not null and switches.deleted = false;');
} else {
$q2 = $nms::web::dbh->prepare('select sysname,host(mgmt_v4_addr) as mgmt_v4_addr,host(mgmt_v6_addr) as mgmt_v6_addr,mgmt_vlan,traffic_vlan,poll_frequency,last_updated,distro_name,distro_phy_port,community from switches where placement is not null and sysname = ' . $nms::web::dbh->quote($switch) . ' and switches.deleted = false;');
}
diff --git a/web/js/nms-draw-chart.js b/web/js/nms-draw-chart.js
index da621e7..0920d05 100644
--- a/web/js/nms-draw-chart.js
+++ b/web/js/nms-draw-chart.js
@@ -22,7 +22,6 @@ function drawLatency(canvas, sw, chart, callback) {
data.push({t: new Date(element[0]), y: element[1]});
});
var borderColor = "rgba(0,155,200,255)";
- console.log(serie['tags']['version']);
if(serie['tags']['version'] === "v6") {
borderColor = "rgba(100,155,100,255)";
}
@@ -95,6 +94,7 @@ function drawSumOfPorts(canvas, sw) {
var bits_in = [];
var bits_out = [];
+
results['results'][0]['series'].forEach(function(serie) {
// Bytes in
diff --git a/web/js/nms-info-box.js b/web/js/nms-info-box.js
index 4e8b18d..a7ddfc1 100644
--- a/web/js/nms-info-box.js
+++ b/web/js/nms-info-box.js
@@ -50,6 +50,10 @@ var nmsInfoBox = nmsInfoBox || {
'name': 'SNMP',
'panels': ['switchSNMP:misc']
},
+ 'links': {
+ 'name': 'Links',
+ 'panels': ['switchLinks']
+ },
'edit': {
'name': 'Edit settings',
'panels': ['switchEdit']
@@ -125,7 +129,11 @@ var nmsInfoBox = nmsInfoBox || {
'jnxBoxSerialNo': {
'name': 'Serial numbers',
'panels': ['inventoryListing:jnxBoxSerialNo']
- }
+ },
+ 'transceiver': {
+ 'name': 'Transceivers',
+ 'panels': ['inventoryListing:transceiver']
+ }
}
},
{
@@ -657,7 +665,13 @@ var switchPortsPanel = function () {
indicies.push(obj);
}
indicies.sort(function(a,b) {
- return snmpJson[a].ifIndex - snmpJson[b].ifIndex;
+ var tmpx = [ snmpJson[a].ifName, snmpJson[b].ifName ];
+ tmpx.sort();
+ if (tmpx[0] == snmpJson[a].ifName) {
+ return -1;
+ } else {
+ return 1;
+ }
});
for(var obji in indicies) {
var obj = indicies[obji];
@@ -686,7 +700,7 @@ var switchPortsPanel = function () {
}
} catch(e) {};
- groupObj.innerHTML = '<span class="panel-heading" style="display:block;"><a class="collapse-controller" role="button" data-toggle="collapse" href="#'+cleanObj+'-group">' + snmpJson[obj].ifDescr + ' </a><small>' + snmpJson[obj].ifName + '</small><span class="pull-right">' + traffic + '<i class="btn-xs ' + button + '"><span class="glyphicon ' + glyphicon + '" title="' + title + '" aria-hidden="true"></span></i></span></span>';
+ groupObj.innerHTML = '<span class="panel-heading" style="display:block;"><a class="collapse-controller" role="button" data-toggle="collapse" href="#'+cleanObj+'-group">' + snmpJson[obj].ifName + ' </a><small>' + snmpJson[obj].ifAlias + '</small><span class="pull-right">' + traffic + '<i class="btn-xs ' + button + '"><span class="glyphicon ' + glyphicon + '" title="' + title + '" aria-hidden="true"></span></i></span></span>';
var groupObjCollapse = document.createElement("div");
groupObjCollapse.id = cleanObj + "-group";
@@ -885,6 +899,9 @@ var inventoryListingPanel = function() {
case 'jnxBoxSerialNo':
listTitle = 'Serial Numbers';
break;
+ case 'transceiver':
+ listTitle = 'Transceivers';
+ break;
default:
listTitle = 'Distro names';
}
@@ -900,15 +917,18 @@ var inventoryListingPanel = function() {
switch (this.mode) {
case 'distro_name':
value = nmsData.switches.switches[sw]["distro_name"];
+ resultArray.push([sw, value]);
break;
case 'sysDescr':
value = nmsData.snmp.snmp[sw]["misc"]["sysDescr"][0];
+ resultArray.push([sw, value]);
break;
case 'jnxBoxSerialNo':
if(testTree(nmsData,["snmp","snmp",sw,"misc","entPhysicalSerialNum"])) {
for (var x in nmsData.snmp.snmp[sw]["misc"]["entPhysicalSerialNum"]) {
value = "misc" + x + ":" + nmsData.snmp.snmp[sw]["misc"]["entPhysicalSerialNum"][x];
- resultArray.push([sw, value]);
+ var entPhysicalDescr = nmsData.snmp.snmp[sw]["misc"]["entPhysicalDescr"][x];
+ resultArray.push([sw, entPhysicalDescr+': '+value]);
}
}
if (testTree(nmsData,["snmp","snmp",sw,"misc","jnxVirtualChassisMemberSerialnumber"])) {
@@ -918,11 +938,23 @@ var inventoryListingPanel = function() {
}
}
value = nmsData.snmp.snmp[sw]["misc"]["jnxBoxSerialNo"][0];
+ resultArray.push([sw, value]);
break;
+ case 'transceiver':
+ if(testTree(nmsData,["snmp","snmp",sw,"misc","entPhysicalSerialNum"])) {
+ for (var x in nmsData.snmp.snmp[sw]["misc"]["entPhysicalSerialNum"]) {
+ var entPhysicalDescr = nmsData.snmp.snmp[sw]["misc"]["entPhysicalDescr"][x];
+ if(!entPhysicalDescr.match(/^SFP/)) {
+ continue;
+ }
+ value = entPhysicalDescr + ": " + nmsData.snmp.snmp[sw]["misc"]["entPhysicalSerialNum"][x];
+ resultArray.push([sw, entPhysicalDescr+': '+value]);
+ }
+ }
+ break;
+
}
} catch (e) {console.log("sw: " + sw); console.log(e);}
-
- resultArray.push([sw, value]);
}
resultArray.sort();
@@ -1204,6 +1236,40 @@ nmsInfoBox.setLegendPick = function(tag,id) {
}
nmsInfoBox.addPanelType("switchSummary",switchSummaryPanel);
+var switchLinks = function() {
+ nmsInfoPanel.call(this,"switchLinks");
+ var latencyChart;
+ this.init = function() {
+ this.refresh();
+ };
+ this.refresh = function(reason) {
+ var content = [];
+ if (this.sw == false) {
+ console.log("ugh, cleanup failed?");
+ return;
+ }
+ var sw = this.sw;
+
+ var topp = document.createElement("div")
+ var urls = [ "https://gondul.tg.lol/api/templates/magic.conf/switch=" + sw,
+ "http://185.110.148.5/api/templates/magic.conf/switch=" + sw,
+ "http://gondul.tg.lol/api/templates/magic.conf/switch=" + sw ];
+ if (testTree(nmsData,['smanagement','switches',sw])) {
+ var mg = nmsData["smanagement"]["switches"][sw];
+ urls.push("ssh://[" + mg.mgmt_v6_addr + "]");
+ urls.push("ssh://" + mg.mgmt_v4_addr);
+ }
+ for (var x in urls) {
+ topp.appendChild(document.createElement("br"));
+ var link = document.createElement("a");
+ link.href = urls[x];
+ link.textContent = urls[x];
+ topp.appendChild(link);
+ }
+ this._render(topp);
+ };
+};
+nmsInfoBox.addPanelType("switchLinks",switchLinks);
/*
* Panel type: Add network
*
@@ -1258,7 +1324,6 @@ var networkListPanel = function() {
table.className = "table table-condensed";
table.id = "searchResults-table"
for (var net in networks) {
- console.log(networks[net]);
var row = table.insertRow(net);
var cell1 = row.insertCell(0);
var cell2 = row.insertCell(1);
diff --git a/web/js/nms-map-handlers.js b/web/js/nms-map-handlers.js
index 7200c60..5b39fa3 100644
--- a/web/js/nms-map-handlers.js
+++ b/web/js/nms-map-handlers.js
@@ -73,6 +73,13 @@ var handler_cpu = {
name:"CPU utilization"
};
+var handler_memory = {
+ init:memoryInit,
+ getInfo:memoryInfo,
+ tag:"memory",
+ name:"Memory utilization"
+};
+
var handler_health = {
init:healthInit,
getInfo:healthInfo,
@@ -133,6 +140,7 @@ var handlers = [
handler_dhcp,
handler_snmp,
handler_cpu,
+ handler_memory,
handler_snmpup
];
@@ -478,7 +486,7 @@ function pingInfo(sw)
ret.data[3].description = "Distro-port";
ret.data[3].value = "Distro port is live";
if (isNaN(ping) && isNaN(ping6)) {
- ret.score = 850;
+ ret.score = 700;
ret.why = "Distro port is alive, but no IPv4/IPv6 ping. ROLLBACK!";
}
}
@@ -517,7 +525,7 @@ function getDhcpColor(stop)
function dhcpUpdater()
{
if (!testTree(nmsData,['dhcp','dhcp']) || !testTree(nmsData,['switches','switches']) || !testTree(nmsData,['smanagement','switches'])) {
- return
+ return;
}
var now = nmsData.dhcp.time;
for (var sw in nmsData.switches.switches) {
@@ -536,6 +544,9 @@ function dhcpInfo(sw) {
var ret = new handlerInfo("dhcp","DHCP state");
ret.why = "No DHCP data";
ret.data[0].description = "DHCP age";
+ if (!testTree(nmsData,['dhcp','dhcp']) || !testTree(nmsData,['switches','switches']) || !testTree(nmsData,['smanagement','switches'])) {
+ return ret.data[1] = {};
+ }
if (testTree(nmsData,['dhcp','dhcp',nmsData.smanagement.switches[sw].traffic_vlan])) {
var now = nmsData.dhcp.time;
var then = nmsData.dhcp.dhcp[nmsData.smanagement.switches[sw].traffic_vlan];
@@ -719,16 +730,20 @@ function snmpUpInfo(sw) {
var seen_up = 0;
for (var port in nmsData.snmp.snmp[sw].ports) {
var x = nmsData.snmp.snmp[sw].ports[port];
- if (x["ifAlias"].match(/Uplink/i) && x["ifOperStatus"] == "up") {
+ if (x["ifAlias"].match(/Gruppe/i) && x["ifOperStatus"] == "up") {
total_up += parseInt(x["ifHighSpeed"]);
}
- if (x["ifAlias"].match(/LAG Member/i) && x["ifOperStatus"] == "up") {
+ if (x["ifAlias"].match(/Fysisk/i) && x["ifOperStatus"] == "up") {
seen_up += parseInt(x["ifHighSpeed"]);
}
}
ret.data[0].value = "LAG member speed and total speed is " + seen_up;
if (total_up != seen_up) {
ret.score = 500;
+ if (tagged(sw,'ignoreuplink')) {
+ ret.score = 0;
+ }
+
ret.why = "LAG member (ge/xe/et) speed is " + seen_up + " but logical (ae) is " + total_up;
ret.data[0].value = ret.why;
}
@@ -778,6 +793,47 @@ function cpuUpdater() {
}
}
}
+function memoryUpdater() {
+ for (var sw in nmsData.switches.switches) {
+ try {
+ var buffer = 0;
+ for (var u in nmsData.snmp.snmp[sw].misc.jnxOperatingBuffer) {
+ var local = nmsData.snmp.snmp[sw].misc['jnxOperatingBuffer'][u];
+ buffer = Math.max(nmsData.snmp.snmp[sw].misc.jnxOperatingBuffer[u],buffer);
+ }
+ nmsMap.setSwitchColor(sw, nmsColor.getColorStop(buffer * 10));
+ nmsMap.setSwitchInfo(sw, buffer + " % ");
+ } catch (e) {
+ nmsMap.setSwitchColor(sw, "white");
+ nmsMap.setSwitchInfo(sw, "N/A");
+ }
+ }
+}
+function memoryInfo(sw) {
+ var ret = new handlerInfo("memory","Memory utilization");
+ ret.why = "No Memory info";
+ ret.score = 0;
+
+ if (testTree(nmsData,['snmp','snmp',sw, 'misc','jnxOperatingBuffer'])) {
+ var memory = 0;
+ for (var u in nmsData.snmp.snmp[sw].misc.jnxOperatingBuffer) {
+ var local = nmsData.snmp.snmp[sw].misc['jnxOperatingBuffer'][u];
+ memory = Math.max(nmsData.snmp.snmp[sw].misc.jnxOperatingBuffer[u],memory);
+ }
+ if (memory < 30) {
+ ret.score = 0;
+ } else if (memory < 60) {
+ ret.score = 100;
+ } else if (memory < 90) {
+ ret.score = memory * 2;
+ } else {
+ ret.score = memory * 6;
+ }
+ ret.why = "Memory utilization: " + memory + "%";
+ ret.data[0].value = memory + "%";
+ }
+ return ret;
+}
function tagged(sw, tag) {
if (testTree(nmsData,['switches','switches',sw, 'tags'])) {
@@ -794,6 +850,14 @@ function mgmtInfo(sw) {
ret.why = "All good";
if (testTree(nmsData,['smanagement','switches',sw])) {
var mg = nmsData.smanagement.switches[sw];
+ var traffic_vlan = "N/A";
+ var mgmt_vlan = "N/A";
+ if (testTree(nmsData,['networks','networks',mg.traffic_vlan,"vlan"])) {
+ traffic_vlan = nmsData["networks"]["networks"][mg.traffic_vlan]["vlan"];
+ }
+ if (testTree(nmsData,['networks','networks',mg.mgmt_vlan,"vlan"])) {
+ mgmt_vlan = nmsData["networks"]["networks"][mg.mgmt_vlan]["vlan"];
+ }
ret.data =
[{
value: mg.mgmt_v4_addr || "N/A",
@@ -810,7 +874,14 @@ function mgmtInfo(sw) {
}, {
value: mg.distro_name || "N/A",
description: "Distro"
- }];
+ }, {
+ value: traffic_vlan || "N/A",
+ description: "Client VLAN"
+ }, {
+ value: mgmt_vlan || "N/A",
+ description: "Management VLAN"
+ }
+ ];
if ((mg.mgmt_v4_addr == undefined || mg.mgmt_v4_addr == "") && (mg.mgmt_v6_addr == undefined || mg.mgmt_v6_addr == "")) {
ret.why = "No IPv4 or IPv6 management IP";
ret.score = 1000;
@@ -844,6 +915,16 @@ function cpuInit() {
setLegend(5,"white","N/A");
cpuUpdater();
}
+function memoryInit() {
+ nmsData.addHandler("snmp", "mapHandler", memoryUpdater);
+ nmsColor.drawGradient([nmsColor.green,nmsColor.orange,nmsColor.red]);
+ setLegend(1,getColorStop(0),"0 %");
+ setLegend(2,getColorStop(250),"25 %");
+ setLegend(3,getColorStop(600),"60 %");
+ setLegend(4,getColorStop(1000),"100 %");
+ setLegend(5,"white","N/A");
+ memoryUpdater();
+}
function healthInfo(sw) {
var worst = new handlerInfo("health", "Health");
diff --git a/web/js/nms-template.js b/web/js/nms-template.js
index 6159f5b..0f25367 100644
--- a/web/js/nms-template.js
+++ b/web/js/nms-template.js
@@ -46,12 +46,10 @@ nmsTemplate.getTemplates = function() {
async: false,
dataType: "json",
success: function (indata, textStatus, jqXHR) {
- console.log(indata['templates']);
$.each( indata['templates'], function( value ) {
$('#nmsTemplate-select').append($("<option></option>").attr("value",indata['templates'][value]['file']).text(indata['templates'][value]['file']));
});
}
});
}
-
-nmsTemplate.getTemplates();
+//nmsTemplate.getTemplates();
diff --git a/web/js/nms.js b/web/js/nms.js
index 5e2dc22..fe2dd8e 100644
--- a/web/js/nms.js
+++ b/web/js/nms.js
@@ -356,6 +356,7 @@ function getInitialConfig() {
} else {
nms._public = false;
document.body.classList.add("gondul-private");
+ nmsTemplate.getTemplates();
}
}
});