Awesome
Sidekiq::Statistic
Improved display of statistics for your Sidekiq workers and jobs.
Screenshots
Index page:
Worker page with table (per day):
Installation
Add this line to your application's Gemfile:
gem 'sidekiq-statistic'
And then execute:
$ bundle
Usage
Using Rails
Read Sidekiq documentation to configure Sidekiq Web UI in your routes.rb
.
When Sidekiq Web UI is active you're going be able to see the option Statistic
on the menu.
Using a standalone application
Read Sidekiq documentation to configure Sidekiq in your Rack server.
Next add require 'sidekiq-statistic'
to your config.ru
.
# config.ru
require 'sidekiq/web'
require 'sidekiq-statistic'
use Rack::Session::Cookie, secret: 'some unique secret string here'
run Sidekiq::Web
Configuration
The Statistic configuration is an initializer that GEM uses to configure itself. The option max_timelist_length
is used to avoid memory leak, in practice, whenever the cache size reaches that number, the GEM is going
to remove 25% of the key values, avoiding inflating memory.
Sidekiq::Statistic.configure do |config|
config.max_timelist_length = 250_000
end
Supported Sidekiq versions
Statistic support the following Sidekiq versions:
- Sidekiq 6.
- Sidekiq 5.
- Sidekiq 4.
- Sidekiq 3.5.
JSON API
/api/statistic.json
Returns statistic for each worker.
Params:
dateFrom
- Date start (format:yyyy-mm-dd
)dateTo
- Date end (format:yyyy-mm-dd
)
Example:
$ curl http://example.com/sidekiq/api/statistic.json?dateFrom=2015-07-30&dateTo=2015-07-31
# =>
{
"workers": [
{
"name": "Worker",
"last_job_status": "passed",
"number_of_calls": {
"success": 1,
"failure": 0,
"total": 1
},
"runtime": {
"last": "2015-07-31 10:42:13 UTC",
"max": 4.002,
"min": 4.002,
"average": 4.002,
"total": 4.002
}
},
...
]
}
/api/statistic/:worker_name.json
Returns worker statistic for each day in range.
Params:
dateFrom
- Date start (format:yyyy-mm-dd
)dateTo
- Date end (format:yyyy-mm-dd
)
Example:
$ curl http://example.com/sidekiq/api/statistic/Worker.json?dateFrom=2015-07-30&dateTo=2015-07-31
# =>
{
"days": [
{
"date": "2015-07-31",
"failure": 0,
"success": 1,
"total": 1,
"last_job_status": "passed",
"runtime": {
"last": null,
"max": 0,
"min": 0,
"average": 0,
"total": 0
}
},
...
]
}
Update statistic inside middleware
You can update your worker statistic inside middleware. For this you should to update sidekiq:statistic
redis hash.
This hash has the following structure:
sidekiq:statistic
- redis hash with all statisticyyyy-mm-dd:WorkerName:passed
- count of passed jobs for Worker name on yyyy-mm-ddyyyy-mm-dd:WorkerName:failed
- count of failed jobs for Worker name on yyyy-mm-ddyyyy-mm-dd:WorkerName:last_job_status
- string with status (passed
orfailed
) for last jobyyyy-mm-dd:WorkerName:last_time
- date of last job performingyyyy-mm-dd:WorkerName:queue
- name of job queue (default
by default)
For time information you should push the runtime value to yyyy-mm-dd:WorkerName:timeslist
redis list.
How it works
<details> <summary>Big image 'how it works'</summary> </details>Contributing
- Fork it ( https://github.com/davydovanton/sidekiq-statistic/fork )
- Create your feature branch (
git checkout -b my-new-feature
) - Commit your changes (
git commit -am 'Add some feature'
) - Push to the branch (
git push origin my-new-feature
) - Create a new Pull Request