anvil/scancore-agents/scan-ipmitool/scan-ipmitool.sql
Digimer 59b867cc25 * Updated DRBD->gather_data() to check if drbdadm exists before trying to call it to avoid scary errors in the logs. Also moved some strings that pulled from the scan-drbd agent into the main words file.
* Fixed a bug in ScanCore->agent_startup() where a (thankfully broken) check to append tables to the 'sys::database::check_tables' would cause an infinite loop as both were pointers to the same anonymous array.
* Fixed a bug in scan-ipmitool where the scan_ipmitool_variables table didn't use a host_uuid reference, causing resyncs of that table to sync for all hosts and cause DB errors when the scan_ipmitool record from another host wasn't sync'ed yet.

Signed-off-by: Digimer <digimer@alteeve.ca>
2021-03-31 01:36:11 -04:00

127 lines
5.8 KiB
PL/PgSQL

-- This is the database schema for the 'scan-ipmitool' Scan Agent.
CREATE TABLE scan_ipmitool (
scan_ipmitool_uuid uuid not null primary key,
scan_ipmitool_host_uuid uuid not null,
scan_ipmitool_sensor_host text not null, -- The hostname of the machine we pulled the sensor value from. We don't link this to a host_uuid because it is possible the host doesn't doesn't have an entry (yet)
scan_ipmitool_sensor_name text not null,
scan_ipmitool_sensor_units text not null, -- Temperature (°C), vDC, vAC, watt, amp, percent
scan_ipmitool_sensor_status text not null,
scan_ipmitool_sensor_high_critical numeric not null,
scan_ipmitool_sensor_high_warning numeric not null,
scan_ipmitool_sensor_low_critical numeric not null,
scan_ipmitool_sensor_low_warning numeric not null,
modified_date timestamp with time zone not null,
FOREIGN KEY(scan_ipmitool_host_uuid) REFERENCES hosts(host_uuid)
);
ALTER TABLE scan_ipmitool OWNER TO admin;
CREATE TABLE history.scan_ipmitool (
history_id bigserial,
scan_ipmitool_uuid uuid,
scan_ipmitool_host_uuid uuid,
scan_ipmitool_sensor_host text,
scan_ipmitool_sensor_name text,
scan_ipmitool_sensor_units text,
scan_ipmitool_sensor_status text,
scan_ipmitool_sensor_high_critical numeric,
scan_ipmitool_sensor_high_warning numeric,
scan_ipmitool_sensor_low_critical numeric,
scan_ipmitool_sensor_low_warning numeric,
modified_date timestamp with time zone not null
);
ALTER TABLE history.scan_ipmitool OWNER TO admin;
CREATE FUNCTION history_scan_ipmitool() RETURNS trigger
AS $$
DECLARE
history_scan_ipmitool RECORD;
BEGIN
SELECT INTO history_scan_ipmitool * FROM scan_ipmitool WHERE scan_ipmitool_uuid=new.scan_ipmitool_uuid;
INSERT INTO history.scan_ipmitool
(scan_ipmitool_uuid,
scan_ipmitool_host_uuid,
scan_ipmitool_sensor_host,
scan_ipmitool_sensor_name,
scan_ipmitool_sensor_units,
scan_ipmitool_sensor_status,
scan_ipmitool_sensor_high_critical,
scan_ipmitool_sensor_high_warning,
scan_ipmitool_sensor_low_critical,
scan_ipmitool_sensor_low_warning,
modified_date)
VALUES
(history_scan_ipmitool.scan_ipmitool_uuid,
history_scan_ipmitool.scan_ipmitool_host_uuid,
history_scan_ipmitool.scan_ipmitool_sensor_host,
history_scan_ipmitool.scan_ipmitool_sensor_name,
history_scan_ipmitool.scan_ipmitool_sensor_units,
history_scan_ipmitool.scan_ipmitool_sensor_status,
history_scan_ipmitool.scan_ipmitool_sensor_high_critical,
history_scan_ipmitool.scan_ipmitool_sensor_high_warning,
history_scan_ipmitool.scan_ipmitool_sensor_low_critical,
history_scan_ipmitool.scan_ipmitool_sensor_low_warning,
history_scan_ipmitool.modified_date);
RETURN NULL;
END;
$$
LANGUAGE plpgsql;
ALTER FUNCTION history_scan_ipmitool() OWNER TO admin;
CREATE TRIGGER trigger_scan_ipmitool
AFTER INSERT OR UPDATE ON scan_ipmitool
FOR EACH ROW EXECUTE PROCEDURE history_scan_ipmitool();
-- This contains the ever-changing sensor values. This is a separate table to keep the database as small as
-- possible.
CREATE TABLE scan_ipmitool_values (
scan_ipmitool_value_uuid uuid not null primary key,
scan_ipmitool_value_host_uuid uuid not null,
scan_ipmitool_value_scan_ipmitool_uuid uuid not null,
scan_ipmitool_value_sensor_value numeric not null,
modified_date timestamp with time zone not null,
FOREIGN KEY(scan_ipmitool_value_scan_ipmitool_uuid) REFERENCES scan_ipmitool(scan_ipmitool_uuid)
);
ALTER TABLE scan_ipmitool_values OWNER TO admin;
CREATE TABLE history.scan_ipmitool_values (
history_id uuid,
scan_ipmitool_value_uuid uuid,
scan_ipmitool_value_host_uuid uuid,
scan_ipmitool_value_scan_ipmitool_uuid uuid,
scan_ipmitool_value_sensor_value numeric,
modified_date timestamp with time zone not null
);
ALTER TABLE history.scan_ipmitool_values OWNER TO admin;
CREATE FUNCTION history_scan_ipmitool_values() RETURNS trigger
AS $$
DECLARE
history_scan_ipmitool_values RECORD;
BEGIN
SELECT INTO history_scan_ipmitool_values * FROM scan_ipmitool_values WHERE scan_ipmitool_value_uuid=new.scan_ipmitool_value_uuid;
INSERT INTO history.scan_ipmitool_values
(scan_ipmitool_value_uuid,
scan_ipmitool_value_host_uuid,
scan_ipmitool_value_scan_ipmitool_uuid,
scan_ipmitool_value_sensor_value,
modified_date)
VALUES
(history_scan_ipmitool_values.scan_ipmitool_value_uuid,
history_scan_ipmitool_values.scan_ipmitool_value_host_uuid,
history_scan_ipmitool_values.scan_ipmitool_value_scan_ipmitool_uuid,
history_scan_ipmitool_values.scan_ipmitool_value_sensor_value,
history_scan_ipmitool_values.modified_date);
RETURN NULL;
END;
$$
LANGUAGE plpgsql;
ALTER FUNCTION history_scan_ipmitool_values() OWNER TO admin;
CREATE TRIGGER trigger_scan_ipmitool_values
AFTER INSERT OR UPDATE ON scan_ipmitool_values
FOR EACH ROW EXECUTE PROCEDURE history_scan_ipmitool_values();