chore(repub): simplify error handling in MQTT props templating

This commit is contained in:
Andrew Mayorov 2023-11-02 17:08:28 +07:00
parent f1847fe494
commit 729c6edff6
No known key found for this signature in database
GPG Key ID: 2837C62ACFBFED5D
1 changed files with 31 additions and 47 deletions

View File

@ -255,31 +255,33 @@ render_pub_props(UserPropertiesTemplate, Selected, Env) ->
end,
#{'User-Property' => UserProperties}.
%%
-define(BADPROP(K, REASON, ENV, DATA),
?SLOG(
debug,
DATA#{
msg => "bad_mqtt_property_value_ignored",
rule_id => emqx_utils_maps:deep_get([metadata, rule_id], ENV, undefined),
reason => REASON,
property => K
}
)
).
render_mqtt_properties(MQTTPropertiesTemplate, Selected, Env) ->
#{metadata := #{rule_id := RuleId}} = Env,
MQTTProperties =
maps:fold(
fun(K, Template, Acc) ->
maps:map(
fun(K, Template) ->
{V, Errors} = render_template(Template, Selected),
NAcc = Acc#{K => iolist_to_binary(V)},
case Errors of
[] ->
ok;
Errors ->
?SLOG(
debug,
#{
msg => "bad_mqtt_property_value_ignored",
rule_id => RuleId,
reason => Errors,
property => K,
selected => Selected
}
)
?BADPROP(K, Errors, Env, #{selected => Selected})
end,
NAcc
iolist_to_binary(V)
end,
#{},
MQTTPropertiesTemplate
),
coerce_properties_values(MQTTProperties, Env).
@ -294,42 +296,24 @@ ensure_int(B) when is_binary(B) ->
ensure_int(I) when is_integer(I) ->
I.
coerce_properties_values(MQTTProperties, #{metadata := #{rule_id := RuleId}}) ->
maps:fold(
fun(K, V0, Acc) ->
coerce_properties_values(MQTTProperties, Env) ->
maps:filtermap(
fun(K, V) ->
try
V = encode_mqtt_property(K, V0),
Acc#{K => V}
{true, encode_mqtt_property(K, V)}
catch
throw:bad_integer ->
?SLOG(
debug,
#{
msg => "bad_mqtt_property_value_ignored",
rule_id => RuleId,
reason => bad_integer,
property => K,
value => V0
}
),
Acc;
throw:Reason ->
?BADPROP(K, Reason, Env, #{value => V}),
false;
Kind:Reason:Stacktrace ->
?SLOG(
debug,
#{
msg => "bad_mqtt_property_value_ignored",
rule_id => RuleId,
exception => Kind,
reason => Reason,
property => K,
value => V0,
stacktrace => Stacktrace
}
),
Acc
?BADPROP(K, Reason, Env, #{
value => V,
exception => Kind,
stacktrace => Stacktrace
}),
false
end
end,
#{},
MQTTProperties
).