Search in sources :

Example 16 with CompositeResult

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);
}
Also used : ModelNode(org.jboss.hal.dmr.ModelNode) RECURSIVE(org.jboss.hal.dmr.ModelDescriptionConstants.RECURSIVE) ExternalModelNode(org.jboss.hal.dmr.ExternalModelNode) Arrays(java.util.Arrays) CompositeResult(org.jboss.hal.dmr.CompositeResult) Operation(org.jboss.hal.dmr.Operation) StatementContext(org.jboss.hal.meta.StatementContext) READ_RESOURCE_DESCRIPTION_OPERATION(org.jboss.hal.dmr.ModelDescriptionConstants.READ_RESOURCE_DESCRIPTION_OPERATION) Test(org.junit.Test) RrdParserTestHelper.assertResourceDescriptions(org.jboss.hal.meta.processing.RrdParserTestHelper.assertResourceDescriptions) Composite(org.jboss.hal.dmr.Composite) List(java.util.List) Collectors.toList(java.util.stream.Collectors.toList) Stream(java.util.stream.Stream) AddressTemplate(org.jboss.hal.meta.AddressTemplate) Composite(org.jboss.hal.dmr.Composite) CompositeResult(org.jboss.hal.dmr.CompositeResult) Operation(org.jboss.hal.dmr.Operation) ModelNode(org.jboss.hal.dmr.ModelNode) ExternalModelNode(org.jboss.hal.dmr.ExternalModelNode) Test(org.junit.Test)

Example 17 with CompositeResult

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();
    }
}
Also used : ModelNode(org.jboss.hal.dmr.ModelNode) Completable(rx.Completable) Logger(org.slf4j.Logger) CompositeResult(org.jboss.hal.dmr.CompositeResult) Environment(org.jboss.hal.config.Environment) Settings(org.jboss.hal.config.Settings) Operation(org.jboss.hal.dmr.Operation) StatementContext(org.jboss.hal.meta.StatementContext) LoggerFactory(org.slf4j.LoggerFactory) DispatchFailure(org.jboss.hal.dmr.dispatch.DispatchFailure) Action1(rx.functions.Action1) Collectors(java.util.stream.Collectors) ArrayList(java.util.ArrayList) Composite(org.jboss.hal.dmr.Composite) List(java.util.List) Dispatcher(org.jboss.hal.dmr.dispatch.Dispatcher) Task(org.jboss.hal.flow.Task) Single(rx.Single) Collectors.toList(java.util.stream.Collectors.toList) Lists(com.google.common.collect.Lists) Completable(rx.Completable) Composite(org.jboss.hal.dmr.Composite) CompositeResult(org.jboss.hal.dmr.CompositeResult) ArrayList(java.util.ArrayList) Operation(org.jboss.hal.dmr.Operation) DispatchFailure(org.jboss.hal.dmr.dispatch.DispatchFailure) ArrayList(java.util.ArrayList) List(java.util.List) Collectors.toList(java.util.stream.Collectors.toList) ModelNode(org.jboss.hal.dmr.ModelNode)

Example 18 with CompositeResult

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();
    });
}
Also used : ModelNode(org.jboss.hal.dmr.ModelNode) Environment(org.jboss.hal.config.Environment) MessageEvent(org.jboss.hal.spi.MessageEvent) AccessControlProvider(org.jboss.hal.config.AccessControlProvider) LoggerFactory(org.slf4j.LoggerFactory) ArrayList(java.util.ArrayList) Inject(javax.inject.Inject) Property(org.jboss.hal.dmr.Property) Message(org.jboss.hal.spi.Message) User(org.jboss.hal.config.User) SIMPLE(org.jboss.hal.config.AccessControlProvider.SIMPLE) Collectors.toSet(java.util.stream.Collectors.toSet) Logger(org.slf4j.Logger) RBAC(org.jboss.hal.config.AccessControlProvider.RBAC) CompositeResult(org.jboss.hal.dmr.CompositeResult) Operation(org.jboss.hal.dmr.Operation) Ids(org.jboss.hal.resources.Ids) Set(java.util.Set) EventBus(com.google.web.bindery.event.shared.EventBus) DialogFactory(org.jboss.hal.ballroom.dialog.DialogFactory) Roles(org.jboss.hal.config.Roles) Composite(org.jboss.hal.dmr.Composite) List(java.util.List) Dispatcher(org.jboss.hal.dmr.dispatch.Dispatcher) Callback(org.jboss.hal.spi.Callback) Resources(org.jboss.hal.resources.Resources) ModelDescriptionConstants(org.jboss.hal.dmr.ModelDescriptionConstants) Role(org.jboss.hal.config.Role) ModelNodeHelper(org.jboss.hal.dmr.ModelNodeHelper) Composite(org.jboss.hal.dmr.Composite) CompositeResult(org.jboss.hal.dmr.CompositeResult) ArrayList(java.util.ArrayList) AccessControlProvider(org.jboss.hal.config.AccessControlProvider) Operation(org.jboss.hal.dmr.Operation) Role(org.jboss.hal.config.Role) ModelNode(org.jboss.hal.dmr.ModelNode)

Example 19 with CompositeResult

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();
}
Also used : AddressTemplate(org.jboss.hal.meta.AddressTemplate) AddResourceDialog(org.jboss.hal.core.mbui.dialog.AddResourceDialog) Composite(org.jboss.hal.dmr.Composite) ResourceAddress(org.jboss.hal.dmr.ResourceAddress) CompositeResult(org.jboss.hal.dmr.CompositeResult) LabelBuilder(org.jboss.hal.ballroom.LabelBuilder) Metadata(org.jboss.hal.meta.Metadata) Operation(org.jboss.hal.dmr.Operation) ModelNode(org.jboss.hal.dmr.ModelNode)

Example 20 with CompositeResult

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);
    });
}
Also used : AddressTemplate(org.jboss.hal.meta.AddressTemplate) Composite(org.jboss.hal.dmr.Composite) CompositeResult(org.jboss.hal.dmr.CompositeResult) Operation(org.jboss.hal.dmr.Operation) ModelNode(org.jboss.hal.dmr.ModelNode)

Aggregations

CompositeResult (org.jboss.hal.dmr.CompositeResult)53 Composite (org.jboss.hal.dmr.Composite)48 Operation (org.jboss.hal.dmr.Operation)42 ResourceAddress (org.jboss.hal.dmr.ResourceAddress)33 ModelNode (org.jboss.hal.dmr.ModelNode)31 ArrayList (java.util.ArrayList)21 List (java.util.List)18 Dispatcher (org.jboss.hal.dmr.dispatch.Dispatcher)17 ModelDescriptionConstants (org.jboss.hal.dmr.ModelDescriptionConstants)16 AddressTemplate (org.jboss.hal.meta.AddressTemplate)16 StatementContext (org.jboss.hal.meta.StatementContext)16 Inject (javax.inject.Inject)15 Ids (org.jboss.hal.resources.Ids)14 Environment (org.jboss.hal.config.Environment)13 FlowContext (org.jboss.hal.flow.FlowContext)13 Resources (org.jboss.hal.resources.Resources)13 EventBus (com.google.web.bindery.event.shared.EventBus)12 Collectors.toList (java.util.stream.Collectors.toList)12 Message (org.jboss.hal.spi.Message)12 MessageEvent (org.jboss.hal.spi.MessageEvent)12