Commit 1e1f578d authored by Scott Sun's avatar Scott Sun

s

parent 8f49bd3a
var _ = require('lodash');
var process = require('process');
var fs = require('fs');
var Err = require('topsin.error');
var Gen = require('topcam.gencom');
var options = require('minimist')(process.argv);
var ARGV = options['_'];
var crypto = require('topsin.crypto');
var os = require('os');
var IKM = require('topcam.ikm6')();
var GUI = require('topsin.gengui').newGui();
var logger = require('topsin.logger');
/*logger.loadConfig({
    'appender': {
        console: {
            'type': 'console',
            'typefilter': 'ERROR,WARN,FATAL,INFO', // 日志分类 *代表所有
            'categoryfilter': '*', // 模块分类
            'format': '{TIME} [{TYPE}]-({CATEGORY}):{MSG} <{THREAD}>@{FILE}:{LINE}/{FUNC}' //自定义输出样式
        }
    }
});
*/
GUI.msg = function(data){
var tmp = data;
var type = {}.toString.call(data).split(" ")[1];
if (/^(\[object Object\]|\[object Array\]|\[object Error\])$/ig.test({}.toString.call(data))) {
data = JSON.stringify(data)
} else if (/^\[object Function\]$/ig.test({}.toString.call(data))){
data = data.toString()
}
type = type.replace("]","")
if(tmp === undefined){type = 'undefined',data = 'undefined'}
GUI.msgBox("数据类型:"+type, "info", data);
return this
}
var APP = IKM.getAPP();
var SCRIPT_RETURN, USER_NAME, USER_FULLNAME, USER_ID, GEN, LANG, JOB, STEP, JOB_ID, RUN_MODE, PAR, RUN_DATA, GEN_TYPE,REAL_BIN;
var CONF = JSON.parse(fs.readFile(process.argv[1]));
if (ARGV.length == 0 || _.isEmpty(ARGV[0])) {
print("\nError: No Args passed to prog. Exiting...\n");
throw new Error("Error: No Args passed to prog. Exiting...");
}
var ARGS = {};
try {
ARGS["socket"] = ARGV[2];
ARGS["job_id"] = ARGV[3];
ARGS["process_id"] = ARGV[4];
ARGS["script_id"] = ARGV[5];
ARGS["user"] = ARGV[6];
ARGS["gen_type"] = ARGV[7];
ARGS["data"] = ARGV[8];
//
GEN = new Gen({ cam_type: ARGS["gen_type"] });
USER_NAME = ARGS["user"];
if (_.isEmpty(USER_NAME)) USER_NAME = GEN.getUserName();
var userinfo = IKM.crud('selectMap',{
table: 'sys_user',
field: ['id', 'fullname'],
where: { username: USER_NAME }
})
USER_ID = userinfo["id"];
USER_FULLNAME = userinfo["fullname"];
GEN_TYPE = ARGS["gen_type"];
JOB = process.getEnv('JOB');
STEP = process.getEnv('STEP');
JOB_ID = ARGS["job_id"];
JOB = IKM.crud('selectValue',{
table: 'pdm_job',
field: "jobname",
where: { id: JOB_ID }
})
SCRIPT_RETURN = _do_script(IKM.get_script_by_id(ARGS["script_id"]));
}
catch (err) {
IKM.msg(err);
logError(err);
}
finally {
//程序结束
tl_end();
}
function logError(msg) {
print("ERROR:" + _.toString(msg));//+ "\nbacktrace:" + _.join(backtrace(), "\n"));
}
function tl_end() {
var status;
if (_.isEmpty(SCRIPT_RETURN)) SCRIPT_RETURN = 'Error';
if (/^done/i.test(SCRIPT_RETURN)) {
status = 'Done';
}
else if (/^cancel/i.test(SCRIPT_RETURN)) {
status = 'Cancel';
}
else if (/^warning/i.test(SCRIPT_RETURN)) {
status = 'Warning';
}
else if (/^finish/i.test(SCRIPT_RETURN)) {
status = 'Finish';
}
else if (/^critical/i.test(SCRIPT_RETURN)) {
status = 'Critical'
}
else if (/^new/i.test(SCRIPT_RETURN)) {
status = 'New'
}
else {
status = 'Error';
}
if (ARGS["socket"]) {
var end_time = os.getNow();
var tmp = {
job_id: JOB_ID,
process_id: ARGS["process_id"],
end_time: end_time,
user_name: USER_NAME,
user_id: USER_ID,
status: status
}
if (ARGS["job_id"]){
tmp.notes = ARGS["job_id"] > 0 ? USER_FULLNAME + status + " script (jobname="+JOB+",jobid="+ARGS["job_id"]+")" : ''
};
IKM.update_job_workflow_log(tmp);
IKM.script_end(JOB_ID,ARGS["process_id"]);
}
}
function doScript(argv){
return _do_script({name:argv})
}
function _do_script(argv) {
var script_name = argv["name"];
var scrinfo = IKM.crud('selectMap',{
table: 'pdm_workprocess_script',
field: ['id', 'md5', 'type', 'encrypt', 'content', 'parameter_value'],
where: { name: script_name, status: 'released' }
})
var func = '';
var scrfile = CONF.script_dir + "/" + script_name + ".js";
if (CONF.debug_mode == true && fs.fileExists(scrfile)) {
func = evalfile(scrfile, { prefix: "(function(){\n", suffix: "\n})"});
} else {
if (_.isEmpty(scrinfo.content)) {
print(_.toString(scrinfo))
throw "script content is Empty!";
}
else {
if (scrinfo.encrypt == 1) {
func = evalstr(crypto.d(scrinfo.content,{ prefix: "(function(){\n", suffix: "\n})" }));
}
else if (scrinfo.encrypt == 2) {
func = evalstr(crypto.d2(scrinfo.content), { prefix: "(function(){\n", suffix: "\n})"});
}
else if (scrinfo.encrypt == 3) {
func = evalstr(crypto.d3(scrinfo.content, { prefix: "(function(){\n", suffix: "\n})" }));
}
else {
func = evalstr(content, { prefix: "(function(){\n", suffix: "\n})" });
}
}
}
if (!_.isFunction(func) && argv.doScriptType !== 2) {
throw "script " + script_name + " eval error!";
}
var jobinfo = IKM.crud('selectMap',{
table: 'pdm_job',
field: ['id AS job_id', 'jobname AS job_name'],
where: { jobname: JOB }
})
var params_info = {};
params_info.gen = GEN;
params_info.ikm = IKM;
params_info.conf = CONF;
params_info.id = JOB_ID;
params_info.script_name = script_name;
params_info.user_name = USER_NAME
params_info.user_id = USER_ID;
params_info.user_full_name = USER_FULLNAME;
params_info.job = JOB;
params_info.gen_type = GEN_TYPE;
params_info.gui = GUI;
params_info.par = JSON.parse(IKM.crud('selectMap',{
table: 'pdm_workprocess',
field: ['script_parameter'],
where: { name: script_name }
}).script_parameter)
// PAR = (!scrinfo.parameter_value || scrinfo.parameter_value == "") ? {} : JSON.parse(scrinfo.parameter_value);
_.merge(params_info, jobinfo);
var res = func.call({}, params_info);
return res;
}
function addFlowNotes(par){
par["user_name"] = par["user_name"] || USER_NAME
par["user_id"] = par["user_id"] || USER_ID
return IKM.update_job_workflow_log(par)
}
function updateFlowReport(par){
par["job_id"] = par["job_id"] || JOB_ID
return IKM.update_flow_report(par)
}
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