Пример #1
0
Config.prototype.enable_log = function() {
  var log = this.json.log || {
    enabled: false
  };
  log.levels = log.levels || {
    debug: false,
    info: true,
    warn: true,
    error: true
  };
  var categories = log.categories || {
    "*": false
  };
  delete log.categories;

  B.log.configure_options(log);
  B.log.configure_categories(categories);

};
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*****************************************************************************/
var _       = require("underscore");
var checker = require("../check");
var B = require("hope-base");
var log = B.log.for_category("wfe/WorkFlow");

function ComponentManager() {
  this.registry = {};
}

ComponentManager.prototype.key = function (wid, cid) {
  return wid + "-" + cid;
};

ComponentManager.prototype.get = function (wid, cid) {
  var key = this.key(wid, cid);
  var handler = this.registry[key];

  return handler;
};
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*****************************************************************************/
var ES = require("../index.js");
var HubStore = ES.HubStore;
var B = require("hope-base");
var log = B.log.for_category("example");

var ds = new HubStore("memory");

var key1 = "hub1";
var hub1 = {
  id:key1,
  name:"hub 1",
  things:[1, 2, 3],
  mnode: "no-need",
  type: "normal"
};

ds.set$(key1, hub1).done();
log(ds.store.db);
Пример #4
0
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*****************************************************************************/
var ES = require("../../entity-store");
var E = require("../../entity");
var M = require("../../message");
var B = require("hope-base");
var S = require("../../store");
var SM = require("../index");
var log = B.log.for_category("sm_sample");
//create the em, service_store and service_obj
var service_obj = {
  id: "sm_case1",
  name: "case1",
  spec: "no_need",
  thing: "no_need",
  path: B.path.resolve(__dirname, "./case/case1"),
  is_connect: true,
  own_spec: false,
  type: "hope_service"
};
var service_store = ES.create_servicestore("memory");
service_store.set$(service_obj.id, service_obj).done();
var em = E.create_entity_manager({service_store:service_store});
Пример #5
0
      without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*****************************************************************************/
var _ = require("lodash");
var B = require("hope-base");
var log = B.log.for_category("frontend");
var UIThing = require("./ui_thing");

var HOPE_TOKEN = "HOPE_token";

function _brief(o) {
  return {
    id: o.id,
    name: o.name,
    description: o.description
  };
}


function _remove_undefined(a) {
  return _.remove(a, function(x) {
Пример #6
0
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*****************************************************************************/
var B = require("hope-base");
var BrokerClient = require("../lib/broker_client");
var AbstractBrokerClient = BrokerClient.AbstractBrokerClient;
var mqtt = require("mqtt");
var _ = require("lodash");

var log = B.log.for_category("message/mqtt_broker_client");

var _magic = "__HOPE_MAGIC_STR_^_^__";
// config should be in format of {
//   url: ....     // the url of mqtt server
//   only_support_mqtt_3_1: ...     // set to true if it doesn't support 3.1.1 or higher
//   config: ...   // other options, see help of mqtt npm package 
// }
function MQTTBrokerClient(mnode, config) {
  AbstractBrokerClient.call(this, mnode, config);
  B.check(_.isString(config.url), "message/mqtt_broker_client", "Need url be defined");

  this.mqtt_config = this.config.config || {};
  if (this.config.only_support_mqtt_3_1) {
    _.assign(this.mqtt_config, {
      protocolId: "MQIsdp",
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*****************************************************************************/
/**
 * update Module
 * em update infos
 * @module entity/update
 */

var B = require("hope-base");
var _ = require("lodash");
var log = B.log.for_category("entity/update");
var check = B.check;
var fs = require("fs");
var path = require("path");




/**
 * create a updater.
 * @param  {Object} em         
 * @param  {Array} priorities the priorities (operation orders) of entities
 *                             the default priorities is  ["spec", "specbundle",
 *                             "service", "thing", "hub", "graph", "ui", "app", ]
 * @return {Object}            the updater
 */
Пример #8
0
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*****************************************************************************/
var _ = require("lodash");
var B = require("hope-base");
var EventEmitter = require("eventemitter3");
var BrokerClient = require("./broker_client");

var log = B.log.for_category("message/mnode");

var all_mnodes_in_this_process = {};

var MNode =
/**
 * A Message Node
 * config is optional, it may contains {
 *   id: ...,         // otherwise would automatically generate one
 *   brokers: [{      // a list of broker definitioin
 *     type: ...
 *     config: {}
 *   },  ...]
 * }
 *
 * @exports message/mnode
Пример #9
0
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*****************************************************************************/
var B = require("hope-base");
var _ = require("lodash");

var log = B.log.for_category("workflow/engine");


var Workflow = require("./workflow");

var NodeImplService = require("./node_impl_service");

var EventEmitter = require("events").EventEmitter;


/**
 * @param {Object} config it should contains em and mnode
 */
function Engine(config) {
  this.config = config || {};
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*****************************************************************************/
/**
 * service store
 * @module entity-store/service
 */
var B = require("hope-base");
var CommonStore = require("./common.js");
var _ = require("lodash");
var check = B.check;
module.exports = ServiceStore;
var log = B.log.for_category("entity-store/service");

var service_schema = {};

// check whether the service obj obey the service schema
// service: {
//  id: string||number
//  name: string
//  spec: string||number 
//  thing: string||number
//  path: string
//  is_connect: boolean
//  type: string
//  own_spec: boolean

// }
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*****************************************************************************/

/**
 * Service-Cache Module
 * it handles the operations of service-cache and service-obj (init, destroy)
 * @module session-manager/service-cache
 */

var _ = require("lodash");
var B = require("hope-base");
var check = B.check;
var sb = require("./sandbox");
var fs = require("fs");
var vm = require("vm");
var log = B.log.for_category("sm/service");

var hub_shared = {};

exports.create_service_cache = function(base_store)
{
  return new ServiceCache(base_store);
};

function ServiceCache(base_store) {
  this.type = "ServiceCache";
  this.db = {};
  this.base_store = base_store;
  this.hub_shared = hub_shared;
}
Пример #12
0
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*****************************************************************************/
/**
 * Grove Thing Module
 * handle grove/wio-link thing and service
 * @module entity/grove_thing
 */

var B = require("hope-base");
var _ = require("lodash");
var log = B.log.for_category("entity/grove_thing");
var check = B.check;
var T = require("./thing");
var Spec = require("./spec");
var request = require("request");
var url = require("url");
/**
 * the global var which contains the infos of drivers.json and driver_docs.json
 * grove_doc[classname].driver
 * grove_doc[classname].doc
 */
var grove_doc;


exports.load_grove_thing_via_login$ = function(grove_config, hub_id, em) {
  log("grove login:", grove_config);
Пример #13
0
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*****************************************************************************/
/**
 * Sandbox Module
 * @module session-manager/sandbox
 */

var _ = require("lodash");
var B = require("hope-base");
var log = B.log.for_category("sm/sandbox");
var NodeRedSandnox = require("./nodered-sandbox/index.js");
var path = require("path");
//create a sandbox for service_init method
function create_service_sandbox(service_cache_obj)
{
  var sandbox = {
    process: process,
    Buffer: Buffer,
    setTimeout : setTimeout,
    clearTimeout : clearTimeout,
    setInterval : setInterval,
    clearInterval : clearInterval,
    setImmediate : setImmediate,
    clearImmediate : clearImmediate,
    console : console,
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*****************************************************************************/
var B = require("hope-base");
var _ = require("lodash");

var log = B.log.for_category("workflow/out_port");

//----------------------------------------------------------------
// Port
//----------------------------------------------------------------

function OutPort(node, json) {
  json = json || {};
  this.node = node;
  this.json = json;

  this.name = json.name;
  this.type = json.type;

  this.edges = {};
}
Пример #15
0
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*****************************************************************************/
/**
 * user store
 * @module entity-store/user
 */
var B = require("hope-base");
var CommonStore = require("./common.js");
var _ = require("lodash");
var check = B.check;
module.exports = UserStore;
var log = B.log.for_category("entity-store/user");



var user_schema = {};

// check whether the user obj obey the user schema
// user: {
//  id: string||number
//  passwd: string
//  appbundle_path: string
// }
function check_user_schema (value) {
  try {
    check(_.isString(value.id) || _.isNumber(value.id), "entity-store/user", "invalid id", value);
    check(_.isString(value.appbundle_path), "entity-store/user", "invalid appbundle_path", value);
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*****************************************************************************/
/**
 * user Module
 * handle user
 * @module entity/user
 */

var fs = require("fs");
var B = require("hope-base");
var _ = require("lodash");
var log = B.log.for_category("entity/user");
var check = B.check;

exports.add_user$ = function(user, em) {
  log("add user", user);
  return em.user_store.has$(user.id)
  .then(function(ret) {
    check(!ret, "entity/user", "user already exist", user);
    check(!B.fs.dir_exists(user.appbundle_path), "entity/user",
     "the user path already exsit!", user.appbundle_path);
    fs.mkdirSync(user.appbundle_path);
    return em.user_store.set$(user.id, user);
  });
};

exports.remove_user$ = function(id, em) {
Пример #17
0
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*****************************************************************************/
var B = require("hope-base");
var _ = require("lodash");
var request = require("request");
var ipaddr = require("ipaddr.js");

var log = B.log.for_category("http_broker");


function HTTPBroker(config) {
  this.config = config = config || {};
  this.app = B.web.create_web_app(config);

  // {client_id: {
  //  session_id: ...    // inside a broker, for one client, we only allow one session alive
  //  ip: client_ip,
  //  port: ...
  // }
  this.clients = {};

  this.sessions = {}; // quick lookup to get client_id for a session
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*****************************************************************************/
/**
 * hub Module
 * handle hub
 * @module entity/hub
 */

var B = require("hope-base");
var _ = require("lodash");
var log = B.log.for_category("entity/hub");
var check = B.check;
var fs = require("fs");
var path = require("path");
var Spec = require("./spec");

/**
 * add one hun object to hub_store
 * 1, make sure the hubid not exist before
 * 2, set$
 * @param {object} hub          
 * @param {object} em           
 * @param {array} changed_list 
 */
exports.add_hub$ = function(hub, em, changed_list) {
  log("add hub", hub);
Пример #19
0
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*****************************************************************************/
/**
 * store in file
 * @module store/file
 */

var B = require("hope-base");
var Store = require("../store");
var _ = require("lodash");
var check_warn = B.check_warn;
var log = B.log.for_category("store/file");


module.exports = StoreFile;

function is_valid_key(k) {
  return _.isNumber(k) || _.isString(k);
}


/**
 * @class store in file, 
 * @extends {Store}
 */
function StoreFile(config) {
  Store.call(this, "file", config);
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*****************************************************************************/
/**
 * This is a node implementation based on service
 *
 * So all workflow semantics would be fulfilled by services, and under the hood
 * using APIs of session manager
 *
 */

var _ = require("lodash");
var B = require("hope-base");
var log = B.log.for_category("workflow/service");

var SessionManager = require("hope-session-manager");

// params: src_mnode, dst_mnode_id, session_id, action_name, action_params
var send_invoke_cmd$ = SessionManager.send_invoke_cmd$;

function NodeImplService(engine, em, mnode) {
  this.engine = engine;
  this.em = em;
  this.mnode = mnode;

  // schema of each invocation {
  //   invocation_id: ...
  //   resolve: ...
  //   reject: ...
Пример #21
0
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*****************************************************************************/
/**
 * Spec Module
 * handle spec and spec_bundle
 * @module entity/spec
 */

var B = require("hope-base");
var _ = require("lodash");
var log = B.log.for_category("entity/spec");
var check = B.check;

exports.create_local_spec = _create_local_spec;
exports.create_local_bundle = _create_local_bundle;

/**
 * Add a fully described specbundle into stores
 * Fully described means that the specs of the bundle are real objects
 * instead of ids
 * @param {Object} specbundle_  
 * @param {Object} em           
 * @param {Array} changed_list 
 */
exports.add_specbundle_with_specs$ = function(specbundle_, em, changed_list) {
  var specbundle = _.cloneDeep(specbundle_);
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*****************************************************************************/
/**
 * Session Manager Module
 * @module session-manager
 */
var B = require("hope-base");
var _ = require("lodash");
var check = B.check;

var log = B.log.for_category("sm");


// ---------------------------------------------------------------------
// Session related. create (will init the service if needed) 
// -> invoke_start -> ... -> invoke_stop -> delete
// ---------------------------------------------------------------------

/**
 * Create an service session object.
 * 0, if the session id is exsit, return Promise.reject
 * 1, get service_cache_obj
 * 2, init service if not inited before
 * 3, save the session to session cache
 * It return the Promise(session object)
 * @param  {object} sm  
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*****************************************************************************/
var Q = require("q");
var _ = require("underscore");
var UUID = require("uuid-js");
var B = require("hope-base");
var log = B.log.for_category("wfe/cp");

function ComponentProcessor(workflow) {
  this.workflow = workflow;
  this.operator = null;
  this.bindings = null;
  this.cm       = workflow.cm;

  this.deferredInstall = Q.defer();
  this.deferredUninstall = Q.defer();
  this.deferredEnable = Q.defer();
  this.deferredDisable = Q.defer();
}

function get_binding(bindings, cid) {
  var binding = bindings[cid];
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*****************************************************************************/

var chai = require("chai");
var chaiAsPromised = require("chai-as-promised");

chai.should();
chai.use(chaiAsPromised);

Promise.prototype.done = function(onFulfilled, onRejected) {
  this.then(onFulfilled, onRejected).catch(function(e) {
    setTimeout(function() { throw e; }, 0);
  });
};

var B = require("hope-base");
B.log.configure_options({
  enabled:false,
  ignore_category_for_error:false,
  ignore_category_for_warn: false
});
      without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*****************************************************************************/
var B = require("hope-base");
var P = require("hope-hub-center-shared").protocol;
var log = B.log.for_category("hub");
var _ = require("lodash");

var Hub =
module.exports = function(config) {
  config = config || {};
  this.id = config.id || B.unique_id("HOPE_HUB_");
  this.name = config.name || this.id;
  this.description = config.description || this.name;
  this.mnode = B.check(config.mnode, "hub", "Should have a mnode there");
  this.em = B.check(config.entity_manager, 
    "hub", "Should have a entity_manager to create");
  this.config = config;
  // could be builtin (the built_in_hub of center) or others ...
  this.type = this.config.type || "normal";
  this.config_path = config.config_path;
Пример #26
0
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*****************************************************************************/
var B = require("hope-base");
var _ = require("lodash");

var log = B.log.for_category("workflow/edge");



function Edge(workflow, json) {
  json = json || {};
  this.workflow = workflow;
  this.json = json;

  this.id = json.id;
  this.field = json.field;
  this.no_store = json.no_store;

  try {
    this.source = workflow.nodes[json.source.node].out.ports[json.source.port];
    this.target = workflow.nodes[json.target.node].in.ports[json.target.port];
Пример #27
0
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*****************************************************************************/
var B = require("hope-base");
var _ = require("lodash");

var log = B.log.for_category("workflow/node");

var InPort = require("./in_port");
var OutPort = require("./out_port");
var BatchTag = require("./tag_batch");


// spec may define the in or out which contains a field ports 
// but node may customize this in its in or out
// this helper talkes in/out of both json and returns an array of port json
// that could be used to create InPort or OutPort
function _parse_ports_spec(spec_ports_json, ports_json) {
  spec_ports_json = spec_ports_json || {};
  ports_json = ports_json || {};
  // added ports
  var ports = (spec_ports_json.ports || []).concat(ports_json.added_ports || []);
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*****************************************************************************/
//////////////////////////////////////////////////////////////////
// Todo: May converge with ui-dev/graph.js as a lot of basic parsing 
// are similar
//////////////////////////////////////////////////////////////////

var B = require("hope-base");
var _ = require("lodash");
var EventEmitter = require("events").EventEmitter;

var log = B.log.for_category("workflow/workflow");


var Node = require("./node");
var Edge = require("./edge");

//----------------------------------------------------------------
// Workflow
//----------------------------------------------------------------

/**
 * The workflow 
 * @param {Object} engine The workflow engine
 * @param {Object} graph_json  Graph json which contains actual graph, bindings etc.
 * @param {Object} specs  An index to query specs used
 */
 * WFE Agent Module.
 * WFE will use it as CM.
 * @module session_manager/wfe-agent
 */

//TODO: the agent hace to store all sessions' register-functions.
//Maybe we should change the exchange-data way with WFE. 
//
//TODO: we need to store the session's status




var _ = require("lodash");
var B = require("hope-base");
var log = B.log.for_category("sm/wfe");
var check = B.check;

exports.WfeAgent = WfeAgent;

// ----------------------------------
// helper
// ----------------------------------
/**
 * generate handler msg for "session_send"
 * @param  {object} wa  wfe_agent object
 * @param  {object} msg received msg
 *                      {
 *                        session_id:
 *                        tags:
 *                        value: