Skip to content

Commit 963546d

Browse files
feat: add sampling for on_delivery_complete (#60)
1 parent ed652f3 commit 963546d

File tree

4 files changed

+38
-8
lines changed

4 files changed

+38
-8
lines changed

apps/vmq_events_sidecar/priv/vmq_events_sidecar.schema

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,3 +73,13 @@
7373
vmq_schema_translate:translate_sampling("on_deliver", Conf)
7474
end
7575
}.
76+
77+
%% @doc Configure the sampling for on_delivery_complete events based on ACL names
78+
{mapping, "sample.on_delivery_complete.$acl.percentage", "vmq_events_sidecar.sampler.on_delivery_complete",
79+
[{datatype, integer}]}.
80+
81+
{translation, "vmq_events_sidecar.sampler.on_delivery_complete",
82+
fun(Conf) ->
83+
vmq_schema_translate:translate_sampling("on_delivery_complete", Conf)
84+
end
85+
}.

apps/vmq_events_sidecar/src/vmq_events_sidecar_cli.erl

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -206,7 +206,8 @@ hook_sampling_keyspec() ->
206206
Hook,
207207
[
208208
"on_publish",
209-
"on_deliver"
209+
"on_deliver",
210+
"on_delivery_complete"
210211
]
211212
)
212213
of
@@ -308,7 +309,7 @@ events_sampling_usage() ->
308309
enable_sampling_usage() ->
309310
[
310311
"vmq-admin events sampling enable hook=<Hook> percentage=<Percentage> acl_name=<ACL>\n\n",
311-
" Enables sampling based on acl_name/label for on_publish & on_deliver.",
312+
" Enables sampling based on acl_name/label for on_publish, on_deliver & on_delivery_complete.",
312313
"\n\n"
313314
].
314315

apps/vmq_events_sidecar/src/vmq_events_sidecar_plugin.erl

Lines changed: 23 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -85,14 +85,20 @@ enable_event(HookName) when is_atom(HookName) ->
8585
disable_event(HookName) when is_atom(HookName) ->
8686
gen_server:call(?MODULE, {disable_event, HookName}).
8787

88-
-spec enable_sampling(Hook :: on_publish | on_deliver, Criterion :: binary(), Percent :: integer()) ->
88+
-spec enable_sampling(
89+
Hook :: on_publish | on_deliver | on_delivery_complete,
90+
Criterion :: binary(),
91+
Percent :: integer()
92+
) ->
8993
ok.
9094
enable_sampling(Hook, Criterion, Percent) when
9195
is_atom(Hook) and is_binary(Criterion) and is_integer(Percent)
9296
->
9397
gen_server:call(?MODULE, {enable_sampling, Hook, Criterion, Percent}).
9498

95-
-spec disable_sampling(Hook :: on_publish | on_deliver, Criterion :: binary()) ->
99+
-spec disable_sampling(
100+
Hook :: on_publish | on_deliver | on_delivery_complete, Criterion :: binary()
101+
) ->
96102
ok | {error, not_found}.
97103
disable_sampling(Hook, Criterion) when is_atom(Hook) and is_binary(Criterion) ->
98104
gen_server:call(?MODULE, {disable_sampling, Hook, Criterion}).
@@ -107,7 +113,7 @@ all_hooks() ->
107113
?TBL
108114
).
109115

110-
-spec list_sampling_conf(Hook :: on_publish | on_deliver) -> [term()].
116+
-spec list_sampling_conf(Hook :: on_publish | on_deliver | on_delivery_complete) -> [term()].
111117
list_sampling_conf(Hook) ->
112118
ets:match(?SAMPLER_TBL, {{Hook, '$1'}, '$2'}).
113119

@@ -319,12 +325,22 @@ on_deliver(
319325
username(), subscriber_id(), qos(), topic(), payload(), flag(), matched_acl(), flag()
320326
) ->
321327
'next'.
322-
on_delivery_complete(UserName, SubscriberId, QoS, Topic, Payload, IsRetain, MatchedAcl, Persisted) ->
328+
on_delivery_complete(
329+
UserName,
330+
SubscriberId,
331+
QoS,
332+
Topic,
333+
Payload,
334+
IsRetain,
335+
#matched_acl{name = ACL} = MatchedAcl,
336+
Persisted
337+
) ->
323338
{MP, ClientId} = subscriber_id(SubscriberId),
324339
send_event(
325340
on_delivery_complete,
326341
{MP, ClientId, normalise(UserName), QoS, unword(Topic), Payload, IsRetain, MatchedAcl,
327-
Persisted}
342+
Persisted},
343+
ACL
328344
).
329345

330346
-spec on_offline_message(subscriber_id(), qos(), topic(), payload(), flag()) -> 'next'.
@@ -474,6 +490,8 @@ sample(Hook, Criterion) ->
474490
check(Hook, Criterion);
475491
on_deliver ->
476492
check(Hook, Criterion);
493+
on_delivery_complete ->
494+
check(Hook, Criterion);
477495
_ ->
478496
true
479497
end.

apps/vmq_events_sidecar/src/vmq_events_sidecar_sup.erl

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,8 @@ start_link() ->
3535
),
3636
SamplingHooks = [
3737
on_publish,
38-
on_deliver
38+
on_deliver,
39+
on_delivery_complete
3940
],
4041
lists:foreach(
4142
fun

0 commit comments

Comments
 (0)