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