libf 2 rokov pred
rodič
commit
f74a6f3fbb
2 zmenil súbory, kde vykonal 97 pridanie a 43 odobranie
  1. 82 43
      drsp/perf.js
  2. 15 0
      env/setenv.sh

+ 82 - 43
drsp/perf.js

@@ -1,6 +1,7 @@
 
 // 输入输出参数格式化
 input = INPUT;
+output = {};
 try {
     input = decodeURIComponent(input);
 } catch (e) { }
@@ -9,71 +10,109 @@ try {
 } catch (e) { }
 try {
     input = JSON.parse(input);
-    input = JSON.parse(input);
+    input = JSON.parse(input); // 解析可能存在的重复编码
 } catch (e) { }
-output = {};
 
-// 环境参数
+// 环境配置参数,配置定义在 etcd:/matrix/data/api/cfg.json
 cfg = {};
 try {
-    cfg = JSON.parse(etcd.get("/api/test.json"));
+    cfg = JSON.parse(etcd.get("/api/cfg.json"));
 } catch (e) { }
 
-// 默认参数
-var defaultinput = function() {
-    var tsms = new Date().getTime() - 3600 * 1000;
-    var tss = parseInt(tsms / 1000);
-    var tse = tss + 3600;
-    return {
-        sid: "",
-        kpi: "cpu_busy",
-        starttime: tss,
-        endtime: tse
-    };
-}();
-
 // 函数定义
-function f() {
-    
+// 从 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 kpi = input.kpi;
-    if (!kpi) {
-        kpi = defaultinput.kpi;
+    // 参数检查
+    var type = input.type;
+    if (!type) {
+        throw ("必须指定参数 type,如:HVPS,BEPS,IBPS,FXPS");
     }
-    if (kpi != "cpu_busy") {
-        throw("测试环境只有 cpu_busy 数据");
-    }
-    var starttime = input.starttime;
+    var starttime = input.time;
     if (!starttime) {
-        starttime = defaultinput.starttime;
+        throw ("必须指定参数 time,格式为 yyyyMMddHHmm");
     }
-    var endtime = input.endtime;
+    var endtime = input.endtime; // 可选参数,指定结束时间,可以获取一段时间的数据
     if (!endtime) {
-        endtime = defaultinput.endtime;
-    }
-    starttime = parseInt(starttime / 10) * 10;
-    var data = [];
-    var d = 30 + parseInt(Math.random() * 50 - 25);
-    for(var t=starttime; t<=endtime; t+=10) {
-        d += parseInt(Math.random() * 10 - 5);
-        if (d < 5) {
-            d = 5;
-        }
-        if (d > 95) {
-            d = 95;
-        }
-        data.push([t, kpi, d]);
+        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;
+            output.error = "错误:" + e;
         } else {
             output.error = JSON.stringify(e);
         }

+ 15 - 0
env/setenv.sh

@@ -8,3 +8,18 @@ export AUTHB64=''
 echo "SJS=''"
 echo "INPUT=''"
 echo 'curl --location --request POST "${SERVICE}?filepath=${SJS}" --header "Authorization: Basic ${AUTHB64}" --form "input=${INPUT}";echo'
+
+
+exit
+
+curl --location --request POST "${SERVICE}?filepath=${SJS}" --header "Authorization: Basic ${AUTHB64}" --form "input=${INPUT}";echo
+
+http://27.193.12.228:8080/script/exec/js?filepath=/cncc/API/drsp/perf.js&input={"type":"HVPS","starttime":"202210251025","endtime":"202210261025"}
+
+curl 'http://27.193.12.228:8080/script/exec/js?filepath=/cncc/API/drsp/perf.js&input={"type":"HVPS","time":"202210261025"}' --header "Authorization: Basic bWV0YS5hZG1pbjphZG1pbg=="
+
+
+curl -X POST -i 'http://27.193.12.228:8080/script/exec/js?filepath=/cncc/API/drsp/perf.js' --data 'input={"type":"HVPS","time":"202210261025"}' --header "Authorization: Basic bWV0YS5hZG1pbjphZG1pbg=="
+
+
+