UNPKG

3.47 kBJavaScriptView Raw
1module.exports = function(options, callback) {
2
3 options = options || {};
4 var port = options.port;
5
6 var path = require('path'),
7 webServer = require('./webapp/routes.js'),
8 helpers = require('./helpers'),
9 jobs_manager = require('./job-manager'),
10 http = require('http'),
11 fs = require('fs'),
12 generalConfigManager = require('./config-manager')(),
13 loadGlobalAuth = require('./global-auth'),
14 packageDependencyManager = require('./package-dependency-manager');
15
16 var packagesLocalFolder = path.join(process.cwd(), "/packages");
17 var packagesAtlasboardFolder = path.join(__dirname, "../packages");
18
19 var configPath = path.join(process.cwd(), "/config");
20
21 //-----------------------------------
22 // Global config
23 //-----------------------------------
24 http.globalAgent.maxSockets = 100;
25
26 //-----------------------------------
27 // Runner
28 //-----------------------------------
29
30 var runner = function() {
31 //-----------------------------------
32 // Init web server
33 //-----------------------------------
34 var app = require('express')();
35 webServer(app, port, [packagesLocalFolder, packagesAtlasboardFolder], generalConfigManager);
36
37 var httpServer = http.createServer(app).listen(app.get('port'));
38 var assignedPort = app.get('port');
39 if (!assignedPort){
40 return callback('Error initializating web server on port ' + port +
41 '. Please check that the port is not in use and you have the ' +
42 'right permissions.');
43 }
44 console.log("\n AtlasBoard server started. Go to: http://localhost:" + assignedPort + " to access your dashboard \n");
45
46
47 //-----------------------------------
48 // Init socket.io server
49 //-----------------------------------
50 var io = require('socket.io').listen(httpServer, {
51 'log level': 2
52 });
53 var startTime = new Date().getTime();
54 io.on('connection', function (socket) {
55 socket.emit("serverinfo", {startTime: startTime});
56 });
57
58
59 //-----------------------------------
60 // Init jobs / scheduler
61 //-----------------------------------
62 var eventQueue = require(path.join(__dirname, "event-queue"))(io);
63 var scheduler = require(path.join(__dirname, "scheduler")).scheduler;
64
65 // Needed for hot scheduling job of newly added widgets.
66 scheduler.eventQueue = eventQueue;
67 scheduler.io = io;
68
69 var generalLogger = require('./logger')();
70
71
72 var jobOptions = {
73 packagesPath : [packagesLocalFolder, packagesAtlasboardFolder],
74 configPath: configPath,
75 filters: options.filters
76 };
77
78 jobs_manager.get_jobs(jobOptions, function(err, jobWorkers){
79 if (err) return callback(err);
80
81
82 if (!jobWorkers.length){
83 generalLogger.warn("No jobs found matching the current configuration and filters");
84 }
85 else {
86 jobWorkers.forEach(function (jobWorker){
87 scheduler.scheduleFirst(jobWorker,true);
88 });
89 }
90
91 return callback();
92 });
93 };
94
95
96 if(options.install) {
97 packageDependencyManager.installDependencies([packagesLocalFolder], function(err){
98 if (err) return callback(err);
99 runner();
100 });
101 } else {
102 runner();
103 }
104
105};
106