|
@@ -0,0 +1,326 @@
|
|
|
+
|
|
|
+//默认值设置
|
|
|
+defaultinput = {
|
|
|
+ server: "http://172.23.12.228:8080",
|
|
|
+ author: base64.encode("meta.admin:admin"),
|
|
|
+ istesting: true,
|
|
|
+ classname: "/cncc/action/test",
|
|
|
+ data: null,
|
|
|
+ datafiledir: "/opt/cncc/ITIL/change_main",
|
|
|
+ datafilename: "",
|
|
|
+ jsfilename: "/script/cncc/ITIL/测试.js",
|
|
|
+ clsoption: "with ttl=10 day, version=true, nickname='test'",
|
|
|
+ fieldmap: {id: "jid"},
|
|
|
+ fields: {idUnique: "string,key"},
|
|
|
+ mustfield: "id,idUnique",
|
|
|
+};
|
|
|
+inputmapping = {
|
|
|
+ "change": {
|
|
|
+ classname: "/cncc/action/change_main",
|
|
|
+ datafiledir: "/opt/cncc/ITIL/change_main",
|
|
|
+ jsfilename: "/script/cncc/ITIL/变更单.js",
|
|
|
+ clsoption: "with ttl=10 day, version=true, nickname='change_main'",
|
|
|
+ },
|
|
|
+ "event": {
|
|
|
+ classname: "/cncc/action/event",
|
|
|
+ datafiledir: "/opt/cncc/ITIL/event",
|
|
|
+ jsfilename: "/script/cncc/ITIL/事件单.js",
|
|
|
+ clsoption: "with ttl=10 day, version=true, nickname='event'",
|
|
|
+ },
|
|
|
+ "problem": {
|
|
|
+ classname: "/cncc/action/problem",
|
|
|
+ datafiledir: "/opt/cncc/ITIL/problem",
|
|
|
+ jsfilename: "/script/cncc/ITIL/问题单.js",
|
|
|
+ clsoption: "with ttl=10 day, version=true, nickname='problem'",
|
|
|
+ },
|
|
|
+ "baobei": {
|
|
|
+ classname: "/cncc/action/baobei",
|
|
|
+ datafiledir: "/opt/cncc/ITIL/baobei",
|
|
|
+ jsfilename: "/script/cncc/ITIL/报备.js",
|
|
|
+ clsoption: "with ttl=10 day, version=true, nickname='baobei'",
|
|
|
+ },
|
|
|
+ "shebeishangxiadian": {
|
|
|
+ classname: "/cncc/action/shebeishangxiadian",
|
|
|
+ datafiledir: "/opt/cncc/ITIL/shebeishangxiadian",
|
|
|
+ jsfilename: "/script/cncc/ITIL/设备上下电.js",
|
|
|
+ clsoption: "with ttl=10 day, version=true, nickname='shebeishangxiadian'",
|
|
|
+ },
|
|
|
+ "shujuhuoqu": {
|
|
|
+ classname: "/cncc/action/shujuhuoqu",
|
|
|
+ datafiledir: "/opt/cncc/ITIL/shujuhuoqu",
|
|
|
+ jsfilename: "/script/cncc/ITIL/数据获取.js",
|
|
|
+ clsoption: "with ttl=10 day, version=true, nickname='shujuhuoqu'",
|
|
|
+ },
|
|
|
+ "yanlian": {
|
|
|
+ classname: "/cncc/action/yanlian",
|
|
|
+ datafiledir: "/opt/cncc/ITIL/yanlian",
|
|
|
+ jsfilename: "/script/cncc/ITIL/应急演练.js",
|
|
|
+ clsoption: "with ttl=10 day, version=true, nickname='yanlian'",
|
|
|
+ },
|
|
|
+ "project": {
|
|
|
+ classname: "/cncc/action/project",
|
|
|
+ datafiledir: "/opt/cncc/ITIL/project",
|
|
|
+ jsfilename: "/script/cncc/ITIL/项目实施或巡检.js",
|
|
|
+ clsoption: "with ttl=10 day, version=true, nickname='project'",
|
|
|
+ }
|
|
|
+};
|
|
|
+
|
|
|
+// 输入输出参数格式化
|
|
|
+input = INPUT;
|
|
|
+output = {};
|
|
|
+try {
|
|
|
+ input = decodeURIComponent(input);
|
|
|
+} catch(e) {}
|
|
|
+try {
|
|
|
+ input = base64.decode(input);
|
|
|
+} catch(e) {}
|
|
|
+try {
|
|
|
+ input = JSON.parse(input);
|
|
|
+ input = JSON.parse(input);
|
|
|
+} catch(e) {}
|
|
|
+
|
|
|
+// 通用函数
|
|
|
+function isempty(o) {
|
|
|
+ if (o) {
|
|
|
+ for (var k in o){
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return true;
|
|
|
+}
|
|
|
+
|
|
|
+// 主执行阶段
|
|
|
+function main() {
|
|
|
+ output.info = {};
|
|
|
+ output.info.p0 = {name: "确认参数"};
|
|
|
+ p = inputmapping[input.name];
|
|
|
+ if (p) {
|
|
|
+ for (var k in p) {
|
|
|
+ defaultinput[k] = p[k];
|
|
|
+ }
|
|
|
+ }
|
|
|
+ server = input.server;
|
|
|
+ if (!server) {
|
|
|
+ server = defaultinput.server;
|
|
|
+ }
|
|
|
+ author = input.author;
|
|
|
+ if (!author) {
|
|
|
+ author = defaultinput.author;
|
|
|
+ }
|
|
|
+ istesting = input.istesting;
|
|
|
+ if (!istesting) {
|
|
|
+ istesting = defaultinput.istesting;
|
|
|
+ }
|
|
|
+ classname = input.classname;
|
|
|
+ if (!classname) {
|
|
|
+ classname = defaultinput.classname;
|
|
|
+ }
|
|
|
+ if (classname[0] != "/") {
|
|
|
+ throw ("classname必须以 / 开头");
|
|
|
+ }
|
|
|
+ if (classname.substring(0,8) == "/matrix/") {
|
|
|
+ throw ("classname不能以 /matrix/ 开头");
|
|
|
+ }
|
|
|
+ data = input.data;
|
|
|
+ if (isempty(data)) {
|
|
|
+ data = defaultinput.data;
|
|
|
+ if (isempty(data)) {
|
|
|
+ datafilename = input.datafilename;
|
|
|
+ if (!datafilename) {
|
|
|
+ datafilename = defaultinput.datafilename;
|
|
|
+ }
|
|
|
+ if (datafilename) {
|
|
|
+ try {
|
|
|
+ data = dfs.read(datafilename);
|
|
|
+ data = JSON.parse(data);
|
|
|
+ } catch(e) {}
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (isempty(data)) {
|
|
|
+ datafiledir = input.datafiledir;
|
|
|
+ if (!datafiledir) {
|
|
|
+ if (classname == defaultinput.classname) {
|
|
|
+ datafiledir = defaultinput.datafiledir;
|
|
|
+ } else {
|
|
|
+ datafiledir = "/opt" + classname;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // 读取所有文件,综合数据
|
|
|
+ data = {};
|
|
|
+ files = dfs.readdir(datafiledir);
|
|
|
+ for (i = 0; i < files.length; i++) {
|
|
|
+ try {
|
|
|
+ adat = dfs.read(files[i].fullname);
|
|
|
+ adat = JSON.parse(adat);
|
|
|
+ if (typeof(adat) != "object") {
|
|
|
+ throw("只接收JSON对象数据");
|
|
|
+ }
|
|
|
+ for (var k in adat) {
|
|
|
+ if (!data[k]) {
|
|
|
+ data[k] = adat[k];
|
|
|
+ } else if (adat[k]) {
|
|
|
+ if (typeof(adat[k]) == "object") {
|
|
|
+ if (JSON.stringify(adat[k]).length > JSON.stringify(data[k]).length) {
|
|
|
+ data[k] = adat[k];
|
|
|
+ }
|
|
|
+ } else if (typeof(adat[k]) == "string") {
|
|
|
+ if (typeof(data[k]) != "string") {
|
|
|
+ data[k] = adat[k];
|
|
|
+ } else if (adat[k].length > data[k].length) {
|
|
|
+ data[k] = adat[k];
|
|
|
+ }
|
|
|
+ } else if (typeof(adat[k]) == "number") {
|
|
|
+ if (typeof(data[k]) == "number") {
|
|
|
+ if ((""+adat[k]).indexOf(".")>=0) {
|
|
|
+ data[k] = adat[k];
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else if (typeof(adat[k]) == "boolean") {
|
|
|
+ if (typeof(data[k]) != "boolean") {
|
|
|
+ data[k] = ""+adat[k];
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } catch(e) {}
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ jsfilename = input.jsfilename;
|
|
|
+ if (!jsfilename) {
|
|
|
+ jsfilename = defaultinput.jsfilename;
|
|
|
+ }
|
|
|
+ clsoption = input.clsoption;
|
|
|
+ if (!clsoption) {
|
|
|
+ clsoption = defaultinput.clsoption;
|
|
|
+ }
|
|
|
+ fieldmap = input.fieldmap;
|
|
|
+ if (!fieldmap) {
|
|
|
+ fieldmap = defaultinput.fieldmap;
|
|
|
+ }
|
|
|
+ mustfield = input.mustfield;
|
|
|
+ if (!mustfield) {
|
|
|
+ mustfield = defaultinput.mustfield;
|
|
|
+ }
|
|
|
+ fields = input.fields;
|
|
|
+ if (!fields) {
|
|
|
+ fields = defaultinput.fields;
|
|
|
+ }
|
|
|
+ reqinput = {
|
|
|
+ istesting: istesting,
|
|
|
+ classname: classname,
|
|
|
+ jsfilename: jsfilename,
|
|
|
+ clsoption: clsoption,
|
|
|
+ fieldmap: fieldmap,
|
|
|
+ fields: fields,
|
|
|
+ mustfield: mustfield,
|
|
|
+ data: data,
|
|
|
+ };
|
|
|
+ reqinput = encodeURIComponent(JSON.stringify(reqinput));
|
|
|
+ output.info.p1 = {name:"生成类"};
|
|
|
+ http.do("POST",
|
|
|
+ server+"/script/exec/js?filepath=/matrix/utils/AlterClassByJson.js",
|
|
|
+ {
|
|
|
+ "Authorization": "Basic "+author,
|
|
|
+ "Content-Type": "application/x-www-form-urlencoded",
|
|
|
+ "Data-Type": "json"
|
|
|
+ },
|
|
|
+ 'input='+reqinput,
|
|
|
+ function(response){
|
|
|
+ // success func
|
|
|
+ ret = response.data;
|
|
|
+ if (ret.message) {
|
|
|
+ output.info.p1.result = ret.message;
|
|
|
+ } else {
|
|
|
+ output.info.p1.result = ret;
|
|
|
+ }
|
|
|
+ },
|
|
|
+ function(response){
|
|
|
+ // error func
|
|
|
+ output.error = response.data;
|
|
|
+ });
|
|
|
+ if (output.error || output.info.p1.result.error) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ output.info.p2 = {name:"生成脚本"};
|
|
|
+ http.do("POST",
|
|
|
+ server+"/script/exec/js?filepath=/matrix/utils/JsonImporterGen.js&input="+reqinput,
|
|
|
+ {"Authorization": "Basic "+author},
|
|
|
+ '',
|
|
|
+ function(response){
|
|
|
+ // success func
|
|
|
+ ret = response.data;
|
|
|
+ if (ret.message) {
|
|
|
+ output.info.p2.result = ret.message;
|
|
|
+ } else {
|
|
|
+ output.info.p2.result = ret;
|
|
|
+ }
|
|
|
+ },
|
|
|
+ function(response){
|
|
|
+ // error func
|
|
|
+ output.error = response.data;
|
|
|
+ });
|
|
|
+ if (output.error || output.info.p2.result.error) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ output.info.p2x = {name:"激活脚本"};
|
|
|
+ calljsfp = encodeURIComponent(jsfilename.replace(/\/script/, ""));
|
|
|
+ http.do("POST",
|
|
|
+ server+"/fs/tolocal/script"+calljsfp+"?issys=true",
|
|
|
+ {"Authorization": "Basic "+author},
|
|
|
+ '',
|
|
|
+ function(response){
|
|
|
+ // success func
|
|
|
+ ret = response.data;
|
|
|
+ if (ret.message) {
|
|
|
+ output.info.p2x.result = ret.message;
|
|
|
+ } else {
|
|
|
+ output.info.p2x.result = ret;
|
|
|
+ }
|
|
|
+ },
|
|
|
+ function(response){
|
|
|
+ // error func
|
|
|
+ output.error = response.data;
|
|
|
+ });
|
|
|
+ if (output.error || output.info.p2x.result.error) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ output.info.p3 = {name:"插入数据"};
|
|
|
+ reqinput = encodeURIComponent(base64.encode(JSON.stringify(data)));
|
|
|
+ calljsfp = encodeURIComponent(jsfilename.replace(/\/script/, ""));
|
|
|
+ http.do("POST",
|
|
|
+ server+"/script/exec/js?filepath="+calljsfp+"&input="+reqinput,
|
|
|
+ {"Authorization": "Basic "+author},
|
|
|
+ '',
|
|
|
+ function(response){
|
|
|
+ // success func
|
|
|
+ ret = response.data;
|
|
|
+ if (ret.message) {
|
|
|
+ output.info.p3.result = ret.message;
|
|
|
+ } else {
|
|
|
+ output.info.p3.result = ret;
|
|
|
+ }
|
|
|
+ },
|
|
|
+ function(response){
|
|
|
+ // error func
|
|
|
+ output.error = response.data;
|
|
|
+ });
|
|
|
+ if (output.error || output.info.p3.result.error) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ output.info.p4 = {name:"完成"};
|
|
|
+}
|
|
|
+try {
|
|
|
+ main();
|
|
|
+} catch(e) {
|
|
|
+ if (typeof(e) == "object") {
|
|
|
+ output.error = e;
|
|
|
+ } else if (typeof(e) == "string") {
|
|
|
+ output.error = "错误:" + e;
|
|
|
+ } else {
|
|
|
+ output.error = JSON.stringify(e);
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+// 返回输出信息
|
|
|
+OUTPUT = output;
|