Search in sources :

Example 21 with CompositeResult

use of org.jboss.hal.dmr.CompositeResult in project console by hal.

the class DataSourcePreview method update.

@Override
@SuppressWarnings("HardCodedStringLiteral")
public void update(DataSource ds) {
    // if the data source is from a deployment we don't need to refresh
    if (ds != null && ds.fromDeployment()) {
        setVisible(fromDeployment.element(), ds.fromDeployment());
        setVisible(noStatistics.element(), false);
        setVisible(refresh, false);
        setVisible(poolHeader, false);
        setVisible(activeConnections.element(), false);
        setVisible(maxUsedConnections.element(), false);
        setVisible(cacheHeader, false);
        setVisible(hitCount.element(), false);
        setVisible(missCount.element(), false);
    } else {
        List<Operation> operations = new ArrayList<>();
        setVisible(fromDeployment.element(), false);
        if (environment.isStandalone()) {
            operations.add(new Operation.Builder(ResourceAddress.root(), READ_RESOURCE_OPERATION).param(INCLUDE_RUNTIME, true).param(ATTRIBUTES_ONLY, true).build());
        } else {
            ResourceAddress address = AddressTemplate.of(SELECTED_HOST, SELECTED_SERVER).resolve(statementContext);
            operations.add(new Operation.Builder(address, READ_RESOURCE_OPERATION).param(INCLUDE_RUNTIME, true).param(ATTRIBUTES_ONLY, true).build());
        }
        if (ds == null) {
            operations.add(new Operation.Builder(dataSourceAddress, READ_RESOURCE_OPERATION).param(INCLUDE_RUNTIME, true).param(RECURSIVE, true).build());
        }
        dispatcher.execute(new Composite(operations), (CompositeResult result) -> {
            server.addServerAttributes(result.step(0).get(RESULT));
            if (ds == null) {
                dataSource.update(result.step(1).get(RESULT));
            }
            boolean statisticsEnabled = dataSource.isStatisticsEnabled();
            setVisible(noStatistics.element(), !statisticsEnabled);
            setVisible(refresh, statisticsEnabled);
            setVisible(poolHeader, statisticsEnabled);
            setVisible(activeConnections.element(), statisticsEnabled);
            setVisible(maxUsedConnections.element(), statisticsEnabled);
            setVisible(cacheHeader, statisticsEnabled);
            setVisible(hitCount.element(), statisticsEnabled);
            setVisible(missCount.element(), statisticsEnabled);
            // Do not simply hide the links, but add the hidden CSS class.
            // Important when constraints for the links are processed later.
            needsReloadWarning.element().classList.add(hidden);
            needsRestartWarning.element().classList.add(hidden);
            disabledWarning.element().classList.add(hidden);
            if (statisticsEnabled) {
                if (!dataSource.isEnabled()) {
                    disabledWarning.element().classList.remove(hidden);
                } else {
                    Elements.toggle(needsReloadWarning.element(), hidden, !server.needsReload());
                    Elements.toggle(needsRestartWarning.element(), hidden, !server.needsRestart());
                }
                // pool statistics
                ModelNode pool = ModelNodeHelper.failSafeGet(dataSource, "statistics/pool");
                if (pool.isDefined()) {
                    int available = pool.get("AvailableCount").asInt(0);
                    int active = pool.get("ActiveCount").asInt(0);
                    int maxUsed = pool.get("MaxUsedCount").asInt(0);
                    activeConnections.update(active, available);
                    maxUsedConnections.update(maxUsed, available);
                } else {
                    activeConnections.update(0, 0);
                    maxUsedConnections.update(0, 0);
                }
                // jdbc statistics
                ModelNode jdbc = ModelNodeHelper.failSafeGet(dataSource, "statistics/jdbc");
                if (jdbc.isDefined()) {
                    long accessed = jdbc.get("PreparedStatementCacheAccessCount").asLong(0);
                    long hit = jdbc.get("PreparedStatementCacheHitCount").asLong(0);
                    long missed = jdbc.get("PreparedStatementCacheMissCount").asLong(0);
                    hitCount.update(hit, accessed);
                    missCount.update(missed, accessed);
                } else {
                    hitCount.update(0, 0);
                    missCount.update(0, 0);
                }
            }
        });
    }
}
Also used : Composite(org.jboss.hal.dmr.Composite) ResourceAddress(org.jboss.hal.dmr.ResourceAddress) CompositeResult(org.jboss.hal.dmr.CompositeResult) SafeHtmlBuilder(com.google.gwt.safehtml.shared.SafeHtmlBuilder) ArrayList(java.util.ArrayList) Operation(org.jboss.hal.dmr.Operation) ModelNode(org.jboss.hal.dmr.ModelNode) Constraint(org.jboss.hal.meta.security.Constraint)

