X-Git-Url: http://git.roojs.org/?p=gitlive;a=blobdiff_plain;f=GitLogParser.js;h=8c13ff40051b4ab5ab82552d0d07a58b56aaf8ad;hp=fa433310207180ad9f6185a4bf4e7de47d25595c;hb=9e641e366549656621a3e4fc4950b62c4b395650;hpb=e3188c5b1b4243a97b9e9e2303cd0d85e7b95d9f diff --git a/GitLogParser.js b/GitLogParser.js index fa433310..8c13ff40 100644 --- a/GitLogParser.js +++ b/GitLogParser.js @@ -20,6 +20,7 @@ GitLogParser = { } + var flines = File.read( filename ).split("\n"); //print("loaded"); // first just convert them.. @@ -51,7 +52,7 @@ GitLogParser = { } - print("parsed"); + //print("parsed"); //print(JSON.stringify(lines,null,4)); // summarize data... @@ -61,7 +62,7 @@ GitLogParser = { // shours should be: // hour : [ ] - + for (var i = 0; i < lines.length; i++) { var line = lines[i]; var hour = line.start.format('H'); @@ -81,12 +82,23 @@ GitLogParser = { hours[hour][project].total += line.span; hours[hour][project].items.push(line); + hours[-1] = (typeof(hours[-1]) == 'undefined') ? {} : hours[-1]; + hours[-1][project] = (typeof(hours[-1][project]) == 'undefined') ? + { total : 0, items : {} } + : hours[-1][project]; + + hours[-1][project].total += line.span; + hours[-1][project].items[line.desc] = (typeof(hours[-1][project].items[line.desc]) == 'undefined' ? + 0 : hours[-1][project].items[line.desc]) + line.span; + shours[hour] = (typeof(shours[hour]) == 'undefined') ? {} : shours[hour]; shours[hour][line.desc] = (typeof(shours[hour][line.desc] ) == 'undefined') ? 0 : shours[hour][line.desc] ; shours[hour][line.desc] += line.span; + + } - this.shours = shours; + this.shours = shours; return hours; }, @@ -104,8 +116,8 @@ GitLogParser = { //print("time: " + time); //ret.start = xDate.Date.parseDate(this.date.format('Y-m-d') + ' ' + time, 'Y-m-d H:i:s'); - ret.start = xDate.Date.parseDate(( - this.date ? this.date.format('Y-m-d') : (new Date()).format('Y-m-d') + + ret.start = xDate.Date.parseDate( + (this.date ? this.date.format('Y-m-d') :'2013-01-01') + ' ' + time, 'Y-m-d H:i:s'); while (ret.cmd === false) { @@ -130,8 +142,22 @@ GitLogParser = { ret.project = 'IDLE'; return ret; } - + ret.project = 'Unknown'; + for(var proj in this.regexes) { + for(var r in this.regexes[proj]) { + if (ret.line.match(this.regexes[proj][r])) { + //print("Match " + proj + " on " + r + ret.line + ) + ret.project = proj; + break; + } + } + if (ret.project != 'Unknown') { + break; + } + } + return ret; + /* if (typeof(this[ret.cmd])=='undefined') { ret.project = 'Unknown'; @@ -151,9 +177,51 @@ GitLogParser = { return ret; + */ }, - + + regexes : { + 'HPA' : [ /web.hpasite/, /Roo Application Builder - Site/, /HP Intranet/, /Hpasite/ ], + 'MediaOut' : [ /app\.WorkerBee/, /web\.MediaOut/, /workerbee/, + /media-outreach/ , /Press Release Image Portal/, /Media Outreach Feed/ , /PressRelease/, + /Clipping Portal/, /Media OutReach/, + /Auto Searching/ , // These are the excel files they send over.. + /sitemap\.xml/, + /Builder - Clipping/ + ], + 'Habito' : [ /Interspire/ ], + 'Hebe' :[ /web.hhyc_membership_system/ ,/Builder - Hebe/, /Hebe Haven Membership Managment/], + + 'RIS' : [ /Project web.Ris/ , /RIS HK/ , /Hydra/, /hydrajobs/ ], + // for who thoug... + 'Mailfort' : [ /web.FlexySpam/ ], + 'Emily' : [ /greengarden/ ,/Inventory \| Warehouse/, /Emily/ ], + 'GPUK' : [/gp-wordpress/, /Greenpeace UK/], + + 'COBA' : [/Veridate/, /web\.coba/, /COBA/ ,/Pipeline - DS view/, /Coba/, /Pman.BAdmin/ , /SoapUI/ ], + 'Regulation Asia' : [/Regulation Asia/, /comocracy/], + 'Unknown Project' : [ /PAC/ , /Guake/ , /WhatsApp/ ,/Mozilla Thunderbird/], + 'Admin Work' : [ /roojs.com\/admin/, /RooJSolutions Management Portal/ ] + + + }, + + match_project : function(line) { + for(var proj in this.regexes) { + for(var r in this.regexes[proj]) { + if (line.match(this.regexes[proj][r])) { + //print("Match " + proj + " on " + r + ret.line + ) + return proj; + + } + } + + } + return "Unknown"; + }, + + '/usr/bin/perl' : function(ret) { if (ret.title.match(/^PAC/)) { ret.project = 'Unknown'; @@ -197,7 +265,8 @@ if (typeof(Seed.argv[2]) == 'undefined') { } var res = GitLogParser.parse( Seed.argv[2][0] == '/' ? Seed.argv[2] : xDate.Date.parseDate(Seed.argv[2], 'Y-m-d')); -var totals = { work : 0 , idle: 0, shortidle : 0} +var totals = { work : 0 , idle: 0, shortidle : 0}; +var unknown = []; for (var h in res) { for (var p in res[h]) { if (p == 'LONGIDLE') { @@ -220,42 +289,68 @@ for (var h in res) { //print(h + ' ' + Math.floor(res[h][p].total/60000) +'m ' + p ); totals.work += Math.floor(res[h][p].total/60000) ; - for (var k in res[h][p].items) { - - //print( ' ' + Math.floor(res[h][p].items[k].span/60000) +'m ' + res[h][p].items[k].line ); - - } + + if (h == -1) { + + print( "\n" + p + ':' + Math.floor(res[h][p].total/60000) + 'm'); + + if (p != 'Unknown') { + for (var k in res[h][p].items) { + + print( ' ' + Math.floor(res[h][p].items[k]/60000) +'m ' + k ); + + } + } else { + + for (var k in res[h][p].items) { + unknown.push({ desc : k , tot : (res[h][p].items[k]/60000).toFixed(2)*1 }) ; + + + } + } + } } } + + +print("\nLONGIDLE : " +(totals.idle/60).toFixed(2) +"h" ); +print("\nShort Idle : " +(totals.shortidle/60).toFixed(2) +"h" ); + +print("Worked: " + (totals.work/60).toFixed(2) +"h\n" ); + +var totals = {}; + for (var h in GitLogParser.shours) { var hsum = []; var htot = 0; for (var desc in GitLogParser.shours[h]) { htot += (GitLogParser.shours[h][desc]/60000).toFixed(2)*1; hsum.push({ desc : desc, tot : (GitLogParser.shours[h][desc]/60000).toFixed(2)*1 }) + totals[desc] = (typeof(totals[desc]) == 'undefined' ? 0 : totals[desc]) + ((GitLogParser.shours[h][desc]/60000).toFixed(2)*1); } hsum.sort(function(a,b) { if (a.tot == b.tot) { return 0; } return a.tot < b.tot ? 1 : -1 }); - print(h+': Total (' + htot +')'); + print("\n\n" + h+': Total (' + htot +')'); hsum.forEach(function(r) { - print (" " + r.tot + " : " + r.desc); + var pr = r.desc.match(/IDLE/) ? '' : (GitLogParser.match_project(r.desc) == "Unknown" ? '??? - ' : ''); + + print (" " + r.tot + " : " + pr + r.desc); }); } - - + + +unknown.sort(function(a,b) { if (a.tot == b.tot) { return 0; } return a.tot < b.tot ? 1 : -1 }); +print("\n\nUnclassified"); +unknown.forEach(function(r) { + print (" " + (r.tot.toFixed(2)*1) + " : " + r.desc); +}); //print(JSON.stringify(GitLogParser.shours,null,4)); -print("\nLONGIDLE : " +(totals.idle/60).toFixed(2) +"h" ); -print("\nShort Idle : " +(totals.shortidle/60).toFixed(2) +"h" ); - -print("Worked: " + (totals.work/60).toFixed(2) +"h\n" ); - - // open file.. // read lines