mirror of
https://github.com/hyperledger/fabric-samples.git
synced 2026-06-22 17:45:10 +00:00
liveness
used fabric protos insted of blockdecoder changed import statement Signed-off-by: sapthasurendran <saptha.surendran@ibm.com> revert back eslintrc Signed-off-by: sapthasurendran <saptha.surendran@ibm.com> function name change Signed-off-by: sapthasurendran <saptha.surendran@ibm.com> format changes Signed-off-by: sapthasurendran <saptha.surendran@ibm.com>
This commit is contained in:
parent
fc769cfcb0
commit
d4318c381a
2 changed files with 40 additions and 8 deletions
|
|
@ -24,6 +24,7 @@ import {
|
||||||
TransactionError,
|
TransactionError,
|
||||||
TransactionNotFoundError,
|
TransactionNotFoundError,
|
||||||
} from './errors';
|
} from './errors';
|
||||||
|
import fabproto6 from 'fabric-protos';
|
||||||
|
|
||||||
export const getNetwork = async (gateway: Gateway): Promise<Network> => {
|
export const getNetwork = async (gateway: Gateway): Promise<Network> => {
|
||||||
const network = await gateway.getNetwork(config.channelName);
|
const network = await gateway.getNetwork(config.channelName);
|
||||||
|
|
@ -289,3 +290,19 @@ export const blockEventHandler = (redis: Redis): BlockListener => {
|
||||||
|
|
||||||
return blockListner;
|
return blockListner;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export const getChainInfo = async (qscc: Contract): Promise<boolean> => {
|
||||||
|
try {
|
||||||
|
const data = await qscc.evaluateTransaction(
|
||||||
|
'GetChainInfo',
|
||||||
|
config.channelName
|
||||||
|
);
|
||||||
|
const info = fabproto6.common.BlockchainInfo.decode(data);
|
||||||
|
const blockHeight = info.height.toString();
|
||||||
|
logger.info('Current block height: %s', blockHeight);
|
||||||
|
return true;
|
||||||
|
} catch (e) {
|
||||||
|
logger.error(e, 'Unable to get blockchain info');
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
|
||||||
|
|
@ -10,10 +10,17 @@ import pinoMiddleware from 'pino-http';
|
||||||
import { logger } from './logger';
|
import { logger } from './logger';
|
||||||
import { assetsRouter } from './assets.router';
|
import { assetsRouter } from './assets.router';
|
||||||
import { transactionsRouter } from './transactions.router';
|
import { transactionsRouter } from './transactions.router';
|
||||||
import { getContracts, getGateway, getNetwork } from './fabric';
|
import { getContracts, getGateway, getNetwork, getChainInfo } from './fabric';
|
||||||
import { redis } from './redis';
|
import { redis } from './redis';
|
||||||
|
import { Contract } from 'fabric-network';
|
||||||
|
|
||||||
const { BAD_REQUEST, INTERNAL_SERVER_ERROR, NOT_FOUND, OK } = StatusCodes;
|
const {
|
||||||
|
BAD_REQUEST,
|
||||||
|
INTERNAL_SERVER_ERROR,
|
||||||
|
NOT_FOUND,
|
||||||
|
OK,
|
||||||
|
SERVICE_UNAVAILABLE,
|
||||||
|
} = StatusCodes;
|
||||||
|
|
||||||
export const createServer = async (): Promise<Application> => {
|
export const createServer = async (): Promise<Application> => {
|
||||||
const app = express();
|
const app = express();
|
||||||
|
|
@ -63,12 +70,20 @@ export const createServer = async (): Promise<Application> => {
|
||||||
timestamp: new Date().toISOString(),
|
timestamp: new Date().toISOString(),
|
||||||
})
|
})
|
||||||
);
|
);
|
||||||
app.get('/live', (_req, res) =>
|
app.get('/live', async (_req, res) => {
|
||||||
res.status(OK).json({
|
const qscc: Contract = _req.app.get('contracts').qscc;
|
||||||
status: getReasonPhrase(OK),
|
if ((await getChainInfo(qscc)) === true) {
|
||||||
timestamp: new Date().toISOString(),
|
res.status(OK).json({
|
||||||
})
|
status: getReasonPhrase(OK),
|
||||||
);
|
timestamp: new Date().toISOString(),
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
res.status(SERVICE_UNAVAILABLE).json({
|
||||||
|
status: getReasonPhrase(SERVICE_UNAVAILABLE),
|
||||||
|
timestamp: new Date().toISOString(),
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
// TODO delete me
|
// TODO delete me
|
||||||
app.get('/error', (_req, _res) => {
|
app.get('/error', (_req, _res) => {
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue