use of io.fabric8.api.commands.JMXRequest in project fabric8 by jboss-fuse.
the class FabricGitSummaryAction method performContainerAction.
@Override
protected void performContainerAction(String queuePath, String containerName) throws Exception {
JMXRequest containerRequest = new JMXRequest().withObjectName("io.fabric8:type=Fabric").withMethod("gitVersions");
requests.put(containerName, containerRequest);
String command = map(containerRequest);
curator.create().withMode(CreateMode.PERSISTENT_SEQUENTIAL).forPath(queuePath, PublicStringSerializer.serialize(command));
}
use of io.fabric8.api.commands.JMXRequest in project fabric8 by jboss-fuse.
the class FabricGitSummaryAction method beforeEachContainer.
@Override
protected void beforeEachContainer(Collection<String> names) throws Exception {
// first, we need summary from fabric-git-server (to have something to compare local git repositories to)
master = fabricService.getGitMaster();
if (master == null) {
System.out.println("Can't find container which is current git master");
return;
}
System.out.println("Git master is: " + master);
// ask master about the status first
String queuePath = ZkPath.COMMANDS_REQUESTS_QUEUE.getPath(master);
masterRequest = new JMXRequest().withObjectName("io.fabric8:type=GitServer").withMethod("gitVersions");
String command = map(masterRequest);
curator.create().withMode(CreateMode.PERSISTENT_SEQUENTIAL).forPath(queuePath, PublicStringSerializer.serialize(command));
}
use of io.fabric8.api.commands.JMXRequest 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.JMXRequest in project fabric8 by jboss-fuse.
the class FabricGitSynchronizeAction method performContainerAction.
@Override
protected void performContainerAction(String queuePath, String containerName) throws Exception {
String command = map(new JMXRequest().withObjectName("io.fabric8:type=Fabric").withMethod("gitSynchronize").withDelay(randomDelay).withParam(Boolean.class, allowPush));
curator.create().withMode(CreateMode.PERSISTENT_SEQUENTIAL).forPath(queuePath, PublicStringSerializer.serialize(command));
}
use of io.fabric8.api.commands.JMXRequest 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));
}
Aggregations