From cc9b6666b1fd284560a9762f241a83018f256ac0 Mon Sep 17 00:00:00 2001 From: mdr223 Date: Fri, 10 Nov 2023 11:44:36 -0500 Subject: [PATCH] initial attempt to add grafana with postgres data source --- .github/workflows/dev-ci-cd.yaml | 3 +++ deploy/dev/dev-compose.yaml | 19 +++++++++++++++++++ deploy/dev/dev-init.sql | 13 +++++++++++++ deploy/dev/dev-install.sh | 13 +++++++++++++ deploy/dockerfiles/Dockerfile-grafana | 4 ++++ deploy/grafana/datasources.yaml | 18 ++++++++++++++++++ 6 files changed, 70 insertions(+) create mode 100644 deploy/dockerfiles/Dockerfile-grafana create mode 100644 deploy/grafana/datasources.yaml diff --git a/.github/workflows/dev-ci-cd.yaml b/.github/workflows/dev-ci-cd.yaml index 0bde2784..7d05d14f 100644 --- a/.github/workflows/dev-ci-cd.yaml +++ b/.github/workflows/dev-ci-cd.yaml @@ -78,6 +78,9 @@ jobs: touch ${{ github.workspace }}/deploy/dev/secrets/pg_password.txt echo "${{ secrets.DEV_PG_PASSWORD }}" >> ${{ github.workspace }}/deploy/dev/secrets/pg_password.txt chmod 400 ${{ github.workspace }}/deploy/dev/secrets/pg_password.txt + touch ${{ github.workspace }}/deploy/dev/secrets/grafana_password.txt + echo "${{ secrets.DEV_GRAFANA_PASSWORD }}" >> ${{ github.workspace }}/deploy/dev/secrets/grafana_password.txt + chmod 400 ${{ github.workspace }}/deploy/dev/secrets/grafana_password.txt # create env file to set tag(s) for docker-compose - name: Create Env File diff --git a/deploy/dev/dev-compose.yaml b/deploy/dev/dev-compose.yaml index 55113b5b..d8664f73 100644 --- a/deploy/dev/dev-compose.yaml +++ b/deploy/dev/dev-compose.yaml @@ -199,11 +199,30 @@ services: timeout: 5s retries: 5 + grafana-dev: + image: grafana-dev:${TAG} + build: + context: ../.. + dockerfile: deploy/dockerfiles/Dockerfile-grafana + depends_on: + postgres-dev: + condition: service_healthy + ports: + - 3000:3000 # host:container + volumes: + - grafana-storage:/var/lib/grafana + logging: + options: + max-size: 10m + restart: always + volumes: a2rchi-dev-data: external: true a2rchi-dev-pg-data: external: true + a2rchi-dev-grafana-data: + external: true secrets: imap_user: diff --git a/deploy/dev/dev-init.sql b/deploy/dev/dev-init.sql index 291b7f30..410aa12f 100644 --- a/deploy/dev/dev-init.sql +++ b/deploy/dev/dev-init.sql @@ -1,3 +1,16 @@ +-- create grafana user if it does not exist +DO +$do$ +BEGIN + IF NOT EXISTS (SELECT FROM pg_roles WHERE rolname = 'grafana') THEN + CREATE USER grafana WITH PASSWORD 'GRAFANA_PASSWORD'; + GRANT USAGE ON SCHEMA public TO grafana; + GRANT SELECT ON public.timing TO grafana; + END IF; +END +$do$; + +-- create tables CREATE TABLE IF NOT EXISTS conversations ( conversation_id INTEGER NOT NULL, message_id SERIAL, diff --git a/deploy/dev/dev-install.sh b/deploy/dev/dev-install.sh index ba11b725..d313c15f 100755 --- a/deploy/dev/dev-install.sh +++ b/deploy/dev/dev-install.sh @@ -12,6 +12,19 @@ if [[ $exists != 'a2rchi-dev-pg-data' ]]; then docker volume create --name a2rchi-dev-pg-data fi +# create volume if it doesn't already exist for grafana data +exists=`docker volume ls | awk '{print $2}' | grep a2rchi-dev-grafana-data` +if [[ $exists != 'a2rchi-dev-grafana-data' ]]; then + docker volume create --name a2rchi-dev-grafana-data +fi + +# fill-in variables in grafana files +export grafanapass=`cat A2rchi-dev/deploy/dev/secrets/grafana_password.txt` +sed -i 's/GRAFANA_PASSWORD/'"${grafanapass}"'/g' A2rchi-dev/deploy/grafana/datasources.yaml +sed -i 's/GRAFANA_PASSWORD/'"${grafanapass}"'/g' A2rchi-dev/deploy/dev/dev-init.sql +sed -i 's/RUNTIME_ENV/dev/g' A2rchi-dev/deploy/grafana/datasources.yaml +unset grafanapass + # build base image; try to reuse previously built image cd A2rchi-dev/deploy/dev/ docker build -f ../dockerfiles/Dockerfile-base -t a2rchi-base:BASE_TAG ../.. diff --git a/deploy/dockerfiles/Dockerfile-grafana b/deploy/dockerfiles/Dockerfile-grafana new file mode 100644 index 00000000..807e90a7 --- /dev/null +++ b/deploy/dockerfiles/Dockerfile-grafana @@ -0,0 +1,4 @@ +# syntax=docker/dockerfile:1 +FROM grafana/grafana-enterprise:10.2.0 +RUN mkdir -p /etc/grafana/provisioning/datasources +COPY deploy/grafana/datasources.yaml /etc/grafana/provisioning/datasources/ diff --git a/deploy/grafana/datasources.yaml b/deploy/grafana/datasources.yaml new file mode 100644 index 00000000..8e9eb164 --- /dev/null +++ b/deploy/grafana/datasources.yaml @@ -0,0 +1,18 @@ +apiVersion: 1 + +datasources: + - name: Postgres + type: postgres + url: postgres-RUNTIME_ENV:5432 # templated by dockerfile + user: grafana + secureJsonData: + password: 'GRAFANA_PASSWORD' + jsonData: + database: a2rchi-db + sslmode: 'disable' # disable/require/verify-ca/verify-full + maxOpenConns: 100 # Grafana v5.4+ + maxIdleConns: 100 # Grafana v5.4+ + maxIdleConnsAuto: true # Grafana v9.5.1+ + connMaxLifetime: 14400 # Grafana v5.4+ + postgresVersion: 1000 # 903=9.3, 904=9.4, 905=9.5, 906=9.6, 1000=10; 1000 refers to >= v10 + timescaledb: false