Mwalker has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/147359

Change subject: Updates!
......................................................................

Updates!

Change-Id: Id774c28148a79377fe5878eaf32dc3594cbe2de9
---
A injectMetabooks.js
M mw-ocg-bundler
M mw-ocg-latexer
M mw-ocg-service
M mw-ocg-texter
5 files changed, 162 insertions(+), 0 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/services/ocg-collection 
refs/changes/59/147359/1

diff --git a/injectMetabooks.js b/injectMetabooks.js
new file mode 100644
index 0000000..f352d45
--- /dev/null
+++ b/injectMetabooks.js
@@ -0,0 +1,162 @@
+#!/usr/bin/env node
+"use strict";
+
+/**
+ * Script to inject metabook files into the OCG service. It will produce 
failure files
+ * if things fail to render or inject.
+ */
+
+require( 'es6-shim' );
+require( 'prfun' );
+var commander = require( 'commander' );
+var path = require( 'path' );
+var fs = require( 'fs' );
+var request = require( 'request' );
+var url = require( 'url' );
+
+commander
+       .version( '0.0.1' )
+       .option( '-f, --file <filepath>', 'Path to the test metabook file' )
+       .option( '-u, --apiurl <url>', 'URL to server, http://localhost:17080' )
+       .option( '-r, --renderer <renderer>', 'Renderer to exercise, rdf2latex')
+       .parse( process.argv );
+
+var inputFile = commander.file,
+       apiUrl = commander.apiurl || 'http://localhost:17080',
+       renderer = commander.renderer || 'rdf2latex';
+
+if ( !inputFile ) {
+       console.error( 'Need input file, use -f' )
+}
+
+var startedAt;
+
+var states = {
+       'failed_inject': [],
+       'failed': [],
+       'finished': []
+};
+
+var metabooks = [];
+var lineSplit;
+console.info( 'Reading in file' );
+fs.readFileSync( inputFile, { encoding: 'utf8' } ).split( '\n' ).forEach( 
function( line, idx ) {
+       lineSplit = line.match(/^([0-9]+\.[0-9]*) - (([0-9a-zA-Z]*) - )?(.+)$/);
+       if ( lineSplit ) {
+               metabooks.push( {
+                       line: idx,
+                       time: lineSplit[1],
+                       metabook: lineSplit[4],
+                       metabookId: null,
+                       status: null
+               } );
+       }
+} );
+console.info( 'Read in %s metabooks', metabooks.length );
+
+function submitMetabook( val, idx ) {
+       if ( idx % 1000 === 0 ) {
+               console.info( 'Starting render request %s', idx );
+       }
+       return new Promise( function( resolve, reject ) {
+               request(
+                       {
+                               url: apiUrl,
+                               method: 'POST',
+                               encoding: 'utf8',
+                               pool: false,
+                               form: { command: 'render', 'writer': renderer, 
metabook: val.metabook }
+                       },
+                       function(error, response, body) {
+                               if ( error || response.statusCode !== 200 ) {
+                                       val.status = 'failed_inject';
+                                       states.failed_inject.push( val );
+                                       console.error( 'Failed to submit line 
%s, error: %s, %s',
+                                               val.line, error, body );
+                               } else {
+                                       val.metabookId = JSON.parse( body 
).collection_id;
+                               }
+                               resolve();
+                       }
+               );
+       } );
+}
+function checkStatus( val, idx ) {
+       if ( idx % 1000 === 0 ) {
+               console.info( 'Checking render status %s', idx );
+       }
+       if ( !val.status ) {
+               // Check the status :)
+               return new Promise( function( resolve, reject ) {
+                       var rurl = apiUrl + 
'?command=render_status&collection_id=' + val.metabookId;
+                       request(
+                               {
+                                       url: rurl,
+                                       method: 'GET',
+                                       encoding: 'utf8',
+                                       pool: false
+                               },
+                               function(error, response, body) {
+                                       if ( response.statusCode === 200 ) {
+                                               var state = JSON.parse( body 
).state;
+                                               if ( state === 'failed' || 
state === 'finished' ) {
+                                                       val.status = state;
+                                                       states[state].push( val 
);
+                                               }
+                                       }
+                               }
+                       );
+               } );
+       }
+}
+var guardedSubmit = Promise.guard( 10, submitMetabook );
+var guardedCheck = Promise.guard( 10, checkStatus );
+
+function checkCompletion() {
+       console.info( "Beginning check run of %s results", metabooks.length );
+       Promise.map( metabooks, guardedCheck )
+               .then( writeResults )
+               .then( function( finished ) {
+                       if ( finished ) {
+                               console.info( "Started at %s, Done at %s", 
startedAt, Date.now() );
+                       } else {
+                               // Start another async loop...
+                               setTimeout( checkCompletion, 0 );
+                       }
+               } )
+               .done();
+}
+
+function writeResults() {
+       var numCompleted = states.failed_inject.length + states.failed.length + 
states.finished.length;
+       console.info( '%s%% of jobs complete (%s%% Failed submit, %s%% Failed, 
%s%% Success',
+               numCompleted / metabooks.length * 100,
+               states.failed_inject.length / metabooks.length * 100,
+               states.failed.length / metabooks.length * 100,
+               states.finished.length / metabooks.length * 100
+       );
+       console.info( 'writing fail files' );
+       var fi = fs.openSync( 'failed.txt', 'w' );
+       states.failed.forEach( function( val ) {
+               fs.writeSync( fi, val.time + ' - ' + val.metabookId + ' - ' + 
val.metabook + '\n' );
+       } );
+       fs.close( fi );
+
+       return numCompleted === metabooks.length;
+}
+
+console.info( 'Beginning torture session, submitting %s metabooks :D', 
metabooks.length );
+startedAt = Date.now();
+Promise.map( metabooks, guardedSubmit )
+       .then( function() {
+               console.info( 'Submit complete, writing failed inject file');
+               // Write failed_inject file
+               var fi = fs.openSync( 'failed_inject.txt', 'w' );
+               states.failed_inject.forEach( function( val ) {
+                       fs.writeSync( fi, val.time + ' - ' + ' - ' + 
val.metabook + '\n' );
+               } );
+               fs.close( fi );
+
+               checkCompletion();
+       } )
+       .done();
diff --git a/mw-ocg-bundler b/mw-ocg-bundler
index a132106..4d99bc6 160000
--- a/mw-ocg-bundler
+++ b/mw-ocg-bundler
-Subproject commit a132106fc2ed54768849d6830c175212b55c0d05
+Subproject commit 4d99bc68c090838326293a862c055a9c2be4505d
diff --git a/mw-ocg-latexer b/mw-ocg-latexer
index 42856bb..09f5590 160000
--- a/mw-ocg-latexer
+++ b/mw-ocg-latexer
-Subproject commit 42856bb9bff5212090db49ec2f3513ef0dbb8364
+Subproject commit 09f5590b198f08b74de227df1880895851ff9a31
diff --git a/mw-ocg-service b/mw-ocg-service
index 7c84475..8630feb 160000
--- a/mw-ocg-service
+++ b/mw-ocg-service
-Subproject commit 7c84475673dd91b25e24da6e74d7c070fc9a0da8
+Subproject commit 8630feb4f4c057a2f0cfb097829ab254e2ad8bfc
diff --git a/mw-ocg-texter b/mw-ocg-texter
index a6ab76c..2c3c38c 160000
--- a/mw-ocg-texter
+++ b/mw-ocg-texter
-Subproject commit a6ab76cc7c801ac6bb707eda068ca018aa4227a7
+Subproject commit 2c3c38c7052f407cc0ead1bb837c3edee2da8082

-- 
To view, visit https://gerrit.wikimedia.org/r/147359
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: Id774c28148a79377fe5878eaf32dc3594cbe2de9
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/services/ocg-collection
Gerrit-Branch: master
Gerrit-Owner: Mwalker <mwal...@wikimedia.org>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to