aboutsummaryrefslogtreecommitdiff
path: root/src/ejabberd_redis.erl
diff options
context:
space:
mode:
Diffstat (limited to 'src/ejabberd_redis.erl')
-rw-r--r--src/ejabberd_redis.erl21
1 files changed, 20 insertions, 1 deletions
diff --git a/src/ejabberd_redis.erl b/src/ejabberd_redis.erl
index 596b75117..857bece0e 100644
--- a/src/ejabberd_redis.erl
+++ b/src/ejabberd_redis.erl
@@ -33,7 +33,7 @@
%% API
-export([start_link/1, get_proc/1, get_connection/1, q/1, qp/1, format_error/1]).
%% Commands
--export([multi/1, get/1, set/2, del/1,
+-export([multi/1, get/1, set/2, del/1, info/1,
sadd/2, srem/2, smembers/1, sismember/2, scard/1,
hget/2, hset/3, hdel/2, hlen/1, hgetall/1, hkeys/1,
subscribe/1, publish/2, script_load/1, evalsha/3]).
@@ -61,6 +61,9 @@
-type redis_reply() :: binary() | [binary()].
-type redis_command() :: [binary()].
-type redis_pipeline() :: [redis_command()].
+-type redis_info() :: server | clients | memory | persistence |
+ stats | replication | cpu | commandstats |
+ cluster | keyspace | default | all.
-type state() :: #state{}.
-export_type([error_reason/0]).
@@ -334,6 +337,22 @@ evalsha(SHA, Keys, Args) ->
erlang:error(transaction_unsupported)
end.
+-spec info(redis_info()) -> {ok, [{atom(), binary()}]} | redis_error().
+info(Type) ->
+ case erlang:get(?TR_STACK) of
+ undefined ->
+ case q([<<"INFO">>, misc:atom_to_binary(Type)]) of
+ {ok, Info} ->
+ Lines = binary:split(Info, <<"\r\n">>, [global]),
+ KVs = [binary:split(Line, <<":">>) || Line <- Lines],
+ {ok, [{misc:binary_to_atom(K), V} || [K, V] <- KVs]};
+ {error, _} = Err ->
+ Err
+ end;
+ _ ->
+ erlang:error(transaction_unsupported)
+ end.
+
%%%===================================================================
%%% gen_server callbacks
%%%===================================================================