Page MenuHomeSealhub

No OneTemporary

diff --git a/lib/app.js b/lib/app.js
new file mode 100644
index 00000000..99022ffa
--- /dev/null
+++ b/lib/app.js
@@ -0,0 +1,91 @@
+var ModuleManager = require("./module/module-manager.js");
+var ConfigManager = require("./config/config-manager.js");
+
+function SealiousApp(path_to_package_json, mode, layer_name){
+
+ mode = mode || "local";
+ layer_name = layer_name || null;
+
+ this.module_manager = new ModuleManager();
+ this.config_manager = new ConfigManager();
+
+ if(mode=="local"){
+ this.dispatcher = require("../lib/dispatchers/local/dispatcher-local.js");
+ }else{
+ this.dispatcher = require("../lib/dispatchers/" + layer_name + "/dispatcher-" + layer_name + ".js");
+ }
+
+ this.init(require(path_to_package_json));
+}
+
+SealiousApp.prototype = new function(){
+
+ this.load_base_modules = function(){
+ this.module_manager.add_module(require.resolve("sealious-base-chips"))
+ }
+
+ this.config = function(config_object){
+ this.config_manager.set_config(config_object);
+ }
+
+ this.config_from_file = function(path_to_file){
+ this.config(require(path_to_file));
+ }
+
+ this.init = function(package_info){
+ this.load_base_modules();
+ this.load_all_modules(package_info);
+ }
+
+ this.load_all_modules = function(package_info){
+ var dependencies = package_info.dependencies;
+ console.log("@@@@@@@", require.resolve("Set"));
+ console.log("@@@@@@@2", require.resolve("random"));
+ for(var dependency_name in dependencies){
+ var dependency_path = require.resolve(dependency_name); //should be a path to `sealious-module.json file
+ var is_sealious_module = true;
+ try{
+ require(dependency_path);
+ }catch(e){
+ is_sealious_module = false;
+ }
+ if(is_selious_module){
+ this.module_manager.add_module(dependency_path);
+ }
+ }
+ this.module_manager.initialize_all(this.dispatcher);
+ }
+
+ function decide_chip_types_to_start(mode, layer_name){
+ if(mode=="local"){
+ return ["field_type", "resource_type", "service", "channel", "datastore"];
+ }else if(!layer_name_valid(layer_name)){
+ throw new SealiousErrors.ValidationError("Invalid layer name: " + layer_name); //~
+ }else{
+ return which_chip_types_to_start_for_layer[layer_name];
+
+ }
+ }
+
+ function getDispatcher(mode, layer_name){
+ if(mode=="local"){
+ return require("../lib/dispatchers/local/dispatcher-local.js");
+ }else{
+ return require("../lib/dispatchers/" + layer_name + "/dispatcher-" + layer_name + ".js");
+ }
+ }
+
+ this.start = function(){
+ var dispatcher = getDispatcher(mode, layer_name);
+
+ var chip_types_to_start = decide_chip_types_to_start(mode, layer_name);
+
+ this.dispatcher.init();
+ this.dispatcher.start();
+
+ return this.module_manager.start(chip_types_to_start);
+ }
+
+}
+
+module.exports = SealiousApp;
\ No newline at end of file
diff --git a/lib/config/config-manager.js b/lib/config/config-manager.js
index c85c4013..8a780cea 100644
--- a/lib/config/config-manager.js
+++ b/lib/config/config-manager.js
@@ -1,27 +1,27 @@
var fs = require("fs");
var path = require("path");
-var ConfigManager = new function(){
- var config = {};
+var ConfigManager = function(){
+ this.config = {};
+}
- var default_config_path = __dirname + "/config.default.json";
+ConfigManager.prototype = new function(){
- this.readFromFile = function(filename){
- filename = filename || default_config_path;
- config = JSON.parse(fs.readFileSync(filename));
+ this.set_config = function(config){
+ this.config = config;
}
this.getConfiguration = function(){
- return config;
+ return this.config;
}
this.get_chip_config = function(longid){
- return config.chip_config && config.chip_config[longid];
+ return this.config.chip_config && this.config.chip_config[longid];
}
this.get_dispatcher_config = function(){
- return config.dispatcher_config || {};
+ return this.config.dispatcher_config || {};
}
}
module.exports = ConfigManager;
\ No newline at end of file
diff --git a/lib/core.js b/lib/core.js
index ae6fcb6b..72f53b0e 100644
--- a/lib/core.js
+++ b/lib/core.js
@@ -1,89 +1,18 @@
var path = require("path"); //path.resolve(module.filename, "../../../prometheus-modules");
var ModuleManager = require("./module/module-manager.js");
var ConfigManager = require("./config/config-manager.js");
-var base_chips_location = path.resolve(require.resolve("sealious-base-chips"), "../");
-
-var default_app_location = path.resolve(require.resolve("sealious-example-app"), "../");
-
global.Sealious = {};
Sealious.Errors = require("./response/error.js");
-var SealiousCore = new function(){
-
- var mode = null;
-
- var proper_layer_names = {"db" : true , "biz" : true , "web" : true};
-
- //applies only to distributed mode
- var which_chip_types_to_start_for_layer = {
- db: ["datastore"],
- biz: ["field_type", "resource_type", "service"],
- web: ["field_type", "resource_type", "channel"]
- }
-
- function layer_name_valid(layer_name){
- return layer_name in proper_layer_names;
- }
-
- /**
- * @param {string} mode local|distributed
- * @param {string} layer_name db|biz|web
- */
- function decide_chip_types_to_start(mode, layer_name){
- if(mode=="local"){
- return ["field_type", "resource_type", "service", "channel", "datastore"];
- }else if(!layer_name_valid(layer_name)){
- throw new SealiousErrors.ValidationError("Invalid layer name: " + layer_name); //~
- }else{
- return which_chip_types_to_start_for_layer[layer_name];
-
- }
- }
-
- function getDispatcher(mode, layer_name){
- if(mode=="local"){
- return require("../lib/dispatchers/local/dispatcher-local.js");
- }else{
- return require("../lib/dispatchers/" + layer_name + "/dispatcher-" + layer_name + ".js");
- }
- }
-
- /**
- * [init description]
- * @param {string} mode local|distributed
- * @param {string} layer_name db|biz|web
- */
- this.start = function(mode, layer_name, app_location){
- mode = mode || "local";
- layer_name = layer_name || null;
- app_location = app_location || path.resolve(module.filename, default_app_location);
- config_file_path = app_location + "/app.config.json";
-
- ConfigManager.readFromFile(config_file_path); //if the argument is null then the default configuration file (config.default.json) is used
-
-
- //module needed for basic Prometheus operations
- base_module_dir = path.resolve(module.filename, base_chips_location );
- ModuleManager.add_module(base_module_dir);
-
- ModuleManager.add_modules(app_location + "/modules");
-
- var chip_types_to_start = decide_chip_types_to_start(mode, layer_name);
-
- var dispatcher = getDispatcher(mode, layer_name);
-
-
- ModuleManager.initialize_all(dispatcher);
-
- dispatcher.init();
- dispatcher.start();
-
- ModuleManager.start(chip_types_to_start);//returns a promise
- };
-
+Sealious.which_chip_types_to_start_for_layer = {
+ db: ["datastore"],
+ biz: ["field_type", "resource_type", "service"],
+ web: ["field_type", "resource_type", "channel"]
}
-module.exports = SealiousCore;
\ No newline at end of file
+Sealious.App = require("./app.js");
+
+module.exports = Sealious;
\ No newline at end of file
diff --git a/lib/module/module-manager.js b/lib/module/module-manager.js
index 98e02e1e..c409f4bc 100644
--- a/lib/module/module-manager.js
+++ b/lib/module/module-manager.js
@@ -1,113 +1,107 @@
var fs = require("fs");
var path = require("path");
var Set = require("Set");
var Promise = require("bluebird");
var Module = require("./module.js");
var SealiousErrors = require("../response/error.js"); //~
function intersection_of_arrays(array1, array2){
//console.log("comparing arrays, ", array1, array2)
array3 = array1.filter(function(n) {
return array2.indexOf(n) != -1;
});
return array3;
}
-var ModuleManager = new function(){
-
- var modules_by_id = {};
+var ModuleManager = function(){
+ this.modules_by_id = {};
+}
+ModuleManager.prototype = new function(){
function get_module_count(){
var c = 0;
- for(var i in modules_by_id){
+ for(var i in this.modules_by_id){
c++;
}
return c;
}
- this.add_module = function(module_dir){
+ this.add_module = function(sealious_module_json_file_path){
+ var module_dir = path.resolve(sealious_module_json_file_path, "../");
+ console.log("module_dir:", module_dir);
var current_module = new Module(module_dir);
- modules_by_id[current_module.info.name] = current_module;
+ this.modules_by_id[current_module.info.name] = current_module;
current_module.registered = true;
}
- this.add_modules = function(modules_dir){
- var modules_dir_contents = fs.readdirSync(modules_dir);
- for(var i in modules_dir_contents){
- var current_module_path = path.resolve(modules_dir, modules_dir_contents[i]);
- this.add_module(current_module_path);
- }
- }
-
function count_registred_modules(){
var c = 0;
- for(var i in modules_by_id){
+ for(var i in this.modules_by_id){
c++;
}
return c;
}
function decide_module_execution_order(){
var initialization_list = [];
var accepted_ids = new Set();
var defined_so_far_chip_ids = new Set();
var total_module_count = count_registred_modules();
do{
var initialized_in_this_iteration = 0;
- for(var module_id in modules_by_id){
+ for(var module_id in this.modules_by_id){
if(accepted_ids.has(module_id)){
continue;
}
var initialize_module = true;
- var current_module = modules_by_id[module_id];
+ var current_module = this.modules_by_id[module_id];
var required_chips = [];
required_chips = current_module.get_required_chip_ids();
var chips_defined_by_current_module = current_module.get_defined_chip_ids();
var chips_defined_by_current_module_set = new Set();
chips_defined_by_current_module_set.addAll(chips_defined_by_current_module);
required_chips.forEach(function(chip_id){
if(!defined_so_far_chip_ids.has(chip_id) && !chips_defined_by_current_module_set.has(chip_id)){
initialize_module = false;
console.log("cannot initialize ", module_id, "because of ", chip_id);
}
})
if(initialize_module){
console.log("initializing module", module_id);
initialization_list.push(module_id);
accepted_ids.add(module_id);
initialized_in_this_iteration++;
defined_so_far_chip_ids.addAll(chips_defined_by_current_module);
}
}
}while(initialized_in_this_iteration!=0 && total_module_count!=initialization_list.length);
if(total_module_count!=initialization_list.length){
throw new SealiousErrors.DependencyError("Cannot initialize some modules because of circular dependency"); //~
}
return initialization_list;
}
this.initialize_all = function(dispatcher){
var module_ids = decide_module_execution_order();
for(var i in module_ids){
var module_id = module_ids[i];
- modules_by_id[module_id].initialize(dispatcher);
+ this.modules_by_id[module_id].initialize(dispatcher);
}
}
this.start = function(chip_types_to_start){
var promises = [];
- for(var module_id in modules_by_id){
- var module = modules_by_id[module_id];
+ for(var module_id in this.modules_by_id){
+ var module = this.modules_by_id[module_id];
promises.push(module.start(chip_types_to_start));
}
return Promise.all(promises);
}
-
}
module.exports = ModuleManager;
\ No newline at end of file

File Metadata

Mime Type
text/x-diff
Expires
Sat, Sep 20, 21:53 (9 h, 46 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
949708
Default Alt Text
(11 KB)

Event Timeline