Example 22 with CompositeResult

use of org.jboss.hal.dmr.CompositeResult in project console by hal.

the class RealmsPresenter method reload.

@Override
protected void reload() {
    Composite composite = new Composite();
    composite.add(operation(CACHING_REALM_TEMPLATE));
    composite.add(operation(CUSTOM_MODIFIABLE_REALM_TEMPLATE));
    composite.add(operation(FILESYSTEM_REALM_TEMPLATE));
    composite.add(operation(LDAP_REALM_TEMPLATE));
    composite.add(operation(PROPERTIES_REALM_TEMPLATE));
    dispatcher.execute(composite, (CompositeResult result) -> {
        int i = 0;
        getView().updateCachingRealm(asNamedNodes(result.step(i++).get(RESULT).asPropertyList()));
        getView().updateCustomModifiableRealm(asNamedNodes(result.step(i++).get(RESULT).asPropertyList()));
        getView().updateFilesystemRealm(asNamedNodes(result.step(i++).get(RESULT).asPropertyList()));
        getView().updateLdapRealm(asNamedNodes(result.step(i++).get(RESULT).asPropertyList()));
        getView().updatePropertiesRealm(asNamedNodes(result.step(i++).get(RESULT).asPropertyList()));
    });
}
Also used : Composite(org.jboss.hal.dmr.Composite) CompositeResult(org.jboss.hal.dmr.CompositeResult)

Example 23 with CompositeResult

use of org.jboss.hal.dmr.CompositeResult in project console by hal.

the class SocketBindingGroupPresenter method saveClientMapping.

void saveClientMapping(Metadata metadata, ModelNode clientMapping, Map<String, Object> changedValues) {
    ResourceAddress address = SELECTED_TEMPLATE.append(INBOUND.templateSuffix()).resolve(statementContext, inbound);
    OperationFactory operationFactory = new OperationFactory(name -> CLIENT_MAPPINGS + "[" + clientMapping.get(INDEX).asInt() + "]." + name);
    Composite operations = operationFactory.fromChangeSet(address, changedValues, metadata);
    dispatcher.execute(operations, (CompositeResult result) -> {
        MessageEvent.fire(getEventBus(), Message.success(resources.messages().modifySingleResourceSuccess(Names.CLIENT_MAPPING)));
        reloadClientMappings();
    });
}
Also used : Composite(org.jboss.hal.dmr.Composite) ResourceAddress(org.jboss.hal.dmr.ResourceAddress) CompositeResult(org.jboss.hal.dmr.CompositeResult) OperationFactory(org.jboss.hal.core.OperationFactory)

Example 24 with CompositeResult

use of org.jboss.hal.dmr.CompositeResult in project console by hal.

the class ReadAuthentication method call.

