jenkins-bot has submitted this change and it was merged.

Change subject: Config: Flatten the config file, remove usage of args
......................................................................


Config: Flatten the config file, remove usage of args

All cxserver configuration in config.js / config.defaults.js .

Change-Id: I1343b797f49f80588721013595e9748cd2de91b3
---
M ContentTranslationService.js
M README.md
A config.defaults.js
D config.example.js
M mt/Apertium.js
M pageloader/PageLoader.js
A utils/Conf.js
M utils/Logger.js
8 files changed, 80 insertions(+), 63 deletions(-)

Approvals:
  Santhosh: Looks good to me, approved
  jenkins-bot: Verified



diff --git a/ContentTranslationService.js b/ContentTranslationService.js
index a7e97bb..41163d8 100644
--- a/ContentTranslationService.js
+++ b/ContentTranslationService.js
@@ -19,27 +19,18 @@
        fs = require( 'fs' ),
        express = require( 'express' ),
        app = express(),
+       conf = require( __dirname + '/utils/Conf.js' ),
        logger = require( __dirname + '/utils/Logger.js' ),
-       args = require( 'minimist' )( process.argv.slice( 2 ) ),
-       port = args.port,
        privateKey,
        certificate,
        credentials,
        pkg = require( __dirname + '/package.json' );
 
-if ( !port ) {
-       try {
-               port = require( __dirname + '/config.js' ).port;
-       } catch ( e ) {
-               port = 8080;
-       }
-}
-
 app = express();
 // Starts https server only if all needed args provided, else starts http 
server.
-if ( args.secure && args.key && args.cert ) {
-       privateKey = fs.readFileSync( args.key, 'utf8' );
-       certificate = fs.readFileSync( args.cert, 'utf8' );
+if ( conf( 'secure' ) && conf( 'sslkey' ) && conf( 'cert' ) ) {
+       privateKey = fs.readFileSync( conf( 'sslkey' ), 'utf8' );
+       certificate = fs.readFileSync( conf( 'cert' ), 'utf8' );
        credentials = {
                key: privateKey,
                cert: certificate
@@ -177,7 +168,7 @@
 } );
 // Everything else goes through this.
 app.use( express.static( __dirname + '/public' ) );
-console.log( instanceName + ' ready. Listening on port: ' + port );
-server.listen( port );
+console.log( instanceName + ' ready. Listening on port: ' + conf( 'port' ) );
+server.listen( conf( 'port' ) );
 
 module.exports = app;
diff --git a/README.md b/README.md
index 6991865..7c4a378 100644
--- a/README.md
+++ b/README.md
@@ -72,8 +72,8 @@
 
 Configuration
 -------------
-An example configuration file is given as config.example.js. Rename that file
-to config.js and make your changes. Then restart the server.
+An default configuration file is given as config.defaults.js. Local changes
+in config.js will override the defaults. Restart server to read changes.
 
 Debugging
 ---------
diff --git a/config.defaults.js b/config.defaults.js
new file mode 100644
index 0000000..ce5a8ef
--- /dev/null
+++ b/config.defaults.js
@@ -0,0 +1,18 @@
+'use strict';
+
+module.exports = {
+       // CX Server port
+       port: 8080,
+       // Log directory
+       logDir: 'log',
+       // Parsoid API URL
+       'parsoid.api': 'http://parsoid-lb.eqiad.wikimedia.org',
+       // Apertium web API URL
+       'mt.apertium.api': 'http://apertium.wmflabs.org',
+       // Use SSL?
+       secure: false,
+       // SSL key filename
+       sslkey: null,
+       // SSL cert filename
+       cert: null
+};
diff --git a/config.example.js b/config.example.js
deleted file mode 100644
index 4c25ec2..0000000
--- a/config.example.js
+++ /dev/null
@@ -1,10 +0,0 @@
-'use strict';
-
-module.exports = {
-       port: 8080,
-       logDir: 'log',
-       parsoid: {
-               api: 'http://parsoid-lb.eqiad.wikimedia.org'
-       },
-       'mt.apertium.api': 'http://apertium.wmflabs.org'
-};
diff --git a/mt/Apertium.js b/mt/Apertium.js
index b2479e1..1a0d117 100644
--- a/mt/Apertium.js
+++ b/mt/Apertium.js
@@ -1,7 +1,7 @@
-var config,
+var apertiumLangMapping,
        Q = require( 'q' ),
-       apertiumLangMapping,
        request = require( 'request' ),
+       conf = require( __dirname + '/../utils/Conf.js' ),
        LinearDoc = require( '../lineardoc/LinearDoc' ),
        Entities = require( 'html-entities' ).AllHtmlEntities,
        logger = require( '../utils/Logger.js' ),
@@ -9,14 +9,6 @@
        // TODO: Tokenize properly. These work for English/Spanish/Catalan
        TOKENS = 
/[\wáàçéèíïóòúüñÁÀÇÉÈÍÏÓÒÚÜÑ]+(?:[·'][\wáàçéèíïóòúüñÁÀÇÉÈÍÏÓÒÚÜÑ]+)?|[^\wáàçéèíïóòúüñÁÀÇÉÈÍÏÓÒÚÜÑ]+/g,
        IS_WORD = 
/^[\wáàçéèíïóòúüñÁÀÇÉÈÍÏÓÒÚÜÑ]+(?:[·'][\wáàçéèíïóòúüñÁÀÇÉÈÍÏÓÒÚÜÑ]+)?$/;
-
-try {
-       config = require( __dirname + '/../config.js' );
-} catch ( e ) {
-       config = {
-               'mt.apertium.api': 'http://apertium.wmflabs.org'
-       };
-}
 
 apertiumLangMapping = {
        es: 'spa',
@@ -149,7 +141,7 @@
                postData;
 
        postData = {
-               url: config['mt.apertium.api'] + '/translate',
+               url: conf( 'mt.apertium.api' ) + '/translate',
                form: {
                        markUnknown: 0,
                        langpair: apertiumLangMapping[ sourceLang ] + '|' + 
apertiumLangMapping[ targetLang ],
diff --git a/pageloader/PageLoader.js b/pageloader/PageLoader.js
index 1118a14..e23994d 100644
--- a/pageloader/PageLoader.js
+++ b/pageloader/PageLoader.js
@@ -8,19 +8,9 @@
 
 'use strict';
 
-var config,
-       request = require( 'request' ),
-       Q = require( 'q' );
-
-try {
-       config = require( __dirname + '/../config.js' );
-} catch ( e ) {
-       config = {
-               parsoid: {
-                       api: 'http://parsoid.wmflabs.org'
-               }
-       };
-}
+var request = require( 'request' ),
+       Q = require( 'q' ),
+       conf = require( __dirname + '/../utils/Conf.js' );
 
 /**
  * @class ParsoidPageLoader
@@ -38,7 +28,7 @@
        var deferred = Q.defer();
 
        request(
-               config.parsoid.api + '/' + this.sourceLanguage + 'wiki/' + 
this.page,
+               conf( 'parsoid.api' ) + '/' + this.sourceLanguage + 'wiki/' + 
this.page,
                function ( error, response, body ) {
                        if ( error ) {
                                deferred.reject( new Error( error ) );
diff --git a/utils/Conf.js b/utils/Conf.js
new file mode 100644
index 0000000..90f989e
--- /dev/null
+++ b/utils/Conf.js
@@ -0,0 +1,42 @@
+/**
+ * ContentTranslation server
+ *
+ * @file
+ * @copyright See AUTHORS.txt
+ * @license GPL-2.0+
+ */
+
+'use strict';
+
+var config, customConfig,
+       defaultConfig = require( __dirname + '/../config.defaults.js' );
+try {
+       customConfig = require( __dirname + '/../config.js' );
+} catch ( e ) {
+       customConfig = {};
+}
+
+function readConfig() {
+       var key,
+               config = {};
+       for ( key in defaultConfig ) {
+               if ( key in customConfig ) {
+                       config[ key ] = customConfig[ key ];
+               } else {
+                       config[ key ] = defaultConfig[ key ];
+               }
+       }
+       return config;
+}
+
+function get( key ) {
+       if ( !config ) {
+               config = readConfig();
+       }
+       if ( !( key in config ) ) {
+               throw new Error( 'Missing config key: "' + key + '"' );
+       }
+       return config[ key ];
+}
+
+module.exports = get;
diff --git a/utils/Logger.js b/utils/Logger.js
index db41e7b..b62be33 100644
--- a/utils/Logger.js
+++ b/utils/Logger.js
@@ -1,20 +1,14 @@
 var winston = require( 'winston' ),
        fs = require( 'fs' ),
-       logDir,
+       conf = require( __dirname + '/Conf.js' ),
        env = process.env.NODE_ENV || 'development',
        logger;
 
 winston.setLevels( winston.config.npm.levels );
 winston.addColors( winston.config.npm.colors );
 
-try {
-       logDir = require( __dirname + '/../config.js' ).logDir;
-} catch ( e ) {
-       logDir = 'log';
-}
-
-if ( !fs.existsSync( logDir ) ) {
-       fs.mkdirSync( logDir );
+if ( !fs.existsSync( conf( 'logDir' ) ) ) {
+       fs.mkdirSync( conf( 'logDir' ) );
 }
 
 logger = new( winston.Logger )( {
@@ -25,13 +19,13 @@
                } ),
                new winston.transports.File( {
                        level: env === 'development' ? 'debug' : 'info',
-                       filename: logDir + '/cx-logs.log',
+                       filename: conf( 'logDir' ) + '/cx-logs.log',
                        maxsize: 1024 * 1024 * 10 // 10MB
                } )
        ],
        exceptionHandlers: [
                new winston.transports.File( {
-                       filename: logDir + '/exceptions.log'
+                       filename: conf( 'logDir' ) + '/exceptions.log'
                } )
        ]
 } );

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

Gerrit-MessageType: merged
Gerrit-Change-Id: I1343b797f49f80588721013595e9748cd2de91b3
Gerrit-PatchSet: 3
Gerrit-Project: mediawiki/services/cxserver
Gerrit-Branch: master
Gerrit-Owner: Santhosh <[email protected]>
Gerrit-Reviewer: Divec <[email protected]>
Gerrit-Reviewer: Santhosh <[email protected]>
Gerrit-Reviewer: jenkins-bot <>

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

Reply via email to