flower-hierarchy 2.2.0.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (158) hide show
  1. flower_hierarchy-2.2.0.1/LICENSE +28 -0
  2. flower_hierarchy-2.2.0.1/MANIFEST.in +10 -0
  3. flower_hierarchy-2.2.0.1/PKG-INFO +227 -0
  4. flower_hierarchy-2.2.0.1/README.rst +175 -0
  5. flower_hierarchy-2.2.0.1/docs/Makefile +177 -0
  6. flower_hierarchy-2.2.0.1/docs/_static/.keep +0 -0
  7. flower_hierarchy-2.2.0.1/docs/_templates/localtoc.html +4 -0
  8. flower_hierarchy-2.2.0.1/docs/_templates/page.html +7 -0
  9. flower_hierarchy-2.2.0.1/docs/_templates/sidebarintro.html +8 -0
  10. flower_hierarchy-2.2.0.1/docs/_templates/sidebarlogo.html +4 -0
  11. flower_hierarchy-2.2.0.1/docs/_theme/celery/static/celery.css_t +401 -0
  12. flower_hierarchy-2.2.0.1/docs/_theme/celery/theme.conf +5 -0
  13. flower_hierarchy-2.2.0.1/docs/api.ipynb +774 -0
  14. flower_hierarchy-2.2.0.1/docs/api.rst +9 -0
  15. flower_hierarchy-2.2.0.1/docs/auth.rst +237 -0
  16. flower_hierarchy-2.2.0.1/docs/conf.py +287 -0
  17. flower_hierarchy-2.2.0.1/docs/config.rst +569 -0
  18. flower_hierarchy-2.2.0.1/docs/features.rst +6 -0
  19. flower_hierarchy-2.2.0.1/docs/index.rst +31 -0
  20. flower_hierarchy-2.2.0.1/docs/install.rst +6 -0
  21. flower_hierarchy-2.2.0.1/docs/man.rst +103 -0
  22. flower_hierarchy-2.2.0.1/docs/prometheus-integration.rst +167 -0
  23. flower_hierarchy-2.2.0.1/docs/reverse-proxy.rst +52 -0
  24. flower_hierarchy-2.2.0.1/docs/screenshots/flower-metrics-in-prometheus.png +0 -0
  25. flower_hierarchy-2.2.0.1/docs/screenshots/grafana-configure-imported-dashboard.png +0 -0
  26. flower_hierarchy-2.2.0.1/docs/screenshots/grafana-dashboard.png +0 -0
  27. flower_hierarchy-2.2.0.1/docs/screenshots/grafana-import-celery-monitoring-dashboard.png +0 -0
  28. flower_hierarchy-2.2.0.1/docs/screenshots/grafana-import-dashboard.png +0 -0
  29. flower_hierarchy-2.2.0.1/docs/screenshots/task-hierarchy.png +0 -0
  30. flower_hierarchy-2.2.0.1/docs/task_hierarchy.rst +68 -0
  31. flower_hierarchy-2.2.0.1/docs/tasks.py +20 -0
  32. flower_hierarchy-2.2.0.1/docs/tasks_filter.rst +35 -0
  33. flower_hierarchy-2.2.0.1/flower/__init__.py +4 -0
  34. flower_hierarchy-2.2.0.1/flower/__main__.py +15 -0
  35. flower_hierarchy-2.2.0.1/flower/api/__init__.py +30 -0
  36. flower_hierarchy-2.2.0.1/flower/api/control.py +579 -0
  37. flower_hierarchy-2.2.0.1/flower/api/tasks.py +787 -0
  38. flower_hierarchy-2.2.0.1/flower/api/workers.py +183 -0
  39. flower_hierarchy-2.2.0.1/flower/app.py +157 -0
  40. flower_hierarchy-2.2.0.1/flower/command.py +191 -0
  41. flower_hierarchy-2.2.0.1/flower/events.py +303 -0
  42. flower_hierarchy-2.2.0.1/flower/inspector.py +112 -0
  43. flower_hierarchy-2.2.0.1/flower/options.py +73 -0
  44. flower_hierarchy-2.2.0.1/flower/static/css/bootstrap.min.css +5 -0
  45. flower_hierarchy-2.2.0.1/flower/static/css/bootstrap.min.css.map +1 -0
  46. flower_hierarchy-2.2.0.1/flower/static/css/datatables-1.13.4.min.css +15 -0
  47. flower_hierarchy-2.2.0.1/flower/static/css/flower.css +1341 -0
  48. flower_hierarchy-2.2.0.1/flower/static/favicon.ico +0 -0
  49. flower_hierarchy-2.2.0.1/flower/static/js/bootstrap.bundle.min.js +7 -0
  50. flower_hierarchy-2.2.0.1/flower/static/js/bootstrap.bundle.min.js.map +1 -0
  51. flower_hierarchy-2.2.0.1/flower/static/js/datatables-1.13.4.min.js +22 -0
  52. flower_hierarchy-2.2.0.1/flower/static/js/flower.js +1346 -0
  53. flower_hierarchy-2.2.0.1/flower/static/js/jquery-3.6.4.min.js +2 -0
  54. flower_hierarchy-2.2.0.1/flower/static/js/jquery-3.6.4.min.map +1 -0
  55. flower_hierarchy-2.2.0.1/flower/static/js/moment-2.29.4.min.js +2 -0
  56. flower_hierarchy-2.2.0.1/flower/static/js/moment-timezone-with-data-2.29.4.min.js +1 -0
  57. flower_hierarchy-2.2.0.1/flower/static/js/theme.js +86 -0
  58. flower_hierarchy-2.2.0.1/flower/templates/404.html +13 -0
  59. flower_hierarchy-2.2.0.1/flower/templates/base.html +40 -0
  60. flower_hierarchy-2.2.0.1/flower/templates/broker.html +52 -0
  61. flower_hierarchy-2.2.0.1/flower/templates/error.html +20 -0
  62. flower_hierarchy-2.2.0.1/flower/templates/logout.html +16 -0
  63. flower_hierarchy-2.2.0.1/flower/templates/navbar.html +121 -0
  64. flower_hierarchy-2.2.0.1/flower/templates/task.html +119 -0
  65. flower_hierarchy-2.2.0.1/flower/templates/tasks.html +61 -0
  66. flower_hierarchy-2.2.0.1/flower/templates/worker.html +426 -0
  67. flower_hierarchy-2.2.0.1/flower/templates/workers.html +88 -0
  68. flower_hierarchy-2.2.0.1/flower/urls.py +68 -0
  69. flower_hierarchy-2.2.0.1/flower/utils/__init__.py +55 -0
  70. flower_hierarchy-2.2.0.1/flower/utils/authentication.py +18 -0
  71. flower_hierarchy-2.2.0.1/flower/utils/blocking.py +58 -0
  72. flower_hierarchy-2.2.0.1/flower/utils/broker.py +290 -0
  73. flower_hierarchy-2.2.0.1/flower/utils/hierarchy.py +263 -0
  74. flower_hierarchy-2.2.0.1/flower/utils/search.py +523 -0
  75. flower_hierarchy-2.2.0.1/flower/utils/tasks.py +181 -0
  76. flower_hierarchy-2.2.0.1/flower/utils/template.py +74 -0
  77. flower_hierarchy-2.2.0.1/flower/views/__init__.py +215 -0
  78. flower_hierarchy-2.2.0.1/flower/views/auth.py +373 -0
  79. flower_hierarchy-2.2.0.1/flower/views/broker.py +22 -0
  80. flower_hierarchy-2.2.0.1/flower/views/error.py +11 -0
  81. flower_hierarchy-2.2.0.1/flower/views/monitor.py +15 -0
  82. flower_hierarchy-2.2.0.1/flower/views/tasks.py +183 -0
  83. flower_hierarchy-2.2.0.1/flower/views/workers.py +98 -0
  84. flower_hierarchy-2.2.0.1/flower_hierarchy.egg-info/PKG-INFO +227 -0
  85. flower_hierarchy-2.2.0.1/flower_hierarchy.egg-info/SOURCES.txt +157 -0
  86. flower_hierarchy-2.2.0.1/flower_hierarchy.egg-info/dependency_links.txt +1 -0
  87. flower_hierarchy-2.2.0.1/flower_hierarchy.egg-info/entry_points.txt +2 -0
  88. flower_hierarchy-2.2.0.1/flower_hierarchy.egg-info/requires.txt +5 -0
  89. flower_hierarchy-2.2.0.1/flower_hierarchy.egg-info/top_level.txt +1 -0
  90. flower_hierarchy-2.2.0.1/requirements/default.txt +5 -0
  91. flower_hierarchy-2.2.0.1/requirements/dev.txt +4 -0
  92. flower_hierarchy-2.2.0.1/requirements/docs.txt +4 -0
  93. flower_hierarchy-2.2.0.1/requirements/test.txt +1 -0
  94. flower_hierarchy-2.2.0.1/setup.cfg +7 -0
  95. flower_hierarchy-2.2.0.1/setup.py +77 -0
  96. flower_hierarchy-2.2.0.1/tests/__init__.py +0 -0
  97. flower_hierarchy-2.2.0.1/tests/__pycache__/__init__.cpython-313.pyc +0 -0
  98. flower_hierarchy-2.2.0.1/tests/call-tasks.sh +14 -0
  99. flower_hierarchy-2.2.0.1/tests/load.py +25 -0
  100. flower_hierarchy-2.2.0.1/tests/run-unit-tests.sh +4 -0
  101. flower_hierarchy-2.2.0.1/tests/unit/__init__.py +38 -0
  102. flower_hierarchy-2.2.0.1/tests/unit/__main__.py +17 -0
  103. flower_hierarchy-2.2.0.1/tests/unit/__pycache__/__init__.cpython-313.pyc +0 -0
  104. flower_hierarchy-2.2.0.1/tests/unit/__pycache__/__main__.cpython-313.pyc +0 -0
  105. flower_hierarchy-2.2.0.1/tests/unit/__pycache__/test_app.cpython-313.pyc +0 -0
  106. flower_hierarchy-2.2.0.1/tests/unit/__pycache__/test_command.cpython-313.pyc +0 -0
  107. flower_hierarchy-2.2.0.1/tests/unit/__pycache__/test_events.cpython-313.pyc +0 -0
  108. flower_hierarchy-2.2.0.1/tests/unit/__pycache__/test_hierarchy.cpython-313.pyc +0 -0
  109. flower_hierarchy-2.2.0.1/tests/unit/__pycache__/test_inspector.cpython-313.pyc +0 -0
  110. flower_hierarchy-2.2.0.1/tests/unit/api/__init__.py +12 -0
  111. flower_hierarchy-2.2.0.1/tests/unit/api/__pycache__/__init__.cpython-313.pyc +0 -0
  112. flower_hierarchy-2.2.0.1/tests/unit/api/__pycache__/test_auth.cpython-313.pyc +0 -0
  113. flower_hierarchy-2.2.0.1/tests/unit/api/__pycache__/test_control.cpython-313.pyc +0 -0
  114. flower_hierarchy-2.2.0.1/tests/unit/api/__pycache__/test_tasks.cpython-313.pyc +0 -0
  115. flower_hierarchy-2.2.0.1/tests/unit/api/__pycache__/test_workers.cpython-313.pyc +0 -0
  116. flower_hierarchy-2.2.0.1/tests/unit/api/test_auth.py +14 -0
  117. flower_hierarchy-2.2.0.1/tests/unit/api/test_control.py +403 -0
  118. flower_hierarchy-2.2.0.1/tests/unit/api/test_tasks.py +564 -0
  119. flower_hierarchy-2.2.0.1/tests/unit/api/test_workers.py +72 -0
  120. flower_hierarchy-2.2.0.1/tests/unit/test_app.py +30 -0
  121. flower_hierarchy-2.2.0.1/tests/unit/test_command.py +273 -0
  122. flower_hierarchy-2.2.0.1/tests/unit/test_events.py +250 -0
  123. flower_hierarchy-2.2.0.1/tests/unit/test_hierarchy.py +580 -0
  124. flower_hierarchy-2.2.0.1/tests/unit/test_inspector.py +136 -0
  125. flower_hierarchy-2.2.0.1/tests/unit/utils/__init__.py +70 -0
  126. flower_hierarchy-2.2.0.1/tests/unit/utils/__pycache__/__init__.cpython-313.pyc +0 -0
  127. flower_hierarchy-2.2.0.1/tests/unit/utils/__pycache__/test_blocking.cpython-313.pyc +0 -0
  128. flower_hierarchy-2.2.0.1/tests/unit/utils/__pycache__/test_broker.cpython-313.pyc +0 -0
  129. flower_hierarchy-2.2.0.1/tests/unit/utils/__pycache__/test_search.cpython-313.pyc +0 -0
  130. flower_hierarchy-2.2.0.1/tests/unit/utils/__pycache__/test_template.cpython-313.pyc +0 -0
  131. flower_hierarchy-2.2.0.1/tests/unit/utils/__pycache__/test_utils.cpython-313.pyc +0 -0
  132. flower_hierarchy-2.2.0.1/tests/unit/utils/test_blocking.py +119 -0
  133. flower_hierarchy-2.2.0.1/tests/unit/utils/test_broker.py +349 -0
  134. flower_hierarchy-2.2.0.1/tests/unit/utils/test_search.py +335 -0
  135. flower_hierarchy-2.2.0.1/tests/unit/utils/test_template.py +145 -0
  136. flower_hierarchy-2.2.0.1/tests/unit/utils/test_utils.py +86 -0
  137. flower_hierarchy-2.2.0.1/tests/unit/views/__init__.py +0 -0
  138. flower_hierarchy-2.2.0.1/tests/unit/views/__pycache__/__init__.cpython-313.pyc +0 -0
  139. flower_hierarchy-2.2.0.1/tests/unit/views/__pycache__/test_auth.cpython-313.pyc +0 -0
  140. flower_hierarchy-2.2.0.1/tests/unit/views/__pycache__/test_broker.cpython-313.pyc +0 -0
  141. flower_hierarchy-2.2.0.1/tests/unit/views/__pycache__/test_cookies.cpython-313.pyc +0 -0
  142. flower_hierarchy-2.2.0.1/tests/unit/views/__pycache__/test_error.cpython-313.pyc +0 -0
  143. flower_hierarchy-2.2.0.1/tests/unit/views/__pycache__/test_headers.cpython-313.pyc +0 -0
  144. flower_hierarchy-2.2.0.1/tests/unit/views/__pycache__/test_monitor.cpython-313.pyc +0 -0
  145. flower_hierarchy-2.2.0.1/tests/unit/views/__pycache__/test_tasks.cpython-313.pyc +0 -0
  146. flower_hierarchy-2.2.0.1/tests/unit/views/__pycache__/test_url_handlers.cpython-313.pyc +0 -0
  147. flower_hierarchy-2.2.0.1/tests/unit/views/__pycache__/test_workers.cpython-313.pyc +0 -0
  148. flower_hierarchy-2.2.0.1/tests/unit/views/__pycache__/test_xsrf.cpython-313.pyc +0 -0
  149. flower_hierarchy-2.2.0.1/tests/unit/views/test_auth.py +216 -0
  150. flower_hierarchy-2.2.0.1/tests/unit/views/test_broker.py +7 -0
  151. flower_hierarchy-2.2.0.1/tests/unit/views/test_cookies.py +29 -0
  152. flower_hierarchy-2.2.0.1/tests/unit/views/test_error.py +41 -0
  153. flower_hierarchy-2.2.0.1/tests/unit/views/test_headers.py +42 -0
  154. flower_hierarchy-2.2.0.1/tests/unit/views/test_monitor.py +319 -0
  155. flower_hierarchy-2.2.0.1/tests/unit/views/test_tasks.py +518 -0
  156. flower_hierarchy-2.2.0.1/tests/unit/views/test_url_handlers.py +69 -0
  157. flower_hierarchy-2.2.0.1/tests/unit/views/test_workers.py +424 -0
  158. flower_hierarchy-2.2.0.1/tests/unit/views/test_xsrf.py +100 -0
