|
@@ -0,0 +1,58 @@
|
|
|
+from celery import conf
|
|
|
+from celery.messaging import establish_connection
|
|
|
+
|
|
|
+ROUTE_FORMAT = """
|
|
|
+. %(name)s -> exchange:%(exchange)s (%(exchange_type)s) \
|
|
|
+binding:%(binding_key)s
|
|
|
+"""
|
|
|
+BROKER_FORMAT = "%(carrot_backend)s://%(userid)s@%(host)s%(port)s%(vhost)s"
|
|
|
+
|
|
|
+TIME_UNITS = (("day", 60 * 60 * 24, lambda n: int(math.ceil(n))),
|
|
|
+ ("hour", 60 * 60, lambda n: int(math.ceil(n))),
|
|
|
+ ("minute", 60, lambda n: int(math.ceil(n))),
|
|
|
+ ("second", 1, lambda n: "%.2d" % n))
|
|
|
+
|
|
|
+
|
|
|
+def humanize_seconds(secs, prefix=""):
|
|
|
+ """Show seconds in human form, e.g. 60 is "1 minute", 7200 is "2
|
|
|
+ hours"."""
|
|
|
+ for unit, divider, formatter in TIME_UNITS:
|
|
|
+ if secs >= divider:
|
|
|
+ w = secs / divider
|
|
|
+ punit = w > 1 and unit+"s" or unit
|
|
|
+ return "%s%s %s" % (prefix, formatter(w), punit)
|
|
|
+ return "now"
|
|
|
+
|
|
|
+
|
|
|
+def textindent(t, indent=0):
|
|
|
+ """Indent text."""
|
|
|
+ return "\n".join(" " * indent + p for p in t.split("\n"))
|
|
|
+
|
|
|
+
|
|
|
+def format_routing_table(table=None, indent=0):
|
|
|
+ """Format routing table into string for log dumps."""
|
|
|
+ table = table or conf.routing_table
|
|
|
+ format = lambda **route: ROUTE_FORMAT.strip() % route
|
|
|
+ routes = "\n".join(format(name=name, **route)
|
|
|
+ for name, route in table.items())
|
|
|
+ return textindent(routes, indent=indent)
|
|
|
+
|
|
|
+
|
|
|
+def format_broker_info():
|
|
|
+ """Get message broker connection info string for log dumps."""
|
|
|
+ broker_connection = establish_connection()
|
|
|
+ carrot_backend = broker_connection.backend_cls
|
|
|
+ if carrot_backend and not isinstance(carrot_backend, str):
|
|
|
+ carrot_backend = carrot_backend.__name__
|
|
|
+ carrot_backend = carrot_backend or "amqp"
|
|
|
+ port = broker_connection.port or \
|
|
|
+ broker_connection.get_backend_cls().default_port
|
|
|
+ port = port and ":%s" % port or ""
|
|
|
+ vhost = broker_connection.virtual_host
|
|
|
+ if not vhost.startswith("/"):
|
|
|
+ vhost = "/" + vhost
|
|
|
+ return BROKER_FORMAT % {"carrot_backend": carrot_backend,
|
|
|
+ "userid": broker_connection.userid,
|
|
|
+ "host": broker_connection.hostname,
|
|
|
+ "port": port,
|
|
|
+ "vhost": vhost}
|