feat: add timezone_to_second/1 function to rule engine
This commit adds the functions timezone_to_offset_seconds and its alias timezone_to_second to the rule engine. As the names suggests, these functions convert a timzone offset string such as "+02:00", "Z", "local" to an integer representing how many seconds that the given timezone differs from UTC. timezone_to_offset_seconds is the one of the two functions that should be advertised while timezone_to_second in kept for backwards compatibility with 4.X. Fixes: https://emqx.atlassian.net/browse/EMQX-10058
This commit is contained in:
parent
daa7eebc0f
commit
995025b572
|
@ -3,7 +3,7 @@
|
||||||
{id, "emqx_machine"},
|
{id, "emqx_machine"},
|
||||||
{description, "The EMQX Machine"},
|
{description, "The EMQX Machine"},
|
||||||
% strict semver, bump manually!
|
% strict semver, bump manually!
|
||||||
{vsn, "0.2.4"},
|
{vsn, "0.2.5"},
|
||||||
{modules, []},
|
{modules, []},
|
||||||
{registered, []},
|
{registered, []},
|
||||||
{applications, [kernel, stdlib, emqx_ctl]},
|
{applications, [kernel, stdlib, emqx_ctl]},
|
||||||
|
|
|
@ -228,7 +228,9 @@
|
||||||
format_date/3,
|
format_date/3,
|
||||||
format_date/4,
|
format_date/4,
|
||||||
date_to_unix_ts/3,
|
date_to_unix_ts/3,
|
||||||
date_to_unix_ts/4
|
date_to_unix_ts/4,
|
||||||
|
timezone_to_second/1,
|
||||||
|
timezone_to_offset_seconds/1
|
||||||
]).
|
]).
|
||||||
|
|
||||||
%% MongoDB specific date functions. These functions return a date tuple. The
|
%% MongoDB specific date functions. These functions return a date tuple. The
|
||||||
|
@ -1104,6 +1106,12 @@ date_to_unix_ts(TimeUnit, Offset, FormatString, InputString) ->
|
||||||
OffsetDelta = erlang:convert_time_unit(OffsetSecond, second, Unit),
|
OffsetDelta = erlang:convert_time_unit(OffsetSecond, second, Unit),
|
||||||
date_to_unix_ts(Unit, FormatString, InputString) - OffsetDelta.
|
date_to_unix_ts(Unit, FormatString, InputString) - OffsetDelta.
|
||||||
|
|
||||||
|
timezone_to_second(TimeZone) ->
|
||||||
|
timezone_to_offset_seconds(TimeZone).
|
||||||
|
|
||||||
|
timezone_to_offset_seconds(TimeZone) ->
|
||||||
|
emqx_calendar:offset_second(TimeZone).
|
||||||
|
|
||||||
%% @doc This is for sql funcs that should be handled in the specific modules.
|
%% @doc This is for sql funcs that should be handled in the specific modules.
|
||||||
%% Here the emqx_rule_funcs module acts as a proxy, forwarding
|
%% Here the emqx_rule_funcs module acts as a proxy, forwarding
|
||||||
%% the function handling to the worker module.
|
%% the function handling to the worker module.
|
||||||
|
|
|
@ -1012,6 +1012,25 @@ prop_format_date_fun() ->
|
||||||
Args3DTUS = [<<"second">>, <<"+04:00">>, <<"--%m--%d--%Y---%H:%M:%S">>, Formatters3],
|
Args3DTUS = [<<"second">>, <<"+04:00">>, <<"--%m--%d--%Y---%H:%M:%S">>, Formatters3],
|
||||||
Second == apply_func(date_to_unix_ts, Args3DTUS).
|
Second == apply_func(date_to_unix_ts, Args3DTUS).
|
||||||
|
|
||||||
|
t_timezone_to_offset_seconds(_) ->
|
||||||
|
t_timezone_to_offset_seconds_helper(timezone_to_offset_seconds),
|
||||||
|
%% The timezone_to_second function is kept for compatibility with 4.X.
|
||||||
|
t_timezone_to_offset_seconds_helper(timezone_to_second).
|
||||||
|
|
||||||
|
t_timezone_to_offset_seconds_helper(FunctionName) ->
|
||||||
|
?assertEqual(120 * 60, apply_func(FunctionName, [<<"+02:00:00">>])),
|
||||||
|
?assertEqual(-120 * 60, apply_func(FunctionName, [<<"-02:00:00">>])),
|
||||||
|
?assertEqual(102, apply_func(FunctionName, [<<"+00:01:42">>])),
|
||||||
|
?assertEqual(0, apply_func(FunctionName, [<<"z">>])),
|
||||||
|
?assertEqual(0, apply_func(FunctionName, [<<"Z">>])),
|
||||||
|
?assertEqual(42, apply_func(FunctionName, [42])),
|
||||||
|
?assertEqual(0, apply_func(FunctionName, [undefined])),
|
||||||
|
%% Check that the following does not crash
|
||||||
|
apply_func(FunctionName, [<<"local">>]),
|
||||||
|
apply_func(FunctionName, ["local"]),
|
||||||
|
apply_func(FunctionName, [local]),
|
||||||
|
ok.
|
||||||
|
|
||||||
%%------------------------------------------------------------------------------
|
%%------------------------------------------------------------------------------
|
||||||
%% Utility functions
|
%% Utility functions
|
||||||
%%------------------------------------------------------------------------------
|
%%------------------------------------------------------------------------------
|
||||||
|
|
Loading…
Reference in New Issue