diff --git a/app/jobs/irs_attempt_events_batch_job.rb b/app/jobs/irs_attempt_events_batch_job.rb new file mode 100644 index 00000000000..f74095dad03 --- /dev/null +++ b/app/jobs/irs_attempt_events_batch_job.rb @@ -0,0 +1,31 @@ +class IrsAttemptEventsBatchJob < ApplicationJob + + require 'tempfile' + + # copypasta + include JobHelpers::StaleJobHelper + queue_as :default + discard_on JobHelpers::StaleJobHelper::StaleJobError + + # Get this to run at the early part of the hour + + def perform(subject_timestamp) + puts 'Howdy, partner' + + # Probably want something more durable + # mktmpdir won't auto-delete if it's not called with a block: + # https://ruby-doc.org/stdlib-2.5.1/libdoc/tmpdir/rdoc/Dir.html + dir = Dir.mktmpdir(subject_timestamp.to_s) + file = File.new("#{dir}/#{Time.now.to_fs(:number)}", 'w') + + events = IrsAttemptsApi::RedisClient.new.read_events(timestamp: subject_timestamp) + events.each do |event| + file.write event + end + file.close + file.path + end + + private + +end diff --git a/app/services/irs_attempts_api/redis_client.rb b/app/services/irs_attempts_api/redis_client.rb index 3dac990a331..2bf83c7f224 100644 --- a/app/services/irs_attempts_api/redis_client.rb +++ b/app/services/irs_attempts_api/redis_client.rb @@ -20,6 +20,8 @@ def write_event(event_key:, jwe:, timestamp:) def read_events(timestamp:) key = key(timestamp) redis_pool.with do |client| + # see client.hscan which refs https://redis.io/commands/scan/ + # but it's... a lil' bit weird. client.hgetall(key) end end diff --git a/config/initializers/job_configurations.rb b/config/initializers/job_configurations.rb index f3074992986..1f38c993db5 100644 --- a/config/initializers/job_configurations.rb +++ b/config/initializers/job_configurations.rb @@ -217,6 +217,12 @@ class: 'ThreatMetrixJsVerificationJob', cron: cron_1h, }, + # Batch up IRS Attempts API events + irs_attempt_events_aggregator: { + class: 'IrsAttemptEventsBatchJob', + cron: cron_1h, + args: -> { [Time.zone.now - 1.hour] }, + }, } end # rubocop:enable Metrics/BlockLength