emqx_bridge_syskeeper_proxy.erl 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. %%--------------------------------------------------------------------
  2. %% Copyright (c) 2022-2024 EMQ Technologies Co., Ltd. All Rights Reserved.
  3. %%--------------------------------------------------------------------
  4. -module(emqx_bridge_syskeeper_proxy).
  5. -include_lib("typerefl/include/types.hrl").
  6. -include_lib("hocon/include/hoconsc.hrl").
  7. -include_lib("emqx_bridge/include/emqx_bridge.hrl").
  8. -include_lib("emqx_resource/include/emqx_resource.hrl").
  9. -import(hoconsc, [mk/2, enum/1, ref/2]).
  10. -export([
  11. connector_examples/1,
  12. values/1
  13. ]).
  14. -export([
  15. namespace/0,
  16. roots/0,
  17. fields/1,
  18. desc/1
  19. ]).
  20. -define(CONNECTOR_TYPE, syskeeper_proxy).
  21. -define(SYSKEEPER_HOST_OPTIONS, #{
  22. default_port => 9092
  23. }).
  24. %% -------------------------------------------------------------------------------------------------
  25. %% api
  26. connector_examples(Method) ->
  27. [
  28. #{
  29. <<"syskeeper_proxy">> => #{
  30. summary => <<"Syskeeper Proxy Connector">>,
  31. value => values(Method)
  32. }
  33. }
  34. ].
  35. values(get) ->
  36. maps:merge(
  37. #{
  38. status => <<"connected">>,
  39. node_status => [
  40. #{
  41. node => <<"emqx@localhost">>,
  42. status => <<"connected">>
  43. }
  44. ],
  45. actions => [<<"my_action">>]
  46. },
  47. values(post)
  48. );
  49. values(post) ->
  50. maps:merge(
  51. #{
  52. name => <<"syskeeper_proxy">>,
  53. type => <<"syskeeper_proxy">>
  54. },
  55. values(put)
  56. );
  57. values(put) ->
  58. #{
  59. enable => true,
  60. listen => <<"127.0.0.1:9092">>,
  61. acceptors => 16,
  62. handshake_timeout => <<"16s">>
  63. }.
  64. %% -------------------------------------------------------------------------------------------------
  65. %% Hocon Schema Definitions
  66. namespace() -> "connector_syskeeper_proxy".
  67. roots() -> [].
  68. fields(config) ->
  69. emqx_connector_schema:common_fields() ++
  70. fields("connection_fields") ++
  71. emqx_connector_schema:resource_opts_ref(?MODULE, connector_resource_opts);
  72. fields("connection_fields") ->
  73. [
  74. {listen, listen()},
  75. {acceptors,
  76. mk(
  77. non_neg_integer(),
  78. #{desc => ?DESC("acceptors"), default => 16}
  79. )},
  80. {handshake_timeout,
  81. mk(
  82. emqx_schema:timeout_duration_ms(),
  83. #{desc => ?DESC(handshake_timeout), default => <<"10s">>}
  84. )}
  85. ];
  86. fields(connector_resource_opts) ->
  87. emqx_connector_schema:resource_opts_fields();
  88. fields(Field) when
  89. Field == "get";
  90. Field == "post";
  91. Field == "put"
  92. ->
  93. Fields =
  94. fields("connection_fields") ++
  95. emqx_connector_schema:resource_opts_ref(?MODULE, connector_resource_opts),
  96. emqx_connector_schema:api_fields(
  97. Field ++ "_connector", ?CONNECTOR_TYPE, Fields
  98. ).
  99. desc(config) ->
  100. ?DESC("desc_config");
  101. desc(connector_resource_opts) ->
  102. ?DESC(emqx_resource_schema, "resource_opts");
  103. desc(Method) when Method =:= "get"; Method =:= "put"; Method =:= "post" ->
  104. ["Configuration for Syskeeper Proxy using `", string:to_upper(Method), "` method."];
  105. desc(_) ->
  106. undefined.
  107. listen() ->
  108. Meta = #{desc => ?DESC("listen")},
  109. emqx_schema:servers_sc(Meta, ?SYSKEEPER_HOST_OPTIONS).