diff --git a/README.md b/README.md index 33c2b5cc..917a0d98 100644 --- a/README.md +++ b/README.md @@ -55,7 +55,7 @@ There's a multitude of settings you can use to control the plugin server. Use th | KAFKA_PRODUCER_MAX_QUEUE_SIZE | Kafka producer batch max size before flushing | `20` | | KAFKA_FLUSH_FREQUENCY_MS | Kafka producer batch max duration before flushing | `500` | | KAFKA_MAX_MESSAGE_BATCH_SIZE | Kafka producer batch max size in bytes before flushing | `900000` | -| LOG_LEVEL | minimum log level | `LogLevel.Info` | +| LOG_LEVEL | minimum log level | `'info'` | | SENTRY_DSN | Sentry ingestion URL | `null` | | STATSD_HOST | StatsD host - integration disabled if this is not provided | `null` | | STATSD_PORT | StatsD port | `8125` | diff --git a/src/config/config.ts b/src/config/config.ts index a0ae12dd..0219953e 100644 --- a/src/config/config.ts +++ b/src/config/config.ts @@ -1,19 +1,24 @@ import os from 'os' import { LogLevel, PluginsServerConfig } from '../types' -import { stringToBoolean } from '../utils/utils' +import { determineNodeEnv, NodeEnv, stringToBoolean } from '../utils/utils' import { KAFKA_EVENTS_PLUGIN_INGESTION } from './kafka-topics' export const defaultConfig = overrideWithEnv(getDefaultConfig()) export const configHelp = getConfigHelp() export function getDefaultConfig(): PluginsServerConfig { - const isTestEnv = process.env.NODE_ENV === 'test' + const isTestEnv = determineNodeEnv() === NodeEnv.Test + const isDevEnv = determineNodeEnv() === NodeEnv.Development const coreCount = os.cpus().length return { CELERY_DEFAULT_QUEUE: 'celery', - DATABASE_URL: isTestEnv ? 'postgres://localhost:5432/test_posthog' : 'postgres://localhost:5432/posthog', + DATABASE_URL: isTestEnv + ? 'postgres://localhost:5432/test_posthog' + : isDevEnv + ? 'postgres://localhost:5432/posthog' + : null, POSTHOG_DB_NAME: null, POSTHOG_DB_USER: 'postgres', POSTHOG_DB_PASSWORD: '', diff --git a/src/types.ts b/src/types.ts index 708a13e5..a92024fa 100644 --- a/src/types.ts +++ b/src/types.ts @@ -39,7 +39,7 @@ export interface PluginsServerConfig extends Record { TASKS_PER_WORKER: number TASK_TIMEOUT: number CELERY_DEFAULT_QUEUE: string - DATABASE_URL: string + DATABASE_URL: string | null POSTHOG_DB_NAME: string | null POSTHOG_DB_USER: string POSTHOG_DB_PASSWORD: string diff --git a/src/utils/utils.ts b/src/utils/utils.ts index 4fe474ae..1aee2120 100644 --- a/src/utils/utils.ts +++ b/src/utils/utils.ts @@ -416,22 +416,27 @@ export function createPostgresPool( configOrDatabaseUrl: PluginsServerConfig | string, onError?: (error: Error) => any ): Pool { + if (typeof configOrDatabaseUrl !== 'string') { + if (!configOrDatabaseUrl.DATABASE_URL && !configOrDatabaseUrl.POSTHOG_DB_NAME) { + throw new Error('Invalid configuration for Postgres: either DATABASE_URL or POSTHOG_DB_NAME required') + } + } const credentials: Partial = typeof configOrDatabaseUrl === 'string' ? { connectionString: configOrDatabaseUrl, } - : configOrDatabaseUrl.POSTHOG_DB_NAME + : configOrDatabaseUrl.DATABASE_URL ? { - database: configOrDatabaseUrl.POSTHOG_DB_NAME, + connectionString: configOrDatabaseUrl.DATABASE_URL, + } + : { + database: configOrDatabaseUrl.POSTHOG_DB_NAME ?? undefined, user: configOrDatabaseUrl.POSTHOG_DB_USER, password: configOrDatabaseUrl.POSTHOG_DB_PASSWORD, host: configOrDatabaseUrl.POSTHOG_POSTGRES_HOST, port: configOrDatabaseUrl.POSTHOG_POSTGRES_PORT, } - : { - connectionString: configOrDatabaseUrl.DATABASE_URL, - } const pgPool = new Pool({ ...credentials, diff --git a/tests/helpers/graphile.ts b/tests/helpers/graphile.ts index e1f220a1..6077c214 100644 --- a/tests/helpers/graphile.ts +++ b/tests/helpers/graphile.ts @@ -4,7 +4,7 @@ import { Pool } from 'pg' import { PluginsServerConfig } from '../../src/types' export async function resetGraphileSchema(serverConfig: PluginsServerConfig): Promise { - const graphileUrl = serverConfig.JOB_QUEUE_GRAPHILE_URL || serverConfig.DATABASE_URL + const graphileUrl = serverConfig.JOB_QUEUE_GRAPHILE_URL || serverConfig.DATABASE_URL! const db = new Pool({ connectionString: graphileUrl }) try { diff --git a/tests/helpers/sql.ts b/tests/helpers/sql.ts index e4772d02..8a26ec7a 100644 --- a/tests/helpers/sql.ts +++ b/tests/helpers/sql.ts @@ -33,7 +33,7 @@ export async function resetTestDatabase( extraRows: ExtraDatabaseRows = {} ): Promise { const config = { ...defaultConfig, ...extraServerConfig } - const db = new Pool({ connectionString: config.DATABASE_URL }) + const db = new Pool({ connectionString: config.DATABASE_URL! }) try { await db.query('DELETE FROM ee_hook') } catch {} @@ -224,7 +224,7 @@ export function onQuery(hub: Hub, onQueryCallback: (queryText: string) => any): } export async function getErrorForPluginConfig(id: number): Promise { - const db = new Pool({ connectionString: defaultConfig.DATABASE_URL }) + const db = new Pool({ connectionString: defaultConfig.DATABASE_URL! }) let error try { const response = await db.query('SELECT * FROM posthog_pluginconfig WHERE id = $1', [id])