From 4540903dd41da7d66bb3a2789d6ec5b5757103e4 Mon Sep 17 00:00:00 2001 From: Mike Perham Date: Wed, 18 Mar 2020 19:45:53 -0700 Subject: [PATCH] Flush job stats at exit, fixes #4498 --- Changes.md | 1 + lib/sidekiq/launcher.rb | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+) diff --git a/Changes.md b/Changes.md index 9601df91..317543a8 100644 --- a/Changes.md +++ b/Changes.md @@ -9,6 +9,7 @@ HEAD Set `Type=notify` in [sidekiq.service](https://github.com/mperham/sidekiq/blob/4b8a8bd3ae42f6e48ae1fdaf95ed7d7af18ed8bb/examples/systemd/sidekiq.service#L30-L39). The integration works automatically. - Use `setTimeout` rather than `setInterval` to avoid thundering herd [#4480] - Fix edge case where a job can be pushed without a queue. +- Flush job stats at exit [#4498] - Check RAILS_ENV before RACK_ENV [#4493] - Add Lithuanian locale [#4476] diff --git a/lib/sidekiq/launcher.rb b/lib/sidekiq/launcher.rb index 207d8686..11f3d90d 100644 --- a/lib/sidekiq/launcher.rb +++ b/lib/sidekiq/launcher.rb @@ -96,6 +96,24 @@ module Sidekiq ❤ end + def self.flush_stats + nowdate = Time.now.utc.strftime("%Y-%m-%d") + fails = Processor::FAILURE.reset + procd = Processor::PROCESSED.reset + Sidekiq.redis do |conn| + conn.pipelined do + conn.incrby("stat:processed", procd) + conn.incrby("stat:processed:#{nowdate}", procd) + conn.expire("stat:processed:#{nowdate}", STATS_TTL) + + conn.incrby("stat:failed", fails) + conn.incrby("stat:failed:#{nowdate}", fails) + conn.expire("stat:failed:#{nowdate}", STATS_TTL) + end + end + end + at_exit(&method(:flush_stats)) + def ❤ key = identity fails = procd = 0