Skip to content

ashleym1972/resque-aps

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

44 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

resque-aps

Resque-Aps is an extension to Resque that adds shortcuts to send notifications to Apple's Push System.

Installation and integration with callbacks

To install:

gem install resque-aps

You'll need to add this to your Rails rakefile to see the queue lengths:

require 'resque/plugins/aps/tasks'
task "resque:setup" => :environment

$ rake resque:aps:queue_lengths 

I use this to monitor the system in nagios.

To extend the system create an initializer:

require 'resque_aps'

Resque.aps_gateway_host = AppConfig.apn_gateway_host
Resque.aps_gateway_port = AppConfig.apn_gateway_port
Resque.aps_feedback_host = AppConfig.apn_feedback_host
Resque.aps_feedback_port = AppConfig.apn_feedback_port

module Resque::Plugins::Aps
  class Application
    def after_aps_write(notification)
      logger.info("Sent Notification [#{notification.application_name}] [#{notification.device_token}] [#{notification.payload}]") if logger
    end

    # It probably failed because there is something wrong with the device token
    # do not requeue.
    def failed_aps_write(notification, exception)
      logger.error "failed_aps_write: #{notification.inspect} - #{exception}"
      logger.error exception.backtrace.join("\n")
    end

    # Something is probably wrong with the certificate
    def notify_aps_admin(exception)
      # Notify once a minute
      unless Rails.cache.read("push_certificate:notify_admin:#{name}")
        logger.error("notification: #{exception.message}")
        # Email error to someone
        Rails.cache.write("push_certificate:notify_admin:#{name}", "true", :expires_in => 60)
      end
    rescue
      logger.error("#{$!} (#{name}): #{$!.backtrace.join("\n")}")
    end

    def aps_nil_notification_retry?(sent_count, start_time)
      # Live forever
      sleep 1
      true
      # Or not
      #false
    end

    def after_aps_read(feedback)
      # Remove the device token from the system for this application so we don't send to it anymore
      # feedback.application_name, feedback.device_token
    end
  end
end

Plagurism alert

This was intended to be an extension to resque and was based heavily on resque-scheduler, which resulted in a lot of the code looking very similar. One massive departure is the use of logging which resque and resque-scheduler do not use but I do.

Contributing

For bugs or suggestions, please just open an issue in github.

About

Resque extension to send notifications to the Apple Push Service

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages