增加环境变量

This commit is contained in:
anlicheng 2024-08-30 11:10:38 +08:00
parent 528b7fe8c8
commit 48a2dd40cf
3 changed files with 61 additions and 1 deletions

View File

@ -70,13 +70,23 @@ write_data(Measurement, Tags, FieldsList, Timestamp) when is_binary(Measurement)
influx_point:new(Measurement, Tags, NFields, Timestamp) influx_point:new(Measurement, Tags, NFields, Timestamp)
end, NFieldsList), end, NFieldsList),
Precision = influx_client:get_precision(Timestamp), Precision = influx_client:get_precision(Timestamp),
Bucket = get_bucket(Measurement),
%poolboy:transaction(influx_pool_backup, fun(Pid) -> influx_client:write(Pid, ?DEFAULT_BUCKET, ?DEFAULT_ORG, Precision, Points) end); %poolboy:transaction(influx_pool_backup, fun(Pid) -> influx_client:write(Pid, ?DEFAULT_BUCKET, ?DEFAULT_ORG, Precision, Points) end);
poolboy:transaction(influx_pool, fun(Pid) -> influx_client:write(Pid, ?DEFAULT_BUCKET, ?DEFAULT_ORG, Precision, Points) end); poolboy:transaction(influx_pool, fun(Pid) -> influx_client:write(Pid, Bucket, ?DEFAULT_ORG, Precision, Points) end);
false -> false ->
ok ok
end. end.
-spec get_bucket(DeviceUUID :: binary()) -> binary().
get_bucket(DeviceUUID) when is_binary(DeviceUUID) ->
case iot_env:exists(DeviceUUID) of
true ->
<<"metric_", DeviceUUID/binary>>;
false ->
?DEFAULT_BUCKET
end.
-spec write(Pid :: pid(), Bucket :: binary(), Org :: binary(), Points :: list()) -> no_return(). -spec write(Pid :: pid(), Bucket :: binary(), Org :: binary(), Points :: list()) -> no_return().
write(Pid, Bucket, Org, Points) when is_pid(Pid), is_binary(Bucket), is_binary(Org), is_list(Points) -> write(Pid, Bucket, Org, Points) when is_pid(Pid), is_binary(Bucket), is_binary(Org), is_list(Points) ->
write(Pid, Bucket, Org, <<"ms">>, Points). write(Pid, Bucket, Org, <<"ms">>, Points).

View File

@ -15,6 +15,8 @@ start(_StartType, _StartArgs) ->
io:setopts([{encoding, unicode}]), io:setopts([{encoding, unicode}]),
%% %%
erlang:system_flag(fullsweep_after, 16), erlang:system_flag(fullsweep_after, 16),
%%
ok = iot_env:new(),
%% %%
% start_mnesia(), % start_mnesia(),

48
apps/iot/src/iot_env.erl Normal file
View File

@ -0,0 +1,48 @@
%%%-------------------------------------------------------------------
%%% @author anlicheng
%%% @copyright (C) 2024, <COMPANY>
%%% @doc
%%%
%%% @end
%%% Created : 30. 8 2024 10:44
%%%-------------------------------------------------------------------
-module(iot_env).
-author("anlicheng").
%% API
-export([new/0, reload/0]).
-export([exists/1]).
-spec new() -> ok.
new() ->
ets:new(iot_env, [public, set, named_table, {read_concurrency, true}]),
DeviceUUIDs = load_env(),
true = ets:insert(iot_env, {device_uuids, DeviceUUIDs}),
ok.
-spec reload() -> ok.
reload() ->
DeviceUUIDs = load_env(),
true = ets:insert(iot_env, {device_uuids, DeviceUUIDs}),
ok.
-spec exists(DeviceUUID :: binary()) -> boolean().
exists(DeviceUUID) when is_binary(DeviceUUID) ->
case ets:lookup(iot_env, device_uuids) of
[] ->
false;
[{device_uuids, DeviceUUIDs}|_] ->
lists:member(DeviceUUID, DeviceUUIDs)
end.
-spec load_env() -> [binary()].
load_env() ->
RootDir = code:root_dir(),
EnvFile = RootDir ++ "/.env",
case file:read_file(EnvFile) of
{ok, Content} ->
binary:split(string:trim(Content), <<"\n">>, [global, trim]);
{error, Reason} ->
lager:warning("[iot] read .env file get error: ~p", [Reason]),
[]
end.