UNPKG

kibana-with-account

Version:

kibana-with-account is develop based kibana project

104 lines (89 loc) 2.4 kB
const crypto = require('crypto'); export default function (server) { async function updateMetadata(urlId, urlDoc) { const client = server.plugins.elasticsearch.client; const kibanaIndex = server.config().get('kibana.index'); try { await client.update({ index: kibanaIndex, type: 'url', id: urlId, body: { doc: { 'accessDate': new Date(), 'accessCount': urlDoc._source.accessCount + 1 } } }); } catch (err) { server.log('Warning: Error updating url metadata', err); //swallow errors. It isn't critical if there is no update. } } async function getUrlDoc(urlId) { const urlDoc = await new Promise((resolve, reject) => { const client = server.plugins.elasticsearch.client; const kibanaIndex = server.config().get('kibana.index'); client.get({ index: kibanaIndex, type: 'url', id: urlId }) .then(response => { resolve(response); }) .catch(err => { resolve(); }); }); return urlDoc; } async function createUrlDoc(url, urlId) { const newUrlId = await new Promise((resolve, reject) => { const client = server.plugins.elasticsearch.client; const kibanaIndex = server.config().get('kibana.index'); client.index({ index: kibanaIndex, type: 'url', id: urlId, body: { url, 'accessCount': 0, 'createDate': new Date(), 'accessDate': new Date() } }) .then(response => { resolve(response._id); }) .catch(err => { reject(err); }); }); return newUrlId; } function createUrlId(url) { const urlId = crypto.createHash('md5') .update(url) .digest('hex'); return urlId; } return { async generateUrlId(url) { const urlId = createUrlId(url); const urlDoc = await getUrlDoc(urlId); if (urlDoc) return urlId; return createUrlDoc(url, urlId); }, async getUrl(urlId) { try { const urlDoc = await getUrlDoc(urlId); if (!urlDoc) throw new Error('Requested shortened url does note exist in kibana index'); updateMetadata(urlId, urlDoc); return urlDoc._source.url; } catch (err) { return '/'; } } }; };