use of io.fabric8.api.commands.JMXResult in project fabric8 by jboss-fuse.
the class JMXCommandActionSupport method asResults.
protected List<JMXResult> asResults(String path, List<String> responses, Class<?> resultClass) throws Exception {
ObjectMapper mapper = getObjectMapper();
List<JMXResult> results = new LinkedList<>();
for (String responsePath : responses) {
byte[] bytes = curator.getData().forPath(path + "/" + responsePath);
String response = PublicStringSerializer.deserialize(bytes);
JMXResult result = mapper.readValue(response, JMXResult.class);
if (result.getResponse() instanceof String) {
try {
result.setResponse(mapper.readValue((String) result.getResponse(), resultClass));
} catch (JsonMappingException | IllegalArgumentException ignore) {
continue;
}
}
results.add(result);
}
mapper.getTypeFactory().clearCache();
return results;
}
use of io.fabric8.api.commands.JMXResult in project fabric8 by jboss-fuse.
the class FabricGitSummaryAction method afterEachContainer.
@Override
protected void afterEachContainer(Collection<String> names) {
System.out.printf("Scheduled git-summary command to %d containers. Awaiting response(s).\n", names.size());
final CountDownLatch latch = new CountDownLatch(requests.size() + (masterRequest == null ? 0 : 1));
Thread waiter = null;
try {
waiter = new Thread(new Runnable() {
@Override
public void run() {
while (true) {
String currentContainer = null;
try {
// master request
if (masterRequest != null && masterResult == null) {
currentContainer = master;
List<JMXResult> results = fetchResponses(master);
for (JMXResult result : results) {
if (result.getCorrelationId().equals(masterRequest.getId())) {
masterResult = result;
latch.countDown();
break;
}
}
}
// requests for containers
for (Map.Entry<String, JMXRequest> req : requests.entrySet()) {
currentContainer = req.getKey();
List<JMXResult> containerResults = fetchResponses(currentContainer);
for (JMXResult result : containerResults) {
if (result.getCorrelationId().equals(req.getValue().getId())) {
results.put(currentContainer, result);
latch.countDown();
break;
}
}
}
if ((masterRequest == null || masterResult != null) && results.size() == requests.size()) {
break;
} else {
// active waiting - so no need for ZK watchers, etc...
Thread.sleep(1000);
}
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
break;
} catch (Exception e) {
System.err.println("Problem occurred while fetching response from " + currentContainer + " container: " + e.getMessage());
// active waiting - so no need for ZK watchers, etc...
try {
Thread.sleep(1000);
} catch (InterruptedException e1) {
}
}
}
}
});
waiter.start();
boolean finished = latch.await(timeout, TimeUnit.MILLISECONDS);
if (!finished) {
waiter.interrupt();
System.out.println("Timeout waiting for git-summary response");
return;
}
// before printing summary, let's check if there are out of sync containers
Map<String, String> centralGitRepo = new HashMap<>();
Set<String> outOfSyncContainers = new TreeSet<>();
if (masterResult != null) {
for (GitVersion version : ((GitVersions) masterResult.getResponse()).getVersions()) {
centralGitRepo.put(version.getVersion(), version.getSha1());
}
for (String containerName : results.keySet()) {
List<GitVersion> localRepo = ((GitVersions) results.get(containerName).getResponse()).getVersions();
for (GitVersion version : localRepo) {
String ref = centralGitRepo.get(version.getVersion());
if (ref == null) {
// local container knows about version, which is not tracked in central repo
outOfSyncContainers.add(containerName);
} else if (!ref.equals(version.getSha1())) {
// version not in sync
outOfSyncContainers.add(containerName);
}
}
if (localRepo.size() != centralGitRepo.size()) {
// extra or not-in-sync versions handled, so this must mean some central version is not
// available locally
outOfSyncContainers.add(containerName);
}
}
if (outOfSyncContainers.size() > 0) {
System.out.println();
System.out.println("Containers that require synchronization: " + outOfSyncContainers);
System.out.println("Please use \"fabric:git-synchronize\" command");
}
} else {
System.out.println();
System.out.println("Can't determine synchronization status of containers - no master Git repository detected");
}
// now summary time
if (masterResult != null) {
System.out.println();
printVersions("=== Summary for master Git repository (container: " + master + ") ===", ((GitVersions) masterResult.getResponse()).getVersions());
}
System.out.println();
for (String containerName : results.keySet()) {
printVersions("=== Summary for local Git repository (container: " + containerName + ") ===", ((GitVersions) results.get(containerName).getResponse()).getVersions());
System.out.println();
}
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
waiter.interrupt();
System.out.println("Interrupted waiting for git-summary response");
}
}
use of io.fabric8.api.commands.JMXResult in project fabric8 by jboss-fuse.
the class FabricManagerTest method toJson.
@Test
public void toJson() throws JsonProcessingException {
JMXRequest r = new JMXRequest();
r.setId("id");
r.withObjectName("io.fabric8:type=manager");
r.withParam(Boolean.class, true);
System.out.println(om().writeValueAsString(r));
JMXResult res = new JMXResult();
res.setCode(0);
res.setMessage("OK");
res.setCorrelationId("id");
GitVersion v = new GitVersion("1.0");
v.setSha1("SHA1");
GitVersions versions = new GitVersions();
versions.getVersions().addAll(Arrays.asList(v, v, v));
res.setResponse(versions);
System.out.println(om().writeValueAsString(res));
System.out.println(om().writeValueAsString(versions));
}
use of io.fabric8.api.commands.JMXResult in project fabric8 by jboss-fuse.
the class FabricManagerTest method fromJson.
@Test
public void fromJson() throws IOException {
JMXResult res = om().readValue("{\"correlationId\":\"id\",\"code\":0,\"message\":\"OK\",\"response\":{\"@class\":\"io.fabric8.api.commands.GitVersions\",\"versions\":[{\"version\":\"1.0\",\"sha1\":\"SHA1\",\"timestamp\":null,\"message\":null},{\"version\":\"1.0\",\"sha1\":\"SHA1\",\"timestamp\":null,\"message\":null},{\"version\":\"1.0\",\"sha1\":\"SHA1\",\"timestamp\":null,\"message\":null}]}}", JMXResult.class);
assertNotNull(res);
assertThat(res.getMessage(), equalTo("OK"));
assertThat(((GitVersions) res.getResponse()).getVersions().get(2).getSha1(), equalTo("SHA1"));
assertThat(((GitVersions) res.getResponse()).getVersions().size(), equalTo(3));
}
Aggregations