"Startup": datetime.utcnow(), "Version": WorkerVersion, "Index": settings.WORKER_INDEX, "State": "startup" } }, upsert=True, return_document=ReturnDocument.AFTER) heartbeat_rec_id = heartbeat_rec["_id"] patch_requests_with_default_timeout(timeout=60) if isinstance(settings.HTTP_SOURCE_ADDR, list): settings.HTTP_SOURCE_ADDR = settings.HTTP_SOURCE_ADDR[ settings.WORKER_INDEX % len(settings.HTTP_SOURCE_ADDR)] patch_requests_source_address((settings.HTTP_SOURCE_ADDR, 0)) # We defer including the main body of the application till here so the settings aren't captured before we've set them up. # The better way would be to defer initializing services until they're requested, but it's 10:30 and this will work just as well. from tapiriik.sync import Sync sync_heartbeat("ready") worker_message("ready") Sync = Sync() Sync.PerformGlobalSync(heartbeat_callback=sync_heartbeat, version=WorkerVersion) worker_message("shutting down cleanly") db.sync_workers.delete_one({"_id": heartbeat_rec_id})
from tapiriik.database import db from tapiriik.requests_lib import patch_requests_source_address from tapiriik.settings import RABBITMQ_BROKER_URL, MONGO_HOST from tapiriik import settings from datetime import datetime if isinstance(settings.HTTP_SOURCE_ADDR, list): settings.HTTP_SOURCE_ADDR = settings.HTTP_SOURCE_ADDR[0] patch_requests_source_address((settings.HTTP_SOURCE_ADDR, 0)) from tapiriik.services import Service from celery import Celery from datetime import datetime class _celeryConfig: CELERY_ROUTES = { "sync_poll_triggers.trigger_poll": {"queue": "tapiriik-poll"} } CELERYD_CONCURRENCY = 1 # Otherwise the GC rate limiting breaks since file locking is per-process. celery_app = Celery('sync_poll_triggers', broker=RABBITMQ_BROKER_URL) celery_app.config_from_object(_celeryConfig()) @celery_app.task() def trigger_poll(service_id, index): svc = Service.FromID(service_id) affected_connection_ids = svc.PollPartialSyncTrigger(index) print("Triggering %d connections via %s-%d" % (len(affected_connection_ids), service_id, index)) db.connections.update({"_id": {"$in": affected_connection_ids}}, {"$set":{"TriggerPartialSync": True}}, multi=True) db.poll_stats.insert({"Service": service_id, "Index": index, "Timestamp": datetime.utcnow(), "TriggerCount": len(affected_connection_ids)})