[Unicode]   Common Locale Data Repository : Bug Tracking Home | Site Map | Search
 

Changeset 11634


Ignore:
Timestamp:
05/15/15 15:20:35 (4 years ago)
Author:
srloomis
Message:

cldrbug 8515: checkpoint checkin of stwatcher (mirror in git)

Location:
trunk/tools/cldr-apps-watcher
Files:
2 added
1 deleted
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/tools/cldr-apps-watcher

    • Property svn:ignore
      •  

        old new  
        22node_modules 
        33loopy.sh 
         4.git 
  • trunk/tools/cldr-apps-watcher/app.js

    r10291 r11634  
    33 * Module dependencies. 
    44 */ 
     5 
     6var appEnv = require('cfenv').getAppEnv(); 
    57 
    68var express = require('express') 
     
    911  , http = require('http') 
    1012  , path = require('path') 
    11 , CONFIG = require('config').SurveyWatcher, 
    12     favicon = require('serve-favicon'), 
    13     serveStatic = require('serve-static'), 
    14     morgan  = require('morgan'), 
    15     bodyParser = require('body-parser'); 
     13favicon = require('serve-favicon'), 
     14serveStatic = require('serve-static'), 
     15morgan = require('morgan'), 
     16bodyParser = require('body-parser'); 
    1617 
    1718var app = express(); 
    1819 
    1920// all environments 
    20 app.set('port', CONFIG.port || process.env.PORT || 3000); 
     21app.set('port', appEnv.port); 
    2122app.set('views', __dirname + '/views'); 
    2223app.set('view engine', 'jade'); 
    2324app.enable('trust proxy'); 
    2425app.use(favicon(__dirname + '/public/favicon.ico')); 
    25 app.use(morgan({format: 'dev', immediate: true})); 
     26app.use(morgan({ format: 'dev', immediate: true })); 
    2627app.use(bodyParser()); 
    2728app.use(require('method-override')()); 
     
    3637// development only 
    3738if ('development' == app.get('env')) { 
    38     app.use(require('errorhandler')()); 
     39  app.use(require('errorhandler')()); 
    3940} 
    4041 
    4142var port = app.get('port'); 
    4243console.log('Express server listening on port ' + port); 
    43 app.listen(app.get('port')); 
     44app.listen(appEnv.port, appEnv.bind); 
  • trunk/tools/cldr-apps-watcher/package.json

    r10291 r11634  
    77  }, 
    88  "dependencies": { 
    9       "express": "4.2.x", 
    10       "jade": "*", 
    11       "request": "2.34.x", 
    12       "ping": "*", 
    13       "config": "0.4.x", 
    14       "orm": "2.1.x", 
    15       "mysql": "2.2.xx", 
    16       "twilio": ">=1.6.0", 
    17       "nodemailer": "*", 
    18       "serve-favicon": "*", 
    19       "serve-static":"*", 
    20       "morgan":"*", 
    21       "body-parser":"*", 
    22       "method-override":"*", 
    23       "errorhandler":"*" 
     9    "body-parser": "^1.12.3", 
     10    "cfenv": "^1.0.0", 
     11    "cloudant": "^1.0.0-beta3", 
     12    "errorhandler": "^1.3.5", 
     13    "express": "^4.2.0", 
     14    "gaas": "^1.0.1", 
     15    "jade": "^1.9.2", 
     16    "method-override": "^2.3.2", 
     17    "morgan": "^1.5.2", 
     18    "nodemailer": "^1.3.4", 
     19    "ping": "^0.1.9", 
     20    "request": "^2.34.0", 
     21    "serve-favicon": "^2.2.0", 
     22    "serve-static": "^1.9.2", 
     23    "twilio": "^2.2.0" 
    2424  } 
    2525} 
  • trunk/tools/cldr-apps-watcher/routes/index.js

    r8796 r11634  
    44 */ 
    55 
    6 var CONFIG = require("config").SurveyWatcher; 
     6//var CONFIG = require("config").SurveyWatcher; 
     7var CONFIG = { 
     8  ui: "(ui)", 
     9  watcher: "(watcher)" 
     10}; 
    711 
    812exports.index = function(req, res){ 
  • trunk/tools/cldr-apps-watcher/routes/stwatcher.js

    r10291 r11634  
    88var    url = require("url"); 
    99var    request = require("request"); 
    10 var    orm = require("orm"); 
    11 var    CONFIG = require("config").SurveyWatcher; 
    12 var VERBOSE = CONFIG.watcher.verbose || false; 
     10var Cloudant = require('cloudant'); 
     11var gaas = require('gaas'); 
     12var VERBOSE = process.env.STWATCHER_VERBOSE || false; 
    1313// local data 
    1414var hosts = {}; 
     
    1616var servers = {}; 
    1717var hostname = os.hostname(); 
     18var appEnv = require('cfenv').getAppEnv(); 
     19var cloudantCred = appEnv.getServiceCreds(/.*[Cc]loudant.*/); 
     20if(cloudantCred == {}) throw "mising cloudant creds"; 
     21var appsToWatch = appEnv.getServices(); 
    1822 
    1923console.log("Setup stwatcher.. verbose="+VERBOSE); 
    2024 
    21 for ( var k in CONFIG.servers ) { 
    22     if(CONFIG.servers[k].skip) { 
     25var matchInstances = /SurveyTool.*/; 
     26 
     27for ( var k in appsToWatch ) { 
     28    if( ! matchInstances.test(k)) { 
    2329        continue; 
    2430    } 
    25     if(CONFIG.servers[k].url.substr(CONFIG.servers[k].url.length-1)!='/') { 
    26         CONFIG.servers[k].url = CONFIG.servers[k].url + '/'; // always end with / 
    27     } 
    28     var theurl  = url.parse(CONFIG.servers[k].url); 
    29     console.log("Considering " + k + " URL " + CONFIG.servers[k].url); 
    30     if(!hosts[theurl.hostname]) { 
    31         hosts[theurl.hostname] = { stealth: false, servers: {} }; 
    32     } 
    33     servers[k] = { host: theurl.hostname }; 
    34     hosts[theurl.hostname].servers[k] = { url: CONFIG.servers[k].url }; // only URL. no other leak. 
    35     if(CONFIG.servers[k].stealth) { 
    36         hosts[theurl.hostname].stealth = true; 
     31    var serviceInstance = appsToWatch[k]; 
     32    if (!serviceInstance.credentials.url) throw "Service " + k + " didn't have credentials.url"; 
     33    if (!serviceInstance.credentials.hostname) throw "Service " + k + " didn't have credentials.hostname"; 
     34 
     35    var theUrl  = serviceInstance.credentials.url; 
     36    console.log("Considering " + k + " URL " + theUrl); 
     37    if(!hosts[serviceInstance.credentials.hostname]) { 
     38        hosts[serviceInstance.credentials.hostname] = { stealth: false, servers: {} }; 
     39    } 
     40    servers[k] = { host: serviceInstance.credentials.hostname }; 
     41    hosts[serviceInstance.credentials.hostname].servers[k] = { url: theUrl }; // only URL. no other leak. 
     42     
     43    if(serviceInstance.credentials.stealth) { 
     44        hosts[serviceInstance.credentials.hostname].stealth = true; 
    3745    } 
    3846} 
    3947 
    4048function st_notify(opts) { 
    41     if(VERBOSE) console.log("Event: " + JSON.stringify(opts)); 
    42  
     49    if(VERBOSE || true) console.log("Event: " + JSON.stringify(opts)); 
     50    return; // ------------------------------------------------------------------------ 
     51     
    4352    var notifyList = null; 
    4453 
     
    195204 
    196205 
    197 if(!CONFIG.watcher.dbpath) { 
    198     throw("No config/SurveyWatcher.watcher.dbpath - needs to be of the form mysql://username:password@host/database"); 
    199 } 
    200  
    201206exports.latest = function(req,res) { 
    202207    exports._latest(req,res); 
     
    216221} 
    217222 
    218 orm.connect(CONFIG.watcher.dbpath, function (orm_err, db) { 
    219     if(orm_err) { 
    220         console.log("Error with database: " + orm_err.toString()); 
    221         throw orm_err; 
    222     } 
    223  
    224     // setup DB stuff 
    225     var HostStatus = db.define("hoststatus", { 
    226         host      : String, 
    227         when      : Date, 
    228         alive     : Boolean, 
    229         ns        : Number 
    230     }, { 
    231         methods: { 
    232         }, 
    233         validations: { 
    234         } 
    235     }); 
    236  
    237     var FetchStatus = db.define("fetchstatus", { 
    238         server    : String, 
    239         when      : Date, 
    240         ns        : Number, 
    241         probation : Boolean, 
    242         isSetup   : Boolean, 
    243         isBusted  : Boolean, 
    244         users     : Number, 
    245         guests    : Number, 
    246         pages     : Number, 
    247         dbused    : Number, 
    248         mem       : String, 
    249         load      : String, 
    250         info      : String, 
    251         busted    : String, 
    252         uptime    : String, 
    253         stamp     : Date, // boot time, relatively 
    254         statusCode : Number  
    255     }, { 
    256         methods: { 
    257         }, 
    258         validations: { 
    259         } 
    260     }); 
    261      
    262     db.sync(function (err) { 
    263         !err && console.log("db synced!"); 
    264      
    265      
    266     function postHostStatus(anUpdate) { 
     223// patch this 
     224if ( ! cloudantCred.account ) { 
     225    cloudantCred.account = cloudantCred.username; 
     226} 
     227 
     228    var db; 
     229     
     230Cloudant(cloudantCred, function(err, cloudant) { 
     231    if(err) { 
     232        console.log("Error with database: " + err.toString()); 
     233        throw err; 
     234    } 
     235 
     236    cloudant.db.create('st-watcher', function() { 
     237    db = cloudant.db.use('st-watcher', true); 
     238     
     239     
     240    function postHostStatus(anUpdate, cb) { 
    267241        hosts[anUpdate.host].latestPing = anUpdate; 
    268         HostStatus.create( [anUpdate],  
    269                            function (err, items) { 
    270                                if(err) throw(err); 
    271                            }); 
     242        db.insert(anUpdate, function(err, body, header){ 
     243            if(!err) { 
     244                //cb(null); 
     245                //reply({ok: true, _rev: body.rev, _id: body.id}); 
     246            } else { 
     247                server.log('error', err); 
     248                //reply({err: true}); 
     249                //cb(err); 
     250            } 
     251        }); 
    272252    } 
    273253  
     
    307287            } 
    308288        } 
    309         FetchStatus.create( [anUpdate],  
    310             function (err, items) { 
     289        db.insert(anUpdate, function(err,body,header) { 
    311290                if(err) throw(err); 
    312                 newStatus.id = items[0].id; 
     291                //newStatus.id = items[0].id; TODO: get _rev 
    313292                servers[anUpdate.server].lastKnownStatus = newStatus; 
    314             }); 
    315     } 
     293        }); 
     294    } 
     295 
    316296     
    317297 
     
    351331            var server = hosts[k].servers[j]; 
    352332 
    353             var theurl  = url.parse(server.url); 
     333            var theurl  = url.parse(server.url+'/'); 
    354334            var statusurl = url.format(url.resolve(theurl, 'SurveyAjax?what=status')); 
    355335 
     
    419399        } 
    420400    } 
    421     db.sync(function (err) { 
    422         if(err) throw(err); 
    423         //!err && console.log("db synced on update!"); 
    424     }); 
     401 
    425402    return latestUpdate; 
    426403}; 
    427404 
    428     exports._pollsec =  (CONFIG.watcher.polltime || 3600); 
    429     exports._probsec =  (CONFIG.watcher.probation_time || 500); 
     405    exports._pollsec =  (3600); 
     406    exports._probsec =  (500); 
    430407     
    431408    exports._interval = setInterval(exports.poll,exports._pollsec*1000); 
    432409     
    433410    // get the last time for each server 
    434     for(var k in servers) { 
    435         (function(k){return function(){FetchStatus.find({server: k}, 1, ["when","Z"], function(err, stat) { 
    436             if(err) throw (err); 
    437              
    438             if(stat && stat.length >0) { 
    439                 var res = stat[0]; 
    440                 var up = (res.isBusted==false && res.statusCode == 200); 
    441                 servers[k].lastKnownStatus={ when: res.when, up: up, 
    442                                              probation: res.probation, 
    443                                              id: res.id }; 
    444                 if(VERBOSE) console.log("SERVER " + k + " : up="+up); 
    445             } else { 
    446                 if(VERBOSE) console.log("Not found: " + k); 
    447             } 
    448         });};})(k)(); 
    449     } 
    450  
    451     console.log("Polling every " + CONFIG.watcher.polltime + "s"); 
     411    //TODOTODO 
     412//    for(var k in servers) { 
     413//        (function(k){return function(){FetchStatus.find({server: k}, 1, ["when","Z"], function(err, stat) { 
     414//            if(err) throw (err); 
     415//             
     416//            if(stat && stat.length >0) { 
     417//                var res = stat[0]; 
     418//                var up = (res.isBusted==false && res.statusCode == 200); 
     419//                servers[k].lastKnownStatus={ when: res.when, up: up, 
     420//                                             probation: res.probation, 
     421//                                             id: res.id }; 
     422//                if(VERBOSE) console.log("SERVER " + k + " : up="+up); 
     423//            } else { 
     424//                if(VERBOSE) console.log("Not found: " + k); 
     425//            } 
     426//        });};})(k)(); 
     427//    } 
     428 
     429    //console.log("Polling every " + CONFIG.watcher.polltime + "s"); 
    452430    exports.poll(); // first time 
    453431 
     
    470448        //limit = Integer.parse(req.query.limit); 
    471449        //} 
    472  
    473         FetchStatus.find({server: server}, limit, ["when","Z"], function(err, stat) { 
    474             if(err) throw (err); 
    475              
    476             if(stat && stat.length >0) { 
    477                 res.send({ now: new Date().getTime(), server: server, data: stat }); 
    478             } else { 
    479                 res.send({ now: new Date().getTime(), server: server, err: 'not found' }); 
    480             } 
    481         }); 
     450     
     451       // TODO: IMP 
     452       if(false) { 
     453//            FetchStatus.find({server: server}, limit, ["when","Z"], function(err, stat) { 
     454//                if(err) throw (err); 
     455//                 
     456//                if(stat && stat.length >0) { 
     457//                    res.send({ now: new Date().getTime(), server: server, data: stat }); 
     458//                } else { 
     459//                    res.send({ now: new Date().getTime(), server: server, err: 'not found' }); 
     460//                } 
     461//            }); 
     462       } 
    482463    }; 
    483464 
    484465}); 
    485466 
    486 // set up DB versions 
    487  
    488 }); // orm.connect 
    489  
    490  
    491  
     467}); 
  • trunk/tools/cldr-apps-watcher/views/index.jade

    r10291 r11634  
    33 
    44block content 
    5   h1= ui.title 
    6   p Welcome to #{ui.title} 
     5  h1= SurveyWatcher 
     6  p Note - Charts are currently not working. Pardon the dust as we move to the new host. 
     7  p Welcome to the SurveyWatcher 
    78  hr 
    89  div(id='statusdiv') 
     
    2021  p chart does not reload unless you click the history button again. 
    2122  hr 
    22   i(id='powered') Powered by node.js #{process.version}, Express.js 
     23  p Note - Charts are currently not working. Pardon the dust as we move to the new host. 
     24  hr 
     25  i(id='powered') Powered by node.js #{process.version}, Express.js.  Running on  
     26    a(href='http://bluemix.net') IBM Bluemix 
    2327  i  * 
    2428  i 
Note: See TracChangeset for help on using the changeset viewer.