in java/ws-server/src/main/java/com/epam/deltix/tbwg/webapp/services/grafana/FunctionsServiceImpl.java [304:357]
private Function<GenericRecord, ExtendedArguments> extractArguments(GrafanaAggregation grafanaAggregation,
SelectQuery.FunctionDef functionDef,
long start, long end, long interval, String symbol,
List<SelectQuery.TimebaseField> groupBy)
throws ValidationException {
ExtendedArguments arguments = new ExtendedArgumentsMap(start, end, interval, symbol, parseResultName(functionDef.getResultField()));
// return fields initialization
if (grafanaAggregation.returnFields().length > 1) {
for (ReturnField returnField : grafanaAggregation.returnFields()) {
arguments.setString(returnField.constantName(), functionDef.getResultFields().getOrDefault(returnField.constantName(),
returnField.constantName()));
}
}
// constant arguments initialization
for (ConstantArgument constantArgument : grafanaAggregation.constantArguments()) {
String value = functionDef.getConstantArgs().getOrDefault(constantArgument.name(), constantArgument.defaultValue());
try {
arguments.set(constantArgument, value);
} catch (NumberFormatException exc) {
throw new ConstantParseException(constantArgument, value);
}
}
// field arguments initialization
for (int i = 0; i < grafanaAggregation.fieldArguments().length; i++) {
FieldArgument fieldArgument = grafanaAggregation.fieldArguments()[i];
SelectQuery.FieldArg fieldArg = functionDef.getFieldArgs().get(i);
if (fieldArg.getField() != null) {
arguments.setString(fieldArgument.name(), fieldArg.getField().getName());
} else if (fieldArg.getFunction() != null) {
if (fieldArg.getFunction().getResultFields() != null && !fieldArg.getFunction().getResultFields().isEmpty()) {
// suppose, that we do have only one result field selected
fieldArg.getFunction().getResultFields().forEach((key, value) -> arguments.setString(fieldArgument.name(), value));
} else {
arguments.setString(fieldArgument.name(), fieldArg.getFunction().getResultField());
}
} else {
throw new ValidationException("Not valid definition of function " + functionDef.getId());
}
}
if (grafanaAggregation.symbolRequired()) {
if (checkSymbol(functionDef.getId(), symbol, groupBy)) {
return record -> {
arguments.setSymbol(record.getValue("symbol").charSequenceValue().toString());
return arguments;
};
}
}
return record -> arguments;
}