Install all the dependencies
$ npm install
const {Pool} = require('pg');
const fs = require('fs-extra');
Is a log analysis tool which
##Technologies
NodeJs as server side language
PostgresSQL as DBMS
Is the application entry point
const postgresSql = require('./databaseHandler');
postgreSql.topArticleAuthor();
postgreSql.topThreeArticles();
postgreSql.buggyDay();
Is where all the heavy lifting take place. Database access, print on console the reports and write at external file. The log function write the info on ./logs/output.txt
log : (filename,info)=>{
fs.appendFile(filename, `${info} \r\n` , err => {
(err) ? console.log(err) :'';// => null
});
},
What are the most three popular three articles of all times ?
pool.connect((err, client, release) => {
if (err) {
return console.error('Error acquiring client', err.stack)
}
//top 3 Articles name and views
/*
* "Princess Shellfish Marries Prince Handsome" — 1201 views
"Baltimore Ravens Defeat Rhode Island Shoggoths" — 915 views
"Political Scandal Ends In Political Scandal" — 553 views
* */
let question = `What are the most three popular three articles of all times ?`;
client.query(`select articles.title article_name, count(articles.slug) as views
from articles left join log on log.path = '/article/' || articles.slug
group by article_name, articles.slug
order by views DESC limit 3;`,
(err, result) => {
release();
if (err) {
return console.error('Error executing query', err.stack)
}
// console.log(result.rows);
postgresql.consolePrinter(result.rows,1,question);
});
});
What are the most popular article authors of all time ?
pool.connect((err, client, release) => {
if (err) {
return console.error('Error acquiring client', err.stack)
}
let question = 'What are the most popular article authors of all time ?';
/*
* Ursula La Multa — 2304 views
Rudolf von Treppenwitz — 1985 views
Markoff Chaney — 1723 views
Anonymous Contributor — 1023 views
*
*
* */
client.query(`Select authors.name as autor, count(*) as views
from authors
inner join articles on authors.id = articles.author
inner join log on log.path = '/article/' || articles.slug
GROUP BY autor ORDER BY views desc`, (err, result) => {
release();
if (err) {
return console.error('Error executing query', err.stack)
}
postgresql.consolePrinter(result.rows,2, question);
})
});
On which days did more than 1% of requests lead to errors ?
buggyDay : ()=>{
pool.connect((err, client, release) => {
if (err) {
return console.error('Error acquiring client', err.stack)
}
// On which days did more than 1% of requests lead to errors?
//HTTP status codes
//July 29, 2016 — 2.5% errors
client.query(`Select count(*) as requests from log group by DATE(time)`,(bug, totalRows)=>{
if (bug) {
return console.error('Error executing query', bug.stack)
}
client.query(`SELECT date(time) as day,
count(*) as errors
from log
where status like '%404%'
group by day order by errors desc`, (err, result) => {
release();
if (err) {
return console.error('Error executing query', err.stack)
}
postgresql.consoleBoard(result.rows, totalRows.rows);
});
});
});
}
$ node server.js
or
$ nodemon
GNU/GPL