chore(repub): simplify error handling in MQTT props templating
This commit is contained in:
parent
f1847fe494
commit
729c6edff6
|
@ -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,
|
||||||
#{
|
exception => Kind,
|
||||||
msg => "bad_mqtt_property_value_ignored",
|
stacktrace => Stacktrace
|
||||||
rule_id => RuleId,
|
}),
|
||||||
exception => Kind,
|
false
|
||||||
reason => Reason,
|
|
||||||
property => K,
|
|
||||||
value => V0,
|
|
||||||
stacktrace => Stacktrace
|
|
||||||
}
|
|
||||||
),
|
|
||||||
Acc
|
|
||||||
end
|
end
|
||||||
end,
|
end,
|
||||||
#{},
|
|
||||||
MQTTProperties
|
MQTTProperties
|
||||||
).
|
).
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue