From d3aa4f2bc7f2341a98c4aa6018c0d2ede221a3ed Mon Sep 17 00:00:00 2001 From: Brandon Millman Date: Wed, 24 Jan 2018 17:11:14 -0800 Subject: Respond to GH comments and add /info endpoint --- packages/testnet-faucets/README.md | 35 +++++++++++++++++++++++++++++- packages/testnet-faucets/src/ts/handler.ts | 33 ++++++++++++++++++++++++---- packages/testnet-faucets/src/ts/server.ts | 1 + 3 files changed, 64 insertions(+), 5 deletions(-) diff --git a/packages/testnet-faucets/README.md b/packages/testnet-faucets/README.md index cd98b4a64..00352cc2a 100644 --- a/packages/testnet-faucets/README.md +++ b/packages/testnet-faucets/README.md @@ -53,6 +53,39 @@ yarn dev ### Endpoints +`GET /ping` + +Returns `pong` + +`GET /info` + +Returns a JSON payload describing the state of the queues for each network. For example: + +```json +{ + "3":{ + "ether":{ + "full":false, + "size":4 + }, + "zrx":{ + "full":false, + "size":6 + } + }, + "42":{ + "ether":{ + "full":false, + "size":8 + }, + "zrx":{ + "full":false, + "size":20 + } + } +} +``` + `GET /ether/:recipient` Where recipient is a hex encoded Ethereum address prefixed with `0x`. @@ -63,7 +96,7 @@ Where recipient is a hex encoded Ethereum address prefixed with `0x`. #### Parameters -Both endpoints take a query parameter named `networkId` to specify the desired network where you would like to receive the ETH or ZRX. For example: +The endpoints `/ether` and `/zrx` take a query parameter named `networkId` to specify the desired network where you would like to receive the ETH or ZRX. For example: ```bash curl -i http://localhost:3000/ether/0x14e2F1F157E7DD4057D02817436D628A37120FD1\?networkId=3 diff --git a/packages/testnet-faucets/src/ts/handler.ts b/packages/testnet-faucets/src/ts/handler.ts index 8c859be2e..bf5b3e81e 100644 --- a/packages/testnet-faucets/src/ts/handler.ts +++ b/packages/testnet-faucets/src/ts/handler.ts @@ -23,6 +23,11 @@ interface RequestQueueByNetworkId { [networkId: string]: RequestQueue; } +enum QueueType { + ETH = 'ETH', + ZRX = 'ZRX', +} + const DEFAULT_NETWORK_ID = 42; // kovan export class Handler { @@ -36,17 +41,37 @@ export class Handler { this._zrxRequestQueueByNetworkId[networkId] = new ZRXRequestQueue(web3, +networkId); }); } + public getQueueInfo(req: express.Request, res: express.Response) { + res.setHeader('Content-Type', 'application/json'); + const queueInfo = _.mapValues(rpcUrls, (rpcUrl: string, networkId: string) => { + utils.consoleLog(networkId); + const etherRequestQueue = this._etherRequestQueueByNetworkId[networkId]; + const zrxRequestQueue = this._zrxRequestQueueByNetworkId[networkId]; + return { + ether: { + full: etherRequestQueue.isFull(), + size: etherRequestQueue.size(), + }, + zrx: { + full: zrxRequestQueue.isFull(), + size: zrxRequestQueue.size(), + }, + }; + }); + const payload = JSON.stringify(queueInfo); + res.status(200).send(payload); + } public dispenseEther(req: express.Request, res: express.Response) { - this._dispense(req, res, this._etherRequestQueueByNetworkId, 'ETH'); + this._dispense(req, res, this._etherRequestQueueByNetworkId, QueueType.ETH); } public dispenseZRX(req: express.Request, res: express.Response) { - this._dispense(req, res, this._zrxRequestQueueByNetworkId, 'ZRX'); + this._dispense(req, res, this._zrxRequestQueueByNetworkId, QueueType.ZRX); } private _dispense( req: express.Request, res: express.Response, requestQueueByNetworkId: RequestQueueByNetworkId, - assetSymbol: string, + queueType: QueueType, ) { const recipientAddress = req.params.recipient; if (_.isUndefined(recipientAddress) || !this._isValidEthereumAddress(recipientAddress)) { @@ -65,7 +90,7 @@ export class Handler { res.status(503).send('QUEUE_IS_FULL'); return; } - utils.consoleLog(`Added ${lowerCaseRecipientAddress} to queue: ${assetSymbol} networkId: ${networkId}`); + utils.consoleLog(`Added ${lowerCaseRecipientAddress} to queue: ${queueType} networkId: ${networkId}`); res.status(200).end(); } // tslint:disable-next-line:prefer-function-over-method diff --git a/packages/testnet-faucets/src/ts/server.ts b/packages/testnet-faucets/src/ts/server.ts index 23642787d..26edfff5a 100644 --- a/packages/testnet-faucets/src/ts/server.ts +++ b/packages/testnet-faucets/src/ts/server.ts @@ -19,6 +19,7 @@ const handler = new Handler(); app.get('/ping', (req: express.Request, res: express.Response) => { res.status(200).send('pong'); }); +app.get('/info', handler.getQueueInfo.bind(handler)); app.get('/ether/:recipient', handler.dispenseEther.bind(handler)); app.get('/zrx/:recipient', handler.dispenseZRX.bind(handler)); -- cgit v1.2.3