From 4a1706c99fff59b329df83cb2f6ad86c0377e54e Mon Sep 17 00:00:00 2001 From: Adhidarma Hadiwinoto <me@adhisimon.org> Date: Mon, 19 Aug 2019 13:50:34 +0700 Subject: [PATCH] Prefixes cached --- lib/prefixes/index.js | 16 ++++++++++++++++ package-lock.json | 14 ++++++++++++++ package.json | 1 + test/prefixes.js | 10 ++++++++++ 4 files changed, 41 insertions(+) diff --git a/lib/prefixes/index.js b/lib/prefixes/index.js index ceac772..e0fe34f 100644 --- a/lib/prefixes/index.js +++ b/lib/prefixes/index.js @@ -1,10 +1,19 @@ 'use strict'; const coreapi = require('komodo-sdk/coreapi'); +const NodeCache = require( "node-cache" ); + +const cache = new NodeCache({ + stdTTL: 60, +}); async function lookup(number) { if (!number) return; + if (cache.get(number)) { + return cache.get(number); + } + const [err, lookupResult] = await coreapi({ path: '/prefixes/lookup', method: 'GET', @@ -14,9 +23,16 @@ async function lookup(number) { }); if (err || !lookupResult || lookupResult.error) { + cache.del(number); return; } + if (lookupResult.prefix) { + cache.set(number, lookupResult.prefix); + } else { + cache.del(number); + } + return lookupResult.prefix; } diff --git a/package-lock.json b/package-lock.json index 974ae3b..8515396 100644 --- a/package-lock.json +++ b/package-lock.json @@ -524,6 +524,11 @@ "wrap-ansi": "^2.0.0" } }, + "clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=" + }, "code-point-at": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", @@ -3055,6 +3060,15 @@ "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", "dev": true }, + "node-cache": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/node-cache/-/node-cache-4.2.1.tgz", + "integrity": "sha512-BOb67bWg2dTyax5kdef5WfU3X8xu4wPg+zHzkvls0Q/QpYycIFRLEEIdAx9Wma43DxG6Qzn4illdZoYseKWa4A==", + "requires": { + "clone": "2.x", + "lodash": "^4.17.15" + } + }, "node-environment-flags": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/node-environment-flags/-/node-environment-flags-1.0.5.tgz", diff --git a/package.json b/package.json index b0a399c..0807a82 100644 --- a/package.json +++ b/package.json @@ -24,6 +24,7 @@ "komodo-center-messaging-client-lib": "git+http://gitlab.kodesumber.com/komodo/komodo-center-messaging-client-lib.git", "komodo-sdk": "git+http://gitlab.kodesumber.com/komodo/komodo-sdk.git", "moment": "^2.24.0", + "node-cache": "^4.2.1", "redis": "^2.8.0", "request": "^2.88.0", "uuid": "^3.3.2" diff --git a/test/prefixes.js b/test/prefixes.js index a112773..8a8fe5e 100644 --- a/test/prefixes.js +++ b/test/prefixes.js @@ -19,5 +19,15 @@ describe('#prefixes', () => { should.not.exist(await prefixes.lookup('')); should.not.exist(await prefixes.lookup('9')); }); + + it('should handle cache result', async () => { + const lookupResult = await prefixes.lookup('08180000000'); + await prefixes.lookup('08180000000'); + await prefixes.lookup('08180000000'); + await prefixes.lookup('08180000000'); + await prefixes.lookup('08180000000'); + await prefixes.lookup('08180000000'); + lookupResult.should.equal('XL'); + }); }); }); \ No newline at end of file -- 1.9.0