Page Menu
Home
Sealhub
Search
Configure Global Search
Log In
Files
F8929163
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
11 KB
Referenced Files
None
Subscribers
None
View Options
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
Details
Attached
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)
Attached To
Mode
rS Sealious
Attached
Detach File
Event Timeline
Log In to Comment