@Override protected void executeRuntimeStep(OperationContext context, ModelNode operation) throws OperationFailedException { // get the channel name and channel attribute PathAddress pathAddress = PathAddress.pathAddress(operation.require(OP_ADDR)); String channelName = pathAddress.getElement(pathAddress.size() - 1).getValue(); String attrName = operation.require(NAME).asString(); ChannelMetrics metric = ChannelMetrics.getStat(attrName); // lookup the channel ServiceName channelServiceName = ChannelInstanceResource.CHANNEL_PARENT.append(channelName); ServiceController<?> controller = context.getServiceRegistry(false).getService(channelServiceName); // check that the service has been installed and started boolean started = controller != null && controller.getValue() != null; ModelNode result = new ModelNode(); if (metric == null) { context.getFailureDescription().set(JGroupsMessages.MESSAGES.unknownMetric(attrName)); } else if (!started) { // when the cache service is not available, return a null result } else { JChannel channel = (JChannel) controller.getValue(); switch (metric) { case ADDRESS: result.set(channel.getAddressAsString()); break; case ADDRESS_AS_UUID: result.set(channel.getAddressAsUUID()); break; case DISCARD_OWN_MESSAGES: result.set(channel.getDiscardOwnMessages()); break; case NUM_TASKS_IN_TIMER: result.set(channel.getNumberOfTasksInTimer()); break; case NUM_TIMER_THREADS: result.set(channel.getTimerThreads()); break; case RECEIVED_BYTES: result.set(channel.getReceivedBytes()); break; case RECEIVED_MESSAGES: result.set(channel.getReceivedMessages()); break; case SENT_BYTES: result.set(channel.getSentBytes()); break; case SENT_MESSAGES: result.set(channel.getSentMessages()); break; case STATE: result.set(channel.getState()); break; case STATS_ENABLED: result.set(channel.statsEnabled()); break; case VERSION: result.set(JChannel.getVersion()); break; case VIEW: result.set(channel.getViewAsString()); break; } context.getResult().set(result); } context.completeStep(OperationContext.ResultHandler.NOOP_RESULT_HANDLER); }
@Override public void execute(final OperationContext context, final ModelNode operation) throws OperationFailedException { // read /subsystem=jgroups/stack=* for update final Resource resource = context.readResourceForUpdate(PathAddress.EMPTY_ADDRESS); final ModelNode subModel = resource.getModel(); // validate the protocol type to be added ModelNode type = ProtocolResource.TYPE.validateOperation(operation); PathElement protocolRelativePath = PathElement.pathElement(ModelKeys.PROTOCOL, type.asString()); // if child resource already exists, throw OFE if (resource.hasChild(protocolRelativePath)) { throw JGroupsMessages.MESSAGES.protocolAlreadyDefined(protocolRelativePath.toString()); } // now get the created model Resource childResource = context.createResource(PathAddress.pathAddress(protocolRelativePath)); final ModelNode protocol = childResource.getModel(); // Process attributes for (final AttributeDefinition attribute : attributes) { // we use PROPERTIES only to allow the user to pass in a list of properties on store add // commands // don't copy these into the model if (attribute.getName().equals(ModelKeys.PROPERTIES)) continue; attribute.validateAndSet(operation, protocol); } // get the current list of protocol names and add the new protocol // this list is used to maintain order ModelNode protocols = subModel.get(ModelKeys.PROTOCOLS); if (!protocols.isDefined()) { protocols.setEmptyList(); } protocols.add(type); // Process type specific properties if required process(subModel, operation); // The protocol parameters <property name=>value</property> if (operation.hasDefined(ModelKeys.PROPERTIES)) { for (Property property : operation.get(ModelKeys.PROPERTIES).asPropertyList()) { // create a new property=name resource final Resource param = context.createResource( PathAddress.pathAddress( protocolRelativePath, PathElement.pathElement(ModelKeys.PROPERTY, property.getName()))); final ModelNode value = property.getValue(); if (!value.isDefined()) { throw JGroupsMessages.MESSAGES.propertyNotDefined( property.getName(), protocolRelativePath.toString()); } // set the value of the property param.getModel().get(ModelDescriptionConstants.VALUE).set(value); } } // This needs a reload reloadRequiredStep(context); context.completeStep(); }