kibana-with-account
Version:
kibana-with-account is develop based kibana project
104 lines (89 loc) • 2.4 kB
JavaScript
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 '/';
}
}
};
};