Security News
Maven Central Adds Sigstore Signature Validation
Maven Central now validates Sigstore signatures, making it easier for developers to verify the provenance of Java packages.
ActiveSwitch stores last reported at timestamps in Redis so you can detect if cron style jobs are running at an expected interval.
Add this line to your application's Gemfile:
gem 'active_switch'
And then execute:
$ bundle
Or install it yourself as:
$ gem install active_switch
First, configure ActiveSwitch
, for instance in a Rails initializer:
# config/initializers/active_switch.rb
# configure the Redis client
ActiveSwitch.redis = Redis.new
# expect the big batch job to run within past day
ActiveSwitch.register(:big_batch_job, 1.day)
# expect the weekly mailer to run within the past week
ActiveSwitch.register(:weekly_mailer, 1.week)
Attempting to register the same name more than once will raise an ActiveSwitch::AlreadyRegistered
exception.
Alternatively, you can register in one call with a hash:
ActiveSwitch.register({
big_batch_job: 1.day,
weekly_mailer: 1.week
})
After your scheduled task or background job completes, you can report it complete:
ActiveSwitch.report(:weekly_mailer) # => true
Attempting to report on an unregistered name will raise an ActiveSwitch::UnknownName
exception. This prevents
dead code paths or typos of names.
Alternatively, you can provide .report
a block to yield:
ActiveSwitch.report(:weekly_mailer) { 2 + 2 } # => 4
Statuses can be retrieved with .all
, .active
, or .inactive
:
ActiveSwitch.report(:weekly_mailer)
# Returns hash of statuses with keys "big_batch_job" and "weekly_mailer"
#
# {
# "big_batch_job"=>#<ActiveSwitch::Status:0x007fbb9309e880 @name="big_batch_job", @last_reported_at=nil, @threshold_seconds=86400>},
# "weekly_mailer"=>#<ActiveSwitch::Status:0x007fbb9309f990 @name="weekly_mailer", @last_reported_at=2017-12-03 23:02:42 -0800, @threshold_seconds=604800>}
# }
ActiveSwitch.all
# Returns hash of statuses with key "weekly_mailer"
#
# {
# "weekly_mailer"=>#<ActiveSwitch::Status:0x007fbb9309f990 @name="weekly_mailer", @last_reported_at=2017-12-03 23:02:42 -0800, @threshold_seconds=604800>}
# }
ActiveSwitch.active
# Returns hash of statuses with key "big_batch_job"
#
# {
# "big_batch_job"=>#<ActiveSwitch::Status:0x007fbb9309e880 @name="big_batch_job", @last_reported_at=nil, @threshold_seconds=86400>}
# }
ActiveSwitch.inactive
Individual status may also be retrieved with .status
ActiveSwitch.status(:weekly_mailer)
# => <ActiveSwitch::Status:0x007fbb9309f990 @name="weekly_mailer", @last_reported_at=2017-12-03 23:02:42 -0800, @threshold_seconds=604800>
A status instance can be asked for its values:
status = ActiveSwitch.status(:weekly_mailer)
status.name #=> "weekly_mailer"
status.last_reported_at #=> 2017-12-03 23:02:42 -0800
status.threshold_seconds #=> 604800
It can also be checked if active or inactive:
status.active? #=> true
status.inactive? #=> false
status.state #=> "ACTIVE"
A status is considered active if it was last reported within its registered threshold seconds.
All data is stored in a single Redis hash to avoid n+1 roundtrip lookups to Redis when gathering all statuses. Care should be taken to avoid tracking too many switches to avoid overloading the hash. A maximum of about 1000 would be sane, and likely beyond typical use.
The hash is stored under the key active_switch_last_reported_ats
and reflects the following format:
# Values are epoch seconds
{
"weekly_mailer" => "1512371591",
"big_batch_job" => "1512285202"
}
After checking out the repo, run bin/setup
to install dependencies. Then, run rake spec
to run the tests. You can also run bin/console
for an interactive prompt that will allow you to experiment.
To install this gem onto your local machine, run bundle exec rake install
. To release a new version, update the version number in version.rb
, and then run bundle exec rake release
, which will create a git tag for the version, push git commits and tags, and push the .gem
file to rubygems.org.
Bug reports and pull requests are welcome on GitHub at https://github.com/bemurphy/active_switch.
The gem is available as open source under the terms of the MIT License.
FAQs
Unknown package
We found that active_switch demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Maven Central now validates Sigstore signatures, making it easier for developers to verify the provenance of Java packages.
Security News
CISOs are racing to adopt AI for cybersecurity, but hurdles in budgets and governance may leave some falling behind in the fight against cyber threats.
Research
Security News
Socket researchers uncovered a backdoored typosquat of BoltDB in the Go ecosystem, exploiting Go Module Proxy caching to persist undetected for years.