|
|
@@ -605,6 +605,83 @@ end}.
|
|
|
[Listeners(tcp), Listeners(ssl), Listeners(http), Listeners(https)]
|
|
|
end}.
|
|
|
|
|
|
+%%--------------------------------------------------------------------
|
|
|
+%% MQTT Modules
|
|
|
+%%--------------------------------------------------------------------
|
|
|
+
|
|
|
+{mapping, "mqtt.module.retainer", "emqttd.modules", [
|
|
|
+ {default, on},
|
|
|
+ {datatype, flag}
|
|
|
+]}.
|
|
|
+
|
|
|
+{mapping, "mqtt.module.retainer.storage_type", "emqttd.modules", [
|
|
|
+ {default, ram},
|
|
|
+ {datatype, {enum, [disc, ram]}}
|
|
|
+]}.
|
|
|
+
|
|
|
+{mapping, "mqtt.module.retainer.max_message_num", "emqttd.modules", [
|
|
|
+ {default, 100000},
|
|
|
+ {datatype, integer}
|
|
|
+]}.
|
|
|
+
|
|
|
+{mapping, "mqtt.module.retainer.max_payload_size", "emqttd.modules", [
|
|
|
+ {default, "64KB"},
|
|
|
+ {datatype, bytesize}
|
|
|
+]}.
|
|
|
+
|
|
|
+{mapping, "mqtt.module.retainer.expired_after", "emqttd.modules", [
|
|
|
+ {default, 0},
|
|
|
+ {datatype, integer}
|
|
|
+]}.
|
|
|
+
|
|
|
+{mapping, "mqtt.module.presence", "emqttd.modules", [
|
|
|
+ {default, on},
|
|
|
+ {datatype, flag}
|
|
|
+]}.
|
|
|
+
|
|
|
+{mapping, "mqtt.module.presence.qos", "emqttd.modules", [
|
|
|
+ {default, 0},
|
|
|
+ {datatype, integer},
|
|
|
+ {validators, ["range:0-2"]}
|
|
|
+]}.
|
|
|
+
|
|
|
+{mapping, "mqtt.module.subscription", "emqttd.modules", [
|
|
|
+ {default, off},
|
|
|
+ {datatype, flag}
|
|
|
+]}.
|
|
|
+
|
|
|
+{mapping, "mqtt.module.subscription.topics", "emqttd.modules", [
|
|
|
+ {default, undefined},
|
|
|
+ {datatype, string}
|
|
|
+]}.
|
|
|
+
|
|
|
+{translation, "emqttd.modules", fun(Conf) ->
|
|
|
+ WithMod = fun(Name, OptsF) ->
|
|
|
+ Key = "mqtt.module." ++ atom_to_list(Name),
|
|
|
+ case cuttlefish:conf_get(Key, Conf, false) of
|
|
|
+ true -> [{Name, OptsF(Key)}];
|
|
|
+ false -> []
|
|
|
+ end
|
|
|
+ end,
|
|
|
+ RetainOpts = fun(Prefix) ->
|
|
|
+ [{storage_type, cuttlefish:conf_get(Prefix ++ ".storage_type", Conf, ram)},
|
|
|
+ {max_message_num, cuttlefish:conf_get(Prefix ++ ".max_message_num", Conf, undefined)},
|
|
|
+ {max_payload_size, cuttlefish:conf_get(Prefix ++ ".max_payload_size", Conf, undefined)},
|
|
|
+ {expired_after, cuttlefish:conf_get(Prefix ++ ".expired_after", Conf, 0)}]
|
|
|
+ end,
|
|
|
+ PresOpts = fun(Prefix) ->
|
|
|
+ [{qos, cuttlefish:conf_get(Prefix ++ ".qos", Conf, 0)}]
|
|
|
+ end,
|
|
|
+ ParseFun = fun(undefined) -> [];
|
|
|
+ (Topics) -> [begin
|
|
|
+ [Topic, Qos] = string:tokens(S, "="),
|
|
|
+ {list_to_binary(Topic), list_to_integer(Qos)}
|
|
|
+ end || S <- string:tokens(Topics, ",")]
|
|
|
+ end,
|
|
|
+ SubOpts = fun(Prefix) -> [{topics, ParseFun(cuttlefish:conf_get(Prefix ++ ".topics", Conf))}] end,
|
|
|
+ lists:append([WithMod(retainer, RetainOpts), WithMod(presence, PresOpts), WithMod(subscription, SubOpts)])
|
|
|
+end}.
|
|
|
+
|
|
|
%%--------------------------------------------------------------------
|
|
|
%% System Monitor
|
|
|
%%--------------------------------------------------------------------
|