/*
* Copyright 2013 Red Hat Inc. and/or its affiliates and other contributors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* http://www.apache.org/licenses/LICENSE-2.0
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.switchyard.as7.extension.admin;
import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.INTERFACE;
import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.NAME;
import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.PROPERTIES;
import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.TYPE;
import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.VALUE;
import static org.switchyard.as7.extension.SwitchYardModelConstants.APPLICATION;
import static org.switchyard.as7.extension.SwitchYardModelConstants.ARTIFACTS;
import static org.switchyard.as7.extension.SwitchYardModelConstants.AVERAGE_TIME;
import static org.switchyard.as7.extension.SwitchYardModelConstants.COMPONENT_SERVICES;
import static org.switchyard.as7.extension.SwitchYardModelConstants.CONFIGURATION;
import static org.switchyard.as7.extension.SwitchYardModelConstants.ENABLED;
import static org.switchyard.as7.extension.SwitchYardModelConstants.FAULT_COUNT;
import static org.switchyard.as7.extension.SwitchYardModelConstants.FROM;
import static org.switchyard.as7.extension.SwitchYardModelConstants.GATEWAYS;
import static org.switchyard.as7.extension.SwitchYardModelConstants.IMPLEMENTATION;
import static org.switchyard.as7.extension.SwitchYardModelConstants.IMPLEMENTATION_CONFIGURATION;
import static org.switchyard.as7.extension.SwitchYardModelConstants.MAX_REQUESTS;
import static org.switchyard.as7.extension.SwitchYardModelConstants.MAX_TIME;
import static org.switchyard.as7.extension.SwitchYardModelConstants.MIN_TIME;
import static org.switchyard.as7.extension.SwitchYardModelConstants.OPERATIONS;
import static org.switchyard.as7.extension.SwitchYardModelConstants.PROMOTED_REFERENCE;
import static org.switchyard.as7.extension.SwitchYardModelConstants.PROMOTED_SERVICE;
import static org.switchyard.as7.extension.SwitchYardModelConstants.REFERENCES;
import static org.switchyard.as7.extension.SwitchYardModelConstants.SERVICES;
import static org.switchyard.as7.extension.SwitchYardModelConstants.STATE;
import static org.switchyard.as7.extension.SwitchYardModelConstants.SUCCESS_COUNT;
import static org.switchyard.as7.extension.SwitchYardModelConstants.THROTTLING;
import static org.switchyard.as7.extension.SwitchYardModelConstants.TIME_PERIOD;
import static org.switchyard.as7.extension.SwitchYardModelConstants.TO;
import static org.switchyard.as7.extension.SwitchYardModelConstants.TOTAL_COUNT;
import static org.switchyard.as7.extension.SwitchYardModelConstants.TOTAL_TIME;
import static org.switchyard.as7.extension.SwitchYardModelConstants.TRANSFORMERS;
import static org.switchyard.as7.extension.SwitchYardModelConstants.URL;
import static org.switchyard.as7.extension.SwitchYardModelConstants.VALIDATORS;
import java.math.BigDecimal;
import java.util.Map;
import org.jboss.dmr.ModelNode;
import org.switchyard.admin.Application;
import org.switchyard.admin.Binding;
import org.switchyard.admin.ComponentReference;
import org.switchyard.admin.ComponentService;
import org.switchyard.admin.MessageMetrics;
import org.switchyard.admin.Reference;
import org.switchyard.admin.Service;
import org.switchyard.admin.ServiceOperation;
import org.switchyard.admin.Throttling;
import org.switchyard.admin.Transformer;
import org.switchyard.admin.Validator;
import org.switchyard.config.model.switchyard.ArtifactModel;
/**
* ModelNodeCreationUtil
*
* Utility class for creating AS7 management {@link ModelNode} object from
* {@link org.switchyard.admin.SwitchYard} admin objects.
*
* @author Rob Cernich
*/
final public class ModelNodeCreationUtil {
/**
* Creates a new {@link ModelNode} tree from the {@link Application}. The
* tree has the form: <br>
* <code><pre>
* "name" => "name",
* "services" => [
* {
* "name" => "serviceName",
* "application" => "name",
* "interface" => "interfaceName",
* "promotedService" => "promotedServiceName",
* "gateways" => [
* {
* "type" => "typeName",
* "configuration" => "<?binding.foo ..."
* },
* ...
* ],
* },
* ...
* ],
* "references" => [
* {
* "name" => "referenceName",
* "application" => "name",
* "interface" => "interfaceName",
* "promotedReference" => "promotedReferenceName",
* "gateways" => [
* {
* "type" => "typeName",
* "configuration" => "<?binding.foo ..."
* },
* ...
* ],
* },
* ...
* ],
* "componentServices" => [
* {
* "name" => "serviceName",
* "application" => "name",
* "interface" => "interfaceName",
* "implementation" => "implementationTypeName",
* "references" => [
* {
* "name" => "referenceName",
* "interface" => "interfaceName"
* },
* ...
* ],
* },
* ...
* ],
* "transformers" => [
* {
* "from" => "fromType",
* "to" => "toType",
* "type" => "transformerType",
* },
* ...
* ],
* "artifacts" => [
* {
* "name" => "nameType",
* "url" => "urlType",
* },
* ...
* ],
* "validators" => [
* {
* "name" => "typeName",
* "type" => "XML",
* },
* ...
* ],
* "properties" => [
* {
* "key" => "some.key",
* "value" => "value",
* },
* ...
* ]
* </pre></code>
*
* @param application the {@link Application} used to populate the node.
* @return a new {@link ModelNode}
*/
public static ModelNode createApplicationNode(Application application) {
ModelNode applicationNode = new ModelNode();
ModelNode servicesNode = new ModelNode();
for (Service service : application.getServices()) {
servicesNode.add(createServiceNode(service));
}
ModelNode referencesNode = new ModelNode();
for (Reference reference : application.getReferences()) {
referencesNode.add(createReferenceNode(reference));
}
ModelNode componentServicesNode = new ModelNode();
for (ComponentService componentService : application.getComponentServices()) {
componentServicesNode.add(createComopnentServiceNode(componentService));
}
ModelNode transformersNode = new ModelNode();
for (Transformer transformer : application.getTransformers()) {
transformersNode.add(createTransformerNode(transformer));
}
ModelNode artifactsNode = new ModelNode();
if (application.getConfig().getArtifacts() != null) {
for (ArtifactModel artifact : application.getConfig().getArtifacts().getArtifacts()) {
artifactsNode.add(createArtifactNode(artifact));
}
}
ModelNode validatorsNode = new ModelNode();
if (application.getValidators() != null) {
for (Validator validator : application.getValidators()) {
validatorsNode.add(createValidatorNode(validator));
}
}
ModelNode propertiesNode = new ModelNode();
if (application.getProperties() != null) {
for (Map.Entry<String, String> property : application.getProperties().entrySet()) {
ModelNode propertyNode = new ModelNode();
propertyNode.get("key").set(property.getKey());
propertyNode.get(VALUE).set(property.getValue());
propertiesNode.add(propertyNode);
}
}
applicationNode.get(NAME).set(application.getName().toString());
applicationNode.get(SERVICES).set(servicesNode);
applicationNode.get(REFERENCES).set(referencesNode);
applicationNode.get(COMPONENT_SERVICES).set(componentServicesNode);
applicationNode.get(TRANSFORMERS).set(transformersNode);
applicationNode.get(ARTIFACTS).set(artifactsNode);
applicationNode.get(VALIDATORS).set(validatorsNode);
applicationNode.get(PROPERTIES).set(propertiesNode);
return applicationNode;
}
/**
* Creates a new {@link ModelNode} tree from the {@link Reference}. The tree
* has the form: <br>
* <code><pre>
* "name" => "referenceName",
* "application" => "name",
* "interface" => "interfaceName",
* "promotedReference" => "promotedReferenceName",
* "gateways" => [
* {
* "type" => "typeName",
* "configuration" => "<?binding.foo ..."
* },
* ...
* ]
* </pre></code>
*
* @param reference the {@link Reference} used to populate the node.
* @return a new {@link ModelNode}
*/
public static ModelNode createReferenceNode(Reference reference) {
ModelNode referenceNode = new ModelNode();
referenceNode.get(NAME).set(reference.getName().toString());
referenceNode.get(APPLICATION).set(reference.getApplication().getName().toString());
String interfaceName = reference.getInterface();
if (interfaceName == null) {
referenceNode.get(INTERFACE);
} else {
referenceNode.get(INTERFACE).set(interfaceName);
}
String promotedReference = reference.getPromotedReference();
if (promotedReference == null) {
referenceNode.get(PROMOTED_REFERENCE);
} else {
referenceNode.get(PROMOTED_REFERENCE).set(promotedReference);
}
ModelNode gatewaysNode = new ModelNode();
for (Binding gateway : reference.getGateways()) {
gatewaysNode.add(createGateway(gateway));
}
referenceNode.get(GATEWAYS).set(gatewaysNode);
return referenceNode;
}
/**
* Creates a new {@link ModelNode} tree from the {@link Service}. The tree
* has the form: <br>
* <code><pre>
* "name" => "serviceName",
* "application" => "name",
* "interface" => "interfaceName",
* "promotedService" => "promotedServiceName",
* "gateways" => [
* {
* "type" => "typeName",
* "configuration" => "<?binding.foo ..."
* },
* ...
* ],
* "throttling" => {
* "enabled" => "true",
* "maxRequests" => "maxRequests",
* "timePeriod" => "timePeriod"
* }
* </pre></code>
*
* @param service the {@link Service} used to populate the node.
* @return a new {@link ModelNode}
*/
public static ModelNode createServiceNode(Service service) {
ModelNode serviceNode = new ModelNode();
serviceNode.get(NAME).set(service.getName().toString());
serviceNode.get(APPLICATION).set(service.getApplication().getName().toString());
String interfaceName = service.getInterface();
if (interfaceName == null) {
serviceNode.get(INTERFACE);
} else {
serviceNode.get(INTERFACE).set(interfaceName);
}
ComponentService promotedService = service.getPromotedService();
if (promotedService == null) {
serviceNode.get(PROMOTED_SERVICE);
} else {
serviceNode.get(PROMOTED_SERVICE).set(promotedService.getName().toString());
}
ModelNode gatewaysNode = new ModelNode();
for (Binding gateway : service.getGateways()) {
gatewaysNode.add(createGateway(gateway));
}
serviceNode.get(GATEWAYS).set(gatewaysNode);
serviceNode.get(THROTTLING).set(createThrottlingToNode(service.getThrottling()));
return serviceNode;
}
/**
* Creates a new {@link ModelNode} tree from the {@link ComponentService}.
* The tree has the form: <br>
* <code><pre>
* "name" => "serviceName",
* "application" => "name",
* "interface" => "interfaceName",
* "implementation" => "implementationTypeName",
* "references" => [
* {
* "name" => "referenceName",
* "interface" => "interfaceName"
* },
* ...
* ]
* </pre></code>
*
* @param service the {@link ComponentService} used to populate the node.
* @return a new {@link ModelNode}
*/
public static ModelNode createComopnentServiceNode(ComponentService service) {
ModelNode serviceNode = new ModelNode();
serviceNode.get(NAME).set(service.getName().toString());
serviceNode.get(APPLICATION).set(service.getApplication().getName().toString());
String interfaceName = service.getInterface();
if (interfaceName == null) {
serviceNode.get(INTERFACE);
} else {
serviceNode.get(INTERFACE).set(interfaceName);
}
String implementation = service.getImplementation();
if (implementation == null) {
serviceNode.get(IMPLEMENTATION);
} else {
serviceNode.get(IMPLEMENTATION).set(implementation);
}
String implementationConfiguration = service.getImplementationConfiguration();
if (implementationConfiguration == null) {
serviceNode.get(IMPLEMENTATION_CONFIGURATION);
} else {
serviceNode.get(IMPLEMENTATION_CONFIGURATION).set(implementationConfiguration);
}
ModelNode referencesNode = new ModelNode();
for (ComponentReference reference : service.getReferences()) {
referencesNode.add(createComponentReferenceNode(reference));
}
serviceNode.get(REFERENCES).set(referencesNode);
return serviceNode;
}
/**
* Creates a new {@link ModelNode} tree from the {@link Reference}. The tree
* has the form: <br>
* <code><pre>
* "name" => "referenceName",
* "application => "applicationName",
* </pre></code>
*
* @param reference the {@link Reference} used to populate the node.
* @return a new {@link ModelNode}
*/
public static ModelNode createSimpleReferenceNode(Reference reference) {
ModelNode referenceNode = new ModelNode();
referenceNode.get(NAME).set(reference.getName().toString());
referenceNode.get(APPLICATION).set(reference.getApplication().getName().toString());
return referenceNode;
}
/**
* Creates a new {@link ModelNode} tree from the {@link Service}. The tree
* has the form: <br>
* <code><pre>
* "name" => "serviceName",
* "application => "applicationName",
* </pre></code>
*
* @param service the {@link Service} used to populate the node.
* @return a new {@link ModelNode}
*/
public static ModelNode createSimpleServiceNode(Service service) {
ModelNode serviceNode = new ModelNode();
serviceNode.get(NAME).set(service.getName().toString());
serviceNode.get(APPLICATION).set(service.getApplication().getName().toString());
return serviceNode;
}
/**
* Creates a new {@link ModelNode} tree from the {@link Service}. The tree
* has the form: <br>
* <code><pre>
* "name" => "name",
* "type" => "typeName",
* "configuration" => "<?binding.foo ..."
* "state" => "STARTED",
* </pre></code>
*
* @param binding the {@link Binding} used to populate the node.
* @return a new {@link ModelNode}
*/
public static ModelNode createGateway(Binding binding) {
ModelNode gatewayNode = new ModelNode();
if (binding.getName() == null) {
gatewayNode.get(NAME);
} else {
gatewayNode.get(NAME).set(binding.getName());
}
if (binding.getType() == null) {
gatewayNode.get(TYPE);
} else {
gatewayNode.get(TYPE).set(binding.getType());
}
if (binding.getConfiguration() == null) {
gatewayNode.get(CONFIGURATION);
} else {
gatewayNode.get(CONFIGURATION).set(binding.getConfiguration());
}
gatewayNode.get(STATE).set(binding.getState().toString());
return gatewayNode;
}
/**
* Creates a new {@link ModelNode} tree from the {@link ComponentReference}.
* The tree has the form: <br>
* <code><pre>
* "name" => "referenceName",
* "interface" => "interfaceName"
* </pre></code>
*
* @param reference the {@link ComponentReference} used to populate the
* node.
* @return a new {@link ModelNode}
*/
public static ModelNode createComponentReferenceNode(ComponentReference reference) {
ModelNode referenceNode = new ModelNode();
if (reference.getName() == null) {
referenceNode.get(NAME);
} else {
referenceNode.get(NAME).set(reference.getName().toString());
}
if (reference.getInterface() == null) {
referenceNode.get(INTERFACE);
} else {
referenceNode.get(INTERFACE).set(reference.getInterface());
}
return referenceNode;
}
/**
* Creates a new {@link ModelNode} tree from the {@link Transformer}. The
* tree has the form: <br>
* <code><pre>
* "from" => "fromType",
* "to" => "toType",
* "type" => "transformerType",
* </pre></code>
*
* @param transformation the {@link Transformer} used to populate the node.
* @return a new {@link ModelNode}
*/
public static ModelNode createTransformerNode(Transformer transformation) {
ModelNode transformationNode = new ModelNode();
if (transformation.getFrom() == null) {
transformationNode.get(FROM);
} else {
transformationNode.get(FROM).set(transformation.getFrom().toString());
}
if (transformation.getTo() == null) {
transformationNode.get(TO);
} else {
transformationNode.get(TO).set(transformation.getTo().toString());
}
if (transformation.getType() == null) {
transformationNode.get(TYPE);
} else {
transformationNode.get(TYPE).set(transformation.getType());
}
return transformationNode;
}
/**
* Creates a new {@link ModelNode} tree from the {@link ArtifactModel}. The
* tree has the form: <br>
* <code><pre>
* "name" => "nameType",
* "url" => "urlType",
* </pre></code>
*
* @param artifact the {@link ArtifactModel} used to populate the node.
* @return a new {@link ModelNode}
*/
public static ModelNode createArtifactNode(ArtifactModel artifact) {
ModelNode artifactNode = new ModelNode();
artifactNode.get(NAME).set(artifact.getName());
artifactNode.get(URL).set(artifact.getURL());
return artifactNode;
}
/**
* Creates a new {@link ModelNode} tree from the validtors. The tree has the
* form: <br>
* <code><pre>
* "name" => "typeName",
* "type" => "XML",
* </pre></code>
*
* @param validator the {@link Validator} used to populate the node.
* @return a new {@link ModelNode}
*/
public static ModelNode createValidatorNode(Validator validator) {
ModelNode validatorNode = new ModelNode();
if (validator.getName() == null) {
validatorNode.get(NAME);
} else {
validatorNode.get(NAME).set(validator.getName().toString());
}
if (validator.getType() == null) {
validatorNode.get(TYPE);
} else {
validatorNode.get(TYPE).set(validator.getType());
}
return validatorNode;
}
/**
* Adds metrics to an existing node from the {@link MessageMetrics}. The
* tree has the form: <br>
* <code><pre>
* "successCount" => "successCount",
* "faultCount" => "faultCount",
* "totalCount" => "totalCount",
* "averageTime" => "averageTime",
* "minTime" => "minTime",
* "maxTime" => "maxTime",
* "totalTime" => "totalTime"
* </pre></code>
*
* @param node the node to add metrics to
* @param metrics the metrics to add to the node
* @return a new {@link ModelNode}
*/
public static ModelNode addMetricsToNode(ModelNode node, MessageMetrics metrics) {
node.get(SUCCESS_COUNT).set(metrics.getSuccessCount());
node.get(FAULT_COUNT).set(metrics.getFaultCount());
node.get(TOTAL_COUNT).set(metrics.getTotalCount());
node.get(AVERAGE_TIME).set(BigDecimal.valueOf(metrics.getAverageProcessingTime()));
node.get(MIN_TIME).set(metrics.getMinProcessingTime());
node.get(MAX_TIME).set(metrics.getMaxProcessingTime());
node.get(TOTAL_TIME).set(metrics.getTotalProcessingTime());
return node;
}
/**
* Creates a new {@link ModelNode} tree from the {@link Reference} for
* metrics. The tree has the form: <br>
* <code><pre>
* "name" => "referenceName",
* "application" => "name",
* "successCount" => "successCount",
* "faultCount" => "faultCount",
* "totalCount" => "totalCount",
* "averageTime" => "averageTime",
* "minTime" => "minTime",
* "maxTime" => "maxTime",
* "totalTime" => "totalTime",
* "gateways" => [
* {
* "name" => "bindingName",
* "type" => "bindingType",
* "successCount" => "successCount",
* "faultCount" => "faultCount",
* "totalCount" => "totalCount",
* "averageTime" => "averageTime",
* "minTime" => "minTime",
* "maxTime" => "maxTime",
* "totalTime" => "totalTime",
* },
* ...
* ],
* "operations" => [
* {
* "name" => "operationName",
* "successCount" => "successCount",
* "faultCount" => "faultCount",
* "totalCount" => "totalCount",
* "averageTime" => "averageTime",
* "minTime" => "minTime",
* "maxTime" => "maxTime",
* "totalTime" => "totalTime",
* },
* ...
* ]
* </pre></code>
*
* @param reference the {@link Reference} used to populate the node.
* @return a new {@link ModelNode}
*/
public static ModelNode createReferenceMetricsNode(Reference reference) {
ModelNode referenceNode = new ModelNode();
referenceNode.get(NAME).set(reference.getName().toString());
referenceNode.get(APPLICATION).set(reference.getApplication().getName().toString());
addMetricsToNode(referenceNode, reference.getMessageMetrics());
ModelNode gatewaysNode = new ModelNode();
for (Binding gateway : reference.getGateways()) {
ModelNode gatewayNode = new ModelNode();
gatewayNode.get(NAME).set(gateway.getName());
gatewayNode.get(TYPE).set(gateway.getType());
addMetricsToNode(gatewayNode, gateway.getMessageMetrics());
gatewaysNode.add(gatewayNode);
}
referenceNode.get(GATEWAYS).set(gatewaysNode);
ModelNode operationsNode = new ModelNode();
for (ServiceOperation operation : reference.getServiceOperations()) {
ModelNode operationNode = new ModelNode();
operationNode.get(NAME).set(operation.getName());
addMetricsToNode(operationNode, operation.getMessageMetrics());
operationsNode.add(operationNode);
}
referenceNode.get(OPERATIONS).set(operationsNode);
return referenceNode;
}
/**
* Creates a new {@link ModelNode} tree from the {@link Service} for
* metrics. The tree has the form: <br>
* <code><pre>
* "name" => "serviceName",
* "application" => "name",
* "successCount" => "successCount",
* "faultCount" => "faultCount",
* "totalCount" => "totalCount",
* "averageTime" => "averageTime",
* "minTime" => "minTime",
* "maxTime" => "maxTime",
* "totalTime" => "totalTime",
* "operations" => [
* {
* "name" => "operationName",
* "successCount" => "successCount",
* "faultCount" => "faultCount",
* "totalCount" => "totalCount",
* "averageTime" => "averageTime",
* "minTime" => "minTime",
* "maxTime" => "maxTime",
* "totalTime" => "totalTime",
* },
* ...
* ],
* "references" => [
* {
* "name" => "referenceName",
* "successCount" => "successCount",
* "faultCount" => "faultCount",
* "totalCount" => "totalCount",
* "averageTime" => "averageTime",
* "minTime" => "minTime",
* "maxTime" => "maxTime",
* "totalTime" => "totalTime",
* },
* ...
* ],
* "gateways" => [
* {
* "name" => "bindingName",
* "type" => "bindingType",
* "successCount" => "successCount",
* "faultCount" => "faultCount",
* "totalCount" => "totalCount",
* "averageTime" => "averageTime",
* "minTime" => "minTime",
* "maxTime" => "maxTime",
* "totalTime" => "totalTime",
* },
* ...
* ]
* </pre></code>
*
* @param service the {@link Service} used to populate the node.
* @return a new {@link ModelNode}
*/
public static ModelNode createServiceMetricsNode(Service service) {
ModelNode serviceNode = new ModelNode();
serviceNode.get(NAME).set(service.getName().toString());
serviceNode.get(APPLICATION).set(service.getApplication().getName().toString());
addMetricsToNode(serviceNode, service.getPromotedService().getMessageMetrics());
ModelNode operationsNode = new ModelNode();
for (ServiceOperation operation : service.getPromotedService().getServiceOperations()) {
ModelNode operationNode = new ModelNode();
operationNode.get(NAME).set(operation.getName());
addMetricsToNode(operationNode, operation.getMessageMetrics());
operationsNode.add(operationNode);
}
serviceNode.get(OPERATIONS).set(operationsNode);
ModelNode referencesNode = new ModelNode();
for (ComponentReference reference : service.getPromotedService().getReferences()) {
ModelNode referenceNode = new ModelNode();
referenceNode.get(NAME).set(reference.getName().toString());
addMetricsToNode(referenceNode, reference.getMessageMetrics());
referencesNode.add(referenceNode);
}
serviceNode.get(REFERENCES).set(referencesNode);
ModelNode gatewaysNode = new ModelNode();
for (Binding gateway : service.getGateways()) {
ModelNode gatewayNode = new ModelNode();
gatewayNode.get(NAME).set(gateway.getName());
gatewayNode.get(TYPE).set(gateway.getType());
addMetricsToNode(gatewayNode, gateway.getMessageMetrics());
gatewaysNode.add(gatewayNode);
}
serviceNode.get(GATEWAYS).set(gatewaysNode);
return serviceNode;
}
/**
* Creates a new {@link ModelNode} tree from the {@link ComponentService} for
* metrics. The tree has the form: <br>
* <code><pre>
* "name" => "serviceName",
* "application" => "name",
* "successCount" => "successCount",
* "faultCount" => "faultCount",
* "totalCount" => "totalCount",
* "averageTime" => "averageTime",
* "minTime" => "minTime",
* "maxTime" => "maxTime",
* "totalTime" => "totalTime",
* "operations" => [
* {
* "name" => "operationName",
* "successCount" => "successCount",
* "faultCount" => "faultCount",
* "totalCount" => "totalCount",
* "averageTime" => "averageTime",
* "minTime" => "minTime",
* "maxTime" => "maxTime",
* "totalTime" => "totalTime",
* },
* ...
* ],
* "references" => [
* {
* "name" => "referenceName",
* "successCount" => "successCount",
* "faultCount" => "faultCount",
* "totalCount" => "totalCount",
* "averageTime" => "averageTime",
* "minTime" => "minTime",
* "maxTime" => "maxTime",
* "totalTime" => "totalTime",
* },
* ...
* ]
* </pre></code>
*
* @param componentService the {@link Service} used to populate the node.
* @return a new {@link ModelNode}
*/
public static ModelNode createComponentServiceMetricsNode(ComponentService componentService) {
ModelNode serviceNode = new ModelNode();
serviceNode.get(NAME).set(componentService.getName().toString());
serviceNode.get(APPLICATION).set(componentService.getApplication().getName().toString());
addMetricsToNode(serviceNode, componentService.getMessageMetrics());
ModelNode operationsNode = new ModelNode();
for (ServiceOperation operation : componentService.getServiceOperations()) {
ModelNode operationNode = new ModelNode();
operationNode.get(NAME).set(operation.getName());
addMetricsToNode(operationNode, operation.getMessageMetrics());
operationsNode.add(operationNode);
}
serviceNode.get(OPERATIONS).set(operationsNode);
ModelNode referencesNode = new ModelNode();
for (ComponentReference reference : componentService.getReferences()) {
ModelNode referenceNode = new ModelNode();
referenceNode.get(NAME).set(reference.getName().toString());
addMetricsToNode(referenceNode, reference.getMessageMetrics());
referencesNode.add(referenceNode);
}
serviceNode.get(REFERENCES).set(referencesNode);
return serviceNode;
}
/**
* Creates a new node from the {@link Throttling}. The tree has the form: <br>
* <code><pre>
* "throttling" => {
* "enabled" => "true",
* "maxRequests" => "maxRequests",
* "timePeriod" => "timePeriod"
* }
* </pre></code>
*
* @param throttling the throttling configuration to add to the node
* @return a new {@link ModelNode}
*/
public static ModelNode createThrottlingToNode(Throttling throttling) {
final ModelNode node = new ModelNode();
if (throttling == null) {
return node;
}
node.get(ENABLED).set(throttling.isEnabled());
node.get(MAX_REQUESTS).set(throttling.getMaxRequests());
node.get(TIME_PERIOD).set(throttling.getTimePeriod());
return node;
}
private ModelNodeCreationUtil() {
}
}