123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125 |
- // 输入输出参数格式化
- 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;
|