コード例 #1
0
  /**
   * @param agent for which all available metrics will be retrieved. Attention, this does NOT
   *     retrieve metric VALUES
   */
  private void updateMetricsForJCatascopiaAgent(JCatascopiaAgent agent) {
    URL url = null;
    HttpURLConnection connection = null;
    try {
      url = new URL(this.url + "/agents/" + agent.getId() + "/availableMetrics");
      connection = (HttpURLConnection) url.openConnection();
      connection.setRequestMethod("GET");
      connection.setRequestProperty("Content-Type", "application/json");
      connection.setRequestProperty("Accept", "application/json");

      InputStream errorStream = connection.getErrorStream();
      if (errorStream != null) {
        BufferedReader reader = new BufferedReader(new InputStreamReader(errorStream));
        String line;
        while ((line = reader.readLine()) != null) {
          Logger.getLogger(JCatascopiaDataSource.class.getName()).log(Level.SEVERE, line);
        }
      }

      InputStream inputStream = connection.getInputStream();
      BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));

      String availableMetrics = "";

      String line = "";
      while ((line = bufferedReader.readLine()) != null) {
        availableMetrics += line;
      }

      JSONObject object = new JSONObject(availableMetrics);
      if (object.has("metrics")) {
        JSONArray metrics = object.getJSONArray("metrics");
        List<JCatascopiaMetric> agentMetrics = agent.getAgentMetrics();

        // reuse JCatascopia metric obejcts, to avoid creating new objects all the time
        int nrOfMetricsReportedByJCatascopia = metrics.length();
        int nrOfMetricsInAgent = agentMetrics.size();
        int sizeDifference = nrOfMetricsInAgent - nrOfMetricsReportedByJCatascopia;

        // resize agents metrics list
        if (sizeDifference < 0) {
          // inchrease agents pool
          for (int i = sizeDifference; i < 0; i++) {
            agentMetrics.add(new JCatascopiaMetric());
          }
        } else if (sizeDifference > 0) {
          for (int i = sizeDifference; i > 0; i--) {
            agentMetrics.remove(0);
          }
        }

        // populate the metrics pool
        for (int i = 0; i < metrics.length(); i++) {
          JSONObject metric = metrics.getJSONObject(i);
          JCatascopiaMetric jCatascopiaMetric = agentMetrics.get(i);

          // get agent metricID
          if (metric.has("metricID")) {
            jCatascopiaMetric.setId(metric.getString("metricID"));
          } else {
            Logger.getLogger(JCatascopiaDataSource.class.getName())
                .log(Level.SEVERE, "JCatascopia metricID not found in {0}", availableMetrics);
          }

          // get agent name
          if (metric.has("name")) {
            jCatascopiaMetric.setName(metric.getString("name"));
          } else {
            Logger.getLogger(JCatascopiaDataSource.class.getName())
                .log(Level.SEVERE, "JCatascopia name not found in {0}", availableMetrics);
          }

          // get agent units
          if (metric.has("units")) {
            jCatascopiaMetric.setUnit(metric.getString("units"));
          } else {
            Logger.getLogger(JCatascopiaDataSource.class.getName())
                .log(Level.SEVERE, "JCatascopia units not found in {0}", availableMetrics);
          }

          // get agent type
          if (metric.has("type")) {
            jCatascopiaMetric.setType(metric.getString("type"));
          } else {
            Logger.getLogger(JCatascopiaDataSource.class.getName())
                .log(Level.SEVERE, "JCatascopia type not found in {0}", availableMetrics);
          }

          // get agent group
          if (metric.has("group")) {
            jCatascopiaMetric.setGroup(metric.getString("group"));
          } else {
            Logger.getLogger(JCatascopiaDataSource.class.getName())
                .log(Level.SEVERE, "JCatascopia group not found in {0}", availableMetrics);
          }
        }

      } else {
        Logger.getLogger(JCatascopiaDataSource.class.getName())
            .log(Level.SEVERE, "No JCatascopia metrics found in {0}", availableMetrics);
      }

    } catch (Exception e) {
      Logger.getLogger(JCatascopiaDataSource.class.getName()).log(Level.SEVERE, e.getMessage(), e);
    } finally {
      if (connection != null) {
        connection.disconnect();
      }
    }
  }