mher / flower

Real-time monitor and web admin for Celery distributed task queue
https://flower.readthedocs.io
Other
6.4k stars 1.08k forks source link

Flower show wrong time if timezone set #1132

Open PaleNeutron opened 3 years ago

PaleNeutron commented 3 years ago

Describe the bug My local time is UTC+8, but I can not got correct local time in flower view.

My docker settings:

  flower:
    image: mher/flower
    environment:
      - TZ=Asia/Shanghai
      - DEBUG=1
      - CELERY_BROKER=redis://redis:6379/0
      - CELERY_BACKEND=redis://redis:6379/0
      - CELERY_TIMEZONE=Asia/Shanghai
      - CELERY_ENABLE_UTC=True

and the same in worker docker.

task request at local time 21:00 shown 05:00 in flower. it has a 2 * 8 hours different.

at this time, I checked task info in redis and got:

In [9]: datetime.utcfromtimestamp(1627824019.4668603)
Out[9]: datetime.datetime(2021, 8, 1, 13, 20, 19, 466860)

which is correct, UTC+8 's 21:00 is UTC 's 13:00.

so why when flower show a utc time in UTC+8 not plus 8 but minus?

To Reproduce set both worker and flower with CELERY_TIMEZONE, request a task, and got wrong time show in flower.

Expected behavior right time.

System information Output of python -c 'from flower.utils import bugreport; print(bugreport())' command

flower   -> flower:1.0.0 tornado:6.1 humanize:3.10.0
software -> celery:5.1.2 (sun-harmonics) kombu:5.1.0 py:3.9.6
            billiard:3.6.4.0 py-amqp:5.0.6
platform -> system:Linux arch:64bit
            kernel version:5.4.0-80-generic imp:CPython
loader   -> celery.loaders.app.AppLoader
settings -> transport:amqp results:disabled

deprecated_settings: None
felixriese commented 2 years ago

I have the same issue. It seems like this could have been resolved by #1162 and is just not released yet (fix from November '21, release from July '21). Did you check this already?

Edit: it seems resolved for me when using version 0.9.7 of the docker image.

Edit 2: Only the docker logs are now fixed and show the correct time. In the browser, flower still shows the wrong timezone.

felixriese commented 2 years ago

Update: With 1.0.0, I am pretty sure this worked for me:

  flower:
    image: mher/flower:1.2.0
    command: celery flower
    ports:
      - 5000:5000
    environment:
      - CELERY_TIMEZONE=Europe/Berlin
      - CELERY_ENABLE_UTC=True
      - TZ=Europe/Berlin

Now with 1.2.0, it doesn't anymore. Any ideas what else to try?

bropuffshroom commented 1 year ago

Update: With 1.0.0, I am pretty sure this worked for me:

  flower:
    image: mher/flower:1.2.0
    command: celery flower
    ports:
      - 5000:5000
    environment:
      - CELERY_TIMEZONE=Europe/Berlin
      - CELERY_ENABLE_UTC=True
      - TZ=Europe/Berlin

Now with 1.2.0, it doesn't anymore. Any ideas what else to try?

This guy here figured it out. It took me sometime to understand what he is saying but it turned out he is right. His reference is on point as well. https://stackoverflow.com/questions/73566846/celery-flower-web-received-and-started-timezone-not-in-my-set-time-zone-still-ut

To fix it, in my case, the container env CELERY_TIMEZONE CELERY_ENABLE_UTC TZ didn't do much. The TZ setting on the other hand messed up with the clock so I removed them all along. And then in the worker file (worker.py) put the setting there:

celery = Celery('tasks', broker=CELERY_BROKER_URL, backend=CELERY_RESULT_BACKEND, ) celery.conf['CELERY_TIMEZONE'] = "Asia/Shanghai"

Also in the docker compose command it should be the following, (the -A parameter is the name of the worker file as in worker.py above):

flower: command: ['celery', '-A', 'worker', 'flower']

This will fix both the task view and the detail view.

felixriese commented 1 year ago

The TZ setting on the other hand messed up with the clock so I removed them all along.

Removing TZ in the docker-compose file for the flower service brings the correct timezone in the UI, but the logs show now a wrong time.

akumars1 commented 1 year ago

Settings.py

CELERY_TIMEZONE = 'Asia/Kolkata'
LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'Asia/Kolkata'
USE_TZ = True

Worker+ BEAT

celery -A APP_NAME worker --pool=prefork --concurrency=5 --autoscale=10,1 --beat -l info

Flower With Redis broker

celery -A APP_NAME --broker=redis://127.0.0.1:6379 flower --address=127.0.0.1 --port=5555