Commit 43c1957d authored by Kamron Aroonrua's avatar Kamron Aroonrua 💬

Merge branch 'ondev-gcs' into 'dev'

Ondev gcs

See merge request !15
parents 98497702 c685d218
#Changelog
## [1.2.3] - 2019-11-19
### Added
- BS :: Configuration Context with ENV
- PLUGIN :: do-http
- PLUGIN :: do-bsspeak
- PLUGIN :: do-mqtt
- PLUGIN :: do-ext-storage
### Removed
- STORAGE :: remove ipc channel
## [1.2.2] - 2019-03-01
### Added
- PLUGIN :: dt-pdfmaker
......
......@@ -2,6 +2,7 @@ var fs = require('fs');
var cfg = {
'amqp' : cfg_load('amqp.json'),
'mqtt' : cfg_load('mqtt.json'),
'memstore' : cfg_load('memstore.json'),
'storage' : cfg_load('storage.json'),
'auth' : {
......
[
{"env":"BSCONFIG_AMQP_TYPE","conf":"amqp.type"},
{"env":"BSCONFIG_AMQP_URL","conf":"amqp.url"}
{"env":"BSCONFIG_AMQP_URL","conf":"amqp.url"},
{"env":"BSCONFIG_MQTT_URL","conf":"mqtt.url"},
{"env":"BSCONFIG_MEMSTORE_TYPE","conf":"memstore.type"},
{"env":"BSCONFIG_MEMSTORE_URL","conf":"memstore.url"},
{"env":"BSCONFIG_STORAGE_REPOSITORY","conf":"storage.repository"},
{"env":"BSCONFIG_STORAGE_APIHOSTNAME","conf":"storage.api_hostname"},
{"env":"BSCONFIG_SECRET_TEXT","conf":"auth.secret.value"}
]
\ No newline at end of file
module.exports = require('./default.json');
\ No newline at end of file
{
"url" : "mqtt://rabbitmq-server"
}
\ No newline at end of file
var _dot = require('dot-prop');
var CONFIG_PATH = __dirname + '/conf/config';
var ENV_MAP = __dirname + '/conf/env';
var cfg = require(CONFIG_PATH);
module.exports.config = cfg;
......@@ -16,7 +18,7 @@ module.exports.getConfig = function(name,def,opt){
var bs_cfg={};
if(option.env){
bs_cfg = envcnf('',cfg);
bs_cfg = envcnf(cfg);
}else{
bs_cfg = cfg;
}
......@@ -30,19 +32,27 @@ module.exports.getConfig = function(name,def,opt){
return ret;
}
var envcnf = function(name,init_obj){
var envcnf = function(init_obj){
var obj=init_obj || {};
var env = process.env;
var name_pref = 'bs.config';
var envmap = require(ENV_MAP);
// var name_pref = 'bs.config';
if(name){name_pref=name_pref + '.' + name;}
if(env[name_pref]){obj=env[name_pref];}
var nfull = name_pref + '.';
Object.keys(env).forEach((k)=>{
if(k.startsWith(nfull)){
var dotkey = k.substring(nfull.length);
_dot.set(obj,dotkey,env[k]);
// if(name){name_pref=name_pref + '.' + name;}
// if(env[name_pref]){obj=env[name_pref];}
// var nfull = name_pref + '.';
// Object.keys(env).forEach((k)=>{
// if(k.startsWith(nfull)){
// var dotkey = k.substring(nfull.length);
// _dot.set(obj,dotkey,env[k]);
// }
// });
if(!Array.isArray(envmap)){return obj;}
envmap.forEach((em)=>{
if(em.env && em.conf && env[em.env]){
_dot.set(obj,em.conf,env[em.env]);
}
});
......
var util = require('util');
var DOPlugin = require('../do-plugin');
function DOTask(context,request){
DOPlugin.call(this,context,request);
this.name = "ext-storage";
}
util.inherits(DOTask,DOPlugin);
DOTask.prototype.perform = require('./perform');
module.exports = DOTask;
var ctx = require('../../../context');
var Utils = ctx.getLib('lib/util/plugin-utils');
var bsdata = ctx.getLib('lib/model/bsdata');
var request = require("request");
function perform_function(context,request,response){
var job_id = context.jobconfig.job_id;
var transaction_id = context.transaction.id;
var param = context.jobconfig.data_out.param;
var memstore = context.task.memstore
var output_type = request.input_type;
var data = request.data;
var meta = request.meta;
var token = param.token;
var api_url = param.api;
var storage_name = param.storage_name;
var env = {
'type' : output_type,
'data' : data,
'meta' : meta
}
var sname = Utils.vm_execute_text(env,storage_name);
var en_data = bsdata.create(data).serialize('object-encoded');
var storage_url = api_url + '/storage/' + sname
var msgbody = {
'meta':meta,
'data':en_data
}
send_to_storage({'api':storage_url,'token':token,'body':msgbody},function(err){
if(!err){
response.success();
}else{
response.error(err);
}
})
//response.success();
//response.reject();
//response.error("error message")
}
function send_to_storage(prm,cb)
{
var options = { method: 'PUT',
url: prm.api,
headers:
{ 'cache-control': 'no-cache',
'content-type': 'application/json' },
json: prm.body
};
if(prm.token){options.headers.authorization='Bearer ' + prm.token;}
request(options, function (err, resp, body) {
if (!err && resp.statusCode==200) {
cb();
}else{
cb(new Error("api error"));
}
});
}
module.exports = perform_function;
var util = require('util');
var DOPlugin = require('../do-plugin');
function DOTask(context,request){
DOPlugin.call(this,context,request);
this.name = "http";
}
util.inherits(DOTask,DOPlugin);
DOTask.prototype.perform = require('./perform');
module.exports = DOTask;
var ctx = require('../../../context');
var Utils = ctx.getLib('lib/util/plugin-utils');
var request = require("request");
function perform_function(context,request,response){
var job_id = context.jobconfig.job_id;
var transaction_id = context.transaction.id;
var param = context.jobconfig.data_out.param;
var memstore = context.task.memstore
var output_type = request.input_type;
var data = request.data;
var meta = request.meta;
var req_url = param.url || "";
var req_method = param.method || "GET";
var req_body_type = param.body_type || "json";
var env = {
'type' : output_type,
'data' : data,
'meta' : meta
}
var req_url = Utils.vm_execute_text(env,req_url);
send_request({'url':req_url,'method':req_method,'headers':param.headers,'body_type':req_body_type,'body':data},function(err){
if(!err){
response.success();
}else{
response.error(err);
}
})
//response.success();
//response.reject();
//response.error("error message")
}
function send_request(prm,cb)
{
var options = { method: 'GET',
url: prm.url,
headers:
{ 'cache-control': 'no-cache' }
};
if(prm.method.toLowerCase()=='post' || prm.method.toLowerCase()=='put')
{
options.method = prm.method.toUpperCase();
if(prm.body_type=='json' && typeof prm.body == 'object'){
options.headers['content-type'] = 'application/json';
options.json = prm.body;
}else if(prm.body_type=='text' || typeof prm.body == 'string'){
options.headers['content-type'] = 'text/plain';
options.body = prm.body;
}else{
options.body = prm.body;
}
}
if(typeof prm.headers == 'object')
{
options.headers = Object.assign(options.headers,prm.headers)
}
request(options, function (err, resp, body) {
if (!err) {
cb();
}else{
cb(new Error("request error"));
}
});
}
module.exports = perform_function;
......@@ -6,9 +6,9 @@ function avg_point(prm,cb)
var bg = prm.bg;
var fg = prm.fg;
var dpoint = prm.point;
var radius = prm.radius || 10;
var bg_threshold = prm.bg_threshold || 20;
var mapping_threshold = prm.mapping_threshold || 128;
var radius = Number(prm.radius) || 10;
var bg_threshold = Number(prm.bg_threshold) || 20;
var mapping_threshold = Number(prm.mapping_threshold) || 128;
var table = prm.table || [];
async.waterfall([
......@@ -128,7 +128,7 @@ function mapping(map_table,color)
if(itm.color && itm.value){
var d = distance(itm.color,color)
if(d<out.distance){
out.value = itm.value;
out.value = Number(itm.value);
out.distance = d;
}
}
......@@ -162,7 +162,7 @@ function weight(x, y, cx, cy,radius) {
function distance(a,b)
{
sum = 0;
sum = Math.pow(a[0] - b[0],2) + Math.pow(a[1] - b[1],2) + Math.pow(a[2] - b[2],2)
sum = Math.pow(Number(a[0]) - Number(b[0]),2) + Math.pow(Number(a[1]) - Number(b[1]),2) + Math.pow(Number(a[2]) - Number(b[2]),2)
return Math.sqrt(sum)
}
......
{
"version":"1.2.2",
"build":"201902121700"
"version":"1.2.3",
"build":"201911191500"
}
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment