Santhosh has uploaded a new change for review.

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

Change subject: Provide version number in REST apis
......................................................................

Provide version number in REST apis

Bug: T87712
Change-Id: I69c1655ab79451898cc901a6bb32e2f7bd9f6263
---
M ContentTranslationService.js
M public/translation/js/main.js
A routes/v1.js
3 files changed, 178 insertions(+), 170 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/services/cxserver 
refs/changes/64/188764/1

diff --git a/ContentTranslationService.js b/ContentTranslationService.js
index 54aa42e..e61a4e7 100644
--- a/ContentTranslationService.js
+++ b/ContentTranslationService.js
@@ -23,8 +23,8 @@
        logger = require( __dirname + '/utils/Logger.js' ),
        privateKey,
        certificate,
-       credentials,
-       pkg = require( __dirname + '/package.json' );
+       credentials;
+
 
 app = express();
 // Starts https server only if all needed args provided, else starts http 
server.
@@ -43,182 +43,19 @@
 }
 
 instanceName = 'worker(' + process.pid + ')';
+
 app.use( function ( req, res, next ) {
        res.header( 'Access-Control-Allow-Origin', conf( 'allowCORS' ) );
        res.header( 'Access-Control-Allow-Headers', 'X-Requested-With' );
        next();
 } );
 
-app.get( '/page/:language/:title', function ( req, res ) {
-       var sourceLanguage = req.params.language,
-               title = req.params.title,
-               CXSegmenter = require( __dirname + 
'/segmentation/CXSegmenter.js' ).CXSegmenter,
-               PageLoader = require( __dirname + '/pageloader/PageLoader.js' 
).PageLoader,
-               pageloader = new PageLoader( title, sourceLanguage );
+app.use( '/v1',  require('./routes/v1' ) );
+app.use( '/',  require('./routes/v1' ) );
 
-       logger.profile( 'Fetch page' );
-       pageloader.load().then(
-               function ( response ) {
-                       var segmenter, segmentedContent;
-                       try {
-                               logger.profile( 'Fetch page', { title: title, 
sourceLanguage: sourceLanguage } );
-                               logger.profile( 'Segment page' );
-                               segmenter = new CXSegmenter( response.body, 
sourceLanguage );
-                               segmenter.segment();
-                               segmentedContent = 
segmenter.getSegmentedContent();
-                               logger.profile( 'Segment page', { title: title, 
sourceLanguage: sourceLanguage } );
-                       } catch ( error ) {
-                               res.send( 500, {
-                                       error: '' + error
-                               } );
-                               logger.log( 'error', 'Page %s:%s could not be 
fetched or segmented: (%s)',
-                                       sourceLanguage, title, error.toString() 
);
-                       }
-                       res.send( {
-                               sourceLanguage: sourceLanguage,
-                               title: title,
-                               revision: response.revision,
-                               segmentedContent: segmentedContent
-                       } );
-                       logger.debug( 'Page sent' );
-               },
-               function ( error ) {
-                       res.send( 404, {
-                               error: '' + error
-                       } );
-                       logger.info( 'Page not found: %s:%s', sourceLanguage, 
title );
-               }
-       );
-} );
-
-app.get( '/mt/:from/:to/:provider?', function ( req, res ) {
-       res.send( 405, { error: 'Request must be posted' } );
-} );
-
-app.post( '/mt/:from/:to/:provider?', function ( req, res ) {
-       var mtClients, mtClient,
-               sourceHtmlChunks, sourceHtml, reqLength,
-               registry = require( __dirname + '/registry' ),
-               from = req.params.from,
-               to = req.params.to,
-               provider = registry.getValidProvider( from, to, 'mt', 
req.params.provider );
-
-       if ( !provider ) {
-               res.send( 404, { error: 'Provider not supported' } );
-               logger.info( 'MT provider invalid or missing' );
-
-               return;
-       }
-
-       mtClients = require( __dirname + '/mt/' );
-       if ( mtClients[ provider ] === undefined ) {
-               res.send( 500, { error: 'Provider not found' } );
-               logger.error( 'Configured provider ' + provider + ' was not 
found' );
-               return;
-       }
-
-       mtClient = new mtClients[ provider ]();
-
-       sourceHtmlChunks = [ '<div>' ];
-       reqLength = 0;
-
-       req.on( 'data', function ( data ) {
-               reqLength += data.length;
-               if ( reqLength > 50000 ) {
-                       // Too long
-                       res.send( 413, { error: 'Content too long' } );
-                       logger.error( 'MT content too long' );
-                       return;
-               }
-               sourceHtmlChunks.push( data );
-       } );
-       req.on( 'end', function () {
-               sourceHtmlChunks.push( '</div>' );
-               sourceHtml = sourceHtmlChunks.join( '' );
-
-               logger.profile( 'MT' );
-               mtClient.translate( from, to, sourceHtml ).then(
-                       function ( data ) {
-                               // Prevent XSS by sending json with
-                               // dangerous characters converted to
-                               // unicode sequences
-                               var json = JSON.stringify( { contents: data } );
-                               json = json
-                                       .replace( /&/g, '\\u0026' )
-                                       .replace( /</g, '\\u003C' )
-                                       .replace( />/g, '\\u003E' );
-                               res.type( 'application/json' );
-                               res.send( json );
-                               logger.profile( 'MT', { from: from, to: to } );
-                       },
-                       function ( error ) {
-                               res.send( 500, { error: error } );
-                               logger.log( 'error', 'MT processing error: 
(%s)', error.toString() );
-                       }
-               );
-       } );
-} );
-
-app.get( '/dictionary/:word/:from/:to/:provider?', function ( req, res ) {
-       var dictClients, dictClient,
-               registry = require( __dirname + '/registry' ),
-               word = req.params.word,
-               from = req.params.from,
-               to = req.params.to,
-               provider = registry.getValidProvider( from, to, 'dictionary', 
req.params.provider );
-
-       if ( !provider ) {
-               res.send( 404 );
-               logger.info( 'Dictionary provider invalid or missing' );
-
-               return;
-       }
-
-       dictClients = require( __dirname + '/dictionary/' );
-       dictClient = dictClients[ provider ];
-
-       logger.profile( 'Dictionary lookup' );
-       dictClient.getTranslations( word, from, to ).then(
-               function ( data ) {
-                       res.send( data );
-                       logger.profile( 'Dictionary lookup', { word: word, 
from: from, to: to } );
-               },
-               function ( error ) {
-                       res.send( 500, {
-                               error: error
-                       } );
-                       logger.log( 'error', 'Dictionary lookup error: (%s)', 
error.toString() );
-               }
-       );
-} );
-
-app.get( '/list/:tool/:from/:to', function ( req, res ) {
-       var tool = req.params.tool,
-               from = req.params.from,
-               to = req.params.to,
-               registry = require( __dirname + '/registry' ),
-               toolset = registry.getToolSet( from, to );
-
-       res.json( toolset[ tool ] || {} );
-       logger.debug( 'Tool data sent' );
-} );
-
-app.get( '/languagepairs', function ( req, res ) {
-       var registry = require( __dirname + '/registry' );
-
-       res.json( registry.getLanguagePairs() );
-} );
-
-app.get( '/version', function ( req, res ) {
-       var version = {
-               name: pkg.name,
-               version: pkg.version
-       };
-       res.json( version );
-       logger.debug( 'Version info sent' );
-} );
 // Everything else goes through this.
 app.use( express.static( __dirname + '/public' ) );
+
 console.log( instanceName + ' ready. Listening on port: ' + conf( 'port' ) );
 server.listen( conf( 'port' ) );
 
diff --git a/public/translation/js/main.js b/public/translation/js/main.js
index ae296cb..e7d4914 100644
--- a/public/translation/js/main.js
+++ b/public/translation/js/main.js
@@ -3,7 +3,7 @@
        'use strict';
 
        function translate( sourceLanguage, targetLanguage, content ) {
-               var url = '/mt/' + sourceLanguage + '/' + targetLanguage;
+               var url = '/v1/mt/' + sourceLanguage + '/' + targetLanguage;
                return $.post( url, content );
        }
 
diff --git a/routes/v1.js b/routes/v1.js
new file mode 100644
index 0000000..f11a4d1
--- /dev/null
+++ b/routes/v1.js
@@ -0,0 +1,171 @@
+var express = require('express'),
+       logger = require( __dirname + '/../utils/Logger.js' ),
+       registry = require( __dirname + '/../registry' ),
+       pkg = require( __dirname + '/../package.json' ),
+       app =  express();
+
+app.get( '/page/:language/:title', function ( req, res ) {
+       var sourceLanguage = req.params.language,
+               title = req.params.title,
+               CXSegmenter = require( __dirname + 
'/../segmentation/CXSegmenter.js' ).CXSegmenter,
+               PageLoader = require( __dirname + 
'/../pageloader/PageLoader.js' ).PageLoader,
+               pageloader = new PageLoader( title, sourceLanguage );
+
+       logger.profile( 'Fetch page' );
+       pageloader.load().then(
+               function ( response ) {
+                       var segmenter, segmentedContent;
+                       try {
+                               logger.profile( 'Fetch page', { title: title, 
sourceLanguage: sourceLanguage } );
+                               logger.profile( 'Segment page' );
+                               segmenter = new CXSegmenter( response.body, 
sourceLanguage );
+                               segmenter.segment();
+                               segmentedContent = 
segmenter.getSegmentedContent();
+                               logger.profile( 'Segment page', { title: title, 
sourceLanguage: sourceLanguage } );
+                       } catch ( error ) {
+                               res.send( 500, {
+                                       error: '' + error
+                               } );
+                               logger.log( 'error', 'Page %s:%s could not be 
fetched or segmented: (%s)',
+                                       sourceLanguage, title, error.toString() 
);
+                       }
+                       res.send( {
+                               sourceLanguage: sourceLanguage,
+                               title: title,
+                               revision: response.revision,
+                               segmentedContent: segmentedContent
+                       } );
+                       logger.debug( 'Page sent' );
+               },
+               function ( error ) {
+                       res.send( 404, {
+                               error: '' + error
+                       } );
+                       logger.info( 'Page not found: %s:%s', sourceLanguage, 
title );
+               }
+       );
+} );
+
+app.get( '/mt/:from/:to/:provider?', function ( req, res ) {
+       res.send( 405, { error: 'Request must be posted' } );
+} );
+
+app.post( '/mt/:from/:to/:provider?', function ( req, res ) {
+       var mtClients, mtClient,
+               sourceHtmlChunks, sourceHtml, reqLength,
+               from = req.params.from,
+               to = req.params.to,
+               provider = registry.getValidProvider( from, to, 'mt', 
req.params.provider );
+
+       if ( !provider ) {
+               res.send( 404, { error: 'Provider not supported' } );
+               logger.info( 'MT provider invalid or missing' );
+
+               return;
+       }
+
+       mtClients = require( __dirname + '/../mt/' );
+       if ( mtClients[ provider ] === undefined ) {
+               res.send( 500, { error: 'Provider not found' } );
+               logger.error( 'Configured provider ' + provider + ' was not 
found' );
+               return;
+       }
+
+       mtClient = new mtClients[ provider ]();
+
+       sourceHtmlChunks = [ '<div>' ];
+       reqLength = 0;
+
+       req.on( 'data', function ( data ) {
+               reqLength += data.length;
+               if ( reqLength > 50000 ) {
+                       // Too long
+                       res.send( 413, { error: 'Content too long' } );
+                       logger.error( 'MT content too long' );
+                       return;
+               }
+               sourceHtmlChunks.push( data );
+       } );
+       req.on( 'end', function () {
+               sourceHtmlChunks.push( '</div>' );
+               sourceHtml = sourceHtmlChunks.join( '' );
+
+               logger.profile( 'MT' );
+               mtClient.translate( from, to, sourceHtml ).then(
+                       function ( data ) {
+                               // Prevent XSS by sending json with
+                               // dangerous characters converted to
+                               // unicode sequences
+                               var json = JSON.stringify( { contents: data } );
+                               json = json
+                                       .replace( /&/g, '\\u0026' )
+                                       .replace( /</g, '\\u003C' )
+                                       .replace( />/g, '\\u003E' );
+                               res.type( 'application/json' );
+                               res.send( json );
+                               logger.profile( 'MT', { from: from, to: to } );
+                       },
+                       function ( error ) {
+                               res.send( 500, { error: error } );
+                               logger.log( 'error', 'MT processing error: 
(%s)', error.toString() );
+                       }
+               );
+       } );
+} );
+
+app.get( '/dictionary/:word/:from/:to/:provider?', function ( req, res ) {
+       var dictClients, dictClient,
+               word = req.params.word,
+               from = req.params.from,
+               to = req.params.to,
+               provider = registry.getValidProvider( from, to, 'dictionary', 
req.params.provider );
+
+       if ( !provider ) {
+               res.send( 404 );
+               logger.info( 'Dictionary provider invalid or missing' );
+
+               return;
+       }
+
+       dictClients = require( __dirname + '/dictionary/' );
+       dictClient = dictClients[ provider ];
+
+       logger.profile( 'Dictionary lookup' );
+       dictClient.getTranslations( word, from, to ).then(
+               function ( data ) {
+                       res.send( data );
+                       logger.profile( 'Dictionary lookup', { word: word, 
from: from, to: to } );
+               },
+               function ( error ) {
+                       res.send( 500, {
+                               error: error
+                       } );
+                       logger.log( 'error', 'Dictionary lookup error: (%s)', 
error.toString() );
+               }
+       );
+} );
+
+app.get( '/list/:tool/:from/:to', function ( req, res ) {
+       var tool = req.params.tool,
+               from = req.params.from,
+               to = req.params.to,
+               toolset = registry.getToolSet( from, to );
+
+       res.json( toolset[ tool ] || {} );
+       logger.debug( 'Tool data sent' );
+} );
+
+app.get( '/languagepairs', function ( req, res ) {
+       res.json( registry.getLanguagePairs() );
+} );
+
+app.get( '/version', function ( req, res ) {
+       var version = {
+               name: pkg.name,
+               version: pkg.version
+       };
+       res.json( version );
+       logger.debug( 'Version info sent' );
+} );
+
+module.exports = app;
\ No newline at end of file

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I69c1655ab79451898cc901a6bb32e2f7bd9f6263
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/services/cxserver
Gerrit-Branch: master
Gerrit-Owner: Santhosh <[email protected]>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to