pax_global_header 0000666 0000000 0000000 00000000064 14534632637 0014527 g ustar 00root root 0000000 0000000 52 comment=3bce29b908239f5fb40ca0794582aaaf21e07079
sidekiq-cron-sidekiq-cron-31b9d88/ 0000775 0000000 0000000 00000000000 14534632637 0017051 5 ustar 00root root 0000000 0000000 sidekiq-cron-sidekiq-cron-31b9d88/.github/ 0000775 0000000 0000000 00000000000 14534632637 0020411 5 ustar 00root root 0000000 0000000 sidekiq-cron-sidekiq-cron-31b9d88/.github/stale.yml 0000664 0000000 0000000 00000001254 14534632637 0022246 0 ustar 00root root 0000000 0000000 # Number of days of inactivity before an issue becomes stale
daysUntilStale: 60
# Number of days of inactivity before a stale issue is closed
daysUntilClose: 7
# Issues with these labels will never be considered stale
exemptLabels:
- pinned
- security
# Label to use when marking an issue as stale
staleLabel: wontfix
# Comment to post when marking an issue as stale. Set to `false` to disable
markComment: >
This issue has been automatically marked as stale because it has not had
recent activity. It will be closed if no further activity occurs. Thank you
for your contributions.
# Comment to post when closing a stale issue. Set to `false` to disable
closeComment: false
sidekiq-cron-sidekiq-cron-31b9d88/.github/workflows/ 0000775 0000000 0000000 00000000000 14534632637 0022446 5 ustar 00root root 0000000 0000000 sidekiq-cron-sidekiq-cron-31b9d88/.github/workflows/ci.yml 0000664 0000000 0000000 00000001537 14534632637 0023572 0 ustar 00root root 0000000 0000000 name: CI
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
ruby: ["2.7", "3.0", "3.1", "3.2", "ruby-head"]
sidekiq: ["~> 6", "~> 7"]
services:
redis:
image: redis
options: >-
--health-cmd "redis-cli ping"
--health-interval 10s
--health-timeout 5s
--health-retries 5
ports:
- 6379:6379
env:
SIDEKIQ_VERSION: "${{ matrix.sidekiq }}"
steps:
- uses: actions/checkout@v3
- name: Set up Ruby
uses: ruby/setup-ruby@v1
with:
bundler-cache: true # 'bundle install' and cache gems
ruby-version: ${{ matrix.ruby }}
- name: Run tests
run: bundle exec rake test
- name: Upload coverage reports to Codecov
uses: codecov/codecov-action@v3
sidekiq-cron-sidekiq-cron-31b9d88/.gitignore 0000664 0000000 0000000 00000000173 14534632637 0021042 0 ustar 00root root 0000000 0000000 .rvmrc
.ruby-version
tags
Gemfile.lock
*.swp
dump.rdb
.rbx
coverage/
vendor/
.bundle/
.sass-cache/
Guardfile
pkg
.DS_Store
sidekiq-cron-sidekiq-cron-31b9d88/CHANGELOG.md 0000664 0000000 0000000 00000016372 14534632637 0020673 0 ustar 00root root 0000000 0000000 # Changelog
All notable changes to this project will be documented in this file.
## 1.12.0
- Remove Sidekiq.server? check from schedule loader (https://github.com/sidekiq-cron/sidekiq-cron/pull/436)
- Parse arguments on `args=` method (https://github.com/sidekiq-cron/sidekiq-cron/pull/442)
- Only check out a Redis connection if necessary (https://github.com/sidekiq-cron/sidekiq-cron/pull/438)
## 1.11.0
- Differentiates b/w "schedule" vs "dynamic" jobs (https://github.com/sidekiq-cron/sidekiq-cron/pull/431)
- Clears scheduled jobs upon schedule load (https://github.com/sidekiq-cron/sidekiq-cron/pull/431)
- Reduce gem size by excluding test files (https://github.com/sidekiq-cron/sidekiq-cron/pull/414)
## 1.10.1
- Use `hset` instead of deprecated `hmset` (https://github.com/sidekiq-cron/sidekiq-cron/pull/410)
## 1.10.0
- Remove EOL Ruby 2.6 support (https://github.com/sidekiq-cron/sidekiq-cron/pull/399)
- Add a logo for the project! (https://github.com/sidekiq-cron/sidekiq-cron/pull/402)
- Added support for ActiveRecord serialize/deserialize using GlobalID (https://github.com/sidekiq-cron/sidekiq-cron/pull/395)
- Allow for keyword args (`embedded: true`) in Poller (https://github.com/sidekiq-cron/sidekiq-cron/pull/398)
- Make last_enqueue_time be always an instance of Time (https://github.com/sidekiq-cron/sidekiq-cron/pull/354)
- Fix argument error problem update from 1.6.0 to newer (https://github.com/sidekiq-cron/sidekiq-cron/pull/392)
- Clear old jobs while loading the jobs from schedule via the schedule loader (https://github.com/sidekiq-cron/sidekiq-cron/pull/405)
## 1.9.1
- Always enqueue via Active Job interface when defined in cron job config (https://github.com/sidekiq-cron/sidekiq-cron/pull/381)
- Fix schedule.yml YAML load errors on Ruby 3.1 (https://github.com/sidekiq-cron/sidekiq-cron/pull/386)
- Require Fugit v1.8 to refactor internals (https://github.com/sidekiq-cron/sidekiq-cron/pull/385)
## 1.9.0
- Sidekiq v7 support (https://github.com/sidekiq-cron/sidekiq-cron/pull/369)
- Add support for ERB templates in the auto schedule loader (https://github.com/sidekiq-cron/sidekiq-cron/pull/373)
## 1.8.0
- Fix deprecation warnings with redis-rb v4.8.0 (https://github.com/sidekiq-cron/sidekiq-cron/pull/356)
- Fix poller affecting Sidekiq scheduled set poller (https://github.com/sidekiq-cron/sidekiq-cron/pull/359)
- Fix default polling interval (https://github.com/sidekiq-cron/sidekiq-cron/pull/362)
- Add italian locale (https://github.com/sidekiq-cron/sidekiq-cron/pull/367)
- Allow disabling of cron polling (https://github.com/sidekiq-cron/sidekiq-cron/pull/368)
## 1.7.0
- Enable to use cron notation in natural language (ie `every 30 minutes`) (https://github.com/sidekiq-cron/sidekiq-cron/pull/312)
- Fix `date_as_argument` feature to add timestamp argument at every cron job execution (https://github.com/sidekiq-cron/sidekiq-cron/pull/329)
- Introduce `Sidekiq::Options` to centralize reading/writing options from different Sidekiq versions (https://github.com/sidekiq-cron/sidekiq-cron/pull/341)
- Make auto schedule loading compatible with Array format (https://github.com/sidekiq-cron/sidekiq-cron/pull/345)
## 1.6.0
- Adds support for auto-loading the `config/schedule.yml` file (https://github.com/sidekiq-cron/sidekiq-cron/pull/337)
- Fix `Sidekiq.options` deprecation warning (https://github.com/sidekiq-cron/sidekiq-cron/pull/338)
## 1.5.1
- Fixes an issue that prevented the gem to work in previous Sidekiq versions (https://github.com/sidekiq-cron/sidekiq-cron/pull/335)
## 1.5.0
- Integrate Sidekiq v6.5 breaking changes (https://github.com/sidekiq-cron/sidekiq-cron/pull/331)
- Add portuguese translations (https://github.com/sidekiq-cron/sidekiq-cron/pull/332)
## 1.4.0
- Fix buttons order in job show view (https://github.com/sidekiq-cron/sidekiq-cron/pull/302)
- Dark Mode support in UI (https://github.com/sidekiq-cron/sidekiq-cron/pull/282)
- Remove invocation of deprecated Redis functionality (https://github.com/sidekiq-cron/sidekiq-cron/pull/318)
- Internal code cleanup (https://github.com/sidekiq-cron/sidekiq-cron/pull/317)
- Optimize gem size (https://github.com/sidekiq-cron/sidekiq-cron/pull/322)
- Fix "Show All" button on cron jobs view with Sidekiq 6.3.0+ (https://github.com/sidekiq-cron/sidekiq-cron/pull/321)
- Documentation updates
## 1.3.0
- Add confirmation dialog when enquing jobs from UI
- Start to support Sidekiq `average_scheduled_poll_interval` option (replaced `poll_interval`)
- Fix deprecation warning for Redis 4.6.x
- Fix different response from Redis#exists in different Redis versions
- All PRs:
- https://github.com/sidekiq-cron/sidekiq-cron/pull/275
- https://github.com/sidekiq-cron/sidekiq-cron/pull/287
- https://github.com/sidekiq-cron/sidekiq-cron/pull/309
- https://github.com/sidekiq-cron/sidekiq-cron/pull/299
- https://github.com/sidekiq-cron/sidekiq-cron/pull/314
- https://github.com/sidekiq-cron/sidekiq-cron/pull/288
## 1.2.0
- Updated readme
- Fix problem with Sidekiq::Launcher and requiring it when not needed
- Better patching of Sidekiq::Launcher
- Fixed Dockerfile
## 1.1.0
- Updated readme
- Fix unit tests - changed argument error when getting invalid cron format
- When fallbacking old job enqueued time use `Time.parse` without format (so Ruby can decide best method to parse it)
- Add option `date_as_argument` which will add to your job arguments on last place `Time.now.to_f` when it was eneuqued
- Add option `description` which will allow you to add notes to your jobs so in web view you can see it
- Fixed translations
## 1.0.4
- Fix problem with upgrading to 1.0.x - parsing last enqued time didn't count with old time format stored in Redis
## 1.0.0
- Use [fugit](https://github.com/floraison/fugit) instead of [rufus-scheduler](https://github.com/jmettraux/rufus-scheduler) - API of cron didn't change (rufus scheduler is using fugit)
- Better working with Timezones
- Translations for JA, zh-CN
- Cron without timezone are considered as UTC, to add Timezone to cron use format `* * * * * Europe/Berlin`
- Be aware that this release can change when your jobs are enqueued (for me it didn't change but it is in one project, in other it can shift by different timezone setup)
## 0.6.0
- Set poller to check jobs every 30s by default (possible to override by `Sidekiq.options[:poll_interval] = 10`)
- Add group actions (enqueue, enable, disable, delete) all in web view
- Fix poller to enqueu all jobs in poll start time
- Add performance test for enqueue of jobs (10 000 jobs in less than 19s)
- Fix problem with default queue
- Remove `redis-namespace` from dependencies
- Update Ruby versions in Travis
## 0.5.0
- Add Docker support
- All crons are now evaluated in UTC
- Fix rufus scheduler & timezones problems
- Add support for Sidekiq 4.2.1
- Fix readme
- Add Russian locale
- User Rack.env in tests
- Faster enqueue of jobs
- Permit to use `ActiveJob::Base.queue_name_delimiter`
- Fix problem with multiple times enqueue #84
- Fix problem with enqueue of unknown class
## 0.4.0
- Enable to work with Sidekiq >= 4.0.0
- Fix readme
## 0.3.1
- Add CSRF tags to forms so it will work with Sidekiq >= 3.4.2
- Remove Tilt dependency
## 0.3.0
- Suport for Active Job
- Sidekiq cron web ui needs to be loaded by: require 'sidekiq/cron/web'
- Add load_from_hash! and load_from_array! which cleanup jobs before adding new ones
sidekiq-cron-sidekiq-cron-31b9d88/Gemfile 0000664 0000000 0000000 00000000201 14534632637 0020335 0 ustar 00root root 0000000 0000000 source 'https://rubygems.org'
gemspec
# To test different Sidekiq versions
gem "sidekiq", ENV.fetch("SIDEKIQ_VERSION", ">= 6")
sidekiq-cron-sidekiq-cron-31b9d88/LICENSE.txt 0000664 0000000 0000000 00000002041 14534632637 0020671 0 ustar 00root root 0000000 0000000 Copyright (c) 2013 Ondrej Bartas
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
sidekiq-cron-sidekiq-cron-31b9d88/README.md 0000664 0000000 0000000 00000025775 14534632637 0020350 0 ustar 00root root 0000000 0000000 
[](https://badge.fury.io/rb/sidekiq-cron)
[](https://github.com/sidekiq-cron/sidekiq-cron/actions)
[](https://codecov.io/gh/sidekiq-cron/sidekiq-cron)
> A scheduling add-on for [Sidekiq](https://sidekiq.org/)
🎬 [Introduction video about Sidekiq-Cron by Drifting Ruby](https://www.driftingruby.com/episodes/periodic-tasks-with-sidekiq-cron)
Sidekiq-Cron runs a thread alongside Sidekiq workers to schedule jobs at specified times (using cron notation `* * * * *` parsed by [Fugit](https://github.com/floraison/fugit)).
Checks for new jobs to schedule every 30 seconds and doesn't schedule the same job multiple times when more than one Sidekiq worker is running.
Scheduling jobs are added only when at least one Sidekiq process is running, but it is safe to use Sidekiq-Cron in environments where multiple Sidekiq processes or nodes are running.
If you want to know how scheduling work, check out [under the hood](#under-the-hood).
Works with ActiveJob (Rails 4.2+).
You don't need Sidekiq PRO, you can use this gem with plain Sidekiq.
## Changelog
Before upgrading to a new version, please read our [Changelog](CHANGELOG.md).
## Installation
Install the gem:
```
$ gem install sidekiq-cron
```
Or add to your `Gemfile` and run `bundle install`:
```ruby
gem "sidekiq-cron"
```
**NOTE** If you are not using Rails, you need to add `require 'sidekiq-cron'` somewhere after `require 'sidekiq'`.
## Getting Started
### Job properties
```ruby
{
# MANDATORY
'name' => 'name_of_job', # must be uniq!
'cron' => '1 * * * *', # execute at 1 minute of every hour, ex: 12:01, 13:01, 14:01, ...
'class' => 'MyClass',
# OPTIONAL
'source' => 'dynamic', # source of the job, `schedule`/`dynamic` (default: `dynamic`)
'queue' => 'name of queue',
'args' => '[Array or Hash] of arguments which will be passed to perform method',
'date_as_argument' => true, # add the time of execution as last argument of the perform method
'active_job' => true, # enqueue job through Rails 4.2+ Active Job interface
'queue_name_prefix' => 'prefix', # Rails 4.2+ Active Job queue with prefix
'queue_name_delimiter' => '.', # Rails 4.2+ Active Job queue with custom delimiter (default: '_')
'description' => 'A sentence describing what work this job performs'
'status' => 'disabled' # default: enabled
}
```
### Time, cron and Sidekiq-Cron
For testing your cron notation you can use [crontab.guru](https://crontab.guru).
Sidekiq-Cron uses [Fugit](https://github.com/floraison/fugit) to parse the cronline. So please, check Fugit documentation for further information about allowed formats.
If using Rails, this is evaluated against the timezone configured in Rails, otherwise the default is UTC.
If you want to have your jobs enqueued based on a different time zone you can specify a timezone in the cronline,
like this `'0 22 * * 1-5 America/Chicago'`.
#### Natural-language formats
Since sidekiq-cron `v1.7.0`, you can use the natural-language formats supported by Fugit, such as:
```rb
"every day at five" # => '0 5 * * *'
"every 3 hours" # => '0 */3 * * *'
```
See [the relevant part of Fugit documentation](https://github.com/floraison/fugit#fugitnat) for details.
#### Second-precision (sub-minute) cronlines
In addition to the standard 5-parameter cronline format, sidekiq-cron supports scheduling jobs with second-precision using a modified 6-parameter cronline format:
`Seconds Minutes Hours Days Months DayOfWeek`
For example: `"*/30 * * * * *"` would schedule a job to run every 30 seconds.
Note that if you plan to schedule jobs with second precision you may need to override the default schedule poll interval so it is lower than the interval of your jobs:
```ruby
Sidekiq::Options[:cron_poll_interval] = 10
```
The default value at time of writing is 30 seconds. See [under the hood](#under-the-hood) for more details.
### What objects/classes can be scheduled
#### Sidekiq Worker
In this example, we are using `HardWorker` which looks like:
```ruby
class HardWorker
include Sidekiq::Worker
def perform(*args)
# do something
end
end
```
#### Active Job Worker
You can schedule `ExampleJob` which looks like:
```ruby
class ExampleJob < ActiveJob::Base
queue_as :default
def perform(*args)
# Do something
end
end
```
For Active jobs you can use `symbolize_args: true` in `Sidekiq::Cron::Job.create` or in Hash configuration,
which will ensure that arguments you are passing to it will be symbolized when passed back to `perform` method in worker.
#### Adding Cron job
Refer to [Schedule vs Dynamic jobs](#schedule-vs-dynamic-jobs) to understand the difference.
```ruby
class HardWorker
include Sidekiq::Worker
def perform(name, count)
# do something
end
end
Sidekiq::Cron::Job.create(name: 'Hard worker - every 5min', cron: '*/5 * * * *', class: 'HardWorker') # execute at every 5 minutes
# => true
```
`create` method will return only true/false if job was saved or not.
```ruby
job = Sidekiq::Cron::Job.new(name: 'Hard worker - every 5min', cron: '*/5 * * * *', class: 'HardWorker')
if job.valid?
job.save
else
puts job.errors
end
# or simple
unless job.save
puts job.errors # will return array of errors
end
```
Use ActiveRecord models as arguments
```rb
class Person < ApplicationRecord
end
class HardWorker < ActiveJob::Base
queue_as :default
def perform(person)
puts "person: #{person}"
end
end
person = Person.create(id: 1)
Sidekiq::Cron::Job.create(name: 'Hard worker - every 5min', cron: '*/5 * * * *', class: 'HardWorker', args: person)
# => true
```
Load more jobs from hash:
```ruby
hash = {
'name_of_job' => {
'class' => 'MyClass',
'cron' => '1 * * * *',
'args' => '(OPTIONAL) [Array or Hash]'
},
'My super iber cool job' => {
'class' => 'SecondClass',
'cron' => '*/5 * * * *'
}
}
Sidekiq::Cron::Job.load_from_hash hash
```
Load more jobs from array:
```ruby
array = [
{
'name' => 'name_of_job',
'class' => 'MyClass',
'cron' => '1 * * * *',
'args' => '(OPTIONAL) [Array or Hash]'
},
{
'name' => 'Cool Job for Second Class',
'class' => 'SecondClass',
'cron' => '*/5 * * * *'
}
]
Sidekiq::Cron::Job.load_from_array array
```
Bang-suffixed methods will remove jobs where source is `schedule` and are not present in the given hash/array, update jobs that have the same names, and create new ones when the names are previously unknown.
```ruby
Sidekiq::Cron::Job.load_from_hash! hash
Sidekiq::Cron::Job.load_from_array! array
```
Or from YAML (same notation as Resque-scheduler):
```yaml
# config/schedule.yml
my_first_job:
cron: "*/5 * * * *"
class: "HardWorker"
queue: hard_worker
second_job:
cron: "*/30 * * * *" # execute at every 30 minutes
class: "HardWorker"
queue: hard_worker_long
args:
hard: "stuff"
```
There are multiple ways to load the jobs from a YAML file
1. The gem will automatically load the jobs mentioned in `config/schedule.yml` file (it supports ERB)
2. When you want to load jobs from a different filename, mention the filename in sidekiq configuration, i.e. `cron_schedule_file: "config/users_schedule.yml"`
3. Load the file manually as follows:
```ruby
# config/initializers/sidekiq.rb
Sidekiq.configure_server do |config|
config.on(:startup) do
schedule_file = "config/users_schedule.yml"
if File.exist?(schedule_file)
schedule = YAML.load_file(schedule_file)
Sidekiq::Cron::Job.load_from_hash!(schedule, source: "schedule")
end
end
end
```
### Finding jobs
```ruby
# return array of all jobs
Sidekiq::Cron::Job.all
# return one job by its unique name - case sensitive
Sidekiq::Cron::Job.find "Job Name"
# return one job by its unique name - you can use hash with 'name' key
Sidekiq::Cron::Job.find name: "Job Name"
# if job can't be found nil is returned
```
### Destroy jobs
```ruby
# destroy all jobs
Sidekiq::Cron::Job.destroy_all!
# destroy job by its name
Sidekiq::Cron::Job.destroy "Job Name"
# destroy found job
Sidekiq::Cron::Job.find('Job name').destroy
```
### Work with job
```ruby
job = Sidekiq::Cron::Job.find('Job name')
# disable cron scheduling
job.disable!
# enable cron scheduling
job.enable!
# get status of job:
job.status
# => enabled/disabled
# enqueue job right now!
job.enque!
```
### Schedule vs Dynamic jobs
There are two potential job sources: `schedule` and `dynamic`.
Jobs associated with schedule files are labeled as `schedule` as their source,
whereas jobs created at runtime without the `source=schedule` argument are classified as `dynamic`.
The key distinction lies in how these jobs are managed.
When a schedule is loaded, any stale `schedule` jobs are automatically removed to ensure synchronization within the schedule.
The `dynamic` jobs remain unaffected by this process.
### How to start scheduling?
Just start Sidekiq workers by running:
```
$ bundle exec sidekiq
```
### Web UI for Cron Jobs
If you are using Sidekiq's web UI and you would like to add cron jobs too to this web UI,
add `require 'sidekiq/cron/web'` after `require 'sidekiq/web'`.
With this, you will get:

## Under the hood
When you start the Sidekiq process, it starts one thread with `Sidekiq::Poller` instance, which perform the adding of scheduled jobs to queues, retries etc.
Sidekiq-Cron adds itself into this start procedure and starts another thread with `Sidekiq::Cron::Poller` which checks all enabled Sidekiq cron jobs every 30 seconds, if they should be added to queue (their cronline matches time of check).
Sidekiq-Cron is checking jobs to be enqueued every 30s by default, you can change it by setting:
```ruby
Sidekiq::Options[:cron_poll_interval] = 10
```
Sidekiq-Cron is safe to use with multiple Sidekiq processes or nodes. It uses a Redis sorted set to determine that only the first process who asks can enqueue scheduled jobs into the queue.
When running with many Sidekiq processes, the polling can add significant load to Redis. You can disable polling on some processes by setting `Sidekiq::Options[:cron_poll_interval] = 0` on these processes.
## Contributing
**Thanks to all [contributors](https://github.com/sidekiq-cron/sidekiq-cron/graphs/contributors), you’re awesome and this wouldn’t be possible without you!**
* Check out the latest master to make sure the feature hasn't been implemented or the bug hasn't been fixed yet.
* Check out the issue tracker to make sure someone already hasn't requested it and/or contributed it.
* Fork the project.
* Start a feature/bugfix branch.
* Commit and push until you are happy with your contribution.
* Make sure to add tests for it. This is important so we don't break it in a future version unintentionally.
* Open a pull request!
### Testing
You can execute the test suite by running:
```
$ bundle exec rake test
```
## License
Copyright (c) 2013 Ondrej Bartas. See [LICENSE](LICENSE.txt) for further details.
sidekiq-cron-sidekiq-cron-31b9d88/Rakefile 0000664 0000000 0000000 00000001054 14534632637 0020516 0 ustar 00root root 0000000 0000000 require 'bundler/gem_tasks'
require 'rake/testtask'
task :default => :test
Rake::TestTask.new(:test) do |t|
t.test_files = FileList['test/unit/**/*_test.rb', 'test/integration/**/*_test.rb']
t.warning = false
t.verbose = false
end
namespace :test do
Rake::TestTask.new(:unit) do |t|
t.test_files = FileList['test/unit/**/*_test.rb']
t.warning = false
t.verbose = false
end
Rake::TestTask.new(:integration) do |t|
t.test_files = FileList['test/integration/**/*_test.rb']
t.warning = false
t.verbose = false
end
end
sidekiq-cron-sidekiq-cron-31b9d88/docs/ 0000775 0000000 0000000 00000000000 14534632637 0020001 5 ustar 00root root 0000000 0000000 sidekiq-cron-sidekiq-cron-31b9d88/docs/images/ 0000775 0000000 0000000 00000000000 14534632637 0021246 5 ustar 00root root 0000000 0000000 sidekiq-cron-sidekiq-cron-31b9d88/docs/images/web-cron-ui.jpeg 0000664 0000000 0000000 00000527430 14534632637 0024257 0 ustar 00root root 0000000 0000000 PNG
IHDR 0: |iCCPICC Profile (c``*I,(aa``+)
rwRR` ` \\À|/JyӦ|6rV%:wJjq2#Rd :E%@ [ >dd! vVdK Ia[)@.ERבI90;@œr0x00(030X228V:Teg(8C6U9?$HG3/YOG g?Mg;_`܃K})<~km
gB_fla810$@ $wik iTXtXML:com.adobe.xmp
1214
484
\m @ IDATx sŹ.
r"r%A5H
1^DM$F߈ADP9aCe9v?OuL찬!<ŇoWx($! B@teNzNd5nt"'B@! @3唅B@! B@! "|YNQ! B@! g"ī.,B@! B@3_gESB@! B@! H@39! B@! B pB@! B@!p&'-,B@! B@&F GUѼ-zE%ڬ6XmVq)"|;3C! B@! XDP"|% BnG'p9]J DɮB@! B@! `E}a^AUz-تIqx\
=hܸ1nwZ~%S! B@! ? [{^Gf/3
Dm
NCP6PB_nӲ_ !B@! B@اo<^ʺeQ3gv0;'6WWAfu+RB@! B@!p`^^`j-a]h]s:9Uhꈮ#B@! B%>9ʲvuyecX,߾={PVY
RB@! B@! c%"jAXIݵYhu_-QB@! B@! H38mB:jXpuNmAϋ[dc"B@! B@ėӮf2qecP}cxbGüOb%6x@`B@! B@3 ,ȶvkʡIߗ~Džiɺڏ}^fnr>,OB@! B@!p`eY;o#,|9AP`נ!`N_a5gc=|\檒:
.<5ԙ}