- add node_id to view_events
[plcapi.git] / planetlab4.sql
index 3a7e9f3..90c095b 100644 (file)
@@ -9,7 +9,7 @@
 --
 -- Copyright (C) 2006 The Trustees of Princeton University
 --
--- $Id: planetlab4.sql,v 1.21 2006/10/23 20:44:16 tmack Exp $
+-- $Id: planetlab4.sql,v 1.24 2006/10/27 15:31:28 mlhuang Exp $
 --
 
 --------------------------------------------------------------------------------
@@ -267,7 +267,6 @@ CREATE TABLE nodes (
     -- XXX Should be key_id integer REFERENCES keys
     ssh_rsa_key text, -- SSH host key updated by Boot Manager
     key text, -- Node key generated by API when configuration file is downloaded
-    session text, -- Session key generated by PLC when Boot Manager authenticates
 
     -- Timestamps
     date_created timestamp without time zone NOT NULL DEFAULT CURRENT_TIMESTAMP,
@@ -389,7 +388,6 @@ CREATE TABLE network_types (
     type text PRIMARY KEY -- Addressing scheme
 ) WITH OIDS;
 INSERT INTO network_types (type) VALUES ('ipv4');
-INSERT INTO network_types (type) VALUES ('ipv6');
 
 -- Valid network configuration methods
 CREATE TABLE network_methods (
@@ -606,15 +604,40 @@ FROM slice_attribute
 GROUP BY slice_id;
 
 --------------------------------------------------------------------------------
--- Events
+-- Authenticated sessions
 --------------------------------------------------------------------------------
 
--- event types
-CREATE TABLE event_types (
-       event_type text PRIMARY KEY -- Event type
+-- Authenticated sessions
+CREATE TABLE sessions (
+    session_id text PRIMARY KEY, -- Session identifier
+    expires timestamp without time zone
+) WITH OIDS;
 
+-- People can have multiple sessions
+CREATE TABLE person_session (
+    person_id integer REFERENCES persons NOT NULL, -- Account identifier
+    session_id text REFERENCES sessions NOT NULL, -- Session identifier
+    PRIMARY KEY (person_id, session_id),
+    UNIQUE (session_id) -- Sessions are unique
 ) WITH OIDS;
+CREATE INDEX person_session_person_id_idx ON person_session (person_id);
+
+-- Nodes can have only one session
+CREATE TABLE node_session (
+    node_id integer REFERENCES nodes NOT NULL, -- Node identifier
+    session_id text REFERENCES sessions NOT NULL, -- Session identifier
+    UNIQUE (node_id), -- Nodes can have only one session
+    UNIQUE (session_id) -- Sessions are unique
+) WITH OIDS;
+
+--------------------------------------------------------------------------------
+-- Events
+--------------------------------------------------------------------------------
 
+-- Event types
+CREATE TABLE event_types (
+    event_type text PRIMARY KEY -- Event type
+) WITH OIDS;
 INSERT INTO event_types (event_type) VALUES ('Add');
 INSERT INTO event_types (event_type) VALUES ('AddTo');
 INSERT INTO event_types (event_type) VALUES ('Get');
@@ -623,12 +646,10 @@ INSERT INTO event_types (event_type) VALUES ('Delete');
 INSERT INTO event_types (event_type) VALUES ('DeleteFrom');
 INSERT INTO event_types (event_type) VALUES ('Unknown');
 
--- object types
+-- Object types
 CREATE TABLE object_types (
-       object_type text PRIMARY KEY -- Object type 
-
+    object_type text PRIMARY KEY -- Object type 
 ) WITH OIDS;
-
 INSERT INTO object_types (object_type) VALUES ('AddressType');
 INSERT INTO object_types (object_type) VALUES ('Address');
 INSERT INTO object_types (object_type) VALUES ('BootState');
@@ -644,34 +665,31 @@ INSERT INTO object_types (object_type) VALUES ('Node');
 INSERT INTO object_types (object_type) VALUES ('PCU');
 INSERT INTO object_types (object_type) VALUES ('Person');
 INSERT INTO object_types (object_type) VALUES ('Role');
+INSERT INTO object_types (object_type) VALUES ('Session');
 INSERT INTO object_types (object_type) VALUES ('Site');
 INSERT INTO object_types (object_type) VALUES ('SliceAttributeType');
 INSERT INTO object_types (object_type) VALUES ('SliceAttribute');
 INSERT INTO object_types (object_type) VALUES ('Slice');
 INSERT INTO object_types (object_type) VALUES ('Unknown');
 
--- events
+-- Events
 CREATE TABLE events (
-       event_id serial PRIMARY KEY,  -- Event identifier
-       person_id  integer REFERENCES persons, -- person responsible for event
-       event_type text REFERENCES  event_types NOT NULL DEFAULT 'Unknown', -- Event type 
-       object_type text REFERENCES object_types NOT NULL DEFAULT 'Unknown', -- Object type associated with event
-       fault_code integer NOT NULL DEFAULT 0, -- did this event result in error
-        call text NOT NULL, -- call responsible for this event
-       runtime float, -- Event run time
-
-       -- Timestamps
-       time timestamp without time zone  NOT NULL DEFAULT CURRENT_TIMESTAMP
-   
+    event_id serial PRIMARY KEY,  -- Event identifier
+    person_id integer REFERENCES persons, -- Person responsible for event, if any
+    node_id integer REFERENCES nodes, -- Node responsible for event, if any
+    event_type text REFERENCES event_types NOT NULL DEFAULT 'Unknown', -- Event type 
+    object_type text REFERENCES object_types NOT NULL DEFAULT 'Unknown', -- Object type associated with event
+    fault_code integer NOT NULL DEFAULT 0, -- Did this event result in error
+    call text NOT NULL, -- Call responsible for this event
+    runtime float, -- Event run time
+    time timestamp without time zone  NOT NULL DEFAULT CURRENT_TIMESTAMP -- Event timestamp
 ) WITH OIDS;
 
--- event objects
+-- Event objects
 CREATE TABLE event_object (
-        event_id integer REFERENCES events NOT NULL, -- Event identifier
-        object_id integer NOT NULL -- Object identifier
-
+    event_id integer REFERENCES events NOT NULL, -- Event identifier
+    object_id integer NOT NULL -- Object identifier
 ) WITH OIDS;
-
 CREATE INDEX event_object_event_id_idx ON event_object (event_id);
 CREATE INDEX event_object_object_id_idx ON event_object (object_id);
 
@@ -680,26 +698,26 @@ SELECT event_id,
 array_to_string(array_accum(object_id), ',') AS object_ids
 FROM event_object
 GROUP BY event_id;
+
 --------------------------------------------------------------------------------
 -- Useful views
 --------------------------------------------------------------------------------
 
---view_events
 CREATE VIEW view_events AS
 SELECT
 events.event_id,
 events.person_id,
+events.node_id,
 event_objects.object_ids,
 events.event_type,
 events.object_type,
 events.fault_code,
 events.call,
 events.runtime,
-events.time
-From events
+CAST(date_part('epoch', events.time) AS bigint) AS time
+FROM events
 LEFT JOIN event_objects USING (event_id);
 
--- view_persons
 CREATE VIEW view_persons AS
 SELECT
 persons.person_id,
@@ -739,7 +757,6 @@ nodes.boot_nonce,
 nodes.version,
 nodes.ssh_rsa_key,
 nodes.key,
-nodes.session,
 CAST(date_part('epoch', nodes.date_created) AS bigint) AS date_created,
 CAST(date_part('epoch', nodes.last_updated) AS bigint) AS last_updated,
 node_nodenetworks.nodenetwork_ids,
@@ -747,13 +764,15 @@ node_nodegroups.nodegroup_ids,
 node_slices.slice_ids,
 node_pcus.pcu_ids,
 node_pcus.ports,
-node_conf_files.conf_file_ids
+node_conf_files.conf_file_ids,
+node_session.session_id AS session
 FROM nodes
 LEFT JOIN node_nodenetworks USING (node_id)
 LEFT JOIN node_nodegroups USING (node_id)
 LEFT JOIN node_slices USING (node_id)
 LEFT JOIN node_pcus USING (node_id)
-LEFT JOIN node_conf_files USING (node_id);
+LEFT JOIN node_conf_files USING (node_id)
+LEFT JOIN node_session USING (node_id);
 
 CREATE VIEW view_nodegroups AS
 SELECT
@@ -878,6 +897,16 @@ slice_attribute.value
 FROM slice_attribute
 INNER JOIN slice_attribute_types USING (attribute_type_id);
 
+CREATE VIEW view_sessions AS
+SELECT
+sessions.session_id,
+CAST(date_part('epoch', sessions.expires) AS bigint) AS expires,
+person_session.person_id,
+node_session.node_id
+FROM sessions
+LEFT JOIN person_session USING (session_id)
+LEFT JOIN node_session USING (session_id);
+
 --------------------------------------------------------------------------------
 -- Built-in maintenance account and default site
 --------------------------------------------------------------------------------