// 输入输出参数格式化 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) { } // 环境配置参数,配置定义在 etcd:/matrix/data/api/cfg.json cfg = {}; try { cfg = JSON.parse(etcd.get("/api/cfg.json")); } catch (e) { } // 函数定义 // 从 ODB 获取数据 function getData(type, tms, tme) { var data = []; // TODO:从 ODB 获取数据 if (cfg.env == "test") { // 测试生成假数据 for (var t = tms; t <= tme; t += 60 * 1000) { data.push({ type: type, time: new Date(t), RV: parseInt(Math.random() * 500 + 1000), // 交易量 RS: Math.random() * 5 + 95, // 系统成功率 RD: parseInt(Math.random() * 500 + 100), // 平均响应时间 RR: Math.random() * 5 + 95, // 交易响应率 FV: parseInt(Math.random() * 10), // 失败笔数 }); } } return data; } // 格式化数据 function formatData(data) { if (data.length == 0) { // 无数据返回 {} return {}; } for (var i = 0; i < data.length; i++) { data[i].time = data[i].time.toJSON().replace(/[TZ]/mg, " ").substring(0, 16); // 时间格式:yyyy-MM-dd HH:mm data[i].RV = "" + parseInt(data[i].RV); // 交易量,1分钟统计周期内,总交易笔数 data[i].RS = "" + parseInt(data[i].RS * 100) / 100; // 系统成功率,四舍五入保留2位小数,系统成功率<=100 data[i].RD = "" + parseInt(data[i].RD); // 平均响应时间,单位ms,四舍五入取整数 data[i].RR = "" + parseInt(data[i].RR * 100) / 100; // 交易响应率,四舍五入保留2位小数,交易响应率<=100 data[i].FV = "" + parseInt(data[i].FV); // 失败笔数,1分钟统计周期内,失败交易笔数 } if (data.length == 1) { // 单条数据直接返回对象 data = data[0]; } return data } // 解析时间字符串 格式为 yyyyMMddHHmm function parseTime(ymdhm) { try { if (!/^\d{12}$/.test(ymdhm)) { throw ("format error"); } var d = new Date( parseInt(ymdhm.substring(0, 4)), parseInt(ymdhm.substring(4, 6)) - 1, parseInt(ymdhm.substring(6, 8)), parseInt(ymdhm.substring(8, 10)), parseInt(ymdhm.substring(10, 12)) ); d.setMinutes(d.getMinutes() - d.getTimezoneOffset()); return d; } catch (e) { throw ("时间格式错误,正确格式是 yyyyMMddHHmm"); } } // 主执行阶段 try { // 参数检查 var type = input.type; if (!type) { throw ("必须指定参数 type,如:HVPS,BEPS,IBPS,FXPS"); } var starttime = input.time; if (!starttime) { throw ("必须指定参数 time,格式为 yyyyMMddHHmm"); } var endtime = input.endtime; // 可选参数,指定结束时间,可以获取一段时间的数据 if (!endtime) { endtime = input.time; } // 参数解析 var tms = parseTime("" + starttime).getTime(); var tme = parseTime("" + endtime).getTime(); // 数据获取 var data = getData(type, tms, tme); // 数据格式化 data = formatData(data); // 数据输出 output.data = data; } catch (e) { // 错误信息输出处理,抛出 ok 表示正常结束 if (e != "ok") { if (typeof (e) == "object") { output.error = e; } else if (typeof (e) == "string") { output.error = "错误:" + e; } else { output.error = JSON.stringify(e); } log.error(output.error); STATUS = "error"; } } // 返回输出信息 OUTPUT = output;