@Override
  public void onAction(ActionDialect action) {

    // 使用同步的方式进行请求
    // 注意:因为onAction方法是由Cell Cloud的action dialect进行回调的
    // 该方法独享一个线程,因此可以在此线程里进行阻塞式的调用
    // 因此,这里可以用同步的方式请求HTTP API

    // 获取参数
    JSONObject json = null;
    long equipmentId = 0;
    int rangeInHour = 0;
    try {
      json = new JSONObject(action.getParamAsString("data"));
      equipmentId = json.getLong("moId");
      rangeInHour = json.getInt("rangeInHour");
    } catch (JSONException e1) {
      e1.printStackTrace();
    }

    // URL
    HostConfig config = new MonitorSystemHostConfig();
    HostConfigContext context = new HostConfigContext(config);
    StringBuilder url =
        new StringBuilder(context.getAPIHost())
            .append("/")
            .append(API.NETEQUIPMENT)
            .append("/")
            .append(equipmentId)
            .append("/fInOctets,fOutOctets,fInRate,fOutRate?rangeInHour=")
            .append(rangeInHour);

    // 创建请求
    Request request = this.getHttpClient().newRequest(url.toString());
    request.method(HttpMethod.GET);

    // 发送请求
    ContentResponse response = null;
    try {
      response = request.send();
    } catch (InterruptedException e1) {
      e1.printStackTrace();
    } catch (TimeoutException e1) {
      e1.printStackTrace();
    } catch (ExecutionException e1) {
      e1.printStackTrace();
    }

    Properties params = new Properties();
    JSONObject data = null;
    switch (response.getStatus()) {
      case HttpStatus.OK_200:
        byte[] bytes = response.getContent();
        if (null != bytes) {
          // 获取从Web服务器上返回的数据
          String content = new String(bytes, Charset.forName("UTF-8"));
          try {
            data = new JSONObject(content);
            if ("success".equals(data.get("status"))
                && (!"".equals(data.get("dataList"))
                    && data.get("dataList") != null
                    && !"null".equals(data.get("dataList"))
                    && !data.get("dataList").equals(null))) {
              JSONArray ja = data.getJSONArray("dataList");
              System.out.println("数据总长度:" + ja.length());
              DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
              JSONObject jsob = new JSONObject();
              JSONArray jay = new JSONArray();
              int k = 0;
              if (ja.length() > 32) {
                k = 32;
              } else {
                k = ja.length();
              }
              for (int m = 0; m < 5; m++) {
                for (int i = 0; i < k; i++) {
                  JSONObject job = ja.getJSONObject(i);
                  if (job.get("mosn").equals(ja.getJSONObject(m).get("mosn"))) {
                    JSONArray ja1 = job.getJSONArray("data");
                    JSONArray ja2 = new JSONArray();
                    for (int j = 0; j < ja1.length(); j++) {
                      JSONObject jo = new JSONObject();
                      jo.put("value", Float.valueOf(ja1.getJSONArray(j).getString(0)));
                      jo.put("collectTime", df.parse(ja1.getJSONArray(j).getString(1)).getTime());
                      ja2.put(jo);
                    }
                    JSONObject job1 = new JSONObject();
                    job1.put("data", ja2);
                    job1.put("moPath", job.getString("moPath"));
                    job1.put("kpiName", job.getString("kpiName"));
                    String s = job.getString("moPath");
                    job1.put("name", s.substring(s.indexOf("(") + 1, s.lastIndexOf(")")));
                    job1.put("mosn", Long.valueOf(job.getString("mosn")));
                    jay.put(job1);
                  }
                }
              }
              jsob.put("dataList", jay);
              jsob.put("resourceId", equipmentId);

              data.remove("dataList");
              data.put("data", jsob);
              data.put("status", 300);
              data.put("errorInfo", "");
            } else {
              data.put("data", "");
              data.put("status", 603);
            }
            System.out.println("网络设备detail: " + data);

            // 设置参数
            params.addProperty(new ObjectProperty("data", data));
          } catch (JSONException e) {
            e.printStackTrace();
          } catch (ParseException e) {
            e.printStackTrace();
          }

          // 响应动作,即想客户端发送ActionDialect
          // 参数tracker 是一次动作的追踪表示。
          this.response(Action.NETEQUIPMENT, params);
        } else {
          this.reportHTTPError(Action.NETEQUIPMENT);
        }
        break;
      default:
        Logger.w(EquipmentBasicListener.class, "返回响应码" + response.getStatus());
        try {
          data = new JSONObject();
          data.put("status", 900);
        } catch (JSONException e) {
          e.printStackTrace();
        }

        // 设置参数
        params.addProperty(new ObjectProperty("data", data));

        // 响应动作,即向客户端发送 ActionDialect
        this.response(Action.NETEQUIPMENT, params);
        break;
    }
  }
package smart.old.action.task;
  @Override
  public void onAction(ActionDialect action) {

    // 使用同步方式进行请求。
    // 因为 onAction 方法是由 Cell Cloud 的 action dialect 进行回调的,
    // 该方法独享一个线程,因此可以在此线程里进行阻塞式的调用。
    // 因此,可以用同步方式请求 HTTP API 。

    // URL
    HostConfig serviceDeskConfig = new ServiceDeskHostConfig();
    HostConfigContext context = new HostConfigContext(serviceDeskConfig);
    StringBuilder url =
        new StringBuilder(context.getAPIHost()).append("/").append(API.SERVICELEVELLIST);
    JSONObject json = null;
    String bpiId = null;
    try {
      json = new JSONObject(action.getParamAsString("data"));
      bpiId = json.getString("incidentId");

    } catch (JSONException e2) {
      e2.printStackTrace();
    }

    url.append("&bpiId=").append(bpiId);
    System.out.println("获取服务级别的URL:" + url.toString());
    // 创建请求
    Request request = this.getHttpClient().newRequest(url.toString());
    request.method(HttpMethod.GET);

    Properties params = new Properties();
    // 发送请求
    ContentResponse response = null;
    try {
      response = request.send();
    } catch (InterruptedException e1) {
      e1.printStackTrace();
    } catch (TimeoutException e1) {
      e1.printStackTrace();
    } catch (ExecutionException e1) {
      e1.printStackTrace();
    }
    JSONObject jo = null;
    switch (response.getStatus()) {
      case HttpStatus.OK_200:
        byte[] bytes = response.getContent();

        if (null != bytes) {
          // 获取从 Web 服务器上返回的数据
          String content = new String(bytes, Charset.forName("UTF-8"));
          System.out.println(content);
          try {
            jo = new JSONObject(content);
            System.out.println("响应服务级别请求的返回值为::" + jo);

            // 设置参数
            params.addProperty(new ObjectProperty("data", jo));

            // 响应动作,即向客户端发送 ActionDialect
            this.response(Action.SERVICELEVELLIST, params);

          } catch (JSONException e) {
            e.printStackTrace();
          }
        } else {
          this.reportHTTPError(Action.SERVICELEVELLIST);
        }

        break;
      default:
        Logger.w(IncidentListListener.class, "返回响应码:" + response.getStatus());
        jo = new JSONObject();
        try {
          jo.put("status", 900);
        } catch (JSONException e) {
          e.printStackTrace();
        }

        // 设置参数
        params.addProperty(new ObjectProperty("data", jo));

        // 响应动作,即向客户端发送 ActionDialect
        this.response(Action.SERVICELEVELLIST, params);
        break;
    }
  }