resque-info 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/Gemfile +6 -0
- data/README.md +33 -0
- data/Rakefile +1 -0
- data/lib/resque-info/base.rb +41 -0
- data/lib/resque-info/common.rb +8 -0
- data/lib/resque-info/constants.rb +3 -0
- data/lib/resque-info/queues.rb +44 -0
- data/lib/resque-info/redis.rb +107 -0
- data/lib/resque-info/version.rb +3 -0
- data/lib/resque-info.rb +10 -0
- metadata +82 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 3c00e4ae07f3b8411edb5a31fa18cca3871b3377fb67feb820d1ff987454954a
|
4
|
+
data.tar.gz: 8137b55e2200a20b8fdccdd282416da467877f31b8c15a9fe96db7471d0b77c8
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 99f84c627d34ac5abd9f1dc35faf0edc564904b0ec313400a9d70235fea50f088bd94c6ce14d83dad514877cf53754c56272c40abd10336bf0b908db71b66325
|
7
|
+
data.tar.gz: a4de273c6e69ab855a987584413eca42f945e9a3a024dd23e4b29b15867b0d7ef5970625ed39b04feb3cf3e6a29a9bb99f0442f6c25cfbdc5a232bb87154cd0d
|
data/Gemfile
ADDED
data/README.md
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
# ResqueInfo
|
2
|
+
|
3
|
+
ResqueInfo gem will help to .
|
4
|
+
|
5
|
+
## Installation
|
6
|
+
|
7
|
+
Add this line to your application's Gemfile:
|
8
|
+
|
9
|
+
gem 'resque-info'
|
10
|
+
|
11
|
+
And then execute:
|
12
|
+
|
13
|
+
$ bundle
|
14
|
+
|
15
|
+
Or install it yourself as:
|
16
|
+
|
17
|
+
$ gem install resque-info
|
18
|
+
|
19
|
+
## Usage
|
20
|
+
|
21
|
+
Try this snippet of code on ruby irb
|
22
|
+
|
23
|
+
require 'resque-info'
|
24
|
+
puts ResqueInfo.info # => 44323547714622714350878229787161
|
25
|
+
|
26
|
+
|
27
|
+
## Contributing
|
28
|
+
|
29
|
+
1. Fork it ( https://github.com/[my-github-username]/resque-info/fork )
|
30
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
31
|
+
3. Commit your changes (`git commit -am 'Add some feature'`)
|
32
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
33
|
+
5. Create a new Pull Request
|
data/Rakefile
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require "bundler/gem_tasks"
|
@@ -0,0 +1,41 @@
|
|
1
|
+
module ResqueInfo
|
2
|
+
# BATCH_SIZE = Constants::BATCH_SIZE
|
3
|
+
|
4
|
+
def self.queues
|
5
|
+
Resque.queues
|
6
|
+
end
|
7
|
+
|
8
|
+
def self.failed_jobs
|
9
|
+
Resque::Failure
|
10
|
+
end
|
11
|
+
|
12
|
+
def self.failed_jobs_count
|
13
|
+
failed_jobs.count
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.failed_jobs_count_by_class
|
17
|
+
klass_name = []
|
18
|
+
(0...failed_jobs_count).step(BATCH_SIZE) do |start|
|
19
|
+
failed_jobs.all(start, BATCH_SIZE).each do |job|
|
20
|
+
next if job.nil?
|
21
|
+
klass_name << job['payload']['class'].to_s
|
22
|
+
rescue StandardError => error
|
23
|
+
logger_rescue('Failed-Job-Count-By-Class', error)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
klass_name.group_by(&:itself).transform_values(&:count)
|
27
|
+
end
|
28
|
+
|
29
|
+
def self.failed_jobs_count_by_queue
|
30
|
+
job_queue = []
|
31
|
+
(0...failed_jobs_count).step(BATCH_SIZE) do |start|
|
32
|
+
failed_jobs.all(start, BATCH_SIZE).each do |job|
|
33
|
+
next if job.nil?
|
34
|
+
job_queue << job['queue'].to_s
|
35
|
+
rescue StandardError => error
|
36
|
+
logger_rescue('Failed-Job-Count-By-Queue', error)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
job_queue.group_by(&:itself).transform_values(&:count)
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,8 @@
|
|
1
|
+
module ResqueInfo
|
2
|
+
def self.logger_rescue(log_title, error)
|
3
|
+
puts '----------------------------------------------------'
|
4
|
+
puts "==> [ResqueInfo] [ #{log_title.upcase} ]"
|
5
|
+
puts "==> [ErrorMessage] [ #{error.message} ]"
|
6
|
+
puts '----------------------------------------------------'
|
7
|
+
end
|
8
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
module ResqueInfo
|
2
|
+
class << self
|
3
|
+
def queues
|
4
|
+
Resque.queues
|
5
|
+
end
|
6
|
+
|
7
|
+
def total_jobs
|
8
|
+
Resque.info[:total_jobs]
|
9
|
+
end
|
10
|
+
|
11
|
+
def failed_jobs
|
12
|
+
Resque.info[:failed]
|
13
|
+
end
|
14
|
+
|
15
|
+
def processed_jobs
|
16
|
+
Resque.info[:processed]
|
17
|
+
end
|
18
|
+
|
19
|
+
def processed_jobs_per_minute
|
20
|
+
processed_jobs / (Time.now.to_i - Time.now.beginning_of_minute.to_i)
|
21
|
+
end
|
22
|
+
|
23
|
+
def processed_jobs_per_hour
|
24
|
+
processed_jobs / (Time.now.to_i - Time.now.beginning_of_hour.to_i)
|
25
|
+
end
|
26
|
+
|
27
|
+
def processed_jobs_per_day
|
28
|
+
processed_jobs / (Time.now.to_i - Time.now.beginning_of_day.to_i)
|
29
|
+
end
|
30
|
+
|
31
|
+
def processed_jobs_per_week
|
32
|
+
processed_jobs / (Time.now.to_i - Time.now.beginning_of_week.to_i)
|
33
|
+
end
|
34
|
+
|
35
|
+
def processed_jobs_per_month
|
36
|
+
processed_jobs / (Time.now.to_i - Time.now.beginning_of_month.to_i)
|
37
|
+
end
|
38
|
+
|
39
|
+
def processed_jobs_per_year
|
40
|
+
processed_jobs / (Time.now.to_i - Time.now.beginning_of_year.to_i)
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,107 @@
|
|
1
|
+
module ResqueInfo
|
2
|
+
class << self
|
3
|
+
|
4
|
+
def redis_info
|
5
|
+
Resque.redis.redis.info
|
6
|
+
end
|
7
|
+
def redis_version
|
8
|
+
redis_info['redis_version']
|
9
|
+
end
|
10
|
+
|
11
|
+
def redis_ping
|
12
|
+
Resque.redis.redis.ping
|
13
|
+
end
|
14
|
+
|
15
|
+
def redis_connected?
|
16
|
+
redis_ping == 'PONG'
|
17
|
+
end
|
18
|
+
|
19
|
+
def redis_details
|
20
|
+
details_array = %w[redis_version redis_build_id redis_mode arch_bits monotonic_clock multiplexing_api tcp_port os].freeze
|
21
|
+
search_from_redis_info(details_array)
|
22
|
+
end
|
23
|
+
|
24
|
+
def redis_uptime
|
25
|
+
uptime_seconds = redis_info["uptime_in_seconds"]
|
26
|
+
{
|
27
|
+
"uptime_seconds": uptime_seconds,
|
28
|
+
"uptime_hours": "#{uptime_seconds.to_i / 60} hours",
|
29
|
+
"uptime_days": "#{redis_info["uptime_in_days"]} days"
|
30
|
+
}
|
31
|
+
end
|
32
|
+
|
33
|
+
def redis_used_memory
|
34
|
+
used_memory_array = %w[used_memory used_memory_human used_memory_rss used_memory_rss_human used_memory_peak used_memory_peak_human used_memory_peak_perc used_memory_overhead used_memory_startup used_memory_dataset used_memory_dataset_perc used_memory_lua used_memory_vm_eval used_memory_lua_human used_memory_scripts_eval].freeze
|
35
|
+
search_from_redis_info(used_memory_array)
|
36
|
+
end
|
37
|
+
|
38
|
+
def redis_allocator
|
39
|
+
allocator_array = %w[allocator_allocated allocator_active allocator_resident allocator_frag_ratio allocator_frag_bytes allocator_rss_ratio allocator_rss_bytes].freeze
|
40
|
+
search_from_redis_info(allocator_array)
|
41
|
+
end
|
42
|
+
|
43
|
+
def redis_memory
|
44
|
+
memory_array = %w[total_system_memory total_system_memory_human used_memory_vm_functions used_memory_vm_total used_memory_vm_total_human used_memory_functions used_memory_scripts used_memory_scripts_human maxmemory maxmemory_human maxmemory_policy].freeze
|
45
|
+
search_from_redis_info(memory_array)
|
46
|
+
end
|
47
|
+
|
48
|
+
def redis_mem
|
49
|
+
mem_array = %w[mem_fragmentation_ratio mem_fragmentation_bytes mem_not_counted_for_evict mem_replication_backlog mem_total_replication_buffers mem_clients_slaves mem_clients_normal mem_cluster_links mem_aof_buffer mem_allocator].freeze
|
50
|
+
search_from_redis_info(mem_array)
|
51
|
+
end
|
52
|
+
|
53
|
+
def redis_rdb
|
54
|
+
rdb_array = %w[rdb_changes_since_last_save rdb_bgsave_in_progress rdb_last_save_time rdb_last_bgsave_status rdb_last_bgsave_time_sec rdb_current_bgsave_time_sec rdb_saves rdb_last_cow_size rdb_last_load_keys_expired rdb_last_load_keys_loaded].freeze
|
55
|
+
search_from_redis_info(rdb_array)
|
56
|
+
end
|
57
|
+
|
58
|
+
def redis_aof
|
59
|
+
aof_array = %w[aof_enabled aof_rewrite_in_progress aof_rewrite_scheduled aof_last_rewrite_time_sec aof_current_rewrite_time_sec aof_last_bgrewrite_status aof_rewrites aof_rewrites_consecutive_failures aof_last_write_status aof_last_cow_size].freeze
|
60
|
+
search_from_redis_info(aof_array)
|
61
|
+
end
|
62
|
+
|
63
|
+
def redis_total_net
|
64
|
+
net_array = %w[total_net_input_bytes total_net_output_bytes total_net_repl_input_bytes total_net_repl_output_bytes].freeze
|
65
|
+
search_from_redis_info(net_array)
|
66
|
+
end
|
67
|
+
|
68
|
+
def redis_instantaneous
|
69
|
+
inst_array = %w[instantaneous_ops_per_sec instantaneous_input_kbps instantaneous_output_kbps instantaneous_input_repl_kbps instantaneous_output_repl_kbps instantaneous_eventloop_cycles_per_sec instantaneous_eventloop_duration_usec].freeze
|
70
|
+
search_from_redis_info(inst_array)
|
71
|
+
end
|
72
|
+
|
73
|
+
def redis_defrag
|
74
|
+
defrag_array = %w[active_defrag_hits active_defrag_misses active_defrag_key_hits active_defrag_key_misses total_active_defrag_time current_active_defrag_time ].freeze
|
75
|
+
search_from_redis_info(defrag_array)
|
76
|
+
end
|
77
|
+
|
78
|
+
def redis_acl_access_denied
|
79
|
+
acl_array = %w[acl_access_denied_auth acl_access_denied_cmd acl_access_denied_key acl_access_denied_channel].freeze
|
80
|
+
search_from_redis_info(acl_array)
|
81
|
+
end
|
82
|
+
|
83
|
+
def redis_master_repl
|
84
|
+
master_repl_array = %w[master_failover_state master_replid master_replid2 master_repl_offset second_repl_offset repl_backlog_active repl_backlog_size repl_backlog_first_byte_offset repl_backlog_histlen].freeze
|
85
|
+
search_from_redis_info(master_repl_array)
|
86
|
+
end
|
87
|
+
|
88
|
+
def redis_used_cpu
|
89
|
+
used_cpu_array = %w[used_cpu_sys used_cpu_user used_cpu_sys_children used_cpu_user_children].freeze
|
90
|
+
search_from_redis_info(used_cpu_array)
|
91
|
+
end
|
92
|
+
|
93
|
+
def redis_other_details
|
94
|
+
other_details_array = %w[executable number_of_cached_scripts number_of_functions number_of_libraries rss_overhead_ratio rss_overhead_bytes active_defrag_running lazyfree_pending_objects lazyfreed_objects loading async_loading current_cow_peak current_cow_size current_cow_size_age current_fork_perc current_save_keys_processed current_save_keys_total module_fork_in_progress module_fork_last_cow_size total_connections_received total_commands_processed rejected_connections sync_full sync_partial_ok sync_partial_err expired_keys expired_stale_perc expired_time_cap_reached_count expire_cycle_cpu_milliseconds evicted_keys evicted_clients total_eviction_exceeded_time current_eviction_exceeded_time keyspace_hits keyspace_misses pubsub_channels pubsub_patterns pubsubshard_channels latest_fork_usec total_forks migrate_cached_sockets slave_expires_tracked_keys tracking_total_keys tracking_total_items tracking_total_prefixes unexpected_error_replies total_error_replies dump_payload_sanitizations total_reads_processed total_writes_processed io_threaded_reads_processed io_threaded_writes_processed reply_buffer_shrinks reply_buffer_expands eventloop_cycles eventloop_duration_sum eventloop_duration_cmd_sum role connected_slaves cluster_enabled db0].freeze
|
95
|
+
search_from_redis_info(other_details_array)
|
96
|
+
end
|
97
|
+
|
98
|
+
def search_from_redis_info(array_listing)
|
99
|
+
output = {}
|
100
|
+
array_listing.each do |element|
|
101
|
+
output["#{element}"] = redis_info["#{element}"]
|
102
|
+
end
|
103
|
+
output
|
104
|
+
end
|
105
|
+
|
106
|
+
end
|
107
|
+
end
|
data/lib/resque-info.rb
ADDED
@@ -0,0 +1,10 @@
|
|
1
|
+
require_relative './resque-info/constants.rb'
|
2
|
+
require_relative './resque-info/version.rb'
|
3
|
+
require_relative './resque-info/common.rb'
|
4
|
+
require_relative './resque-info/base.rb'
|
5
|
+
require_relative './resque-info/queues.rb'
|
6
|
+
require_relative './resque-info/redis.rb'
|
7
|
+
|
8
|
+
require 'time'
|
9
|
+
require 'digest'
|
10
|
+
require 'resque'
|
metadata
ADDED
@@ -0,0 +1,82 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: resque-info
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Rahul Patil
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2024-12-31 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: bundler
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.6'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.6'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
description: Resque Info
|
42
|
+
email:
|
43
|
+
- rahupatil_scs@yahoo.co.in
|
44
|
+
executables: []
|
45
|
+
extensions: []
|
46
|
+
extra_rdoc_files: []
|
47
|
+
files:
|
48
|
+
- Gemfile
|
49
|
+
- README.md
|
50
|
+
- Rakefile
|
51
|
+
- lib/resque-info.rb
|
52
|
+
- lib/resque-info/base.rb
|
53
|
+
- lib/resque-info/common.rb
|
54
|
+
- lib/resque-info/constants.rb
|
55
|
+
- lib/resque-info/queues.rb
|
56
|
+
- lib/resque-info/redis.rb
|
57
|
+
- lib/resque-info/version.rb
|
58
|
+
homepage: https://github.com/rpatil/resque-info
|
59
|
+
licenses:
|
60
|
+
- MIT
|
61
|
+
metadata: {}
|
62
|
+
post_install_message:
|
63
|
+
rdoc_options: []
|
64
|
+
require_paths:
|
65
|
+
- lib
|
66
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
67
|
+
requirements:
|
68
|
+
- - ">="
|
69
|
+
- !ruby/object:Gem::Version
|
70
|
+
version: '0'
|
71
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
requirements: []
|
77
|
+
rubyforge_project:
|
78
|
+
rubygems_version: 2.7.6
|
79
|
+
signing_key:
|
80
|
+
specification_version: 4
|
81
|
+
summary: Resque Info
|
82
|
+
test_files: []
|