updated wrapped code to static method call
parent
942cf31b88
commit
32fb4be391
|
@ -15,7 +15,7 @@ namespace RulesEngineBenchmark
|
|||
public class REBenchmark
|
||||
{
|
||||
private readonly RulesEngine.RulesEngine rulesEngine;
|
||||
private readonly object ruleInput;
|
||||
|
||||
private readonly List<Workflow> workflow;
|
||||
|
||||
private class ListItem
|
||||
|
@ -41,7 +41,16 @@ namespace RulesEngineBenchmark
|
|||
EnableScopedParams = false
|
||||
});
|
||||
|
||||
ruleInput = new {
|
||||
|
||||
}
|
||||
|
||||
[Params(1000, 10000)]
|
||||
public int N;
|
||||
|
||||
[Benchmark]
|
||||
public void RuleExecutionDefault()
|
||||
{
|
||||
var ruleInput = new {
|
||||
SimpleProp = "simpleProp",
|
||||
NestedProp = new {
|
||||
SimpleProp = "nestedSimpleProp",
|
||||
|
@ -61,14 +70,6 @@ namespace RulesEngineBenchmark
|
|||
}
|
||||
|
||||
};
|
||||
}
|
||||
|
||||
[Params(1000, 10000)]
|
||||
public int N;
|
||||
|
||||
[Benchmark]
|
||||
public void RuleExecutionDefault()
|
||||
{
|
||||
foreach (var workflow in workflow)
|
||||
{
|
||||
_ = rulesEngine.ExecuteAllRulesAsync(workflow.WorkflowName, ruleInput).Result;
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="BenchmarkDotNet" Version="0.13.12" />
|
||||
<!--<PackageReference Include="RulesEngine" Version="3.0.2" />-->
|
||||
<!--<PackageReference Include="RulesEngine" Version="5.0.3" />-->
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
|
|
@ -17,34 +17,38 @@ namespace RulesEngine.HelperFunctions
|
|||
{
|
||||
internal static RuleFunc<RuleResultTree> ToResultTree(ReSettings reSettings, Rule rule, IEnumerable<RuleResultTree> childRuleResults, Func<object[], bool> isSuccessFunc, string exceptionMessage = "")
|
||||
{
|
||||
return (inputs) => {
|
||||
|
||||
var isSuccess = false;
|
||||
var inputsDict = new Dictionary<string, object>();
|
||||
try
|
||||
{
|
||||
inputsDict = inputs.ToDictionary(c => c.Name, c => c.Value);
|
||||
isSuccess = isSuccessFunc(inputs.Select(c => c.Value).ToArray());
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
exceptionMessage = GetExceptionMessage($"Error while executing rule : {rule?.RuleName} - {ex.Message}", reSettings);
|
||||
HandleRuleException(new RuleException(exceptionMessage,ex), rule, reSettings);
|
||||
isSuccess = false;
|
||||
}
|
||||
|
||||
return new RuleResultTree {
|
||||
Rule = rule,
|
||||
Inputs = inputsDict,
|
||||
IsSuccess = isSuccess,
|
||||
ChildResults = childRuleResults,
|
||||
ExceptionMessage = exceptionMessage
|
||||
};
|
||||
return (inputs) => {
|
||||
return ToResultTreeInternal(reSettings, rule, childRuleResults, isSuccessFunc, ref exceptionMessage, inputs);
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private static RuleResultTree ToResultTreeInternal(ReSettings reSettings, Rule rule, IEnumerable<RuleResultTree> childRuleResults, Func<object[], bool> isSuccessFunc, ref string exceptionMessage, RuleParameter[] inputs)
|
||||
{
|
||||
var isSuccess = false;
|
||||
var inputsDict = new Dictionary<string, object>();
|
||||
try
|
||||
{
|
||||
inputsDict = inputs.ToDictionary(c => c.Name, c => c.Value);
|
||||
isSuccess = isSuccessFunc(inputs.Select(c => c.Value).ToArray());
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
exceptionMessage = GetExceptionMessage($"Error while executing rule : {rule?.RuleName} - {ex.Message}", reSettings);
|
||||
HandleRuleException(new RuleException(exceptionMessage, ex), rule, reSettings);
|
||||
isSuccess = false;
|
||||
}
|
||||
|
||||
return new RuleResultTree {
|
||||
Rule = rule,
|
||||
Inputs = inputsDict,
|
||||
IsSuccess = isSuccess,
|
||||
ChildResults = childRuleResults,
|
||||
ExceptionMessage = exceptionMessage
|
||||
};
|
||||
}
|
||||
|
||||
internal static RuleFunc<RuleResultTree> ToRuleExceptionResult(ReSettings reSettings, Rule rule,Exception ex)
|
||||
{
|
||||
HandleRuleException(ex, rule, reSettings);
|
||||
|
|
|
@ -243,27 +243,32 @@ namespace RulesEngine
|
|||
}
|
||||
var paramDelegate = CompileScopedParams(rule.RuleExpressionType,ruleParameters, ruleExpParams);
|
||||
|
||||
return (ruleParams) => {
|
||||
var inputs = ruleParams.Select(c => c.Value).ToArray();
|
||||
IEnumerable<RuleParameter> scopedParams;
|
||||
try
|
||||
{
|
||||
var scopedParamsDict = paramDelegate(inputs);
|
||||
scopedParams = scopedParamsDict.Select(c => new RuleParameter(c.Key, c.Value));
|
||||
}
|
||||
catch(Exception ex)
|
||||
{
|
||||
var message = $"Error while executing scoped params for rule `{rule.RuleName}` - {ex}";
|
||||
var resultFn = Helpers.ToRuleExceptionResult(_reSettings, rule, new RuleException(message, ex));
|
||||
return resultFn(ruleParams);
|
||||
}
|
||||
|
||||
var extendedInputs = ruleParams.Concat(scopedParams);
|
||||
var result = ruleFunc(extendedInputs.ToArray());
|
||||
return result;
|
||||
return (ruleParams) => {
|
||||
return GetWrappedRuleFuncInternal(rule, ruleFunc, ruleParams, paramDelegate);
|
||||
};
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private RuleResultTree GetWrappedRuleFuncInternal(Rule rule, RuleFunc<RuleResultTree> ruleFunc, RuleParameter[] ruleParams, Func<object[], Dictionary<string, object>> paramDelegate)
|
||||
{
|
||||
var inputs = ruleParams.Select(c => c.Value).ToArray();
|
||||
IEnumerable<RuleParameter> scopedParams;
|
||||
try
|
||||
{
|
||||
var scopedParamsDict = paramDelegate(inputs);
|
||||
scopedParams = scopedParamsDict.Select(c => new RuleParameter(c.Key, c.Value));
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
var message = $"Error while executing scoped params for rule `{rule.RuleName}` - {ex}";
|
||||
var resultFn = Helpers.ToRuleExceptionResult(_reSettings, rule, new RuleException(message, ex));
|
||||
return resultFn(ruleParams);
|
||||
}
|
||||
|
||||
var extendedInputs = ruleParams.Concat(scopedParams);
|
||||
var result = ruleFunc(extendedInputs.ToArray());
|
||||
return result;
|
||||
}
|
||||
|
||||
private RuleExpressionBuilderBase GetExpressionBuilder(RuleExpressionType expressionType)
|
||||
{
|
||||
return _expressionBuilderFactory.RuleGetExpressionBuilder(expressionType);
|
||||
|
|
Loading…
Reference in New Issue