73 lines
2.4 KiB
YAML
73 lines
2.4 KiB
YAML
apiVersion: v1
|
|
kind: ConfigMap
|
|
metadata:
|
|
name: {{ include "thermo.fullname" . }}-postgres-init
|
|
labels:
|
|
{{- include "thermo.labels" . | nindent 4 }}
|
|
data:
|
|
01-schema.sql: |
|
|
CREATE TABLE sensor_events (
|
|
event_id uuid PRIMARY KEY,
|
|
observed_at timestamptz NOT NULL,
|
|
ingested_at timestamptz NOT NULL,
|
|
source text NOT NULL,
|
|
event_type text NOT NULL,
|
|
severity text NOT NULL,
|
|
collector_id text,
|
|
device_id text NOT NULL,
|
|
raw_event jsonb NOT NULL,
|
|
stored_at timestamptz NOT NULL DEFAULT now()
|
|
);
|
|
|
|
CREATE TABLE sensor_measurements (
|
|
event_id uuid NOT NULL REFERENCES sensor_events(event_id) ON DELETE CASCADE,
|
|
observed_at timestamptz NOT NULL,
|
|
source text NOT NULL,
|
|
collector_id text,
|
|
device_id text NOT NULL,
|
|
metric_name text NOT NULL,
|
|
numeric_value double precision,
|
|
text_value text,
|
|
unit text,
|
|
source_updated_at timestamptz,
|
|
PRIMARY KEY (event_id, metric_name),
|
|
CHECK (numeric_value IS NOT NULL OR text_value IS NOT NULL)
|
|
);
|
|
|
|
CREATE INDEX sensor_events_device_time_idx
|
|
ON sensor_events (device_id, observed_at DESC);
|
|
CREATE INDEX sensor_measurements_metric_device_time_idx
|
|
ON sensor_measurements (metric_name, device_id, observed_at DESC);
|
|
CREATE INDEX sensor_measurements_time_idx
|
|
ON sensor_measurements (observed_at DESC);
|
|
|
|
CREATE VIEW grafana_sensor_measurements AS
|
|
SELECT
|
|
observed_at AS time,
|
|
source,
|
|
collector_id,
|
|
device_id,
|
|
metric_name,
|
|
numeric_value,
|
|
text_value,
|
|
unit
|
|
FROM sensor_measurements;
|
|
|
|
02-reader.sh: |
|
|
#!/bin/sh
|
|
set -eu
|
|
|
|
psql --set ON_ERROR_STOP=1 \
|
|
--username "$POSTGRES_USER" \
|
|
--dbname "$POSTGRES_DB" \
|
|
--set reader_user="$GRAFANA_USER" \
|
|
--set reader_password="$GRAFANA_PASSWORD" <<'SQL'
|
|
SELECT format('CREATE ROLE %I LOGIN PASSWORD %L', :'reader_user', :'reader_password')
|
|
WHERE NOT EXISTS (SELECT 1 FROM pg_roles WHERE rolname = :'reader_user') \gexec
|
|
|
|
GRANT CONNECT ON DATABASE {{ .Values.postgres.database }} TO :"reader_user";
|
|
GRANT USAGE ON SCHEMA public TO :"reader_user";
|
|
GRANT SELECT ON sensor_events, sensor_measurements, grafana_sensor_measurements TO :"reader_user";
|
|
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO :"reader_user";
|
|
SQL
|