Просмотр исходного кода

fix(ft): make configs user friendlier

Ilya Averyanov 3 лет назад
Родитель
Сommit
b2fd2dcbc1

+ 21 - 6
apps/emqx_ft/src/emqx_ft_conf.erl

@@ -42,25 +42,40 @@
 -type milliseconds() :: non_neg_integer().
 -type milliseconds() :: non_neg_integer().
 -type seconds() :: non_neg_integer().
 -type seconds() :: non_neg_integer().
 
 
+%% 5 minutes (s)
+-define(DEFAULT_MIN_SEGMENTS_TTL, 300).
+%% 1 day (s)
+-define(DEFAULT_MAX_SEGMENTS_TTL, 86400).
+%% 1 minute (ms)
+-define(DEFAULT_GC_INTERVAL, 60000).
+
 %%--------------------------------------------------------------------
 %%--------------------------------------------------------------------
 %% Accessors
 %% Accessors
 %%--------------------------------------------------------------------
 %%--------------------------------------------------------------------
 
 
--spec storage() -> _Storage | disabled.
+-spec storage() -> _Storage.
 storage() ->
 storage() ->
-    emqx_config:get([file_transfer, storage], disabled).
+    emqx_config:get([file_transfer, storage]).
 
 
 -spec gc_interval(_Storage) -> milliseconds().
 -spec gc_interval(_Storage) -> milliseconds().
 gc_interval(_Storage) ->
 gc_interval(_Storage) ->
     Conf = assert_storage(local),
     Conf = assert_storage(local),
-    emqx_map_lib:deep_get([segments, gc, interval], Conf).
+    emqx_map_lib:deep_get([segments, gc, interval], Conf, ?DEFAULT_GC_INTERVAL).
 
 
 -spec segments_ttl(_Storage) -> {_Min :: seconds(), _Max :: seconds()}.
 -spec segments_ttl(_Storage) -> {_Min :: seconds(), _Max :: seconds()}.
 segments_ttl(_Storage) ->
 segments_ttl(_Storage) ->
     Conf = assert_storage(local),
     Conf = assert_storage(local),
     {
     {
-        emqx_map_lib:deep_get([segments, gc, minimum_segments_ttl], Conf),
-        emqx_map_lib:deep_get([segments, gc, maximum_segments_ttl], Conf)
+        emqx_map_lib:deep_get(
+            [segments, gc, minimum_segments_ttl],
+            Conf,
+            ?DEFAULT_MIN_SEGMENTS_TTL
+        ),
+        emqx_map_lib:deep_get(
+            [segments, gc, maximum_segments_ttl],
+            Conf,
+            ?DEFAULT_MAX_SEGMENTS_TTL
+        )
     }.
     }.
 
 
 assert_storage(Type) ->
 assert_storage(Type) ->
@@ -79,7 +94,7 @@ assert_storage(Type) ->
 load() ->
 load() ->
     ok = emqx_ft_storage_exporter:update_exporter(
     ok = emqx_ft_storage_exporter:update_exporter(
         undefined,
         undefined,
-        emqx_config:get([file_transfer, storage])
+        storage()
     ),
     ),
     emqx_conf:add_handler([file_transfer], ?MODULE).
     emqx_conf:add_handler([file_transfer], ?MODULE).
 
 

+ 14 - 3
apps/emqx_ft/src/emqx_ft_schema.erl

@@ -52,8 +52,9 @@ fields(file_transfer) ->
                     ref(local_storage)
                     ref(local_storage)
                 ]),
                 ]),
                 #{
                 #{
-                    required => true,
-                    desc => ?DESC("storage")
+                    required => false,
+                    desc => ?DESC("storage"),
+                    default => default_storage()
                 }
                 }
             )}
             )}
     ];
     ];
@@ -184,7 +185,9 @@ desc(local_storage_exporter) ->
 desc(s3_exporter) ->
 desc(s3_exporter) ->
     "S3 Exporter settings for the File transfer local storage backend";
     "S3 Exporter settings for the File transfer local storage backend";
 desc(local_storage_segments_gc) ->
 desc(local_storage_segments_gc) ->
