Skip to content
This repository was archived by the owner on Mar 13, 2025. It is now read-only.

Commit ee5cbae

Browse files
Added health checks
1 parent c8da5bf commit ee5cbae

File tree

6 files changed

+69
-8
lines changed

6 files changed

+69
-8
lines changed

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@ Configuration for the application is at `config/default.js` and `config/producti
2424
- API_VERSION: the API version
2525
- AUTH_SECRET: TC Authentication secret
2626
- VALID_ISSUERS: valid issuers for TC authentication
27+
- AMAZON.AWS_ACCESS_KEY_ID: The AWS access key
28+
- AMAZON.AWS_SECRET_ACCESS_KEY: The AWS secret key
2729
- AMAZON.AWS_REGION: The Amazon region to use when connecting. For local dynamodb you can set fake value.
2830
- AMAZON.IS_LOCAL_DB: Use local or AWS Amazon DynamoDB
2931
- AMAZON.DYNAMODB_URL: The local url, if using local Amazon DynamoDB

config/default.js

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ module.exports = {
66
LOG_LEVEL: process.env.LOG_LEVEL || 'debug',
77
PORT: process.env.PORT || 3001,
88
API_VERSION: process.env.API_VERSION || '/v1',
9+
910
AUTH_SECRET: process.env.AUTH_SECRET || 'mysecret',
1011
VALID_ISSUERS: process.env.VALID_ISSUERS ? process.env.VALID_ISSUERS.replace(/\\"/g, '')
1112
: '["https://topcoder-dev.auth0.com/", "https://api.topcoder.com"]',
@@ -15,26 +16,31 @@ module.exports = {
1516
TOKEN_CACHE_TIME: process.env.TOKEN_CACHE_TIME,
1617
AUTH0_CLIENT_ID: process.env.AUTH0_CLIENT_ID,
1718
AUTH0_CLIENT_SECRET: process.env.AUTH0_CLIENT_SECRET,
19+
1820
BUSAPI_URL: process.env.BUSAPI_URL || 'https://api.topcoder-dev.com/v5',
21+
1922
KAFKA_ERROR_TOPIC: process.env.KAFKA_ERROR_TOPIC || 'common.error.reporting',
23+
KAFKA_MESSAGE_ORIGINATOR: process.env.KAFKA_MESSAGE_ORIGINATOR || 'ubahn-search-ui-api',
24+
UPLOAD_CREATE_TOPIC: process.env.UPLOAD_CREATE_TOPIC || 'ubahn.action.create',
2025

2126
AMAZON: {
27+
AWS_ACCESS_KEY_ID: process.env.AWS_ACCESS_KEY_ID,
28+
AWS_SECRET_ACCESS_KEY: process.env.AWS_SECRET_ACCESS_KEY,
2229
AWS_REGION: process.env.AWS_REGION || 'us-east-1',
30+
31+
DYNAMODB_TEMPLATE_TABLE: process.env.DYNAMODB_TEMPLATE_TABLE || 'templates',
32+
DYNAMODB_UPLOAD_TABLE: process.env.DYNAMODB_UPLOAD_TABLE || 'uploads',
33+
2334
IS_LOCAL_DB: process.env.IS_LOCAL_DB ? process.env.IS_LOCAL_DB === 'true' : false,
2435
// Below three configuration is required if IS_LOCAL_DB is true
2536
DYNAMODB_URL: process.env.DYNAMODB_URL || 'http://localhost:8000',
2637
DYNAMODB_READ_CAPACITY_UNITS: process.env.DYNAMODB_READ_CAPACITY_UNITS || 10,
2738
DYNAMODB_WRITE_CAPACITY_UNITS: process.env.DYNAMODB_WRITE_CAPACITY_UNITS || 5,
28-
// table name is model name
29-
DYNAMODB_TEMPLATE_TABLE: process.env.DYNAMODB_TEMPLATE_TABLE || 'template',
30-
DYNAMODB_UPLOAD_TABLE: process.env.DYNAMODB_UPLOAD_TABLE || 'upload'
3139
},
3240

3341
TEMPLATE_FILE_MAX_SIZE: process.env.TEMPLATE_FILE_MAX_SIZE || 2 * 1024 * 1024,
3442
TEMPLATE_FILE_MIMETYPE: process.env.TEMPLATE_FILE_MIMETYPE || 'application/vnd.ms-excel,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
3543
TEMPLATE_S3_BUCKET: process.env.TEMPLATE_S3_BUCKET || 'ubahn',
3644
UPLOAD_S3_BUCKET: process.env.UPLOAD_S3_BUCKET || 'ubahn',
37-
S3_OBJECT_URL_EXPIRY_TIME: process.env.S3_OBJECT_URL_EXPIRY_TIME || 60 * 60,
38-
KAFKA_MESSAGE_ORIGINATOR: process.env.KAFKA_MESSAGE_ORIGINATOR || 'ubahn-search-ui-api',
39-
UPLOAD_CREATE_TOPIC: process.env.UPLOAD_CREATE_TOPIC || 'ubahn.action.create'
45+
S3_OBJECT_URL_EXPIRY_TIME: process.env.S3_OBJECT_URL_EXPIRY_TIME || 60 * 60
4046
}

src/common/helper.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@ const busApiClient = busApi(_.pick(config, ['AUTH0_URL', 'AUTH0_AUDIENCE', 'TOKE
1515
let dbInstance
1616

1717
AWS.config.update({
18-
// accessKeyId: config.AMAZON.AWS_ACCESS_KEY_ID,
19-
// secretAccessKey: config.AMAZON.AWS_SECRET_ACCESS_KEY,
18+
accessKeyId: config.AMAZON.AWS_ACCESS_KEY_ID,
19+
secretAccessKey: config.AMAZON.AWS_SECRET_ACCESS_KEY,
2020
region: config.AMAZON.AWS_REGION
2121
})
2222

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
/**
2+
* Controller for health check endpoint
3+
*/
4+
const service = require('../services/HealthCheckService')
5+
6+
/**
7+
* Do health check
8+
* @param {Object} req the request
9+
* @param {Object} res the response
10+
*/
11+
async function check (req, res) {
12+
const result = await service.check()
13+
res.send(result)
14+
}
15+
16+
module.exports = {
17+
check
18+
}

src/routes.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,5 +65,11 @@ module.exports = {
6565
access: constants.AllAuthenticatedUsers,
6666
scopes: [constants.Scopes.GetTemplate, constants.Scopes.AllTemplate]
6767
}
68+
},
69+
'/health': {
70+
get: {
71+
controller: 'HealthCheckController',
72+
method: 'check'
73+
}
6874
}
6975
}

src/services/HealthCheckService.js

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
/**
2+
* This service provides a method to check health.
3+
*/
4+
const config = require('config')
5+
const helper = require('../common/helper')
6+
const logger = require('../common/logger')
7+
const errors = require('../common/errors')
8+
9+
/**
10+
* Check health.
11+
* @returns {Object} the health check result
12+
*/
13+
async function check () {
14+
// check DB connection by a simple query
15+
try {
16+
await helper.scan(config.AMAZON.DYNAMODB_TEMPLATE_TABLE)
17+
} catch (e) {
18+
throw new errors.ServiceUnavailableError(`DynamoDB is unavailable, ${e.message}`)
19+
}
20+
21+
// ok
22+
return { checksRun: 1 }
23+
}
24+
25+
module.exports = {
26+
check
27+
}
28+
29+
logger.buildService(module.exports)

0 commit comments

Comments
 (0)