feat(sessds): Observe next time

This commit is contained in:
ieQu1 2024-03-31 16:58:51 +02:00
parent b9ad241658
commit f41e538526
No known key found for this signature in database
GPG Key ID: 488654DF3FED6FDE
2 changed files with 23 additions and 3 deletions

View File

@ -27,7 +27,9 @@
inc_egress_batches_failed/1,
inc_egress_messages/2,
inc_egress_bytes/2,
observe_egress_flush_time/2
observe_egress_flush_time/2,
observe_next_time/3
]).
%% behavior callbacks:
@ -46,7 +48,7 @@
-define(DB_METRICS, []).
-define(SHARD_METRICS, [
-define(EGRESS_METRICS, [
{counter, 'emqx_ds_egress_batches'},
{counter, 'emqx_ds_egress_batches_retry'},
{counter, 'emqx_ds_egress_batches_failed'},
@ -55,6 +57,12 @@
{slide, 'emqx_ds_egress_flush_time'}
]).
-define(INGRESS_METRICS, [
{slide, 'emqx_ds_builtin_next_time'}
]).
-define(SHARD_METRICS, ?EGRESS_METRICS ++ ?INGRESS_METRICS).
-type shard_metrics_id() :: binary().
%%================================================================================
@ -112,6 +120,14 @@ inc_egress_bytes(Id, NMessages) ->
observe_egress_flush_time(Id, FlushTime) ->
emqx_metrics_worker:observe(?WORKER, Id, 'emqx_ds_egress_flush_time', FlushTime).
%% @doc Add a sample of elapsed time spent waiting for a
%% `emqx_ds_replication_layer:next'
-spec observe_next_time(emqx_ds:db(), emqx_ds_replication_layer:shard_id(), non_neg_integer()) ->
ok.
observe_next_time(DB, Shard, NextTime) ->
Id = shard_metric_id(DB, Shard),
emqx_metrics_worker:observe(?WORKER, Id, 'emqx_ds_builtin_next_time', NextTime).
prometheus_meta() ->
lists:map(
fun

View File

@ -329,7 +329,11 @@ next(DB, Iter0, BatchSize) ->
%%
%% This kind of trickery should be probably done here in the
%% replication layer. Or, perhaps, in the logic layer.
case ra_next(DB, Shard, StorageIter0, BatchSize) of
T0 = erlang:monotonic_time(microsecond),
Result = ra_next(DB, Shard, StorageIter0, BatchSize),
T1 = erlang:monotonic_time(microsecond),
emqx_ds_builtin_metrics:observe_next_time(DB, Shard, T1 - T0),
case Result of
{ok, StorageIter, Batch} ->
Iter = Iter0#{?enc := StorageIter},
{ok, Iter, Batch};