Sha256: a3af21445b0707bdf81a477d03887267625fec6f0035fb487046d5388f1d890b

Contents?: true

Size: 1.64 KB

Versions: 2

Compression:

Stored size: 1.64 KB

Contents

require 'alephant/logger'
require 'date'

module Alephant
  module Publisher
    module Queue
      module SQSHelper
        class Archiver
          include Logger

          attr_reader :cache, :async

          def initialize(cache, async = true)
            @async = async
            @cache = cache
          end

          def see(message)
            return if message.nil?
            message.tap { |m| async ? async_store(m) : store(m) }
          end

          private

          def async_store(m)
            Thread.new { store(m) }
            logger.metric(
              "AsynchronouslyArchivedData",
              opts[:dimensions].merge(:function => "async_store")
            )
          end

          def store(m)
            logger.metric(
              "SynchronouslyArchivedData",
               opts[:dimensions].merge(:function => "store")
            )
            logger.info "Publisher::Queue::SQSHelper::Archiver#store: '#{m.body}' at 'archive/#{date_key}/#{m.id}'"
            cache.put("archive/#{date_key}/#{m.id}", m.body, meta_for(m))
          end

          def opts
            {
              :dimensions => {
                :module   => "AlephantPublisherQueueSQSHelper",
                :class    => "Archiver"
              }
            }
          end

          def date_key
            DateTime.now.strftime('%d-%m-%Y_%H')
          end

          def meta_for(m)
            {
              :id                => m.id,
              :md5               => m.md5,
              :logged_at         => DateTime.now.to_s,
              :queue             => m.queue.url,
            }
          end
        end
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
alephant-publisher-queue-1.3.5 lib/alephant/publisher/queue/sqs_helper/archiver.rb
alephant-publisher-queue-1.3.4 lib/alephant/publisher/queue/sqs_helper/archiver.rb