@@ -0,0 +1,28 @@
1
+ Copyright (c) 2012, Mher Movsisyan and individual contributors.
2
+ All rights reserved.
3
+
4
+ Redistribution and use in source and binary forms, with or without
5
+ modification, are permitted provided that the following conditions are met:
6
+
7
+ * Redistributions of source code must retain the above copyright notice,
8
+ this list of conditions and the following disclaimer.
9
+
10
+ * Redistributions in binary form must reproduce the above copyright
11
+ notice, this list of conditions and the following disclaimer in the
12
+ documentation and/or other materials provided with the distribution.
13
+
14
+ * Neither the name of the Celery Flower nor the names of its contributors
15
+ may be used to endorse or promote products derived from this software
16
+ without specific prior written permission.
17
+
18
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
19
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
22
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
23
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
24
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
25
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
26
+ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
27
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
28
+ POSSIBILITY OF SUCH DAMAGE.
@@ -0,0 +1,10 @@
1
+ include AUTHORS
2
+ include CHANGES
3
+ include LICENSE
4
+ include MANIFEST.in
5
+ include README.rst
6
+ recursive-include docs *
7
+ recursive-include flower/static *
8
+ recursive-include flower/templates *
9
+ recursive-include tests *
10
+ recursive-include requirements *.txt
@@ -0,0 +1,227 @@
1
+ Metadata-Version: 2.4
2
+ Name: flower-hierarchy
3
+ Version: 2.2.0.1
4
+ Summary: Celery Flower with tasks shown under the task that started them
5
+ Home-page: https://github.com/salvamunoz/flower_hierarchy
6
+ Author: Mher Movsisyan
7
+ Maintainer: Salvador Muñoz
8
+ Maintainer-email: salva17y2@gmail.com
9
+ License: BSD
10
+ Project-URL: Source, https://github.com/salvamunoz/flower_hierarchy
11
+ Project-URL: Issues, https://github.com/salvamunoz/flower_hierarchy/issues
12
+ Project-URL: Upstream, https://github.com/mher/flower
13
+ Project-URL: Documentation, https://flower.readthedocs.io
14
+ Keywords: celery,flower,monitoring,task hierarchy,workflow
15
+ Classifier: Development Status :: 4 - Beta
16
+ Classifier: Intended Audience :: Developers
17
+ Classifier: License :: OSI Approved :: BSD License
18
+ Classifier: Topic :: System :: Distributed Computing
19
+ Classifier: Programming Language :: Python
20
+ Classifier: Programming Language :: Python :: 3
21
+ Classifier: Programming Language :: Python :: 3 :: Only
22
+ Classifier: Programming Language :: Python :: 3.10
23
+ Classifier: Programming Language :: Python :: 3.11
24
+ Classifier: Programming Language :: Python :: 3.12
25
+ Classifier: Programming Language :: Python :: 3.13
26
+ Classifier: Programming Language :: Python :: 3.14
27
+ Classifier: Programming Language :: Python :: Implementation :: CPython
28
+ Classifier: Programming Language :: Python :: Implementation :: PyPy
29
+ Classifier: Operating System :: OS Independent
30
+ Requires-Python: >=3.10
31
+ Description-Content-Type: text/x-rst
32
+ License-File: LICENSE
33
+ Requires-Dist: celery>=5.0.5
34
+ Requires-Dist: tornado<7.0.0,>=6.5.7
35
+ Requires-Dist: prometheus_client>=0.8.0
36
+ Requires-Dist: humanize
37
+ Requires-Dist: pytz
38
+ Dynamic: author
39
+ Dynamic: classifier
40
+ Dynamic: description
41
+ Dynamic: description-content-type
42
+ Dynamic: home-page
43
+ Dynamic: keywords
44
+ Dynamic: license
45
+ Dynamic: license-file
46
+ Dynamic: maintainer
47
+ Dynamic: maintainer-email
48
+ Dynamic: project-url
49
+ Dynamic: requires-dist
50
+ Dynamic: requires-python
51
+ Dynamic: summary
52
+
53
+ flower-hierarchy
54
+ ================
55
+
56
+ .. image:: https://img.shields.io/pypi/v/flower-hierarchy.svg
57
+ :target: https://pypi.org/project/flower-hierarchy/
58
+ :alt: PyPI
59
+ .. image:: https://github.com/salvamunoz/flower_hierarchy/workflows/Build/badge.svg
60
+ :target: https://github.com/salvamunoz/flower_hierarchy/actions
61
+ :alt: Build
62
+
63
+ A fork of `Flower <https://github.com/mher/flower>`_, the web application for
64
+ monitoring and managing Celery clusters, that shows each task under the task
65
+ that started it.
66
+
67
+ Flower lists tasks one after the other. In flower-hierarchy, the tasks a task
68
+ sends with ``delay``/``apply_async``, the steps of a chain, groups and chords
69
+ appear below it as a tree you can expand and collapse, with a summary of what
70
+ happened below each task::
71
+
72
+ ▼ process_order SUCCESS 3 below
73
+ ├─ validate_order SUCCESS
74
+ ├─ charge_card SUCCESS
75
+ └─ send_email SUCCESS
76
+ ▼ import_data SUCCESS 3 below · 1 failed
77
+ └─ download SUCCESS
78
+ └─ parse SUCCESS
79
+ └─ persist FAILURE
80
+
81
+ .. image:: https://raw.githubusercontent.com/salvamunoz/flower_hierarchy/master/docs/screenshots/task-hierarchy.png
82
+ :alt: The tasks page with a chain of tasks expanded
83
+
84
+ Everything else works as in Flower: same command, options, API and Docker
85
+ usage.
86
+
87
+ What's different from Flower
88
+ ----------------------------
89
+
90
+ - **Tree layout of the tasks page**, recursive to any depth, built from the
91
+ ``parent_id`` that Celery puts in its events. No extra setup on the workers
92
+ and any broker works.
93
+ - **Expand all levels** of a task at once: the double chevron next to it,
94
+ Alt+click or Shift+click on its toggle, or ``*`` on the keyboard.
95
+ - **Subtree summaries**: a task shows how many tasks are below it and how many
96
+ failed or are still running, so a failure deep in a workflow is visible from
97
+ the top.
98
+ - **Search keeps the context**: matching tasks are listed under their
99
+ top-level task, with the tasks leading to them dimmed.
100
+ - **Live** button that reloads the table every few seconds, and **Tree** /
101
+ **Flat** buttons to switch to Flower's list.
102
+ - ``GET /api/task/tree/<task-id>``: a task and its descendants as nested JSON.
103
+ - Retries and ``Task.replace`` no longer make a task its own child.
104
+
105
+ See `Task hierarchy <https://github.com/salvamunoz/flower_hierarchy/blob/master/docs/task_hierarchy.rst>`_
106
+ for how relations are found, what Celery's events can't tell (for instance
107
+ groups sent from outside a task) and the limits on large trees.
108
+
109
+ Features
110
+ --------
111
+
112
+ .. features-start
113
+
114
+ - Real-time monitoring using Celery Events
115
+ - View task progress and history
116
+ - View tasks under the task that started them, as an expandable tree
117
+ - View task details (arguments, start time, runtime, and more)
118
+ - Remote Control
119
+ - View worker status and statistics
120
+ - Shutdown and restart worker instances
121
+ - Control worker pool size and autoscale settings
122
+ - View and modify the queues a worker instance consumes from
123
+ - View currently running tasks
124
+ - View scheduled tasks (ETA/countdown)
125
+ - View reserved and revoked tasks
126
+ - Apply time and rate limits
127
+ - Revoke or terminate tasks
128
+ - Broker monitoring
129
+ - View statistics for all Celery queues
130
+ - HTTP Basic Auth, Google, Github, Gitlab and Okta OAuth
131
+ - Prometheus integration
132
+ - API
133
+
134
+ .. features-end
135
+
136
+ .. install-start
137
+
138
+ Installation
139
+ ------------
140
+
141
+ flower-hierarchy replaces Flower: both provide the ``flower`` Python package,
142
+ so remove Flower first if it is installed ::
143
+
144
+ $ pip uninstall flower
145
+ $ pip install flower-hierarchy
146
+
147
+ The development version can be installed from GitHub ::
148
+
149
+ $ pip install git+https://github.com/salvamunoz/flower_hierarchy.git
150
+
151
+ In a requirements file, list ``flower-hierarchy`` instead of ``flower``.
152
+
153
+ Usage
154
+ -----
155
+
156
+ flower-hierarchy is started like Flower. Provide the broker URL ::
157
+
158
+ $ celery --broker=amqp://guest:guest@localhost:5672// flower
159
+
160
+ Or use the configuration of your `celery application <https://docs.celeryq.dev/en/stable/userguide/application.html>`_ ::
161
+
162
+ $ celery -A tasks.app flower
163
+
164
+ Workers must send task events, with ``-E`` or ``worker_send_task_events = True``.
165
+
166
+ By default, flower runs on port 5555, which can be modified with the `port <https://flower.readthedocs.io/en/latest/config.html#port>`_ option ::
167
+
168
+ $ celery -A tasks.app flower --port=5001
169
+
170
+ The tasks page opens in the tree layout. ``/tasks?view=flat`` opens Flower's
171
+ list, and ``/tasks?autorefresh=5`` turns on Live with a 5 second interval.
172
+
173
+ Docker
174
+ ------
175
+
176
+ Build the image from this repository ::
177
+
178
+ $ docker build -t flower-hierarchy https://github.com/salvamunoz/flower_hierarchy.git
179
+ $ docker run -v $(pwd)/examples:/data -p 5555:5555 flower-hierarchy celery --app=tasks.app flower
180
+
181
+ In this example, Flower is using the `tasks.app` defined in the `examples/tasks.py <https://github.com/salvamunoz/flower_hierarchy/blob/master/examples/tasks.py>`_ file
182
+
183
+ .. install-end
184
+
185
+ Versions
186
+ --------
187
+
188
+ Versions are the Flower release the fork is based on, followed by the fork's
189
+ own release number: ``2.2.0.1`` is the first release on top of Flower 2.2.0.
190
+
191
+ API
192
+ ---
193
+
194
+ The Flower API lets you manage the cluster over HTTP.
195
+
196
+ For example you can grow a worker's pool by: ::
197
+
198
+ $ curl -X POST -d 'n=1' http://localhost:5555/api/worker/pool/grow/celery@$(hostname)
199
+
200
+ Or call a task by: ::
201
+
202
+ $ curl -X POST -d '{"args":[1,2]}' http://localhost:5555/api/task/async-apply/tasks.add
203
+
204
+ Or get a task and everything it started by: ::
205
+
206
+ $ curl http://localhost:5555/api/task/tree/8a4da87b-e12b-4547-b89a-e92e4d1f8efd
207
+
208
+ For more info, see Flower's `API Reference`_
209
+
210
+ .. _API Reference: https://flower.readthedocs.io/en/latest/api.html
211
+
212
+ Documentation
213
+ -------------
214
+
215
+ Flower's documentation applies to flower-hierarchy, see `Read the Docs`_.
216
+ The tree layout is described in `docs/task_hierarchy.rst <https://github.com/salvamunoz/flower_hierarchy/blob/master/docs/task_hierarchy.rst>`_.
217
+
218
+ .. _Read the Docs: https://flower.readthedocs.io
219
+
220
+ Credits and license
221
+ -------------------
222
+
223
+ flower-hierarchy is based on `Flower <https://github.com/mher/flower>`_ by
224
+ Mher Movsisyan and its contributors, and keeps its BSD 3-Clause License.
225
+ See the `License`_ file for the full license text.
226
+
227
+ .. _`License`: https://github.com/salvamunoz/flower_hierarchy/blob/master/LICENSE
@@ -0,0 +1,175 @@
1
+ flower-hierarchy
2
+ ================
3
+
4
+ .. image:: https://img.shields.io/pypi/v/flower-hierarchy.svg
5
+ :target: https://pypi.org/project/flower-hierarchy/
6
+ :alt: PyPI
7
+ .. image:: https://github.com/salvamunoz/flower_hierarchy/workflows/Build/badge.svg
8
+ :target: https://github.com/salvamunoz/flower_hierarchy/actions
9
+ :alt: Build
10
+
11
+ A fork of `Flower <https://github.com/mher/flower>`_, the web application for
12
+ monitoring and managing Celery clusters, that shows each task under the task
13
+ that started it.
14
+
15
+ Flower lists tasks one after the other. In flower-hierarchy, the tasks a task
16
+ sends with ``delay``/``apply_async``, the steps of a chain, groups and chords
17
+ appear below it as a tree you can expand and collapse, with a summary of what
18
+ happened below each task::
19
+
20
+ ▼ process_order SUCCESS 3 below
21
+ ├─ validate_order SUCCESS
22
+ ├─ charge_card SUCCESS
23
+ └─ send_email SUCCESS
24
+ ▼ import_data SUCCESS 3 below · 1 failed
25
+ └─ download SUCCESS
26
+ └─ parse SUCCESS
27
+ └─ persist FAILURE
28
+
29
+ .. image:: https://raw.githubusercontent.com/salvamunoz/flower_hierarchy/master/docs/screenshots/task-hierarchy.png
30
+ :alt: The tasks page with a chain of tasks expanded
31
+
32
+ Everything else works as in Flower: same command, options, API and Docker
33
+ usage.
34
+
35
+ What's different from Flower
36
+ ----------------------------
37
+
38
+ - **Tree layout of the tasks page**, recursive to any depth, built from the
39
+ ``parent_id`` that Celery puts in its events. No extra setup on the workers
40
+ and any broker works.
41
+ - **Expand all levels** of a task at once: the double chevron next to it,
42
+ Alt+click or Shift+click on its toggle, or ``*`` on the keyboard.
43
+ - **Subtree summaries**: a task shows how many tasks are below it and how many
44
+ failed or are still running, so a failure deep in a workflow is visible from
45
+ the top.
46
+ - **Search keeps the context**: matching tasks are listed under their
47
+ top-level task, with the tasks leading to them dimmed.
48
+ - **Live** button that reloads the table every few seconds, and **Tree** /
49
+ **Flat** buttons to switch to Flower's list.
50
+ - ``GET /api/task/tree/<task-id>``: a task and its descendants as nested JSON.
51
+ - Retries and ``Task.replace`` no longer make a task its own child.
52
+
53
+ See `Task hierarchy <https://github.com/salvamunoz/flower_hierarchy/blob/master/docs/task_hierarchy.rst>`_
54
+ for how relations are found, what Celery's events can't tell (for instance
55
+ groups sent from outside a task) and the limits on large trees.
56
+
57
+ Features
58
+ --------
59
+
60
+ .. features-start
61
+
62
+ - Real-time monitoring using Celery Events
63
+ - View task progress and history
64
+ - View tasks under the task that started them, as an expandable tree
65
+ - View task details (arguments, start time, runtime, and more)
66
+ - Remote Control
67
+ - View worker status and statistics
68
+ - Shutdown and restart worker instances
69
+ - Control worker pool size and autoscale settings
70
+ - View and modify the queues a worker instance consumes from
71
+ - View currently running tasks
72
+ - View scheduled tasks (ETA/countdown)
73
+ - View reserved and revoked tasks
74
+ - Apply time and rate limits
75
+ - Revoke or terminate tasks
76
+ - Broker monitoring
77
+ - View statistics for all Celery queues
78
+ - HTTP Basic Auth, Google, Github, Gitlab and Okta OAuth
79
+ - Prometheus integration
80
+ - API
81
+
82
+ .. features-end
83
+
84
+ .. install-start
85
+
86
+ Installation
87
+ ------------
88
+
89
+ flower-hierarchy replaces Flower: both provide the ``flower`` Python package,
90
+ so remove Flower first if it is installed ::
91
+
92
+ $ pip uninstall flower
93
+ $ pip install flower-hierarchy
94
+
95
+ The development version can be installed from GitHub ::
96
+
97
+ $ pip install git+https://github.com/salvamunoz/flower_hierarchy.git
98
+
99
+ In a requirements file, list ``flower-hierarchy`` instead of ``flower``.
100
+
101
+ Usage
102
+ -----
103
+
104
+ flower-hierarchy is started like Flower. Provide the broker URL ::
105
+
106
+ $ celery --broker=amqp://guest:guest@localhost:5672// flower
107
+
108
+ Or use the configuration of your `celery application <https://docs.celeryq.dev/en/stable/userguide/application.html>`_ ::
109
+
110
+ $ celery -A tasks.app flower
111
+
112
+ Workers must send task events, with ``-E`` or ``worker_send_task_events = True``.
113
+
114
+ By default, flower runs on port 5555, which can be modified with the `port <https://flower.readthedocs.io/en/latest/config.html#port>`_ option ::
115
+
116
+ $ celery -A tasks.app flower --port=5001
117
+
118
+ The tasks page opens in the tree layout. ``/tasks?view=flat`` opens Flower's
119
+ list, and ``/tasks?autorefresh=5`` turns on Live with a 5 second interval.
120
+
121
+ Docker
122
+ ------
123
+
124
+ Build the image from this repository ::
125
+
126
+ $ docker build -t flower-hierarchy https://github.com/salvamunoz/flower_hierarchy.git
127
+ $ docker run -v $(pwd)/examples:/data -p 5555:5555 flower-hierarchy celery --app=tasks.app flower
128
+
129
+ In this example, Flower is using the `tasks.app` defined in the `examples/tasks.py <https://github.com/salvamunoz/flower_hierarchy/blob/master/examples/tasks.py>`_ file
130
+
131
+ .. install-end
132
+
133
+ Versions
134
+ --------
135
+
136
+ Versions are the Flower release the fork is based on, followed by the fork's
137
+ own release number: ``2.2.0.1`` is the first release on top of Flower 2.2.0.
138
+
139
+ API
140
+ ---
141
+
142
+ The Flower API lets you manage the cluster over HTTP.
143
+
144
+ For example you can grow a worker's pool by: ::
145
+
146
+ $ curl -X POST -d 'n=1' http://localhost:5555/api/worker/pool/grow/celery@$(hostname)
147
+
148
+ Or call a task by: ::
149
+
150
+ $ curl -X POST -d '{"args":[1,2]}' http://localhost:5555/api/task/async-apply/tasks.add
151
+
152
+ Or get a task and everything it started by: ::
153
+
154
+ $ curl http://localhost:5555/api/task/tree/8a4da87b-e12b-4547-b89a-e92e4d1f8efd
155
+
156
+ For more info, see Flower's `API Reference`_
157
+
158
+ .. _API Reference: https://flower.readthedocs.io/en/latest/api.html
159
+
160
+ Documentation
161
+ -------------
162
+
163
+ Flower's documentation applies to flower-hierarchy, see `Read the Docs`_.
164
+ The tree layout is described in `docs/task_hierarchy.rst <https://github.com/salvamunoz/flower_hierarchy/blob/master/docs/task_hierarchy.rst>`_.
165
+
166
+ .. _Read the Docs: https://flower.readthedocs.io
167
+
168
+ Credits and license
169
+ -------------------
170
+
171
+ flower-hierarchy is based on `Flower <https://github.com/mher/flower>`_ by
172
+ Mher Movsisyan and its contributors, and keeps its BSD 3-Clause License.
173
+ See the `License`_ file for the full license text.
174
+
175
+ .. _`License`: https://github.com/salvamunoz/flower_hierarchy/blob/master/LICENSE
@@ -0,0 +1,177 @@
1
+ # Makefile for Sphinx documentation
2
+ #
3
+
4
+ # You can set these variables from the command line.
5
+ SPHINXOPTS =
6
+ SPHINXBUILD = sphinx-build
7
+ PAPER =
8
+ BUILDDIR = .build
9
+
10
+ # User-friendly check for sphinx-build
11
+ ifeq ($(shell which $(SPHINXBUILD) >/dev/null 2>&1; echo $$?), 1)
12
+ $(error The '$(SPHINXBUILD)' command was not found. Make sure you have Sphinx installed, then set the SPHINXBUILD environment variable to point to the full path of the '$(SPHINXBUILD)' executable. Alternatively you can add the directory with the executable to your PATH. If you don't have Sphinx installed, grab it from http://sphinx-doc.org/)
13
+ endif
14
+
15
+ # Internal variables.
16
+ PAPEROPT_a4 = -D latex_paper_size=a4
17
+ PAPEROPT_letter = -D latex_paper_size=letter
18
+ ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
19
+ # the i18n builder cannot share the environment and doctrees with the others
20
+ I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
21
+
22
+ .PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest gettext
23
+
24
+ help:
25
+ @echo "Please use \`make <target>' where <target> is one of"
26
+ @echo " html to make standalone HTML files"
27
+ @echo " dirhtml to make HTML files named index.html in directories"
28
+ @echo " singlehtml to make a single large HTML file"
29
+ @echo " pickle to make pickle files"
30
+ @echo " json to make JSON files"
31
+ @echo " htmlhelp to make HTML files and a HTML help project"
32
+ @echo " qthelp to make HTML files and a qthelp project"
33
+ @echo " devhelp to make HTML files and a Devhelp project"
34
+ @echo " epub to make an epub"
35
+ @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter"
36
+ @echo " latexpdf to make LaTeX files and run them through pdflatex"
37
+ @echo " latexpdfja to make LaTeX files and run them through platex/dvipdfmx"
38
+ @echo " text to make text files"
39
+ @echo " man to make manual pages"
40
+ @echo " texinfo to make Texinfo files"
41
+ @echo " info to make Texinfo files and run them through makeinfo"
42
+ @echo " gettext to make PO message catalogs"
43
+ @echo " changes to make an overview of all changed/added/deprecated items"
44
+ @echo " xml to make Docutils-native XML files"
45
+ @echo " pseudoxml to make pseudoxml-XML files for display purposes"
46
+ @echo " linkcheck to check all external links for integrity"
47
+ @echo " doctest to run all doctests embedded in the documentation (if enabled)"
48
+
49
+ clean:
50
+ rm -rf $(BUILDDIR)/*
51
+
52
+ html:
53
+ $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html
54
+ @echo
55
+ @echo "Build finished. The HTML pages are in $(BUILDDIR)/html."
56
+
57
+ dirhtml:
58
+ $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml
59
+ @echo
60
+ @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml."
61
+
62
+ singlehtml:
63
+ $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml
64
+ @echo
65
+ @echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml."
66
+
67
+ pickle:
68
+ $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle
69
+ @echo
70
+ @echo "Build finished; now you can process the pickle files."
71
+
72
+ json:
73
+ $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json
74
+ @echo
75
+ @echo "Build finished; now you can process the JSON files."
76
+
77
+ htmlhelp:
78
+ $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp
79
+ @echo
80
+ @echo "Build finished; now you can run HTML Help Workshop with the" \
81
+ ".hhp project file in $(BUILDDIR)/htmlhelp."
82
+
83
+ qthelp:
84
+ $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp
85
+ @echo
86
+ @echo "Build finished; now you can run "qcollectiongenerator" with the" \
87
+ ".qhcp project file in $(BUILDDIR)/qthelp, like this:"
88
+ @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/flower.qhcp"
89
+ @echo "To view the help file:"
90
+ @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/flower.qhc"
91
+
92
+ devhelp:
93
+ $(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp
94
+ @echo
95
+ @echo "Build finished."
96
+ @echo "To view the help file:"
97
+ @echo "# mkdir -p $$HOME/.local/share/devhelp/flower"
98
+ @echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/flower"
99
+ @echo "# devhelp"
100
+
101
+ epub:
102
+ $(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub
103
+ @echo
104
+ @echo "Build finished. The epub file is in $(BUILDDIR)/epub."
105
+
106
+ latex:
107
+ $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
108
+ @echo
109
+ @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex."
110
+ @echo "Run \`make' in that directory to run these through (pdf)latex" \
111
+ "(use \`make latexpdf' here to do that automatically)."
112
+
113
+ latexpdf:
114
+ $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
115
+ @echo "Running LaTeX files through pdflatex..."
116
+ $(MAKE) -C $(BUILDDIR)/latex all-pdf
117
+ @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
118
+
119
+ latexpdfja:
120
+ $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
121
+ @echo "Running LaTeX files through platex and dvipdfmx..."
122
+ $(MAKE) -C $(BUILDDIR)/latex all-pdf-ja
123
+ @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
124
+
125
+ text:
126
+ $(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text
127
+ @echo
128
+ @echo "Build finished. The text files are in $(BUILDDIR)/text."
129
+
130
+ man:
131
+ $(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man
132
+ @echo
133
+ @echo "Build finished. The manual pages are in $(BUILDDIR)/man."
134
+
135
+ texinfo:
136
+ $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
137
+ @echo
138
+ @echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo."
139
+ @echo "Run \`make' in that directory to run these through makeinfo" \
140
+ "(use \`make info' here to do that automatically)."
141
+
142
+ info:
143
+ $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
144
+ @echo "Running Texinfo files through makeinfo..."
145
+ make -C $(BUILDDIR)/texinfo info
146
+ @echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo."
147
+
148
+ gettext:
149
+ $(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale
150
+ @echo
151
+ @echo "Build finished. The message catalogs are in $(BUILDDIR)/locale."
152
+
153
+ changes:
154
+ $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes
155
+ @echo
156
+ @echo "The overview file is in $(BUILDDIR)/changes."
157
+
158
+ linkcheck:
159
+ $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck
160
+ @echo
161
+ @echo "Link check complete; look for any errors in the above output " \
162
+ "or in $(BUILDDIR)/linkcheck/output.txt."
163
+
164
+ doctest:
165
+ $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest
166
+ @echo "Testing of doctests in the sources finished, look at the " \
167
+ "results in $(BUILDDIR)/doctest/output.txt."
168
+
169
+ xml:
170
+ $(SPHINXBUILD) -b xml $(ALLSPHINXOPTS) $(BUILDDIR)/xml
171
+ @echo
172
+ @echo "Build finished. The XML files are in $(BUILDDIR)/xml."
173
+
174
+ pseudoxml:
175
+ $(SPHINXBUILD) -b pseudoxml $(ALLSPHINXOPTS) $(BUILDDIR)/pseudoxml
176
+ @echo
177
+ @echo "Build finished. The pseudo-XML files are in $(BUILDDIR)/pseudoxml."
File without changes
@@ -0,0 +1,4 @@
1
+ {%- if display_toc %}
2
+ <h3><a href="{{ pathto(master_doc) }}">{{ _('Table Of Contents') }}</a></h3>
3
+ {{ toctree(collapse=False) }}
4
+ {%- endif %}
@@ -0,0 +1,7 @@
1
+ {% extends "layout.html" %}
2
+ {% block body %}
3
+ <div class="deck">
4
+
5
+ </div>
6
+ {{ body }}
7
+ {% endblock %}
@@ -0,0 +1,8 @@
1
+ <p>
2
+ <iframe src="http://ghbtns.com/github-btn.html?user=mher&repo=flower&type=watch&count=true&size=large"
3
+ allowtransparency="true" frameborder="0" scrolling="0" width="200px" height="35px"></iframe>
4
+ </p>
5
+ {%- if display_toc %}
6
+ <h3><a href="{{ pathto(master_doc) }}">{{ _('Table Of Contents') }}</a></h3>
7
+ {{ toctree(collapse=False) }}
8
+ {%- endif %}
@@ -0,0 +1,4 @@
1
+ <p>
2
+ <iframe src="http://ghbtns.com/github-btn.html?user=mher&repo=flower&type=watch&count=true&size=large"
3
+ allowtransparency="true" frameborder="0" scrolling="0" width="200px" height="35px"></iframe>
4
+ </p>