Skip to content

Commit b2b0b55

Browse files
Merge pull request #643 from US-EPA-CAMD/fix/#6620-v2-statement-timeout
Add Additional database connection Settings #6620
2 parents 06bfdb4 + e72b2fd commit b2b0b55

9 files changed

+101
-5
lines changed

manifest-vars.beta.yml

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,13 @@ instances: 2
22
environment: beta
33
host: api-easey-beta.app.cloud.gov
44
apiHost: api.epa.gov/easey/beta
5-
matsImportBucket: cg-4e77a460-aab1-4070-a67c-9debdc58a516
5+
matsImportBucket: cg-4e77a460-aab1-4070-a67c-9debdc58a516
6+
maxConnectionPool: 15
7+
idleTimeout: 30000
8+
connectionTimeout: 10000
9+
acquireConnectionFromPoolTimeout: 15000
10+
statementTimeout: 300000
11+
idleInTransactionSessionTimeout: 300000
12+
maxUsesBeforeRecreatingConnection: 500
13+
sqlLogging: "error"
14+
maxQueryExecutionTime: 30000

manifest-vars.perf.yml

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,13 @@ instances: 2
22
environment: performance
33
host: api-easey-perf.app.cloud.gov
44
apiHost: api.epa.gov/easey/perf
5-
matsImportBucket: cg-313e2894-003b-4eda-88ca-ce57b954a57d
5+
matsImportBucket: cg-313e2894-003b-4eda-88ca-ce57b954a57d
6+
maxConnectionPool: 15
7+
idleTimeout: 30000
8+
connectionTimeout: 10000
9+
acquireConnectionFromPoolTimeout: 15000
10+
statementTimeout: 300000
11+
idleInTransactionSessionTimeout: 300000
12+
maxUsesBeforeRecreatingConnection: 500
13+
sqlLogging: "error"
14+
maxQueryExecutionTime: 30000

manifest-vars.prod.yml

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,13 @@ instances: 2
22
environment: production
33
host: api-easey.app.cloud.gov
44
apiHost: api.epa.gov/easey
5-
matsImportBucket:
5+
matsImportBucket:
6+
maxConnectionPool: 15
7+
idleTimeout: 30000
8+
connectionTimeout: 10000
9+
acquireConnectionFromPoolTimeout: 15000
10+
statementTimeout: 300000
11+
idleInTransactionSessionTimeout: 300000
12+
maxUsesBeforeRecreatingConnection: 500
13+
sqlLogging: "error"
14+
maxQueryExecutionTime: 30000

manifest-vars.staging.yml

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,13 @@ instances: 2
22
environment: staging
33
host: api-easey-stg.app.cloud.gov
44
apiHost: api.epa.gov/easey/staging
5-
matsImportBucket:
5+
matsImportBucket:
6+
maxConnectionPool: 5
7+
idleTimeout: 5000
8+
connectionTimeout: 5000
9+
acquireConnectionFromPoolTimeout: 3000
10+
statementTimeout: 200000
11+
idleInTransactionSessionTimeout: 60000
12+
maxUsesBeforeRecreatingConnection: 500
13+
sqlLogging: "error"
14+
maxQueryExecutionTime: 5000

manifest-vars.test.yml

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,13 @@ instances: 1
22
environment: testing
33
host: api-easey-tst.app.cloud.gov
44
apiHost: api.epa.gov/easey/test
5-
matsImportBucket: cg-4f56c44b-64ff-45e7-b346-87ee77ca1dad
5+
matsImportBucket: cg-4f56c44b-64ff-45e7-b346-87ee77ca1dad
6+
maxConnectionPool: 5
7+
idleTimeout: 5000
8+
connectionTimeout: 5000
9+
acquireConnectionFromPoolTimeout: 3000
10+
statementTimeout: 200000
11+
idleInTransactionSessionTimeout: 60000
12+
maxUsesBeforeRecreatingConnection: 500
13+
sqlLogging: "error"
14+
maxQueryExecutionTime: 5000

manifest-vars.yml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,3 +13,12 @@ apiHost: api.epa.gov/easey/dev
1313
dbSvc: camd-pg-db
1414
awsRegion: us-gov-west-1
1515
matsImportBucket: cg-a5287c70-6f5f-4b41-acd4-a82bbb633f55
16+
maxConnectionPool: 15
17+
idleTimeout: 30000
18+
connectionTimeout: 10000
19+
acquireConnectionFromPoolTimeout: 15000
20+
statementTimeout: 300000
21+
idleInTransactionSessionTimeout: 300000
22+
maxUsesBeforeRecreatingConnection: 500
23+
sqlLogging: "error"
24+
maxQueryExecutionTime: 30000