@Override
public Completable call(FlowContext context) {
    logger.debug("Read authentication");
    ResourceAddress address = CORE_SERVICE_TEMPLATE.resolve(statementContext);
    Operation opAuthorization = new Operation.Builder(address, READ_CHILDREN_RESOURCES_OPERATION).param(CHILD_TYPE, ACCESS).param(INCLUDE_RUNTIME, true).param(RECURSIVE_DEPTH, 1).build();
    Operation opWhoami = new Operation.Builder(ResourceAddress.root(), WHOAMI).param(VERBOSE, true).build();
    return dispatcher.execute(new Composite(opAuthorization, opWhoami)).doOnSuccess((CompositeResult compositeResult) -> {
        ModelNode result = compositeResult.step(0).get(RESULT);
        if (result.hasDefined(AUTHORIZATION)) {
            result = result.get(AUTHORIZATION);
            // provider
            AccessControlProvider accessControlProvider = asEnumValue(result, PROVIDER, AccessControlProvider::valueOf, SIMPLE);
            environment.setAccessControlProvider(accessControlProvider);
            // standard roles
            if (result.hasDefined(STANDARD_ROLE_NAMES)) {
                result.get(STANDARD_ROLE_NAMES).asList().stream().map(node -> new Role(node.asString())).forEach(role -> environment.getRoles().add(role));
            }
            // scoped roles
            if (!environment.isStandalone()) {
                if (result.hasDefined(HOST_SCOPED_ROLE)) {
                    result.get(HOST_SCOPED_ROLE).asPropertyList().stream().map(property -> scopedRole(property, Role.Type.HOST, HOSTS)).forEach(role -> environment.getRoles().add(role));
                }
                if (result.hasDefined(SERVER_GROUP_SCOPED_ROLE)) {
                    result.get(SERVER_GROUP_SCOPED_ROLE).asPropertyList().stream().map(property -> scopedRole(property, Role.Type.SERVER_GROUP, SERVER_GROUPS)).forEach(role -> environment.getRoles().add(role));
                }
            }
        } else {
            logger.warn("Unable to read {} (insufficient rights?). Use :whoami values as fallback.", CORE_SERVICE_TEMPLATE.append("access=authorization"));
            ModelNode resultWhoami = compositeResult.step(1).get(RESULT);
            environment.setAccessControlProvider(RBAC);
            environment.getRoles().clear();
            if (resultWhoami.hasDefined(ROLES)) {
                resultWhoami.get(ROLES).asList().stream().map(node -> new Role(node.asString())).forEach(role -> environment.getRoles().add(role));
            } else if (resultWhoami.hasDefined(MAPPED_ROLES)) {
                resultWhoami.get(MAPPED_ROLES).asList().stream().map(node -> new Role(node.asString())).forEach(role -> environment.getRoles().add(role));
            }
        }
    }).onErrorResumeNext(throwable -> {
        if (throwable instanceof DispatchFailure) {
            logger.error("Unable to read {}. Use :whoami values as fallback.", CORE_SERVICE_TEMPLATE);
            return Single.just(new CompositeResult(new ModelNode()));
        } else {
            return Single.error(throwable);
        }
    }).toCompletable();
}
Also used : ModelNode(org.jboss.hal.dmr.ModelNode) Completable(rx.Completable) Environment(org.jboss.hal.config.Environment) StatementContext(org.jboss.hal.meta.StatementContext) AccessControlProvider(org.jboss.hal.config.AccessControlProvider) LoggerFactory(org.slf4j.LoggerFactory) DispatchFailure(org.jboss.hal.dmr.dispatch.DispatchFailure) ResourceAddress(org.jboss.hal.dmr.ResourceAddress) FlowContext(org.jboss.hal.flow.FlowContext) ModelNodeHelper.asEnumValue(org.jboss.hal.dmr.ModelNodeHelper.asEnumValue) Inject(javax.inject.Inject) Property(org.jboss.hal.dmr.Property) Single(rx.Single) AddressTemplate(org.jboss.hal.meta.AddressTemplate) 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) Composite(org.jboss.hal.dmr.Composite) Dispatcher(org.jboss.hal.dmr.dispatch.Dispatcher) ModelDescriptionConstants(org.jboss.hal.dmr.ModelDescriptionConstants) Role(org.jboss.hal.config.Role) Collections(java.util.Collections) Role(org.jboss.hal.config.Role) Composite(org.jboss.hal.dmr.Composite) ResourceAddress(org.jboss.hal.dmr.ResourceAddress) CompositeResult(org.jboss.hal.dmr.CompositeResult) AccessControlProvider(org.jboss.hal.config.AccessControlProvider) DispatchFailure(org.jboss.hal.dmr.dispatch.DispatchFailure) Operation(org.jboss.hal.dmr.Operation) ModelNode(org.jboss.hal.dmr.ModelNode)

Example 25 with CompositeResult

use of org.jboss.hal.dmr.CompositeResult in project console by hal.

the class ReadEnvironment method call.

