resq/utils/apns_sender/apns_sender.py

76 lines
1.9 KiB
Python

from threading import Thread
from daemonize import Daemonize
from apns import APNs, Payload
import redis
import time
import signal
import sys
import os
import logging
import socket
def sigint_handler(signal, frame):
sys.exit(0)
os._exit(0)
def redisLoop(apns, logger):
r = redis.StrictRedis(host='localhost', port=6379, db=0)
while 1:
time.sleep(0)
data = r.brpop("apns_push", 10)
if data:
info = data[1].split('|')
logger.info("Token: " + info[0] + " message: " + info[1])
try:
send_notif(apns, info[0], info[1])
except TypeError:
logger.info("Invalid token: " + info[0])
def sigint_handler(signal, frame):
sys.exit(0)
def send_notif(apns, token_hex, message):
#token_hex = '602E96BF9BC15D7913871D4D90FEBD7E265500C9D22DCEC5A4AFA3FC36EBE4DC'
payload = Payload(alert=message, sound="default", badge=1)
try:
apns.gateway_server.send_notification(token_hex, payload)
except socket.error:
apns = setup_apns()
def get_logger():
logger = logging.getLogger("apns_logger")
logger.setLevel(logging.INFO)
fh = logging.FileHandler("/tmp/apns_sender.log")
fmt = '%(asctime)s - %(threadName)s - %(levelname)s - %(message)s'
formatter = logging.Formatter(fmt)
fh.setFormatter(formatter)
logger.addHandler(fh)
return logger
def setup_apns():
cert_file = "/root/ios_push_test/ios_prod.pem"
apns = APNs(use_sandbox=True, cert_file=cert_file)
return apns
def main():
logger = get_logger()
logger.info("Starting apns_sender")
#apns = APNs(use_sandbox=False, cert_file=cert_file)
apns = setup_apns()
logger.info("Starting redis loop")
redisLoop(apns, logger)
signal.signal(signal.SIGINT, sigint_handler)
pid = "/tmp/apns_sender.pid"
#daemon = Daemonize(app="apns_sender", pid=pid, action=main)
#daemon.start()
main()