diff options
Diffstat (limited to 'src/ejabberd_redis.erl')
-rw-r--r-- | src/ejabberd_redis.erl | 21 |
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 %%%=================================================================== |