Skip to content

Commit

Permalink
Make expression evaulation more efficient.
Browse files Browse the repository at this point in the history
  • Loading branch information
msqr committed Oct 18, 2024
1 parent 1aae6c0 commit a726972
Show file tree
Hide file tree
Showing 3 changed files with 44 additions and 41 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@
* Base implementation of {@link CloudDatumStreamService}.
*
* @author matt
* @version 1.1
* @version 1.2
*/
public abstract class BaseCloudDatumStreamService extends BaseCloudIntegrationsIdentifiableService
implements CloudDatumStreamService {
Expand Down Expand Up @@ -112,55 +112,62 @@ public BaseCloudDatumStreamService(String serviceIdentifier, String displayName,
}

/**
* Evaluate a set of property expressions.
* Evaluate a set of property expressions on a set of datum.
*
* @param configurations
* the property configurations
* @param datum
* the datum to evaluate expressions on
* @param parameters
* parameters to pass to the expressions
*/
public void evaulateExpressions(Collection<CloudDatumStreamPropertyConfiguration> configurations,
MutableDatum datum, Map<String, ?> parameters) {
if ( configurations == null || configurations.isEmpty() || datum == null ) {
Collection<? extends MutableDatum> datum, Map<String, ?> parameters) {
if ( configurations == null || configurations.isEmpty() || datum == null || datum.isEmpty() ) {
return;
}
DatumSamplesExpressionRoot root = new DatumSamplesExpressionRoot(datum,
datum.asSampleOperations(), parameters);
for ( CloudDatumStreamPropertyConfiguration config : configurations ) {
if ( !config.getValueType().isExpression() ) {
continue;
}
var vars = Map.of("userId", (Object) config.getUserId(), "datumStreamMappingId",
config.getDatumStreamMappingId());
Object val = null;
try {
val = expressionService.evaluateDatumPropertyExpression(config, root, vars,
Object.class);
} catch ( Exception e ) {
Throwable t = e;
while ( t.getCause() != null ) {
t = t.getCause();
for ( MutableDatum d : datum ) {
DatumSamplesExpressionRoot root = new DatumSamplesExpressionRoot(d,
d.asSampleOperations(), parameters);
Object val = null;
try {
val = expressionService.evaluateDatumPropertyExpression(config, root, vars,
Object.class);
} catch ( Exception e ) {
Throwable t = e;
while ( t.getCause() != null ) {
t = t.getCause();
}
String exMsg = (t.getMessage() != null ? t.getMessage()
: t.getClass().getSimpleName());
userEventAppenderBiz.addEvent(config.getUserId(),
eventForConfiguration(config.getId(), EXPRESSION_ERROR_TAGS,
"Error evaluating datum stream property expression.",
Map.of(MESSAGE_DATA_KEY, exMsg, SOURCE_DATA_KEY,
config.getValueReference())));
}
String exMsg = (t.getMessage() != null ? t.getMessage() : t.getClass().getSimpleName());
userEventAppenderBiz.addEvent(config.getUserId(), eventForConfiguration(config.getId(),
EXPRESSION_ERROR_TAGS, "Error evaluating datum stream property expression.",
Map.of(MESSAGE_DATA_KEY, exMsg, SOURCE_DATA_KEY, config.getValueReference())));
}
if ( val != null ) {
Object propVal = switch (config.getPropertyType()) {
case Accumulating, Instantaneous -> {
// convert to number
if ( val instanceof Number ) {
yield val;
} else {
yield narrow(parseNumber(val.toString(), BigDecimal.class), 2);
if ( val != null ) {
Object propVal = switch (config.getPropertyType()) {
case Accumulating, Instantaneous -> {
// convert to number
if ( val instanceof Number ) {
yield val;
} else {
yield narrow(parseNumber(val.toString(), BigDecimal.class), 2);
}
}
}
case Status, Tag -> val.toString();
};
propVal = config.applyValueTransforms(propVal);
datum.asMutableSampleOperations().putSampleValue(config.getPropertyType(),
config.getPropertyName(), propVal);
case Status, Tag -> val.toString();
};
propVal = config.applyValueTransforms(propVal);
d.asMutableSampleOperations().putSampleValue(config.getPropertyType(),
config.getPropertyName(), propVal);
}
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -139,7 +139,7 @@
* }}</pre>
*
* @author matt
* @version 1.4
* @version 1.5
*/
public class LocusEnergyCloudDatumStreamService extends BaseOAuth2ClientCloudDatumStreamService {

Expand Down Expand Up @@ -750,9 +750,7 @@ private CloudDatumStreamQueryResult queryForDatum(CloudDatumStreamConfiguration
if ( !exprProps.isEmpty() ) {
var parameters = Map.of("datumStreamMappingId", datumStream.getDatumStreamMappingId(),
"integrationId", mapping.getIntegrationId());
for ( GeneralDatum datum : result.values() ) {
evaulateExpressions(exprProps, datum, parameters);
}
evaulateExpressions(exprProps, result.values(), parameters);
}

BasicQueryFilter nextQueryFilter = null;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -191,7 +191,7 @@
* </ul>
*
* @author matt
* @version 1.2
* @version 1.3
*/
public class SolrenViewCloudDatumStreamService extends BaseRestOperationsCloudDatumStreamService {

Expand Down Expand Up @@ -470,9 +470,7 @@ public CloudDatumStreamQueryResult datum(CloudDatumStreamConfiguration datumStre
var parameters = Map.of("datumStreamMappingId", datumStream.getDatumStreamMappingId(),
"integrationId", mapping.getIntegrationId());
for ( Map<String, GeneralDatum> e : datum.values() ) {
for ( GeneralDatum d : e.values() ) {
evaulateExpressions(exprProps, d, parameters);
}
evaulateExpressions(exprProps, e.values(), parameters);
}
}

Expand Down

0 comments on commit a726972

Please sign in to comment.