@@ -118,11 +118,10 @@ defmodule Exq.Redis.JobStat do
118118 end
119119
120120 def realtime_stats ( redis , namespace ) do
121- { :ok , [ failure_keys , success_keys ] } =
122- Connection . qp ( redis , [
123- [ "KEYS" , JobQueue . full_key ( namespace , "stat:failed_rt:*" ) ] ,
124- [ "KEYS" , JobQueue . full_key ( namespace , "stat:processed_rt:*" ) ]
125- ] )
121+ failure_keys = realtime_stats_scanner ( redis , JobQueue . full_key ( namespace , "stat:failed_rt:*" ) )
122+
123+ success_keys =
124+ realtime_stats_scanner ( redis , JobQueue . full_key ( namespace , "stat:processed_rt:*" ) )
126125
127126 formatter = realtime_stats_formatter ( redis , namespace )
128127 failures = formatter . ( failure_keys , "stat:failed_rt:" )
@@ -131,6 +130,24 @@ defmodule Exq.Redis.JobStat do
131130 { :ok , failures , successes }
132131 end
133132
133+ defp realtime_stats_scanner ( redis , namespace ) do
134+ { :ok , [ [ cursor , result ] ] } =
135+ Connection . qp ( redis , [ [ "SCAN" , 0 , "MATCH" , namespace , "COUNT" , 1_000 ] ] )
136+
137+ realtime_stats_scan_keys ( redis , namespace , cursor , result )
138+ end
139+
140+ defp realtime_stats_scan_keys ( _redis , _namespace , "0" , accumulator ) do
141+ accumulator
142+ end
143+
144+ defp realtime_stats_scan_keys ( redis , namespace , cursor , accumulator ) do
145+ { :ok , [ [ new_cursor , result ] ] } =
146+ Connection . qp ( redis , [ [ "SCAN" , cursor , "MATCH" , namespace , "COUNT" , 1_000 ] ] )
147+
148+ realtime_stats_scan_keys ( redis , namespace , new_cursor , accumulator ++ result )
149+ end
150+
134151 defp realtime_stats_formatter ( redis , namespace ) do
135152 fn keys , ns ->
136153 if Enum . empty? ( keys ) do
0 commit comments