@Override
public Completable call(FlowContext context) {
    logger.debug("Read environment");
    Keycloak keycloak = keycloakHolder.getKeycloak();
    environment.setSingleSignOn(keycloak != null);
    if (keycloak != null) {
        logger.debug("Keycloak token: {}", keycloak.token);
    }
    List<Operation> ops = new ArrayList<>();
    ops.add(new Operation.Builder(ResourceAddress.root(), READ_RESOURCE_OPERATION).param(ATTRIBUTES_ONLY, true).param(INCLUDE_RUNTIME, true).build());
    ops.add(new Operation.Builder(ResourceAddress.root(), WHOAMI).param(VERBOSE, true).build());
    ops.add(new Operation.Builder(ResourceAddress.root(), READ_CHILDREN_RESOURCES_OPERATION).param(CHILD_TYPE, CORE_SERVICE).param(RECURSIVE, false).build());
    return dispatcher.execute(new Composite(ops)).doOnSuccess((CompositeResult result) -> {
        ModelNode node = result.step(0).get(RESULT);
        // operation mode
        OperationMode operationMode = asEnumValue(node, LAUNCH_TYPE, (name) -> OperationMode.valueOf(name), OperationMode.UNDEFINED);
        environment.setOperationMode(operationMode);
        logger.debug("Operation mode: {}", operationMode);
        // name and org
        if (node.get(NAME).isDefined()) {
            String name = node.get(NAME).asString();
            environment.setName(name);
        }
        String orgAttribute = environment.isStandalone() ? ORGANIZATION : DOMAIN_ORGANIZATION;
        if (node.get(orgAttribute).isDefined()) {
            String org = node.get(orgAttribute).asString();
            environment.setOrganization(org);
        }
        // server info
        environment.setInstanceInfo(node.get(PRODUCT_NAME).asString(), node.get(PRODUCT_VERSION).asString(), node.get(RELEASE_CODENAME).asString(), node.get(RELEASE_VERSION).asString());
        // management version
        Version version = ManagementModel.parseVersion(node);
        environment.setManagementVersion(version);
        logger.debug("Management model version: {}", version);
        if (environment.isStandalone()) {
            Server.STANDALONE.addServerAttributes(node);
        }
        // user info
        if (environment.isSingleSignOn()) {
            user.setName(keycloak.userProfile.username);
            // are not supported on the javascript side when run in the browser.
            if (keycloak.realmAccess != null && keycloak.realmAccess.roles != null) {
                for (int i = 0; i < keycloak.realmAccess.roles.length; i++) {
                    String role = keycloak.realmAccess.roles[i];
                    user.addRole(new Role(role));
                }
            }
        } else {
            ModelNode whoami = result.step(1).get(RESULT);
            String username = whoami.get("identity").get("username").asString();
            user.setName(username);
            if (whoami.hasDefined("mapped-roles")) {
                List<ModelNode> roles = whoami.get("mapped-roles").asList();
                for (ModelNode role : roles) {
                    String roleName = role.asString();
                    user.addRole(new Role(roleName));
                }
            }
        }
        user.setAuthenticated(true);
        logger.debug("User info: {} {}", user.getName(), user.getRoles());
        ModelNode step = result.step(2).get(RESULT);
        environment.setPatchingEnabled(!environment.isStandalone() || step.get(PATCHING).isDefined());
    }).toCompletable();
}
Also used : OperationMode(org.jboss.hal.config.OperationMode) ModelNode(org.jboss.hal.dmr.ModelNode) Completable(rx.Completable) Version(org.jboss.hal.config.Version) Logger(org.slf4j.Logger) CompositeResult(org.jboss.hal.dmr.CompositeResult) Environment(org.jboss.hal.config.Environment) Operation(org.jboss.hal.dmr.Operation) LoggerFactory(org.slf4j.LoggerFactory) KeycloakHolder(org.jboss.hal.config.keycloak.KeycloakHolder) ResourceAddress(org.jboss.hal.dmr.ResourceAddress) ManagementModel(org.jboss.hal.meta.ManagementModel) FlowContext(org.jboss.hal.flow.FlowContext) ModelNodeHelper.asEnumValue(org.jboss.hal.dmr.ModelNodeHelper.asEnumValue) ArrayList(java.util.ArrayList) Inject(javax.inject.Inject) Composite(org.jboss.hal.dmr.Composite) List(java.util.List) Dispatcher(org.jboss.hal.dmr.dispatch.Dispatcher) ModelDescriptionConstants(org.jboss.hal.dmr.ModelDescriptionConstants) Role(org.jboss.hal.config.Role) Keycloak(org.jboss.hal.config.keycloak.Keycloak) User(org.jboss.hal.config.User) Server(org.jboss.hal.core.runtime.server.Server) Composite(org.jboss.hal.dmr.Composite) CompositeResult(org.jboss.hal.dmr.CompositeResult) ArrayList(java.util.ArrayList) Operation(org.jboss.hal.dmr.Operation) Role(org.jboss.hal.config.Role) Version(org.jboss.hal.config.Version) ArrayList(java.util.ArrayList) List(java.util.List) Keycloak(org.jboss.hal.config.keycloak.Keycloak) ModelNode(org.jboss.hal.dmr.ModelNode) OperationMode(org.jboss.hal.config.OperationMode)

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