فهرست منبع

celerymon now its own distribution, will be moved out of this repo

Ask Solem 15 سال پیش
والد
کامیت
b4078e39c2

+ 1 - 1
celerymon/bin/celerymon

@@ -1,6 +1,6 @@
 #!/usr/bin/env python
 import sys
-from celery.bin.celerymon import run_monitor, parse_options
+from celerymon.bin.celerymon import run_monitor, parse_options
 
 if __name__ == "__main__":
     options = parse_options(sys.argv[1:])

+ 14 - 33
celerymon/celerymon/__init__.py

@@ -1,39 +1,20 @@
-from carrot.connection import DjangoBrokerConnection
+"""Real-time monitoring of Celery workers."""
 
-from celery.events import EventReceiver
-from celery.monitoring.state import monitor_state
-from celery.monitoring.web import WebServerThread
+VERSION = (0, 1, 0)
 
+__version__ = ".".join(map(str, VERSION))
+__author__ = "Ask Solem"
+__contact__ = "askh@opera.com"
+__homepage__ = "http://github.com/ask/celerymon/"
+__docformat__ = "restructuredtext"
 
-class MonitorListener(object):
-    """Capture events sent by messages and store them in memory."""
 
-    def __init__(self, state):
-        self.connection = DjangoBrokerConnection()
-        self.receiver = EventReceiver(self.connection, handlers={
-            "task-received": state.receive_task_received,
-            "task-accepted": state.receive_task_event,
-            "task-succeeded": state.receive_task_event,
-            "task-retried": state.receive_task_event,
-            "task-failed": state.receive_task_event,
-            "worker-online": state.receive_worker_event,
-            "worker-offline": state.receive_worker_event,
-            "worker-heartbeat": state.receive_heartbeat,
-        })
+def is_stable_release():
+    return bool(not VERSION[1] % 2)
 
-    def start(self):
-        self.receiver.capture()
 
-
-class MonitorService(object):
-    """celerymon"""
-
-
-    def __init__(self, logger, is_detached=False, http_port=8989):
-        self.logger = logger
-        self.is_detached = is_detached
-        self.http_port = http_port
-
-    def start(self):
-        MonitorListener(monitor_state).start()
-        WebServerThread(port=self.http_port).start()
+def version_with_meta():
+    meta = "unstable"
+    if is_stable_release():
+        meta = "stable"
+    return "%s (%s)" % (__version__, meta)

+ 2 - 1
celerymon/celerymon/bin/celerymon.py

@@ -54,10 +54,11 @@ from celery import conf
 from celery import platform
 from celery import __version__
 from celery.log import emergency_error
-from celery.monitoring import MonitorService
 from celery.loaders import settings
 from celery.messaging import get_connection_info
 
+from celerymon.service import MonitorService
+
 STARTUP_INFO_FMT = """
 Configuration ->
     . broker -> %(conninfo)s

+ 1 - 1
celerymon/celerymon/handlers/api.py

@@ -4,7 +4,7 @@ import simplejson
 from tornado.web import RequestHandler, Application
 
 from celery.task import revoke
-from celery.monitoring.state import monitor_state
+from celerymon.state import monitor_state
 
 
 def JSON(fun):

+ 39 - 0
celerymon/celerymon/service.py

@@ -0,0 +1,39 @@
+from carrot.connection import DjangoBrokerConnection
+from celery.events import EventReceiver
+
+from celerymon.state import monitor_state
+from celerymon.web import WebServerThread
+
+
+class MonitorListener(object):
+    """Capture events sent by messages and store them in memory."""
+
+    def __init__(self, state):
+        self.connection = DjangoBrokerConnection()
+        self.receiver = EventReceiver(self.connection, handlers={
+            "task-received": state.receive_task_received,
+            "task-accepted": state.receive_task_event,
+            "task-succeeded": state.receive_task_event,
+            "task-retried": state.receive_task_event,
+            "task-failed": state.receive_task_event,
+            "worker-online": state.receive_worker_event,
+            "worker-offline": state.receive_worker_event,
+            "worker-heartbeat": state.receive_heartbeat,
+        })
+
+    def start(self):
+        self.receiver.capture()
+
+
+class MonitorService(object):
+    """celerymon"""
+
+
+    def __init__(self, logger, is_detached=False, http_port=8989):
+        self.logger = logger
+        self.is_detached = is_detached
+        self.http_port = http_port
+
+    def start(self):
+        MonitorListener(monitor_state).start()
+        WebServerThread(port=self.http_port).start()

+ 1 - 1
celerymon/celerymon/web.py

@@ -4,7 +4,7 @@ from tornado import httpserver
 from tornado import ioloop
 from tornado.web import Application
 
-from celery.monitoring.handlers import api
+from celerymon.handlers import api
 
 
 class Site(Application):

+ 91 - 0
celerymon/setup.py

@@ -0,0 +1,91 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+import codecs
+import sys
+import os
+import platform
+
+try:
+    from setuptools import setup, find_packages, Command
+except ImportError:
+    from ez_setup import use_setuptools
+    use_setuptools()
+    from setuptools import setup, find_packages, Command
+
+import celerymon as distmeta
+
+
+class RunTests(Command):
+    description = "Run the test suite from the testproj dir."
+
+    user_options = []
+
+    def initialize_options(self):
+        pass
+
+    def finalize_options(self):
+        pass
+
+    def run(self):
+        this_dir = os.getcwd()
+        testproj_dir = os.path.join(this_dir, "testproj")
+        os.chdir(testproj_dir)
+        sys.path.append(testproj_dir)
+        from django.core.management import execute_manager
+        os.environ["DJANGO_SETTINGS_MODULE"] = os.environ.get(
+                        "DJANGO_SETTINGS_MODULE", "settings")
+        settings_file = os.environ["DJANGO_SETTINGS_MODULE"]
+        settings_mod = __import__(settings_file, {}, {}, [''])
+        execute_manager(settings_mod, argv=[
+            __file__, "test"])
+        os.chdir(this_dir)
+
+install_requires = [
+    "celery",
+    "tornado"
+]
+
+# python-daemon doesn't run on windows, so check current platform
+if platform.system() == "Windows":
+    print("""
+    ***WARNING***
+    I see you are using windows. You will not be able to run celerymon
+    in daemon mode with the --detach parameter.""")
+else:
+    install_requires.append("python-daemon>=1.4.8")
+
+if os.path.exists("README.rst"):
+    long_description = codecs.open("README.rst", "r", "utf-8").read()
+else:
+    long_description = "See http://pypi.python.org/pypi/celerymon"
+
+
+setup(
+    name='celerymon',
+    version=distmeta.__version__,
+    description=distmeta.__doc__,
+    author=distmeta.__author__,
+    author_email=distmeta.__contact__,
+    url=distmeta.__homepage__,
+    platforms=["any"],
+    license="BSD",
+    packages=find_packages(exclude=['ez_setup']),
+    scripts=["bin/celerymon"],
+    zip_safe=False,
+    install_requires=install_requires,
+    cmdclass = {"test": RunTests},
+    classifiers=[
+        "Development Status :: 3 - Alpha",
+        "Operating System :: OS Independent",
+        "Programming Language :: Python",
+        "Programming Language :: Python :: 2.4",
+        "Programming Language :: Python :: 2.5",
+        "Programming Language :: Python :: 2.6",
+        "Programming Language :: Python :: 2.7",
+        "License :: OSI Approved :: BSD License",
+        "Operating System :: POSIX",
+        "Topic :: System :: Monitoring",
+        "Topic :: System :: Distributed Computing",
+    ],
+    long_description=long_description,
+)