From 49d136b57ae11057c9c76069bc18b9ee3d4c63f2 Mon Sep 17 00:00:00 2001 From: Oliver Gorwits Date: Sun, 24 Mar 2013 18:48:10 +0000 Subject: [PATCH] add unique constraint on admin/job queue --- Netdisco/lib/App/Netdisco/DB.pm | 10 +- Netdisco/lib/App/Netdisco/DB/Result/Admin.pm | 4 + .../App-Netdisco-DB-16-17-PostgreSQL.sql | 8 + .../App-Netdisco-DB-17-PostgreSQL.sql | 430 ++++++++++++++++++ 4 files changed, 443 insertions(+), 9 deletions(-) create mode 100644 Netdisco/lib/App/Netdisco/DB/schema_versions/App-Netdisco-DB-16-17-PostgreSQL.sql create mode 100644 Netdisco/lib/App/Netdisco/DB/schema_versions/App-Netdisco-DB-17-PostgreSQL.sql diff --git a/Netdisco/lib/App/Netdisco/DB.pm b/Netdisco/lib/App/Netdisco/DB.pm index 938bb7d0..db2129ad 100644 --- a/Netdisco/lib/App/Netdisco/DB.pm +++ b/Netdisco/lib/App/Netdisco/DB.pm @@ -1,9 +1,6 @@ use utf8; package App::Netdisco::DB; -# Created by DBIx::Class::Schema::Loader -# DO NOT MODIFY THE FIRST PART OF THIS FILE - use strict; use warnings; @@ -11,11 +8,7 @@ use base 'DBIx::Class::Schema'; __PACKAGE__->load_namespaces; - -# Created by DBIx::Class::Schema::Loader v0.07015 @ 2012-01-07 14:20:02 -# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:tQTf/oInVydRDsuIFLSU4A - -our $VERSION = 16; # schema version used for upgrades, keep as integer +our $VERSION = 17; # schema version used for upgrades, keep as integer use Path::Class; use File::Basename; @@ -27,5 +20,4 @@ our $schema_versions_dir = Path::Class::Dir->new($libpath) __PACKAGE__->load_components(qw/Schema::Versioned/); __PACKAGE__->upgrade_directory($schema_versions_dir); -# You can replace this text with custom code or comments, and it will be preserved on regeneration 1; diff --git a/Netdisco/lib/App/Netdisco/DB/Result/Admin.pm b/Netdisco/lib/App/Netdisco/DB/Result/Admin.pm index fb98b3fa..71ad2f4e 100644 --- a/Netdisco/lib/App/Netdisco/DB/Result/Admin.pm +++ b/Netdisco/lib/App/Netdisco/DB/Result/Admin.pm @@ -54,5 +54,9 @@ __PACKAGE__->add_columns( __PACKAGE__->set_primary_key("job"); +__PACKAGE__->add_unique_constraint( + queued_job => [qw/ device action subaction /], +); + # You can replace this text with custom code or comments, and it will be preserved on regeneration 1; diff --git a/Netdisco/lib/App/Netdisco/DB/schema_versions/App-Netdisco-DB-16-17-PostgreSQL.sql b/Netdisco/lib/App/Netdisco/DB/schema_versions/App-Netdisco-DB-16-17-PostgreSQL.sql new file mode 100644 index 00000000..75cca2c8 --- /dev/null +++ b/Netdisco/lib/App/Netdisco/DB/schema_versions/App-Netdisco-DB-16-17-PostgreSQL.sql @@ -0,0 +1,8 @@ +-- Convert schema '/home/devver/netdisco-ng/Netdisco/bin/../lib/App/Netdisco/DB/schema_versions/App-Netdisco-DB-16-PostgreSQL.sql' to '/home/devver/netdisco-ng/Netdisco/bin/../lib/App/Netdisco/DB/schema_versions/App-Netdisco-DB-17-PostgreSQL.sql':; + +BEGIN; + +ALTER TABLE admin ADD CONSTRAINT queued_job UNIQUE (device, action, subaction); + +COMMIT; + diff --git a/Netdisco/lib/App/Netdisco/DB/schema_versions/App-Netdisco-DB-17-PostgreSQL.sql b/Netdisco/lib/App/Netdisco/DB/schema_versions/App-Netdisco-DB-17-PostgreSQL.sql new file mode 100644 index 00000000..0aa4133d --- /dev/null +++ b/Netdisco/lib/App/Netdisco/DB/schema_versions/App-Netdisco-DB-17-PostgreSQL.sql @@ -0,0 +1,430 @@ +-- +-- Created by SQL::Translator::Producer::PostgreSQL +-- Created on Sun Mar 24 18:45:08 2013 +-- +-- +-- Table: admin. +-- +DROP TABLE "admin" CASCADE; +CREATE TABLE "admin" ( + "job" serial NOT NULL, + "entered" timestamp DEFAULT current_timestamp, + "started" timestamp, + "finished" timestamp, + "device" inet, + "port" text, + "action" text, + "subaction" text, + "status" text, + "username" text, + "userip" inet, + "log" text, + "debug" boolean, + PRIMARY KEY ("job"), + CONSTRAINT "queued_job" UNIQUE ("device", "action", "subaction") +); + +-- +-- Table: device. +-- +DROP TABLE "device" CASCADE; +CREATE TABLE "device" ( + "ip" inet NOT NULL, + "creation" timestamp DEFAULT current_timestamp, + "dns" text, + "description" text, + "uptime" bigint, + "contact" text, + "name" text, + "location" text, + "layers" character varying(8), + "ports" integer, + "mac" macaddr, + "serial" text, + "model" text, + "ps1_type" text, + "ps2_type" text, + "ps1_status" text, + "ps2_status" text, + "fan" text, + "slots" integer, + "vendor" text, + "os" text, + "os_ver" text, + "log" text, + "snmp_ver" integer, + "snmp_comm" text, + "snmp_class" text, + "vtp_domain" text, + "last_discover" timestamp, + "last_macsuck" timestamp, + "last_arpnip" timestamp, + PRIMARY KEY ("ip") +); + +-- +-- Table: device_module. +-- +DROP TABLE "device_module" CASCADE; +CREATE TABLE "device_module" ( + "ip" inet NOT NULL, + "index" integer NOT NULL, + "description" text, + "type" text, + "parent" integer, + "name" text, + "class" text, + "pos" integer, + "hw_ver" text, + "fw_ver" text, + "sw_ver" text, + "serial" text, + "model" text, + "fru" boolean, + "creation" timestamp DEFAULT current_timestamp, + "last_discover" timestamp, + PRIMARY KEY ("ip", "index") +); + +-- +-- Table: device_port_log. +-- +DROP TABLE "device_port_log" CASCADE; +CREATE TABLE "device_port_log" ( + "id" serial NOT NULL, + "ip" inet, + "port" text, + "reason" text, + "log" text, + "username" text, + "userip" inet, + "action" text, + "creation" timestamp DEFAULT current_timestamp +); + +-- +-- Table: device_port_ssid. +-- +DROP TABLE "device_port_ssid" CASCADE; +CREATE TABLE "device_port_ssid" ( + "ip" inet, + "port" text, + "ssid" text, + "broadcast" boolean, + "bssid" macaddr +); + +-- +-- Table: device_port_wireless. +-- +DROP TABLE "device_port_wireless" CASCADE; +CREATE TABLE "device_port_wireless" ( + "ip" inet, + "port" text, + "channel" integer, + "power" integer +); + +-- +-- Table: device_power. +-- +DROP TABLE "device_power" CASCADE; +CREATE TABLE "device_power" ( + "ip" inet NOT NULL, + "module" integer NOT NULL, + "power" integer, + "status" text, + PRIMARY KEY ("ip", "module") +); + +-- +-- Table: device_route. +-- +DROP TABLE "device_route" CASCADE; +CREATE TABLE "device_route" ( + "ip" inet NOT NULL, + "network" cidr NOT NULL, + "creation" timestamp DEFAULT current_timestamp, + "dest" inet NOT NULL, + "last_discover" timestamp DEFAULT current_timestamp, + PRIMARY KEY ("ip", "network", "dest") +); + +-- +-- Table: log. +-- +DROP TABLE "log" CASCADE; +CREATE TABLE "log" ( + "id" serial NOT NULL, + "creation" timestamp DEFAULT current_timestamp, + "class" text, + "entry" text, + "logfile" text +); + +-- +-- Table: node_ip. +-- +DROP TABLE "node_ip" CASCADE; +CREATE TABLE "node_ip" ( + "mac" macaddr NOT NULL, + "ip" inet NOT NULL, + "dns" text, + "active" boolean, + "time_first" timestamp DEFAULT current_timestamp, + "time_last" timestamp DEFAULT current_timestamp, + PRIMARY KEY ("mac", "ip") +); + +-- +-- Table: node_monitor. +-- +DROP TABLE "node_monitor" CASCADE; +CREATE TABLE "node_monitor" ( + "mac" macaddr NOT NULL, + "active" boolean, + "why" text, + "cc" text, + "date" timestamp DEFAULT current_timestamp, + PRIMARY KEY ("mac") +); + +-- +-- Table: node_nbt. +-- +DROP TABLE "node_nbt" CASCADE; +CREATE TABLE "node_nbt" ( + "mac" macaddr NOT NULL, + "ip" inet, + "nbname" text, + "domain" text, + "server" boolean, + "nbuser" text, + "active" boolean, + "time_first" timestamp DEFAULT current_timestamp, + "time_last" timestamp DEFAULT current_timestamp, + PRIMARY KEY ("mac") +); + +-- +-- Table: node_wireless. +-- +DROP TABLE "node_wireless" CASCADE; +CREATE TABLE "node_wireless" ( + "mac" macaddr NOT NULL, + "uptime" integer, + "maxrate" integer, + "txrate" integer, + "sigstrength" integer, + "sigqual" integer, + "rxpkt" integer, + "txpkt" integer, + "rxbyte" bigint, + "txbyte" bigint, + "time_last" timestamp DEFAULT current_timestamp, + "ssid" text DEFAULT '' NOT NULL, + PRIMARY KEY ("mac", "ssid") +); + +-- +-- Table: oui. +-- +DROP TABLE "oui" CASCADE; +CREATE TABLE "oui" ( + "oui" character varying(8) NOT NULL, + "company" text, + PRIMARY KEY ("oui") +); + +-- +-- Table: process. +-- +DROP TABLE "process" CASCADE; +CREATE TABLE "process" ( + "controller" integer NOT NULL, + "device" inet NOT NULL, + "action" text NOT NULL, + "status" text, + "count" integer, + "creation" timestamp DEFAULT current_timestamp +); + +-- +-- Table: sessions. +-- +DROP TABLE "sessions" CASCADE; +CREATE TABLE "sessions" ( + "id" character(32) NOT NULL, + "creation" timestamp DEFAULT current_timestamp, + "a_session" text, + PRIMARY KEY ("id") +); + +-- +-- Table: subnets. +-- +DROP TABLE "subnets" CASCADE; +CREATE TABLE "subnets" ( + "net" cidr NOT NULL, + "creation" timestamp DEFAULT current_timestamp, + "last_discover" timestamp DEFAULT current_timestamp, + PRIMARY KEY ("net") +); + +-- +-- Table: topology. +-- +DROP TABLE "topology" CASCADE; +CREATE TABLE "topology" ( + "dev1" inet NOT NULL, + "port1" text NOT NULL, + "dev2" inet NOT NULL, + "port2" text NOT NULL +); + +-- +-- Table: user_log. +-- +DROP TABLE "user_log" CASCADE; +CREATE TABLE "user_log" ( + "entry" serial NOT NULL, + "username" character varying(50), + "userip" inet, + "event" text, + "details" text, + "creation" timestamp DEFAULT current_timestamp +); + +-- +-- Table: users. +-- +DROP TABLE "users" CASCADE; +CREATE TABLE "users" ( + "username" character varying(50) NOT NULL, + "password" text, + "creation" timestamp DEFAULT current_timestamp, + "last_on" timestamp, + "port_control" boolean DEFAULT false, + "ldap" boolean DEFAULT false, + "admin" boolean DEFAULT false, + "fullname" text, + "note" text, + PRIMARY KEY ("username") +); + +-- +-- Table: device_vlan. +-- +DROP TABLE "device_vlan" CASCADE; +CREATE TABLE "device_vlan" ( + "ip" inet NOT NULL, + "vlan" integer NOT NULL, + "description" text, + "creation" timestamp DEFAULT current_timestamp, + "last_discover" timestamp DEFAULT current_timestamp, + PRIMARY KEY ("ip", "vlan") +); +CREATE INDEX "device_vlan_idx_ip" on "device_vlan" ("ip"); + +-- +-- Table: device_ip. +-- +DROP TABLE "device_ip" CASCADE; +CREATE TABLE "device_ip" ( + "ip" inet NOT NULL, + "alias" inet NOT NULL, + "subnet" cidr, + "port" text, + "dns" text, + "creation" timestamp DEFAULT current_timestamp, + PRIMARY KEY ("ip", "alias"), + CONSTRAINT "device_ip_alias" UNIQUE ("alias") +); +CREATE INDEX "device_ip_idx_ip" on "device_ip" ("ip"); +CREATE INDEX "device_ip_idx_ip_port" on "device_ip" ("ip", "port"); + +-- +-- Table: device_port. +-- +DROP TABLE "device_port" CASCADE; +CREATE TABLE "device_port" ( + "ip" inet NOT NULL, + "port" text NOT NULL, + "creation" timestamp DEFAULT current_timestamp, + "descr" text, + "up" text, + "up_admin" text, + "type" text, + "duplex" text, + "duplex_admin" text, + "speed" text, + "name" text, + "mac" macaddr, + "mtu" integer, + "stp" text, + "remote_ip" inet, + "remote_port" text, + "remote_type" text, + "remote_id" text, + "vlan" text, + "pvid" integer, + "lastchange" bigint, + PRIMARY KEY ("port", "ip") +); +CREATE INDEX "device_port_idx_ip" on "device_port" ("ip"); +CREATE INDEX "device_port_idx_remote_ip" on "device_port" ("remote_ip"); + +-- +-- Table: device_port_power. +-- +DROP TABLE "device_port_power" CASCADE; +CREATE TABLE "device_port_power" ( + "ip" inet NOT NULL, + "port" text NOT NULL, + "module" integer, + "admin" text, + "status" text, + "class" text, + "power" integer, + PRIMARY KEY ("port", "ip") +); +CREATE INDEX "device_port_power_idx_ip_port" on "device_port_power" ("ip", "port"); + +-- +-- Table: device_port_vlan. +-- +DROP TABLE "device_port_vlan" CASCADE; +CREATE TABLE "device_port_vlan" ( + "ip" inet NOT NULL, + "port" text NOT NULL, + "vlan" integer NOT NULL, + "native" boolean DEFAULT false NOT NULL, + "creation" timestamp DEFAULT current_timestamp, + "last_discover" timestamp DEFAULT current_timestamp, + "vlantype" text, + PRIMARY KEY ("ip", "port", "vlan") +); +CREATE INDEX "device_port_vlan_idx_ip" on "device_port_vlan" ("ip"); +CREATE INDEX "device_port_vlan_idx_ip_port" on "device_port_vlan" ("ip", "port"); +CREATE INDEX "device_port_vlan_idx_ip_vlan" on "device_port_vlan" ("ip", "vlan"); + +-- +-- Table: node. +-- +DROP TABLE "node" CASCADE; +CREATE TABLE "node" ( + "mac" macaddr NOT NULL, + "switch" inet NOT NULL, + "port" text NOT NULL, + "active" boolean, + "oui" character varying(8), + "time_first" timestamp DEFAULT current_timestamp, + "time_recent" timestamp DEFAULT current_timestamp, + "time_last" timestamp DEFAULT current_timestamp, + "vlan" text DEFAULT '0' NOT NULL, + PRIMARY KEY ("mac", "switch", "port", "vlan") +); +CREATE INDEX "node_idx_switch" on "node" ("switch"); +CREATE INDEX "node_idx_switch_port" on "node" ("switch", "port"); +CREATE INDEX "node_idx_oui" on "node" ("oui"); +