import os
import signal
import time

from settings.celery import app as celery_app

LOG = '/tmp/sigterm_test.log'


def log(msg):
    with open(LOG, 'a') as f:
        f.write(f'{time.time():.3f} pid={os.getpid()} {msg}\n')


@celery_app.task(name='sigterm_test.loop', ignore_result=True)
def loop_task():
    received = {'sigterm': False}

    def handler(signum, frame):
        received['sigterm'] = True
        log('CHILD received SIGTERM via its own installed handler')

    signal.signal(signal.SIGTERM, handler)
    log('CHILD task started, handler installed')

    for i in range(30):
        log(f'CHILD tick {i} sigterm_received={received["sigterm"]}')
        time.sleep(1)
    log('CHILD task finished normally (30s elapsed)')
