示例#1
0
文件: AlipayBizAo.java 项目: kevx/csp
  public void checkAlipay(Date start, Date end) {
    try {
      Map<Date, AlipayBizPo> alipayMap = getAlipayBizPoByTime(start, end);
      if (alipayMap == null) {
        return;
      }

      Map<Date, AlipayBizPo> taobaoMap = new HashMap<Date, AlipayBizPo>();
      String appName = "tradeplatform";
      String key = "tp交易相关总量`P1-trade_create";
      // 获取csp监控的数据
      Map<String, Map<String, Object>> cspQuerymap = QueryUtil.querySingleRealTime(appName, key);

      for (Map.Entry<String, Map<String, Object>> entry : cspQuerymap.entrySet()) {
        if (entry.getValue() == null) {
          continue;
        }
        AlipayBizPo po = new AlipayBizPo();
        Map<String, Object> tMap = entry.getValue();
        po.setCreateSuccess((Integer) tMap.get("success"));
        po.setCreateTotal((Integer) tMap.get("total"));
        taobaoMap.put(new Date(Long.parseLong(entry.getKey())), po);
      }

      List<CspTimeKeyAlarmRecordPo> list = new ArrayList<CspTimeKeyAlarmRecordPo>();
      for (Map.Entry<Date, AlipayBizPo> entry : alipayMap.entrySet()) {
        Date alipayTime = entry.getKey();
        Date theMostNearTaobaoTime = TimeUtil.getTheMostNearTime(alipayTime, taobaoMap.keySet());
        AlipayBizPo taobaoData = taobaoMap.get(theMostNearTaobaoTime);
        if (taobaoData == null) continue;
        if (!compareIfNear(taobaoData, entry.getValue())) {
          // /插入一条TP的告警记录
          CspTimeKeyAlarmRecordPo po = new CspTimeKeyAlarmRecordPo();
          po.setMode_name("阀值");
          po.setKey_scope("APP");
          po.setApp_name("tradeplatform");
          po.setKey_name("到支付宝的请求量对比");
          po.setProperty_name("count");
          po.setAlarm_cause("到支付宝的请求量与接收量不匹配");
          po.setAlarm_time(new Timestamp(alipayTime.getTime()));
          po.setAlarm_value(
              "t=" + taobaoData.getCreateTotal() + ",a=" + entry.getValue().getCreateTotal());
          po.setIp("172.24.168.111"); // 随意写的一台tp机器的ip
          list.add(po);
        }
      }
      if (CollectionUtil.isNotEmpty(list)) {
        CspTimeKeyAlarmRecordAo.get().insert(list);
      }

    } catch (Exception e) {
      logger.warn("checkAlipay exception,start=" + start + ",end=" + end, e);
    }
  }
示例#2
0
文件: AlipayBizAo.java 项目: kevx/csp
 public boolean compareIfNear(AlipayBizPo taobao, AlipayBizPo alipay) {
   if (taobao == null || alipay == null) {
     return true;
   }
   logger.warn("compareIfNear taobao=" + taobao + ",alipay=" + alipay);
   // 是否其中至少一项的请求总量与接收到的总量相差10%以上
   if (BigDecimal.valueOf(Math.abs(taobao.getCreateTotal() - alipay.getCreateTotal()))
           .divide(BigDecimal.valueOf(alipay.getCreateTotal()), 0, BigDecimal.ROUND_HALF_UP)
           .floatValue()
       > 0.1f) {
     return false;
   }
   return true;
 }
