use of org.jboss.hal.dmr.CompositeResult in project console by hal.
the class CompositeRrdParserTest method parseRecursive.
@Test
public void parseRecursive() {
List<Operation> operations = Arrays.stream(FLAT_TEMPLATES).map(template -> new Operation.Builder(AddressTemplate.of(template).resolve(StatementContext.NOOP), READ_RESOURCE_DESCRIPTION_OPERATION).param(RECURSIVE, true).build()).collect(toList());
Composite composite = new Composite(operations);
ModelNode modelNode = ExternalModelNode.read(CompositeRrdParserTest.class.getResourceAsStream("composite_rrd_recursive_description_only.dmr"));
RrdResult rrdResult = new CompositeRrdParser(composite).parse(new CompositeResult(modelNode));
// There must be no duplicates!
assertResourceDescriptions(rrdResult, 36, RECURSIVE_TEMPLATES);
}
use of org.jboss.hal.dmr.CompositeResult in project console by hal.
the class RrdTask method call.
@Override
public Completable call(LookupContext context) {
boolean recursive = context.recursive;
List<Completable> completables = new ArrayList<>();
// create and partition non-optional operations
List<Operation> operations = rrdOps.create(context, recursive, false);
List<List<Operation>> piles = Lists.partition(operations, batchSize);
List<Composite> composites = piles.stream().map(Composite::new).collect(toList());
for (Composite composite : composites) {
completables.add(dispatcher.execute(composite).doOnSuccess(parseRrdAction(context, composite)).toCompletable());
}
// create optional operations w/o partitioning!
List<Operation> optionalOperations = rrdOps.create(context, recursive, true);
// Do not refactor to
// List<Composite> optionalComposites = optionalOperations.stream().map(Composite::new).collect(toList());
// the GWT compiler will crash with an ArrayIndexOutOfBoundsException!
List<Composite> optionalComposites = new ArrayList<>();
optionalOperations.forEach(operation -> optionalComposites.add(new Composite(operation)));
for (Composite composite : optionalComposites) {
completables.add(dispatcher.execute(composite).onErrorResumeNext(throwable -> {
if (throwable instanceof DispatchFailure) {
logger.debug("Ignore errors on optional resource operation {}", composite.asCli());
return Single.just(new CompositeResult(new ModelNode()));
} else {
return Single.error(throwable);
}
}).doOnSuccess(parseRrdAction(context, composite)).toCompletable());
}
if (!completables.isEmpty()) {
if (logger.isDebugEnabled()) {
logger.debug("About to execute {} ({}+{}) composite operations (regular+optional)", composites.size() + optionalComposites.size(), composites.size(), optionalComposites.size());
String compositeOps = composites.stream().map(Composite::asCli).collect(Collectors.joining(", "));
logger.debug("Composite operations: {}", compositeOps);
if (!optionalComposites.isEmpty()) {
String optionalOps = optionalComposites.stream().map(Composite::asCli).collect(Collectors.joining(", "));
logger.debug("Optional operations: {}", optionalOps);
}
}
return Completable.concat(completables);
} else {
logger.debug("No DMR operations necessary");
return Completable.complete();
}
}
use of org.jboss.hal.dmr.CompositeResult in project console by hal.
the class AccessControl method reload.
void reload(Callback callback) {
reset();
List<Operation> operations = new ArrayList<>();
operations.add(new Operation.Builder(AddressTemplates.root(), READ_RESOURCE_OPERATION).param(INCLUDE_RUNTIME, true).param(ATTRIBUTES_ONLY, true).build());
if (!environment.isStandalone()) {
operations.add(new Operation.Builder(AddressTemplates.root(), READ_CHILDREN_RESOURCES_OPERATION).param(CHILD_TYPE, HOST_SCOPED_ROLE).param(RECURSIVE, true).build());
operations.add(new Operation.Builder(AddressTemplates.root(), READ_CHILDREN_RESOURCES_OPERATION).param(CHILD_TYPE, SERVER_GROUP_SCOPED_ROLE).param(RECURSIVE, true).build());
}
operations.add(new Operation.Builder(AddressTemplates.root(), READ_CHILDREN_RESOURCES_OPERATION).param(CHILD_TYPE, ROLE_MAPPING).param(RECURSIVE, true).build());
dispatcher.execute(new Composite(operations), (CompositeResult result) -> {
int step = 0;
ModelNode attributes = result.step(step++).get(RESULT);
AccessControlProvider accessControlProvider = ModelNodeHelper.asEnumValue(attributes, PROVIDER, AccessControlProvider::valueOf, SIMPLE);
environment.setAccessControlProvider(accessControlProvider);
attributes.get(STANDARD_ROLE_NAMES).asList().stream().map(node -> new Role(node.asString())).forEach(roles::add);
if (!environment.isStandalone()) {
result.step(step++).get(RESULT).asPropertyList().stream().map(property -> scopedRole(property, Role.Type.HOST, HOSTS)).forEach(roles::add);
result.step(step++).get(RESULT).asPropertyList().stream().map(property -> scopedRole(property, Role.Type.SERVER_GROUP, SERVER_GROUPS)).forEach(roles::add);
}
// noinspection UnusedAssignment
result.step(step++).get(RESULT).asPropertyList().forEach(p1 -> {
Role role = roles.get(Ids.role(p1.getName()));
if (role != null) {
ModelNode assignmentNode = p1.getValue();
if (assignmentNode.hasDefined(INCLUDE_ALL)) {
role.setIncludeAll(assignmentNode.get(INCLUDE_ALL).asBoolean());
}
if (assignmentNode.hasDefined(INCLUDE)) {
assignmentNode.get(INCLUDE).asPropertyList().forEach(p2 -> addAssignment(p2, role, true));
}
if (assignmentNode.hasDefined(EXCLUDE)) {
assignmentNode.get(EXCLUDE).asPropertyList().forEach(p2 -> addAssignment(p2, role, false));
}
} else {
logger.error("Cannot add assignment for role {}: No matching role found!", p1.getName());
}
});
// sync with current user
String currentUserId = Ids.principal(Principal.Type.USER.name().toLowerCase(), currentUser.getName());
Principal currentPrincipal = principals.get(currentUserId);
if (currentPrincipal != null) {
Set<Role> currentRoles = assignments.byPrincipal(currentPrincipal).map(Assignment::getRole).collect(toSet());
currentUser.refreshRoles(currentRoles);
}
callback.execute();
});
}
use of org.jboss.hal.dmr.CompositeResult in project console by hal.
the class StoresPresenter method addAlias.
void addAlias(Metadata metadata, String name, Consumer<List<ModelNode>> callback) {
AddressTemplate template = metadata.getTemplate();
Metadata opMetadata = metadata.forOperation(ADD_ALIAS);
Form<ModelNode> form = new ModelNodeForm.Builder<>(Ids.build(template.lastName(), ADD_ALIAS), opMetadata).addOnly().build();
form.attach();
AddResourceDialog dialog = new AddResourceDialog(resources.constants().addAlias(), form, (name1, model) -> {
ResourceAddress address = template.resolve(statementContext, name);
Composite composite = new Composite();
Operation addOp = new Operation.Builder(address, ADD_ALIAS).payload(model).build();
composite.add(addOp);
Operation operation = new Operation.Builder(address, READ_ALIASES_OPERATION).build();
composite.add(operation);
String alias = model.get(ALIAS).asString();
String resource = Names.CREDENTIAL_STORE + SPACE + name;
dispatcher.execute(composite, (CompositeResult result) -> {
MessageEvent.fire(getEventBus(), Message.success(resources.messages().addSuccess(ALIAS, alias, resource)));
ModelNode aliases = result.step(1).get(RESULT);
if (aliases.isDefined()) {
callback.accept(aliases.asList());
} else {
callback.accept(Collections.emptyList());
}
}, (op, failure) -> MessageEvent.fire(getEventBus(), Message.error(resources.messages().addError(ALIAS, alias, resource, failure))), (op, ex) -> MessageEvent.fire(getEventBus(), Message.error(resources.messages().addError(ALIAS, alias, resource, ex.getMessage()))));
});
dialog.show();
}
use of org.jboss.hal.dmr.CompositeResult in project console by hal.
the class ServerRuntimePreview method update.
@Override
@SuppressWarnings("HardCodedStringLiteral")
public void update(SubsystemMetadata item) {
AddressTemplate mbean = AddressTemplate.of(SELECTED_HOST, SELECTED_SERVER, "core-service=platform-mbean");
AddressTemplate osTmpl = mbean.append("type=operating-system");
AddressTemplate runtimeTmpl = mbean.append("type=runtime");
AddressTemplate memoryTmpl = mbean.append("type=memory");
AddressTemplate threadingTmpl = mbean.append("type=threading");
Operation osOp = new Operation.Builder(osTmpl.resolve(statementContext), READ_RESOURCE_OPERATION).param(ATTRIBUTES_ONLY, true).param(INCLUDE_RUNTIME, true).build();
Operation runtimeOp = new Operation.Builder(runtimeTmpl.resolve(statementContext), READ_RESOURCE_OPERATION).param(ATTRIBUTES_ONLY, true).param(INCLUDE_RUNTIME, true).build();
Operation memoryOp = new Operation.Builder(memoryTmpl.resolve(statementContext), READ_RESOURCE_OPERATION).param(ATTRIBUTES_ONLY, true).param(INCLUDE_RUNTIME, true).build();
Operation threadingOp = new Operation.Builder(threadingTmpl.resolve(statementContext), READ_RESOURCE_OPERATION).param(ATTRIBUTES_ONLY, true).param(INCLUDE_RUNTIME, true).build();
dispatcher.execute(new Composite(osOp, runtimeOp, memoryOp, threadingOp), (CompositeResult result) -> {
// os
ModelNode osNode = result.step(0).get(RESULT);
osName.textContent = osNode.get(NAME).asString();
osVersion.textContent = " " + osNode.get("version").asString();
processors.textContent = ", " + osNode.get("available-processors").asInt() + " " + resources.constants().processors();
// runtime
ModelNode runtimeNode = result.step(1).get(RESULT);
jvm.textContent = runtimeNode.get("vm-name").asString();
jvmVersion.textContent = " " + runtimeNode.get("spec-version").asString();
uptime.textContent = resources.messages().uptime(Format.humanReadableDuration(runtimeNode.get("uptime").asLong()));
// memory
ModelNode heapMemoryNode = result.step(2).get(RESULT).get("heap-memory-usage");
long used = heapMemoryNode.get("used").asLong() / 1024 / 1024;
long committed = heapMemoryNode.get("committed").asLong() / 1024 / 1024;
long max = heapMemoryNode.get("max").asLong() / 1024 / 1024;
usedHeap.update(used, max);
committedHeap.update(committed, max);
ModelNode nonHeapMemoryNode = result.step(2).get(RESULT).get("non-heap-memory-usage");
used = nonHeapMemoryNode.get("used").asLong() / 1024 / 1024;
committed = nonHeapMemoryNode.get("committed").asLong() / 1024 / 1024;
long nonHeapMax = nonHeapMemoryNode.get("max").asLong() / 1024 / 1024;
nonHeapTitle.textContent = Names.NON_HEAP;
if (nonHeapMax == 0) {
nonHeapMax = committed * 2;
nonHeapTitle.textContent += " (unlimited)";
}
usedNonHeap.update(used, nonHeapMax);
committedNonHeap.update(committed, nonHeapMax);
// threads
ModelNode threadsNode = result.step(3).get(RESULT);
long threadCount = threadsNode.get("thread-count").asLong();
long daemonCount = threadsNode.get("daemon-thread-count").asLong();
threads.update(daemonCount, threadCount);
});
}
Aggregations