-    "Garbage collection settings for the File transfer local segments storage".
+    "Garbage collection settings for the File transfer local segments storage";
+desc(_) ->
+    undefined.
 
 
 schema(filemeta) ->
 schema(filemeta) ->
     #{
     #{
@@ -221,3 +224,11 @@ converter(checksum) ->
 
 
 ref(Ref) ->
 ref(Ref) ->
     ref(?MODULE, Ref).
     ref(?MODULE, Ref).
+
+default_storage() ->
+    #{
+        <<"type">> => <<"local">>,
+        <<"exporter">> => #{
+            <<"type">> => <<"local">>
+        }
+    }.

+ 10 - 0
apps/emqx_s3/i18n/emqx_s3_schema_i18n.conf

@@ -101,4 +101,14 @@ S3 uploader won't try to upload parts larger than this size."""
             zh: ""
             zh: ""
         }
         }
     }
     }
+    ipv6_probe {
+        desc {
+            en: "Whether to probe for IPv6 support."
+            zh: ""
+        }
+        label {
+            en: "IPv6 probe"
+            zh: ""
+        }
+    }
 }
 }

+ 1 - 0
apps/emqx_s3/src/emqx_s3.erl

@@ -37,6 +37,7 @@
     max_retries => pos_integer(),
     max_retries => pos_integer(),
     pool_size => pos_integer(),
     pool_size => pos_integer(),
     pool_type => atom(),
     pool_type => atom(),
+    ipv6_probe => boolean(),
     ssl => map()
     ssl => map()
 }.
 }.
 
 

+ 7 - 2
apps/emqx_s3/src/emqx_s3_profile_conf.erl

@@ -337,7 +337,7 @@ http_config(
                 SSLOpts = emqx_tls_lib:to_client_opts(maps:get(ssl, HTTPOpts)),
                 SSLOpts = emqx_tls_lib:to_client_opts(maps:get(ssl, HTTPOpts)),
                 {tls, SSLOpts}
                 {tls, SSLOpts}
         end,
         end,
-    % NTransportOpts = emqx_misc:ipv6_probe(TransportOpts),
+    NTransportOpts = maybe_ipv6_probe(TransportOpts, maps:get(ipv6_probe, HTTPOpts, true)),
     [
     [
         {host, Host},
         {host, Host},
         {port, Port},
         {port, Port},
@@ -346,10 +346,15 @@ http_config(
         {pool_type, PoolType},
         {pool_type, PoolType},
         {pool_size, PoolSize},
         {pool_size, PoolSize},
         {transport, Transport},
         {transport, Transport},
-        {transport_opts, TransportOpts},
+        {transport_opts, NTransportOpts},
         {enable_pipelining, EnablePipelining}
         {enable_pipelining, EnablePipelining}
     ].
     ].
 
 
+maybe_ipv6_probe(TransportOpts, true) ->
+    emqx_misc:ipv6_probe(TransportOpts);
+maybe_ipv6_probe(TransportOpts, false) ->
+    TransportOpts.
+
 http_pool_cleanup_interval(ProfileConfig) ->
 http_pool_cleanup_interval(ProfileConfig) ->
     maps:get(
     maps:get(
         http_pool_cleanup_interval, ProfileConfig, ?DEAFULT_HTTP_POOL_CLEANUP_INTERVAL
         http_pool_cleanup_interval, ProfileConfig, ?DEAFULT_HTTP_POOL_CLEANUP_INTERVAL

+ 14 - 3
apps/emqx_s3/src/emqx_s3_schema.erl

@@ -118,9 +118,20 @@ fields(s3) ->
             )}
             )}
     ];
     ];
 fields(transport_options) ->
 fields(transport_options) ->
-    props_without(
-        [base_url, max_retries, retry_interval, request], emqx_connector_http:fields(config)
-    ) ++
+    [
+        {ipv6_probe,
+            mk(
+                boolean(),
+                #{
+                    default => true,
+                    desc => ?DESC("ipv6_probe"),
+                    required => false
+                }
+            )}
+    ] ++
+        props_without(
+            [base_url, max_retries, retry_interval, request], emqx_connector_http:fields(config)
+        ) ++
         props_with(
         props_with(
             [headers, max_retries, request_timeout], emqx_connector_http:fields("request")
             [headers, max_retries, request_timeout], emqx_connector_http:fields("request")
         ).
         ).