aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--build/schema.sql53
-rwxr-xr-xweb/api/public/config28
-rw-r--r--web/js/nms.js46
3 files changed, 121 insertions, 6 deletions
diff --git a/build/schema.sql b/build/schema.sql
index 4742575..4012eb3 100644
--- a/build/schema.sql
+++ b/build/schema.sql
@@ -4,7 +4,7 @@
SET statement_timeout = 0;
SET lock_timeout = 0;
-SET client_encoding = 'UTF8';
+SET client_encoding = 'SQL_ASCII';
SET standard_conforming_strings = on;
SET check_function_bodies = false;
SET client_min_messages = warning;
@@ -44,6 +44,41 @@ 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:
--
@@ -306,6 +341,13 @@ CREATE TABLE test_table (
ALTER TABLE test_table 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
--
@@ -558,6 +600,15 @@ 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
--
diff --git a/web/api/public/config b/web/api/public/config
new file mode 100755
index 0000000..dd8ccc1
--- /dev/null
+++ b/web/api/public/config
@@ -0,0 +1,28 @@
+#! /usr/bin/perl
+# vim:ts=8:sw=8
+
+use DBI;
+use lib '/opt/gondul/include';
+use nms;
+use nms::web;
+use strict;
+use warnings;
+use Data::Dumper;
+
+$nms::web::cc{'max-age'} = "3600";
+
+my $hostname = $ENV{'HTTP_HOST'} || "";
+my $q2 = $nms::web::dbh->prepare('select id, publicvhost, shortname, data from config order by id desc limit 1;');
+
+$q2->execute();
+while (my $ref = $q2->fetchrow_hashref()) {
+ $nms::web::json{'config'} = $ref;
+ $nms::web::json{'config'}{'data'} = JSON::XS::decode_json($ref->{'data'});
+ if ($ref->{'publicvhost'} eq $hostname) {
+ $nms::web::json{'config'}{'public'} = "true";
+ } else {
+ $nms::web::json{'config'}{'public'} = "false";
+ }
+}
+
+finalize_output();
diff --git a/web/js/nms.js b/web/js/nms.js
index 1f7398b..5df9431 100644
--- a/web/js/nms.js
+++ b/web/js/nms.js
@@ -548,6 +548,35 @@ function setNightMode(toggle) {
}
/*
+ * Only used to fetch the initial config for anything that needs to be
+ * handled prior to regular "boot up".
+ *
+ * For the moment, that only means detecting if we're being run on a public
+ * vhost or not. This has to be done in synch because it affects what
+ * sources we register for nmsData[]. If we wait for nmsData['config'],
+ * it's too late because all other things have been initialized already.
+ *
+ * If you add a configuration setting, use nmsData['config'] as much as
+ * possible. Avoid adding to this function.
+ */
+function getInitialConfig() {
+ $.ajax({
+ type: "GET",
+ url: "/api/public/config",
+ async: false,
+ dataType: "json",
+ success: function (data, textStatus, jqXHR) {
+ if (data["config"]["public"] == "true") {
+ nms._public = true;
+ } else {
+ console.log("Private");
+ nms._public = false;
+ }
+ }
+ });
+}
+
+/*
* Boot up "fully fledged" NMS.
*
* This can be re-written to provide different looks and feels but using
@@ -558,12 +587,17 @@ function initNMS() {
nms.timers.playback = new nmsTimer(nms.playback.tick, 1000, "Playback ticker", "Handler used to advance time");
// Public
+ nmsData.registerSource("config","/api/public/config");
nmsData.registerSource("ping", "/api/public/ping");
nmsData.registerSource("switches","/api/public/switches");
nmsData.registerSource("switchstate","/api/public/switch-state");
nmsData.registerSource("dhcpsummary","/api/public/dhcp-summary");
nmsData.registerSource("dhcp","/api/public/dhcp");
-
+
+ // Fetch initial config. Basically just populates nms._public.
+ // All other settings are kept in nmsData['config'].
+ getInitialConfig();
+
// This is a magic dummy-source, it's purpose is to give a unified
// way to get ticks every second. It is mainly meant to allow map
// handlers to register for ticks so they will execute without data
@@ -571,10 +605,12 @@ function initNMS() {
// despite no pings)
nmsData.registerSource("ticker","bananabananbanana");
- // Private
- nmsData.registerSource("snmp","/api/read/snmp");
- nmsData.registerSource("comments", "/api/read/comments");
- nmsData.registerSource("smanagement","/api/read/switches-management");
+ if (!nms._public) {
+ // Private
+ nmsData.registerSource("snmp","/api/read/snmp");
+ nmsData.registerSource("comments", "/api/read/comments");
+ nmsData.registerSource("smanagement","/api/read/switches-management");
+ }
restoreSettings();
nmsMap.init();