manifest.yml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,15 @@ applications:
2626
EASEY_API_GATEWAY_HOST: ((apiHost))
2727
EASEY_AUTH_API: https://((apiHost))/auth-mgmt
2828
TZ: America/New_York
29+
EASEY_DB_MAX_CONNECTION_POOL: ((maxConnectionPool))
30+
EASEY_DB_IDLE_TIMEOUT: ((idleTimeout))
31+
EASEY_DB_CONNECTION_TIMEOUT: ((connectionTimeout))
32+
EASEY_DB_IDLE_CONNECTION_TIMEOUT: ((acquireConnectionFromPoolTimeout))
33+
EASEY_DB_STATEMENT_TIMEOUT: ((statementTimeout))
34+
EASEY_DB_IDLE_TRANS_SESSION_TIMEOUT: ((idleInTransactionSessionTimeout))
35+
EASEY_DB_MAX_USES_BEFORE_CONN_RECREATE: ((maxUsesBeforeRecreatingConnection))
36+
EASEY_DB_SQL_LOGGING: ((sqlLogging))
37+
EASEY_DB_MAX_QUERY_EXECUTION_TIMEOUT: ((maxQueryExecutionTime))
2938
routes:
3039
- route: ((host))/((path))
3140
services:

src/config/app.config.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,4 +110,14 @@ export default registerAs('app', () => ({
110110
matsImportBucketSecretAccessKey: getConfigValue(
111111
'EASEY_MATS_BULK_FILES_IMPORT_AWS_SECRET_ACCESS_KEY',
112112
),
113+
114+
maxConnectionPool: getConfigValueNumber('EASEY_DB_MAX_CONNECTION_POOL',15),
115+
idleTimeout: getConfigValueNumber( 'EASEY_DB_IDLE_TIMEOUT', 30000, ),
116+
connectionTimeout: getConfigValueNumber('EASEY_DB_CONNECTION_TIMEOUT',10000),
117+
acquireConnectionFromPoolTimeout: getConfigValueNumber('EASEY_DB_IDLE_CONNECTION_TIMEOUT',15000),
118+
statementTimeout: getConfigValueNumber('EASEY_DB_STATEMENT_TIMEOUT',300000),
119+
idleInTransactionSessionTimeout: getConfigValueNumber('EASEY_DB_IDLE_TRANS_SESSION_TIMEOUT',300000),
120+
sqlLogging: getConfigValue('EASEY_DB_SQL_LOGGING', "error"),
121+
maxQueryExecutionTime: getConfigValueNumber('EASEY_DB_MAX_QUERY_EXECUTION_TIMEOUT',30000),
122+
maxUsesBeforeRecreatingConnection: getConfigValueNumber('EASEY_DB_MAX_USES_BEFORE_CONN_RECREATE',500),
113123
}));

src/config/typeorm.config.ts

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import { LoggerOptions } from 'typeorm';
2+
13
require('dotenv').config();
24
import { TlsOptions } from 'tls';
35
import { readFileSync } from 'fs';
@@ -24,6 +26,12 @@ export class TypeOrmConfigService implements TypeOrmOptionsFactory {
2426
}
2527

2628
createTypeOrmOptions(): TypeOrmModuleOptions {
29+
// Values are: true | false | 'all' | 'query', 'error', 'schema', 'warn', 'info', 'log'
30+
const rawLogging = this.configService.get<string>('app.sqlLogging');
31+
const sqlLogging: LoggerOptions = rawLogging === 'false'
32+
? false
33+
: rawLogging.split(',').map(level => level.trim()) as LoggerOptions;
34+
2735
return {
2836
type: 'postgres',
2937
applicationName: this.configService.get<string>('app.name'),
@@ -35,6 +43,21 @@ export class TypeOrmConfigService implements TypeOrmOptionsFactory {
3543
entities: [__dirname + '/../**/*.entity.{js,ts}'],
3644
synchronize: false,
3745
ssl: this.tlsOptions,
46+
47+
// Database specific (Postgres) settings.
48+
extra: {
49+
max: this.configService.get<number>('app.maxConnectionPool'), // Max connections in pool
50+
idleTimeoutMillis: this.configService.get<number>('app.idleTimeout'), // Close idle connections
51+
connectionTimeoutMillis: this.configService.get<number>('app.connectionTimeout'), // Maximum time (ms) to wait for a new connection before timing out.
52+
acquireTimeoutMillis: this.configService.get<number>('app.acquireConnectionFromPoolTimeout'), // Fail if a connection is not acquired from the pool within timeframe
53+
statement_timeout: this.configService.get<number>('app.statementTimeout'), // Terminates queries that exceed the timeout (in ms).
54+
idle_in_transaction_session_timeout: this.configService.get<number>('app.idleInTransactionSessionTimeout'), // Terminates idle transactions after the specified time (in ms).
55+
maxUses: this.configService.get<number>('app.maxUsesBeforeRecreatingConnection'), //Recreate connections after 'n' uses
56+
},
57+
logging: sqlLogging,
58+
// Logs queries exceeding this limit (does not terminate, 'statement_timeout' terminates them).
59+
maxQueryExecutionTime: this.configService.get<number>('app.maxQueryExecutionTime'),
60+
3861
};
3962
}
4063
}

0 commit comments

Comments
 (0)