/** * @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(); } } }