protected ObjectNode toObjectNode(Datacenter dc) { ObjectNode n = mapper.createObjectNode(); n.put("id", computeUniqueId(dc.getMOR())); n.put("name", dc.getName()); return n; }
/** * Returns a JSON-formatted array with the datacenter list for use with * Zabbix low-level discovery */ private void getDatacenters(PrintWriter out) throws IOException { try { ManagedEntity[] dc = getManagedEntities("Datacenter"); JsonArray jArray = new JsonArray(); for (int j = 0; j < dc.length; j++) { Datacenter d = (Datacenter) dc[j]; if (d != null) { ManagedEntityStatus status = d.getOverallStatus(); JsonObject jObject = new JsonObject(); jObject.addProperty("{#DATACENTER}", d.getName()); jArray.add(jObject); } } JsonObject jOutput = new JsonObject(); jOutput.add("data", jArray); out.print(jOutput); out.flush(); } catch (Exception ex) { LOG.error("An error occurred : " + ex.toString()); } }
protected void scanDatacenter(Datacenter dc) { try { logger.info("scanning DataCenter: " + dc.getName()); ObjectNode dataCenterNode = toObjectNode(dc); String cypher = "merge (d:VMWareDatacenter {id:{id}}) set d+={props}"; getProjector().getNeoRxClient().execCypher(cypher, "id", dataCenterNode.path("id").asText(), "props", dataCenterNode); for (ManagedEntity me : dc.getHostFolder().getChildEntity()) { if (me instanceof ClusterComputeResource) { ClusterComputeResource cluster = (ClusterComputeResource) me; scanCluster(cluster); updateDatacenterClusterRelationship(dc, cluster); } } } catch (Exception e) { logger.warn("problem scanning datacenter: " + dc.getName(), e); } }
String datacenter = dc.getName();
protected void updateDatacenterClusterRelationship(Datacenter dc, ClusterComputeResource cluster) { logger.debug("updating relationship between dc={} and cluster={}", dc.getName(), cluster.getName()); String cypher = "match (d:VMWareDatacenter {id:{datacenterId} }), (c:VMWareCluster {id: {clusterId}}) MERGE (d)-[r:CONTAINS]->(c) ON CREATE SET r.updateTs=timestamp(),r.createTs=timestamp() ON MATCH SET r.updateTs=timestamp() return r"; getProjector().getNeoRxClient().execCypher(cypher, "datacenterId", computeUniqueId(dc.getMOR()), "clusterId", computeUniqueId(cluster.getMOR())); JsonNode vcenter = ensureController(); String vcenterid = vcenter.get("id").asText(); cypher = "match (c:ComputeController:VMWareVCenter {id:{vcenterId}}), (dc:VMWareDatacenter {id:{datacenterId} }) MERGE (c)-[r:MANAGES]->(dc) ON CREATE SET r.updateTs=timestamp() ON MATCH SET r.updateTs=timestamp() return r"; getProjector().getNeoRxClient().execCypher(cypher, "vcenterId", vcenterid, "datacenterId", computeUniqueId(dc.getMOR())); }