@alexpekurovsky/logparser
Advanced tools
Comparing version 1.0.1 to 1.0.2
40
bin.js
#!/usr/bin/env node | ||
var app = require('logparser'); | ||
var app = require('@alexpekurovsky/logparser'); | ||
var path=(process.argv[2] ? process.argv[2] : null); | ||
var pattern=(process.argv[3] ? process.argv[3] : "*"); | ||
var recursive=(process.argv[4] ? process.argv[4] : false); | ||
var ArgumentParser = require('argparse').ArgumentParser; | ||
var parser = new ArgumentParser({ | ||
addHelp: true, | ||
description: 'Argparse example' | ||
}); | ||
if (!path) { | ||
console.log("No file or directory specified"); | ||
} | ||
parser.addArgument( | ||
'path', | ||
{ | ||
type: 'string', | ||
help: 'Filename or directory to work on' | ||
} | ||
); | ||
parser.addArgument( | ||
['-p', '--pattern'], | ||
{ | ||
defaultValue: "*", | ||
type: 'string', | ||
help: 'Filemask to match files. See https://en.wikipedia.org/wiki/Glob_(programming)' | ||
} | ||
); | ||
parser.addArgument( | ||
['-r', '--recursive'], | ||
{ | ||
defaultValue: false, | ||
action: 'storeTrue', | ||
help: 'Specify this option if you want to check subdirectories for files' | ||
} | ||
); | ||
app.load(path, pattern, recursive); | ||
var args = parser.parseArgs(); | ||
app.load(args.path, args.pattern, args.recursive); |
61
index.js
var fs = require('fs'), | ||
readline = require('readline'), | ||
stream = require('stream'), | ||
glob = require('glob'); | ||
glob = require('glob'), | ||
promptSync = require('prompt-sync')(); | ||
var load = function (path, pattern, recursive) { | ||
try { | ||
if (fs.existsSync(path) ) { | ||
var stats = fs.lstatSync(path); | ||
@@ -23,4 +24,4 @@ if (stats.isDirectory()) { | ||
} | ||
} catch(e) { | ||
console.log("No such file or directory"); | ||
} else { | ||
console.log("No such file or directory " + path); | ||
} | ||
@@ -32,2 +33,22 @@ } | ||
console.log('Processing ' + filename + ' ...'); | ||
if (fs.existsSync(filename + '.csv')) { | ||
console.log('`-> ' + filename + '.csv exists'); | ||
var answer = null; | ||
answer = promptSync(' `-> File to be created ' + filename + '.csv exists. Do you want to [Override/Skip] it: '); | ||
while (['O','S'].indexOf(answer) == -1) { | ||
answer = promptSync(' `-> Please answer exactly O/S: '); | ||
} | ||
switch(answer) { | ||
case 'O': | ||
console.log(' `-> Truncating output file ' + filename + '.csv'); | ||
fs.truncateSync(filename + '.csv', 0); | ||
break; | ||
case 'S': | ||
console.log(' `-> You skipped processing of ' + filename); | ||
return; | ||
break; | ||
default: | ||
break; | ||
} | ||
} | ||
var instream = fs.createReadStream(filename); | ||
@@ -46,7 +67,11 @@ var outstream = new stream; | ||
rl.on('line', function(line) { | ||
var log = JSON.parse(line); | ||
for (var title of Object.keys(log)) { | ||
if (headers.indexOf(title) == -1) { | ||
headers.push(title); | ||
try { | ||
var log = JSON.parse(line); | ||
for (var title of Object.keys(log)) { | ||
if (headers.indexOf(title) == -1) { | ||
headers.push(title); | ||
} | ||
} | ||
} catch(e) { | ||
console.log("Line isn't JSON: " + line); | ||
} | ||
@@ -74,12 +99,16 @@ }); | ||
rl.on('line', function(line) { | ||
var log = JSON.parse(line); | ||
var values = []; | ||
for (var key of headers) { | ||
if (typeof log[key] != 'undefined') { | ||
values.push(decodeURIComponent(log[key])); | ||
} else { | ||
values.push(''); | ||
try { | ||
var log = JSON.parse(line); | ||
var values = []; | ||
for (var key of headers) { | ||
if (typeof log[key] != 'undefined') { | ||
values.push(decodeURIComponent(log[key])); | ||
} else { | ||
values.push(''); | ||
} | ||
} | ||
filesaver(filename + ".csv", arraytocsv(values)); | ||
} catch(e) { | ||
console.log("Line isn't JSON: " + line); | ||
} | ||
filesaver(filename + ".csv", arraytocsv(values)); | ||
}); | ||
@@ -86,0 +115,0 @@ |
{ | ||
"name": "@alexpekurovsky/logparser", | ||
"version": "1.0.1", | ||
"version": "1.0.2", | ||
"description": "", | ||
@@ -18,3 +18,5 @@ "main": "index.js", | ||
"fs": "^0.0.2", | ||
"readline-sync": "^1.4.4" | ||
"readline-sync": "^1.4.4", | ||
"prompt-sync": "^4.1.4", | ||
"argparse": "^1.0.7" | ||
}, | ||
@@ -21,0 +23,0 @@ "author": "Alex Pekurovsky <alexpekurovskiy@gmail.com>", |
@@ -20,4 +20,4 @@ # LogParser | ||
$ logparser DIRNAME # to process all files in dir | ||
$ logparser DIRNAME PATTERN # to process all files in dir matching mattern | ||
$ logparser DIRNAME PATTERN true # to process all files in dir and subdirs matching pattern | ||
$ logparser DIRNAME -p PATTERN # to process all files in dir matching mattern | ||
$ logparser DIRNAME -p PATTERN -r # to process all files in dir and subdirs matching pattern | ||
``` | ||
@@ -29,4 +29,4 @@ | ||
$ logparser /var/log/IronSourceApp | ||
$ logparser /var/log/IronSourceApp '*.log' | ||
$ logparser /var/log 'IS_*.log' true | ||
$ logparser /var/log/IronSourceApp -p '*.log' | ||
$ logparser /var/log -p 'IS_*.log' -r | ||
``` | ||
@@ -38,24 +38,47 @@ | ||
$ ll | ||
-rw-r--r-- 1 root root 6651236352 Jun 28 01:55 big.log | ||
-rw-r--r-- 1 root root 2822 Jun 27 23:20 light.log | ||
-rwxr-xr-x 1 root root 238 Jun 28 01:54 makebig.sh | ||
-rw-r--r-- 1 root root 51962784 Jun 27 22:40 Mundo-json-2013-01-03.log | ||
-rw-r--r-- 1 root root 6651236352 Jun 28 01:55 big.log | ||
-rw-r--r-- 1 root root 3815110456 Jun 28 02:18 big.log.csv | ||
-rw-r--r-- 1 root root 2822 Jun 27 23:20 light.log | ||
-rw-r--r-- 1 root root 51962784 Jun 27 22:40 Mundo-json-2013-01-03.log | ||
-rw-r--r-- 1 root root 0 Jun 28 12:01 Mundo-json-2013-01-03.log.csv | ||
$ logparser -h | ||
usage: logparser [-h] [-p PATTERN] [-r] path | ||
Argparse example | ||
Positional arguments: | ||
path Filename or directory to work on | ||
Optional arguments: | ||
-h, --help Show this help message and exit. | ||
-p PATTERN, --pattern PATTERN | ||
Filemask to match files. See https://en.wikipedia. | ||
org/wiki/Glob_(programming) | ||
-r, --recursive Specify this option if you want to check | ||
subdirectories for files | ||
$ logparser . '*.log' | ||
Processing big.log ... | ||
`-> big.log.csv exists | ||
`-> File to be created big.log.csv exists. Do you want to [Override/Skip] it: | ||
`-> Please answer exactly O/S: S | ||
`-> You skipped processing of big.log | ||
Processing light.log ... | ||
Processing Mundo-json-2013-01-03.log ... | ||
`-> Mundo-json-2013-01-03.log.csv exists | ||
`-> File to be created Mundo-json-2013-01-03.log.csv exists. Do you want to [Override/Skip] it: O | ||
`-> Truncating output file Mundo-json-2013-01-03.log.csv | ||
Processing light.log completed. | ||
Processing Mundo-json-2013-01-03.log completed. | ||
Processing big.log completed. | ||
$ ll -h | ||
-rw-r--r-- 1 root root 6,2G Jun 28 01:55 big.log | ||
-rw-r--r-- 1 root root 3,6G Jun 28 02:18 big.log.csv | ||
-rw-r--r-- 1 root root 2,8K Jun 27 23:20 light.log | ||
-rw-r--r-- 1 root root 1,8K Jun 28 01:56 light.log.csv | ||
-rwxr-xr-x 1 root root 238 Jun 28 01:54 makebig.sh | ||
-rw-r--r-- 1 root root 50M Jun 27 22:40 Mundo-json-2013-01-03.log | ||
-rw-r--r-- 1 root root 29M Jun 28 01:56 Mundo-json-2013-01-03.log.csv | ||
-rw-r--r-- 1 root root 6,2G Jun 28 01:55 big.log | ||
-rw-r--r-- 1 root root 3,6G Jun 28 02:18 big.log.csv | ||
-rw-r--r-- 1 root root 2,8K Jun 27 23:20 light.log | ||
-rw-r--r-- 1 root root 1,8K Jun 28 12:02 light.log.csv | ||
-rw-r--r-- 1 root root 50M Jun 27 22:40 Mundo-json-2013-01-03.log | ||
-rw-r--r-- 1 root root 29M Jun 28 12:02 Mundo-json-2013-01-03.log.csv | ||
``` | ||
@@ -62,0 +85,0 @@ |
11443
5
163
88
5
+ Addedargparse@^1.0.7
+ Addedprompt-sync@^4.1.4
+ Addedansi-regex@4.1.1(transitive)
+ Addedargparse@1.0.10(transitive)
+ Addedprompt-sync@4.2.0(transitive)
+ Addedsprintf-js@1.0.3(transitive)
+ Addedstrip-ansi@5.2.0(transitive)