示例#3
0
文件: AlipayBizAo.java 项目: kevx/csp
  public Map<Date, AlipayBizPo> getAlipayBizPoByTime(Date start, Date end) {
    StringBuilder sb = new StringBuilder(url);
    try {
      sb.append("&")
          .append("key=" + URLEncoder.encode(key, "gbk"))
          .append("&startTime=")
          .append(URLEncoder.encode(format.format(start), "gbk"))
          .append("&endTime=")
          .append(URLEncoder.encode(format.format(end), "gbk"))
          .append("&")
          .append("descriptions=" + URLEncoder.encode(descriptions, "gbk"))
          .append("&")
          .append("fields=" + URLEncoder.encode(fields, "gbk"))
          .append("&")
          .append("expressions=" + URLEncoder.encode(expressions, "gbk"));
    } catch (UnsupportedEncodingException e) {
      logger.warn(
          "getAlipayBizPoByTime urlEncode exception,url=" + url + ",start=" + start + ",end=" + end,
          e);
    }

    HttpClient httpClient = new HttpClient();
    GetMethod getMethod = new GetMethod(sb.toString());

    try {
      // 使用系统提供的默认的恢复策略
      getMethod.addRequestHeader("Content-Type", "application/x-www-form-urlencoded");
      getMethod.addRequestHeader("Accept", "text/plain");
      // 设置超时时间
      httpClient.getHttpConnectionManager().getParams().setConnectionTimeout(5000);
      httpClient.getHttpConnectionManager().getParams().setSoTimeout(5000);

      int statusCode = httpClient.executeMethod(getMethod);
      if (statusCode == HttpStatus.SC_OK) {
        String response = getMethod.getResponseBodyAsString(); // 读取内容
        JSONObject jsonObject = JSONObject.fromObject(response);

        JSONObject data = JSONObject.fromObject(jsonObject.get("datas"));
        Map<Date, AlipayBizPo> map = new HashMap<Date, AlipayBizPo>();
        Calendar c = Calendar.getInstance();
        for (Object key : data.keySet()) {
          JSONArray jsonArray = JSONArray.fromObject(data.get(key));
          AlipayBizPo alipayBizDo = getAlipayBizPoFromJsonArray(jsonArray);
          if (alipayBizDo == null) {
            continue;
          }
          c.setTimeInMillis(Long.parseLong(String.valueOf(key)));
          alipayBizDo.setTime(c.getTime());
          map.put(c.getTime(), alipayBizDo);
        }
        return map;
      } else {
        logger.warn("getAlipayBizPoByTime statusCode=" + statusCode + ",url=" + sb.toString());
      }
    } catch (Exception e) {
      logger.warn("getAlipayBizPoByTime exception,url=" + sb.toString(), e);
    } finally {
      getMethod.releaseConnection();
    }
    return null;
  }
示例#4
0
文件: AlipayBizAo.java 项目: kevx/csp
  /**
   * 支付宝返回的数据顺序与格式确定,因此直接写成固定的
   *
   * @param jsonArray
   * @return
   */
  private AlipayBizPo getAlipayBizPoFromJsonArray(JSONArray jsonArray) {
    for (int i = 0; i < jsonArray.size(); i++) {
      if (Float.parseFloat(jsonArray.get(i).toString()) == 0) {
        return null;
      }
    }
    AlipayBizPo alipayBizDo = new AlipayBizPo();
    alipayBizDo.setCreateSuccess(Integer.parseInt(jsonArray.get(0).toString()));
    alipayBizDo.setCreateTotal(Integer.parseInt(jsonArray.get(1).toString()));
    alipayBizDo.setCreateTime(Float.parseFloat(jsonArray.get(2).toString()));

    alipayBizDo.setPaySuccess(Integer.parseInt(jsonArray.get(3).toString()));
    alipayBizDo.setPayTotal(Integer.parseInt(jsonArray.get(4).toString()));
    alipayBizDo.setPayTime(Float.parseFloat(jsonArray.get(5).toString()));

    alipayBizDo.setSendSuccess(Integer.parseInt(jsonArray.get(6).toString()));
    alipayBizDo.setSendTotal(Integer.parseInt(jsonArray.get(7).toString()));
    alipayBizDo.setSendTime(Float.parseFloat(jsonArray.get(8).toString()));

    alipayBizDo.setConfirmSuccess(Integer.parseInt(jsonArray.get(9).toString()));
    alipayBizDo.setConfirmTotal(Integer.parseInt(jsonArray.get(10).toString()));
    alipayBizDo.setConfirmTime(Float.parseFloat(jsonArray.get(11).toString()));
    return alipayBizDo;
  }