DoDiODev opened a new issue, #9219:
URL: https://github.com/apache/devlake/issues/9219

   ### Search before asking
   
   - [x] I had searched in the issues and found no similar feature requirement.
   
   ### Use case
   
   We run DevLake in Kubernetes with a **managed PostgreSQL** (TLS with a
   corporate CA, `sslmode=verify-full`) and want to use a **managed / external
   Grafana**. Data sources are GitHub, GitLab, Jira and SonarQube.
   
   The backend handles this setup fine (`DB_URL` is passed unchanged to pgx, so
   `sslmode=verify-full&sslrootcert=…` works). The gaps are in the dashboard 
image
   (`grafana/scripts/entrypoint.sh`) and in the config-ui. This issue collects
   them in one place, so that the small PRs below can refer to it.
   
   ### Description
   
   Verified on `main` @ `4ad2f66df`, PostgreSQL mode only. We do not run MySQL,
   so MySQL paths are left unchanged and untested.
   
   **A. Dashboard image ↔ managed PostgreSQL over TLS** (one small, additive PR 
planned)
   
   - [ ] `DATABASE_SSL_MODE` is read by `entrypoint.sh` (default `disable`), but
         `docker-compose-dev-postgresql.yml` / `env.example` do not pass it
         through (follow-up to #9207). Proposal: `GRAFANA_DATABASE_SSL_MODE`
         → `DATABASE_SSL_MODE`, default `disable`.
   - [ ] The PostgreSQL datasource payload has no `sslRootCertFile` /
         `sslCertFile` / `sslKeyFile`, so `verify-ca` / `verify-full` against a
         private CA fails. Proposal: optional `DATABASE_SSL_ROOT_CERT`
         (+ `_CERT` / `_KEY`) → `jsonData.tlsConfigurationMethod: "file-path"`.
   - [ ] The API calls use a hard-coded `admin:` user. Renaming the admin via
         `GF_SECURITY_ADMIN_USER` silently breaks datasource creation, because
         the POST status is not checked. Proposal: 
`${GF_SECURITY_ADMIN_USER:-admin}`
         plus a status check with a log message.
   - [ ] The entrypoint deletes **all** datasources on every start ("clean
         slate"). This is destructive when the Grafana state is shared 
(`GF_DATABASE_*`,
         several replicas, manually added datasources). Proposal for the PR: an
         opt-out `DATASOURCE_CLEAN_SLATE=false`. The default stays `true`, so
         the current behaviour is unchanged.
   
   **B. config-ui ↔ Grafana links** (one small bug-fix PR planned)
   
   - [ ] With `USE_EXTERNAL_GRAFANA=true`, `nginx.conf` returns
         `302 "${GRAFANA_ENDPOINT}"` and drops the path and query, so every
         `/grafana/d/<uid>/…` deep link lands on the Grafana home page. 
Proposal:
         append the remaining path + `$is_args$args`.
   - [ ] Onboarding "Check Dashboard" (GitHub / GitLab,
         `routes/onboard/step-4.tsx`, `components/card.tsx`) calls
         `window.open(import.meta.env.DEVLAKE_DASHBOARD_URL_*)`. The released
         image is built without a `.env` and the code has no fallback, so the
         button opens an empty tab. The example values in 
`config-ui/env.example`
         point to the MySQL UIDs (`KXWvOFQnz`, `msSjEq97z`), while the 
PostgreSQL
         dashboards use `…-pg`. Proposal: a DB-independent fallback (e.g.
         `/grafana/dashboards?query=GitHub`), or hide the button when the
         variable is empty. Also document the PostgreSQL UIDs.
   
   **C. Open points, no PR planned for now** (feedback welcome)
   
   - [ ] Clean slate, alternatives to the opt-out: (i) delete only the DevLake
         datasource (UID `devlake-postgres-api` / `devlake-mysql-api`), or
         (iii) switch to file provisioning with env interpolation instead of the
         API.
   - [ ] Root-level dashboards `ClaudeCodeAdoption*.json`, `Incidentio.json`,
         `Linear.json` and `Rootly.json` reference the MySQL datasource
         `devlake-mysql-api`, but are also shipped in PostgreSQL mode, where 
they
         show datasource errors. Moving them to `dashboards/mysql/` (plus
         PostgreSQL variants), and adding a dashboard-check rule against files
         directly under `dashboards/`, would fix this.
   - [ ] `DEVLAKE_GRAFANA_PATH` / `DEVLAKE_DASHBOARD_URL_*` are build-time only
         (Vite `envPrefix`). With relative `/grafana/…` links and the redirect
         fix from B this is fine for us. Runtime configuration (e.g. an
         `env-config.js` generated by `nginx.sh`) would only matter for setups
         with different dashboard UIDs or a non-default Grafana org. Noted here
         for completeness.
   
   ### Related issues
   
   - #5009 — config-ui image support for optional/external Grafana (introduced 
`USE_EXTERNAL_GRAFANA`)
   - #9207 — Grafana against an external database via Compose 
(`GRAFANA_DATABASE_*`)
   - #4286 — deploying DevLake in a production setting
   
   ### Are you willing to submit a PR?
   
   - [x] Yes I am willing to submit a PR!
   
   I will open the PRs for A and B one after another and link them here. They
   are small and additive, and the defaults are unchanged.
   
   ### Code of Conduct
   
   - [x] I agree to follow this project's Code of Conduct
   
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to