mirror of
https://github.com/xbgmsharp/postgsail.git
synced 2025-09-17 03:07:47 +00:00
Feat: Add grafana provisioning on first contact from vessel
Feat: Add pre logbook validation
This commit is contained in:
@@ -30,6 +30,7 @@ COMMENT ON TABLE
|
||||
api.metadata
|
||||
IS 'Stores metadata from vessel';
|
||||
COMMENT ON COLUMN api.metadata.active IS 'trigger monitor online/offline';
|
||||
COMMENT ON COLUMN api.metadata.vessel_id IS 'vessel_id link auth.vessels with api.metadata';
|
||||
-- Duplicate Indexes
|
||||
--CREATE INDEX metadata_vessel_id_idx ON api.metadata (vessel_id);
|
||||
|
||||
@@ -128,6 +129,8 @@ COMMENT ON COLUMN api.logbook.duration IS 'Best to use standard ISO 8601';
|
||||
|
||||
-- Index todo!
|
||||
CREATE INDEX logbook_vessel_id_idx ON api.logbook (vessel_id);
|
||||
CREATE INDEX logbook_from_time_idx ON api.logbook (_from_time);
|
||||
CREATE INDEX logbook_to_time_idx ON api.logbook (_to_time);
|
||||
CREATE INDEX logbook_from_moorage_id_idx ON api.logbook (_from_moorage_id);
|
||||
CREATE INDEX logbook_to_moorage_id_idx ON api.logbook (_to_moorage_id);
|
||||
CREATE INDEX ON api.logbook USING GIST ( track_geom );
|
||||
@@ -300,6 +303,22 @@ COMMENT ON FUNCTION
|
||||
public.metadata_notification_trigger_fn
|
||||
IS 'process metadata notification from vessel, monitoring_online';
|
||||
|
||||
-- FUNCTION Metadata grafana provisioning for new vessel after insert
|
||||
DROP FUNCTION IF EXISTS metadata_grafana_trigger_fn;
|
||||
CREATE FUNCTION metadata_grafana_trigger_fn() RETURNS trigger AS $metadata_grafana$
|
||||
DECLARE
|
||||
BEGIN
|
||||
RAISE NOTICE 'metadata_grafana_trigger_fn [%]', NEW;
|
||||
INSERT INTO process_queue (channel, payload, stored, ref_id)
|
||||
VALUES ('grafana', NEW.id, now(), NEW.vessel_id);
|
||||
RETURN NULL;
|
||||
END;
|
||||
$metadata_grafana$ LANGUAGE plpgsql;
|
||||
-- Description
|
||||
COMMENT ON FUNCTION
|
||||
public.metadata_grafana_trigger_fn
|
||||
IS 'process metadata grafana provisioning from vessel';
|
||||
|
||||
---------------------------------------------------------------------------
|
||||
-- Trigger metadata table
|
||||
--
|
||||
@@ -317,7 +336,15 @@ CREATE TRIGGER metadata_notification_trigger AFTER INSERT ON api.metadata
|
||||
-- Description
|
||||
COMMENT ON TRIGGER
|
||||
metadata_notification_trigger ON api.metadata
|
||||
IS 'AFTER INSERT ON api.metadata run function metadata_update_trigger_fn for notification on new vessel';
|
||||
IS 'AFTER INSERT ON api.metadata run function metadata_notification_trigger_fn for later notification on new vessel';
|
||||
|
||||
-- Metadata trigger AFTER INSERT
|
||||
CREATE TRIGGER metadata_grafana_trigger AFTER INSERT ON api.metadata
|
||||
FOR EACH ROW EXECUTE FUNCTION metadata_grafana_trigger_fn();
|
||||
-- Description
|
||||
COMMENT ON TRIGGER
|
||||
metadata_grafana_trigger ON api.metadata
|
||||
IS 'AFTER INSERT ON api.metadata run function metadata_grafana_trigger_fn for later grafana provisioning on new vessel';
|
||||
|
||||
---------------------------------------------------------------------------
|
||||
-- Trigger Functions metrics table
|
||||
@@ -526,7 +553,7 @@ CREATE FUNCTION metrics_trigger_fn() RETURNS trigger AS $metrics$
|
||||
WHERE id = logbook_id;
|
||||
-- Add logbook entry to process queue for later processing
|
||||
INSERT INTO process_queue (channel, payload, stored, ref_id)
|
||||
VALUES ('new_logbook', logbook_id, now(), current_setting('vessel.id', true));
|
||||
VALUES ('pre_logbook', logbook_id, NOW(), current_setting('vessel.id', true));
|
||||
ELSE
|
||||
RAISE WARNING 'Metrics Invalid logbook_id [%] [%] [%]', logbook_id, NEW.status, NEW.time;
|
||||
END IF;
|
||||
@@ -537,7 +564,7 @@ $metrics$ LANGUAGE plpgsql;
|
||||
-- Description
|
||||
COMMENT ON FUNCTION
|
||||
public.metrics_trigger_fn
|
||||
IS 'process metrics from vessel, generate new_logbook and new_stay.';
|
||||
IS 'process metrics from vessel, generate pre_logbook and new_stay.';
|
||||
|
||||
--
|
||||
-- Triggers logbook update on metrics insert
|
||||
@@ -600,4 +627,64 @@ CREATE TRIGGER moorage_delete_trigger BEFORE DELETE ON api.moorages
|
||||
-- Description
|
||||
COMMENT ON TRIGGER moorage_delete_trigger
|
||||
ON api.moorages
|
||||
IS 'Automatic update of name and stay_code on logbook and stays reference';
|
||||
IS 'Automatic delete logbook and stays reference when delete a moorage';
|
||||
|
||||
-- Function process_new on completed logbook
|
||||
DROP FUNCTION IF EXISTS logbook_completed_trigger_fn;
|
||||
CREATE FUNCTION logbook_completed_trigger_fn() RETURNS trigger AS $logbook_completed$
|
||||
DECLARE
|
||||
BEGIN
|
||||
RAISE NOTICE 'logbook_completed_trigger_fn [%]', OLD;
|
||||
RAISE NOTICE 'logbook_completed_trigger_fn [%] [%]', OLD._to_time, NEW._to_time;
|
||||
-- Add logbook entry to process queue for later processing
|
||||
--IF ( OLD._to_time <> NEW._to_time ) THEN
|
||||
INSERT INTO process_queue (channel, payload, stored, ref_id)
|
||||
VALUES ('new_logbook', NEW.id, NOW(), current_setting('vessel.id', true));
|
||||
--END IF;
|
||||
RETURN OLD; -- result is ignored since this is an AFTER trigger
|
||||
END;
|
||||
$logbook_completed$ LANGUAGE plpgsql;
|
||||
-- Description
|
||||
COMMENT ON FUNCTION
|
||||
public.logbook_completed_trigger_fn
|
||||
IS 'Automatic process_queue for completed logbook._to_time';
|
||||
|
||||
-- Triggers logbook completed
|
||||
--CREATE TRIGGER logbook_completed_trigger AFTER UPDATE ON api.logbook
|
||||
-- FOR EACH ROW
|
||||
-- WHEN (OLD._to_time IS DISTINCT FROM NEW._to_time)
|
||||
-- EXECUTE FUNCTION logbook_completed_trigger_fn();
|
||||
-- Description
|
||||
--COMMENT ON TRIGGER logbook_completed_trigger
|
||||
-- ON api.logbook
|
||||
-- IS 'Automatic process_queue for completed logbook';
|
||||
|
||||
-- Function process_new on completed Stay
|
||||
DROP FUNCTION IF EXISTS stay_completed_trigger_fn;
|
||||
CREATE FUNCTION stay_completed_trigger_fn() RETURNS trigger AS $stay_completed$
|
||||
DECLARE
|
||||
BEGIN
|
||||
RAISE NOTICE 'stay_completed_trigger_fn [%]', OLD;
|
||||
RAISE NOTICE 'stay_completed_trigger_fn [%] [%]', OLD.departed, NEW.departed;
|
||||
-- Add stay entry to process queue for later processing
|
||||
--IF ( OLD.departed <> NEW.departed ) THEN
|
||||
INSERT INTO process_queue (channel, payload, stored, ref_id)
|
||||
VALUES ('new_stay', NEW.id, NOW(), current_setting('vessel.id', true));
|
||||
--END IF;
|
||||
RETURN OLD; -- result is ignored since this is an AFTER trigger
|
||||
END;
|
||||
$stay_completed$ LANGUAGE plpgsql;
|
||||
-- Description
|
||||
COMMENT ON FUNCTION
|
||||
public.stay_completed_trigger_fn
|
||||
IS 'Automatic process_queue for completed stay.departed';
|
||||
|
||||
-- Triggers stay completed
|
||||
--CREATE TRIGGER stay_completed_trigger AFTER UPDATE ON api.stays
|
||||
-- FOR EACH ROW
|
||||
-- WHEN (OLD.departed IS DISTINCT FROM NEW.departed)
|
||||
-- EXECUTE FUNCTION stay_completed_trigger_fn();
|
||||
-- Description
|
||||
--COMMENT ON TRIGGER stay_completed_trigger
|
||||
-- ON api.stays
|
||||
-- IS 'Automatic process_queue for completed stay';
|
||||
|
Reference in New Issue
Block a user