use of org.jboss.hal.dmr.Property in project console by hal.
the class Dispatcher method operationUrl.
private String operationUrl(Operation operation) {
StringBuilder builder = new StringBuilder();
builder.append(endpoints.dmr()).append("/");
// 1. address
ResourceAddress address = operation.getAddress();
if (!address.isEmpty()) {
String path = address.asPropertyList().stream().map(property -> encodeURIComponent(property.getName()) + "/" + encodeURIComponent(property.getValue().asString())).collect(joining("/"));
builder.append(path);
}
// 2. operation
String name = operation.getName();
if (GetOperation.isSupported(name)) {
GetOperation getOperation = GetOperation.get(name);
name = getOperation.httpGetOperation();
}
builder.append("?").append(OP).append("=").append(name);
// 3. parameter
if (operation.hasParameter()) {
operation.getParameter().asPropertyList().forEach(property -> {
builder.append("&").append(encodeURIComponent(property.getName()));
if (property.getValue().isDefined()) {
builder.append("=").append(encodeURIComponent(property.getValue().asString()));
}
});
}
// 4. bearer token
String token = getBearerToken();
if (token != null) {
builder.append("&access_token=").append(token);
}
// TODO operation headers
return builder.toString();
}
use of org.jboss.hal.dmr.Property in project console by hal.
the class Dispatcher method collectHeaders.
// ------------------------------------------------------ response headers in domain
private Header[] collectHeaders(ModelNode serverGroups) {
List<Header> headers = new ArrayList<>();
for (Property serverGroup : serverGroups.asPropertyList()) {
ModelNode serverGroupValue = serverGroup.getValue();
if (serverGroupValue.hasDefined(HOST)) {
List<Property> hosts = serverGroupValue.get(HOST).asPropertyList();
for (Property host : hosts) {
ModelNode hostValue = host.getValue();
List<Property> servers = hostValue.asPropertyList();
for (Property server : servers) {
ModelNode serverResponse = server.getValue().get(RESPONSE);
if (serverResponse.hasDefined(RESPONSE_HEADERS)) {
headers.add(new Header(serverGroup.getName(), host.getName(), server.getName(), serverResponse.get(RESPONSE_HEADERS)));
}
}
}
}
}
return headers.toArray(new Header[0]);
}
use of org.jboss.hal.dmr.Property in project console by hal.
the class EndpointPreview method update.
@Override
public void update(DeploymentResource item) {
// the endpoint name (last value of address) contains %3A character separator
// however the dispatcher.execute call performs a http call, then the url is encoded, the %3A becomes %253A
// in the endpointa name, causing a HTTP 500 address not found.
// Then, read the parent resoource and interate over the endpoint results to match the endpoint name.
String endpointName = item.getAddress().lastValue();
Operation operation = new Operation.Builder(item.getAddress().getParent(), READ_CHILDREN_RESOURCES_OPERATION).param(CHILD_TYPE, ENDPOINT).param(INCLUDE_RUNTIME, true).build();
dispatcher.execute(operation, result -> {
for (Property prop : result.asPropertyList()) {
if (prop.getName().equals(endpointName)) {
ModelNode node = prop.getValue();
DeploymentResource n = new DeploymentResource(item.getAddress(), node);
previewAttributes.refresh(n);
Map<String, Long> processingTimes = new HashMap<>();
processingTimes.put(MIN_PROCESSING_TIME, node.get(MIN_PROCESSING_TIME).asLong());
processingTimes.put(AVERAGE_PROCESSING_TIME, node.get(AVERAGE_PROCESSING_TIME).asLong());
processingTimes.put(MAX_PROCESSING_TIME, node.get(MAX_PROCESSING_TIME).asLong());
processingTime.update(processingTimes);
totalProcessingTimeAttribute.refresh(n);
Map<String, Long> metricUpdates = new HashMap<>(7);
metricUpdates.put(REQUEST_COUNT, node.get(REQUEST_COUNT).asLong());
metricUpdates.put(FAULT_COUNT, node.get(FAULT_COUNT).asLong());
requests.update(metricUpdates);
responseAttribute.refresh(n);
break;
}
}
});
}
use of org.jboss.hal.dmr.Property in project console by hal.
the class OperationFactory method asValueNode.
@SuppressWarnings("rawtypes")
private ModelNode asValueNode(String name, Object value, ResourceDescription resourceDescription) {
ModelNode valueNode = new ModelNode();
Property attribute = resourceDescription.findAttribute(ATTRIBUTES, name);
if (attribute != null) {
String stringValue = String.valueOf(value);
ModelNode attributeDescription = attribute.getValue();
ModelType type = attributeDescription.get(TYPE).asType();
if (attributeDescription.hasDefined(EXPRESSIONS_ALLOWED) && attributeDescription.get(EXPRESSIONS_ALLOWED).asBoolean() && Expression.isExpression(stringValue) && type != ModelType.LIST) {
valueNode.setExpression(stringValue);
} else {
try {
switch(type) {
case BIG_DECIMAL:
valueNode.set(BigDecimal.valueOf(Double.parseDouble(stringValue)));
break;
case BIG_INTEGER:
valueNode.set(BigInteger.valueOf(Long.parseLong(stringValue)));
break;
case BOOLEAN:
valueNode.set(Boolean.parseBoolean(stringValue));
break;
case BYTES:
valueNode.set((byte[]) value);
break;
case DOUBLE:
valueNode.set(Double.parseDouble(stringValue));
break;
case EXPRESSION:
valueNode.setExpression(stringValue);
break;
case INT:
valueNode.set(Long.valueOf(stringValue).intValue());
break;
case LIST:
{
ModelNode valueTypeNode = attributeDescription.get(VALUE_TYPE);
ModelType typeOfValueType = valueTypeNode.getType();
if (typeOfValueType == ModelType.TYPE) {
ModelType valueType = attributeDescription.get(VALUE_TYPE).asType();
if (valueType == ModelType.STRING) {
valueNode.clear();
List l = (List) value;
for (Object o : l) {
valueNode.add(String.valueOf(o));
}
} else {
logger.error("Unsupported value type {} for attribute {} of type {}", valueType, name, type);
}
} else if (typeOfValueType == ModelType.OBJECT) {
valueNode = (ModelNode) value;
} else {
logger.error("Unsupported value type for attribute {} of type {}", name, type);
}
break;
}
case LONG:
valueNode.set(Long.parseLong(stringValue));
break;
case OBJECT:
ModelNode valueTypeNode = attributeDescription.get(VALUE_TYPE);
ModelType typeOfValueType = valueTypeNode.getType();
if (typeOfValueType == ModelType.TYPE) {
ModelType valueType = attributeDescription.get(VALUE_TYPE).asType();
if (valueType == ModelType.STRING) {
valueNode.clear();
Map map = (Map) value;
for (Object k : map.keySet()) {
valueNode.get(String.valueOf(k)).set(String.valueOf(map.get(k)));
}
} else {
valueNode = (ModelNode) value;
logger.warn("Unsupported value type {} for attribute {} of type {}. Will try to save anyway.", valueType, name, type);
}
} else if (typeOfValueType == ModelType.OBJECT) {
valueNode = (ModelNode) value;
} else {
logger.error("Unsupported value type for attribute {} of type {}", name, type);
}
break;
case STRING:
valueNode.set(stringValue);
break;
case PROPERTY:
case TYPE:
case UNDEFINED:
valueNode = null;
logger.error("Unsupported type {} for attribute {}", type, name);
break;
default:
break;
}
} catch (ClassCastException ignored) {
logger.error("Unable to cast attribute {} as {}", name, type);
}
}
} else {
Class<?> clazz = value.getClass();
logger.warn("Unable to get type information for attribute {}. Will use its class instead ({})", name, clazz);
try {
if (String.class == clazz) {
String stringValue = (String) value;
if (Expression.isExpression(stringValue)) {
valueNode.setExpression(stringValue);
} else {
valueNode.set(stringValue);
}
} else if (Boolean.class == clazz) {
valueNode.set((Boolean) value);
} else if (Integer.class == clazz) {
valueNode.set((Integer) value);
} else if (Double.class == clazz) {
valueNode.set((Double) value);
} else if (Long.class == clazz) {
valueNode.set((Long) value);
} else if (Float.class == clazz) {
valueNode.set((Float) value);
} else if (ArrayList.class == clazz) {
valueNode.clear();
List l = (List) value;
for (Object o : l) {
valueNode.add(String.valueOf(o));
}
} else if (HashMap.class == clazz) {
valueNode.clear();
Map map = (Map) value;
for (Object k : map.keySet()) {
valueNode.get(String.valueOf(k)).set(String.valueOf(map.get(k)));
}
} else if (ModelNode.class == clazz) {
valueNode.set((ModelNode) value);
} else {
valueNode = null;
logger.error("Unsupported class {} for attribute {}", clazz, name);
}
} catch (ClassCastException ignored) {
logger.error("Unable to cast attribute {} as {}", name, clazz);
}
}
return valueNode;
}
Aggregations