Add health checks to Node.js services (#26)
* Move Node healthchecks to gRPC * gitignore proto files * Switch to standard health RPC * Fix lint * Update client.js * Add protos back + update them * node services: fix & run genproto.sh this gets currencyservice to work but paymentservice is still crashing in the docker container. Signed-off-by: Ahmet Alp Balkan <ahmetb@google.com> * Fix docker breaking * update dockerfiles with released health probe Signed-off-by: Ahmet Alp Balkan <ahmetb@google.com>
This commit is contained in:
parent
360d983512
commit
6c37a96f3a
18 changed files with 313 additions and 109 deletions
|
@ -16,27 +16,49 @@
|
|||
|
||||
require('@google-cloud/profiler').start({
|
||||
serviceContext: {
|
||||
service: 'currencyservice',
|
||||
version: '1.0.0'
|
||||
service: 'currencyservice',
|
||||
version: '1.0.0'
|
||||
}
|
||||
});
|
||||
require('@google-cloud/trace-agent').start();
|
||||
require('@google-cloud/debug-agent').start({
|
||||
require('@google-cloud/trace-agent').start();
|
||||
require('@google-cloud/debug-agent').start({
|
||||
serviceContext: {
|
||||
service: 'currencyservice',
|
||||
version: 'VERSION'
|
||||
}
|
||||
})
|
||||
});
|
||||
|
||||
const path = require('path');
|
||||
const grpc = require('grpc');
|
||||
const request = require('request');
|
||||
const xml2js = require('xml2js');
|
||||
const protoLoader = require('@grpc/proto-loader');
|
||||
|
||||
const MAIN_PROTO_PATH = path.join(__dirname, './proto/demo.proto');
|
||||
const HEALTH_PROTO_PATH = path.join(__dirname, './proto/grpc/health/v1/health.proto');
|
||||
|
||||
const PROTO_PATH = path.join(__dirname, './proto/demo.proto');
|
||||
const PORT = 7000;
|
||||
const DATA_URL = 'http://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml';
|
||||
const shopProto = grpc.load(PROTO_PATH).hipstershop;
|
||||
|
||||
const shopProto = _loadProto(MAIN_PROTO_PATH).hipstershop;
|
||||
const healthProto = _loadProto(HEALTH_PROTO_PATH).grpc.health.v1;
|
||||
|
||||
/**
|
||||
* Helper function that loads a protobuf file.
|
||||
*/
|
||||
function _loadProto (path) {
|
||||
const packageDefinition = protoLoader.loadSync(
|
||||
path,
|
||||
{
|
||||
keepCase: true,
|
||||
longs: String,
|
||||
enums: String,
|
||||
defaults: true,
|
||||
oneofs: true
|
||||
}
|
||||
);
|
||||
return grpc.loadPackageDefinition(packageDefinition);
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper function that gets currency data from an XML webpage
|
||||
|
@ -116,8 +138,8 @@ function convert (call, callback) {
|
|||
nanos: euros.nanos * data[request.to_code]
|
||||
});
|
||||
|
||||
result.units = Math.floor(result.units)
|
||||
result.nanos = Math.floor(result.nanos)
|
||||
result.units = Math.floor(result.units);
|
||||
result.nanos = Math.floor(result.nanos);
|
||||
result.currency_code = request.to_code;
|
||||
|
||||
console.log(`conversion request successful`);
|
||||
|
@ -130,6 +152,13 @@ function convert (call, callback) {
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Endpoint for health checks
|
||||
*/
|
||||
function check (call, callback) {
|
||||
callback(null, { status: 'SERVING' });
|
||||
}
|
||||
|
||||
/**
|
||||
* Starts an RPC server that receives requests for the
|
||||
* CurrencyConverter service at the sample server port
|
||||
|
@ -138,6 +167,7 @@ function main () {
|
|||
console.log(`Starting gRPC server on port ${PORT}...`);
|
||||
const server = new grpc.Server();
|
||||
server.addService(shopProto.CurrencyService.service, {getSupportedCurrencies, convert});
|
||||
server.addService(healthProto.Health.service, {check});
|
||||
server.bind(`0.0.0.0:${PORT}`, grpc.ServerCredentials.createInsecure());
|
||||
server.start();
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue