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