import uvloop to improve performance and add a monitor for zombie devices on PN server
This commit is contained in:
parent
e6cb3d01bd
commit
7eece1b92c
|
@ -16,3 +16,4 @@ setuptools~=41.4.0
|
|||
telepot~=12.7
|
||||
Werkzeug~=2.1.2
|
||||
aioapns==2.1
|
||||
uvloop
|
||||
|
|
|
@ -4,6 +4,8 @@ import resource
|
|||
import json
|
||||
import http
|
||||
import logging
|
||||
import asyncio
|
||||
import uvloop
|
||||
|
||||
from flask import Flask, request, jsonify, abort
|
||||
from flask_httpauth import HTTPBasicAuth
|
||||
|
@ -22,6 +24,7 @@ from crypto import parse_junk
|
|||
|
||||
resource.setrlimit(resource.RLIMIT_NOFILE, (65536, 65536))
|
||||
urllib3.disable_warnings()
|
||||
asyncio.set_event_loop_policy(uvloop.EventLoopPolicy())
|
||||
|
||||
|
||||
def handle_exit(sig, frame):
|
||||
|
|
|
@ -1,12 +1,12 @@
|
|||
from tasks.observeTask import ObserveTask
|
||||
from tasks.syncDatabaseTask import SyncDatabaseTask
|
||||
from tasks.pushNotificationTask import PushNotificationTask
|
||||
from tools.lokiLogger import LokiLogger
|
||||
from tasks.cleanDatabaseTask import CleanDatabaseTask
|
||||
|
||||
|
||||
class TaskRunner:
|
||||
def __init__(self):
|
||||
self.tasks = [PushNotificationTask(), SyncDatabaseTask(), ObserveTask()]
|
||||
self.tasks = [PushNotificationTask(), SyncDatabaseTask(), ObserveTask(), CleanDatabaseTask()]
|
||||
|
||||
def run_tasks(self):
|
||||
for task in self.tasks:
|
||||
|
|
|
@ -0,0 +1,24 @@
|
|||
from tasks.baseTask import *
|
||||
from tools.observer import Observer
|
||||
from tools.databaseHelperV2 import DatabaseHelperV2
|
||||
from tools.pushNotificationHandler import PushNotificationHelperV2
|
||||
|
||||
|
||||
class CleanDatabaseTask(BaseTask):
|
||||
def __init__(self):
|
||||
super().__init__()
|
||||
|
||||
self.observer = Observer()
|
||||
self.database_helper = DatabaseHelperV2()
|
||||
self.notification_helper = PushNotificationHelperV2()
|
||||
|
||||
async def task(self):
|
||||
while self.is_running:
|
||||
try:
|
||||
await asyncio.sleep(30 * 24 * 60 * 60)
|
||||
zombies = len(self.database_helper.device_cache.keys()) - len(self.notification_helper.latest_activity_timestamp.keys())
|
||||
self.observer.push_info(f"In last 30 days, {zombies} users have been marked as zombies.")
|
||||
self.notification_helper.latest_activity_timestamp = {}
|
||||
except Exception as e:
|
||||
error_message = f"Flush exception: {e}"
|
||||
self.logger.error(error_message)
|
|
@ -1,4 +1,5 @@
|
|||
import asyncio
|
||||
import time
|
||||
|
||||
from utils import *
|
||||
from model.pushNotificationStats import PushNotificationStats
|
||||
|
@ -27,6 +28,7 @@ class PushNotificationHelperV2(metaclass=Singleton):
|
|||
push_admin.initialize_app(Environment.HUAWEI_APP_ID, Environment.HUAWEI_APP_SECRET)
|
||||
|
||||
self.push_fails = {}
|
||||
self.latest_activity_timestamp = {}
|
||||
self.stats_data = PushNotificationStats()
|
||||
|
||||
self.logger = LokiLogger().logger
|
||||
|
@ -47,6 +49,8 @@ class PushNotificationHelperV2(metaclass=Singleton):
|
|||
return None
|
||||
|
||||
def register(self, device_token, session_id, device_type):
|
||||
self.latest_activity_timestamp[session_id] = time.time()
|
||||
|
||||
self.remove_device_token(device_token)
|
||||
|
||||
device = self.database_helper.get_device(session_id)
|
||||
|
@ -66,6 +70,8 @@ class PushNotificationHelperV2(metaclass=Singleton):
|
|||
return session_id
|
||||
|
||||
def subscribe_closed_group(self, closed_group_id, session_id):
|
||||
self.latest_activity_timestamp[session_id] = time.time()
|
||||
|
||||
closed_group = self.database_helper.get_closed_group(closed_group_id)
|
||||
if closed_group is None:
|
||||
closed_group = ClosedGroup()
|
||||
|
@ -74,6 +80,8 @@ class PushNotificationHelperV2(metaclass=Singleton):
|
|||
closed_group.save_to_cache(self.database_helper)
|
||||
|
||||
def unsubscribe_closed_group(self, closed_group_id, session_id):
|
||||
self.latest_activity_timestamp[session_id] = time.time()
|
||||
|
||||
closed_group = self.database_helper.get_closed_group(closed_group_id)
|
||||
if closed_group:
|
||||
closed_group.remove_member(session_id)
|
||||
|
|
Loading…
Reference in New Issue