├── package.json └── lemmaserver.js /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "lemmaserver", 3 | "version": "0.1.0", 4 | "author" : "Andris Reinman", 5 | "maintainers":[ 6 | { 7 | "name":"andris", 8 | "email":"andris@node.ee" 9 | } 10 | ], 11 | "main" : "./index", 12 | "dependencies": { 13 | "lemma": "*", 14 | "node-gearman":"*", 15 | "optimist": "*" 16 | } 17 | } -------------------------------------------------------------------------------- /lemmaserver.js: -------------------------------------------------------------------------------- 1 | var lemma = require("lemma"), 2 | Gearman = require("node-gearman"), 3 | pathlib = require("path"), 4 | argv = require('optimist').argv, 5 | fs = require("fs"); 6 | 7 | // display help message 8 | if(argv.h){ 9 | console.log("Usage: node lemmaserver.js --temp=[DIR] --morf=[DIR] --gm=[DOMAIN] --port=4730"); 10 | process.exit(); 11 | } 12 | 13 | // setup lemma paths 14 | lemma.config.morfdir = argv.morf || pathlib.join("C:","APP", "estmorf"); 15 | lemma.config.tempdir = argv.temp || "F:"; 16 | 17 | var gearmanHostname = argv.gm || "pangalink.net", 18 | gearmanPort = argv.port || 4730, 19 | gearmanClient = new Gearman(gearmanHostname, gearmanPort), 20 | initialConnectTimeout = 15, // seconds 21 | nextTimeout = initialConnectTimeout; 22 | 23 | process.on('uncaughtException', function (err) { 24 | try{ 25 | gearmanClient.close(); 26 | }catch(E){} 27 | }); 28 | 29 | var logfile; 30 | 31 | if(argv.log){ 32 | logfile = fs.createWriteStream(argv.log); 33 | } 34 | 35 | // add one or several workers 36 | var workerList = [["lemma", processLemma]]; 37 | 38 | // Connect to the server 39 | Log("Connecting to gearman"); 40 | gearmanClient.on("connect", function(){ 41 | nextTimeout = initialConnectTimeout; // reset timer 42 | Log("Connected to gearman server"); 43 | }); 44 | 45 | // Connection to the server is closed, reconnect 46 | gearmanClient.on("close", function(){ 47 | Log("Lost connection to gearman server, reconnecting in " + nextTimeout + "sec"); 48 | setTimeout(function(){ 49 | Log("Reconnecting..."); 50 | 51 | // try to reconnect 52 | gearmanClient.connect(); 53 | 54 | // workers are removed on connection close, readd 55 | registerWorkers(); 56 | 57 | nextTimeout *= 2; // if the connection still fails, wait 2x last interval 58 | }, nextTimeout * 1000); 59 | }); 60 | 61 | registerWorkers(); 62 | 63 | function registerWorkers(){ 64 | for(var i=0, len = workerList.length; i