Add meaningfull process titles with currently running task name (#57)

* Customize process names (in ps/top) and add task name in logs

* Increase severity of reincarnate log messages and add task name

* Document setproctitle optional dependency

Co-authored-by: Marc Sabatier <37879561+msabatier@users.noreply.github.com>
Co-authored-by: Stan Triepels <1939656+GDay@users.noreply.github.com>
This commit is contained in:
msabatier
2023-01-26 02:21:56 +01:00
committed by GitHub
co-authored by Stan Triepels
parent 650c3b1524
commit 17c1609f10
8 changed files with 1399 additions and 1242 deletions
+57 -18
View File
@@ -33,6 +33,7 @@ from django_q.conf import (
get_ppid, get_ppid,
logger, logger,
psutil, psutil,
setproctitle,
resource, resource,
) )
from django_q.humanhash import humanize from django_q.humanhash import humanize
@@ -59,6 +60,8 @@ class Cluster:
signal.signal(signal.SIGINT, self.sig_handler) signal.signal(signal.SIGINT, self.sig_handler)
def start(self) -> int: def start(self) -> int:
if setproctitle:
setproctitle.setproctitle(f"qcluster {current_process().name} {self.name}")
# Start Sentinel # Start Sentinel
self.stop_event = Event() self.stop_event = Event()
self.start_event = Event() self.start_event = Event()
@@ -217,13 +220,13 @@ class Sentinel:
db.connections.close_all() db.connections.close_all()
if process == self.monitor: if process == self.monitor:
self.monitor = self.spawn_monitor() self.monitor = self.spawn_monitor()
logger.error( logger.critical(
_("reincarnated monitor %(name)s after sudden death") _("reincarnated monitor %(name)s after sudden death")
% {"name": process.name} % {"name": process.name}
) )
elif process == self.pusher: elif process == self.pusher:
self.pusher = self.spawn_pusher() self.pusher = self.spawn_pusher()
logger.error( logger.critical(
_("reincarnated pusher %(name)s after sudden death") _("reincarnated pusher %(name)s after sudden death")
% {"name": process.name} % {"name": process.name}
) )
@@ -233,15 +236,30 @@ class Sentinel:
if process.timer.value == 0: if process.timer.value == 0:
# only need to terminate on timeout, otherwise we risk destabilizing # only need to terminate on timeout, otherwise we risk destabilizing
# the queues # the queues
task_name = ""
if psutil:
try:
process_name = psutil.Process(process.pid).name()
name_splits = process_name.split(" ")
task_name = name_splits[3] if len(name_splits) >= 4 and name_splits[2] == "processing" else ""
except psutil.NoSuchProcess:
pass
process.terminate() process.terminate()
logger.warning( if task_name:
_("reincarnated worker %(name)s after timeout") msg = (
% {"name": process.name} _("reincarnated worker %(name)s after timeout while processing task %(task_name)s")
) % {"name": process.name, "task_name": task_name}
)
else:
msg = (
_("reincarnated worker %(name)s after timeout")
% {"name": process.name}
)
logger.critical(msg)
elif int(process.timer.value) == -2: elif int(process.timer.value) == -2:
logger.info(_("recycled worker %(name)s") % {"name": process.name}) logger.info(_("recycled worker %(name)s") % {"name": process.name})
else: else:
logger.error( logger.critical(
_("reincarnated worker %(name)s after death") _("reincarnated worker %(name)s after death")
% {"name": process.name} % {"name": process.name}
) )
@@ -358,9 +376,12 @@ def pusher(task_queue: Queue, event: Event, broker: Broker = None):
""" """
if not broker: if not broker:
broker = get_broker() broker = get_broker()
proc_name = current_process().name
if setproctitle:
setproctitle.setproctitle(f"qcluster {proc_name} pusher")
logger.info( logger.info(
_("%(process_name)s pushing tasks at %(id)s") _("%(name)s pushing tasks at %(id)s")
% {"process_name": current_process().name, "id": current_process().pid} % {"name": proc_name, "id": current_process().pid}
) )
while True: while True:
try: try:
@@ -398,9 +419,11 @@ def monitor(result_queue: Queue, broker: Broker = None):
""" """
if not broker: if not broker:
broker = get_broker() broker = get_broker()
name = current_process().name proc_name = current_process().name
if setproctitle:
setproctitle.setproctitle(f"qcluster {proc_name} monitor")
logger.info( logger.info(
_("%(name)s monitoring at %(id)s") % {"name": name, "id": current_process().pid} _("%(name)s monitoring at %(id)s") % {"name": proc_name, "id": current_process().pid}
) )
for task in iter(result_queue.get, "STOP"): for task in iter(result_queue.get, "STOP"):
# save the result # save the result
@@ -432,7 +455,7 @@ def monitor(result_queue: Queue, broker: Broker = None):
"task_result": task["result"], "task_result": task["result"],
} }
) )
logger.info(_("%(name)s stopped monitoring results") % {"name": name}) logger.info(_("%(name)s stopped monitoring results") % {"name": proc_name})
def worker( def worker(
@@ -451,6 +474,8 @@ def worker(
_("%(proc_name)s ready for work at %(id)s") _("%(proc_name)s ready for work at %(id)s")
% {"proc_name": proc_name, "id": current_process().pid} % {"proc_name": proc_name, "id": current_process().pid}
) )
if setproctitle:
setproctitle.setproctitle(f"qcluster {proc_name} idle")
task_count = 0 task_count = 0
if timeout is None: if timeout is None:
timeout = -1 timeout = -1
@@ -459,18 +484,30 @@ def worker(
result = None result = None
timer.value = -1 # Idle timer.value = -1 # Idle
task_count += 1 task_count += 1
f = task["func"]
# Log task creation and set process name
# Get the function from the task # Get the function from the task
func = task["func"] func_name = get_func_repr(f)
func_name = get_func_repr(func) task_name = task["name"]
logger.info( task_desc = (
_("%(proc_name)s processing '%(func_name)s' (%(task_name)s)") _("%(proc_name)s processing %(task_name)s '%(func_name)s'")
% { % {
"proc_name": proc_name, "proc_name": proc_name,
"func_name": func_name, "func_name": func_name,
"task_name": task["name"], "task_name": task_name,
} }
) )
f = task["func"] if "group" in task:
task_desc += f" [{task['group']}]"
logger.info(task_desc)
if setproctitle:
proc_title = f"qcluster {proc_name} processing {task_name} '{func_name}'"
if "group" in task:
proc_title += f" [{task['group']}]"
setproctitle.setproctitle(proc_title)
# if it's not an instance try to get it from the string # if it's not an instance try to get it from the string
if not callable(f): if not callable(f):
# locate() returns None if f cannot be loaded # locate() returns None if f cannot be loaded
@@ -500,6 +537,8 @@ def worker(
task["stopped"] = timezone.now() task["stopped"] = timezone.now()
result_queue.put(task) result_queue.put(task)
timer.value = -1 # Idle timer.value = -1 # Idle
if setproctitle:
setproctitle.setproctitle(f"qcluster {proc_name} idle")
# Recycle # Recycle
if task_count == Conf.RECYCLE or rss_check(): if task_count == Conf.RECYCLE or rss_check():
timer.value = -2 # Recycled timer.value = -2 # Recycled
+5
View File
@@ -27,6 +27,11 @@ try:
except ModuleNotFoundError: except ModuleNotFoundError:
resource = None resource = None
try:
import setproctitle
except ModuleNotFoundError:
setproctitle = None
class Conf: class Conf:
""" """
+70 -60
View File
@@ -42,17 +42,18 @@ msgstr "Q-Cluster %(name)s wird gestartet."
msgid "Q Cluster %(name)s stopping." msgid "Q Cluster %(name)s stopping."
msgstr "Q-Cluster {name} wird gestoppt." msgstr "Q-Cluster {name} wird gestoppt."
#: cluster.py:87 #: cluster.py:91
#, python-format #, python-format
msgid "Q Cluster %(name)s has stopped." msgid "Q Cluster %(name)s has stopped."
msgstr "Q-Cluster %(name)s wurde gestoppt." msgstr "Q-Cluster %(name)s wurde gestoppt."
#: cluster.py:94 #: cluster.py:94
#, python-format #, python-format
msgid "%(name)s got signal %(signal)s" msgid "%(name)s got signal %(signal)s"
msgstr "%(name)s erhielt das Signal %(signal)s" msgstr "%(name)s erhielt das Signal %(signal)s"
#: cluster.py:221 #: cluster.py:225
#, python-format #, python-format
msgid "reincarnated monitor %(name)s after sudden death" msgid "reincarnated monitor %(name)s after sudden death"
msgstr "Monitor %(name)s wurde nach unerwartetem Absturz neu gestartet" msgstr "Monitor %(name)s wurde nach unerwartetem Absturz neu gestartet"
@@ -62,7 +63,15 @@ msgstr "Monitor %(name)s wurde nach unerwartetem Absturz neu gestartet"
msgid "reincarnated pusher %(name)s after sudden death" msgid "reincarnated pusher %(name)s after sudden death"
msgstr "Pusher %(name)s wurde nach unerwartetem Absturz neu gestartet" msgstr "Pusher %(name)s wurde nach unerwartetem Absturz neu gestartet"
#: cluster.py:238 #: cluster.py:251
#, fuzzy, python-format
#| msgid "reincarnated worker %(name)s after timeout"
msgid ""
"reincarnated worker %(name)s after timeout while processing task "
"%(task_name)s"
msgstr "Worker %(name)s wurde nach Zeitüberschreitung neu gestartet"
#: cluster.py:256
#, python-format #, python-format
msgid "reincarnated worker %(name)s after timeout" msgid "reincarnated worker %(name)s after timeout"
msgstr "Worker %(name)s wurde nach Zeitüberschreitung neu gestartet" msgstr "Worker %(name)s wurde nach Zeitüberschreitung neu gestartet"
@@ -87,6 +96,7 @@ msgstr "%(name)s beschützt das Cluster %(cluster_name)s"
msgid "Q Cluster %(cluster_name)s running." msgid "Q Cluster %(cluster_name)s running."
msgstr "Q-Cluster %(cluster_name)s läuft." msgstr "Q-Cluster %(cluster_name)s läuft."
#: cluster.py:314 #: cluster.py:314
#, python-format #, python-format
msgid "%(name)s stopping cluster processes" msgid "%(name)s stopping cluster processes"
@@ -97,63 +107,66 @@ msgstr "%(name)s hält Cluster-Prozesse an"
msgid "%(name)s waiting for the monitor." msgid "%(name)s waiting for the monitor."
msgstr "%(name)s wartet auf den Monitor." msgstr "%(name)s wartet auf den Monitor."
#: cluster.py:362
#, python-format #: cluster.py:384
msgid "%(process_name)s pushing tasks at %(id)s" #, fuzzy, python-format
#| msgid "%(process_name)s pushing tasks at %(id)s"
msgid "%(name)s pushing tasks at %(id)s"
msgstr "%(process_name)s veröffentlicht Aufagaben auf %(id)s" msgstr "%(process_name)s veröffentlicht Aufagaben auf %(id)s"
#: cluster.py:386 #: cluster.py:408
#, python-format #, python-format
msgid "queueing from %(list_key)s" msgid "queueing from %(list_key)s"
msgstr "Einreihen von %(list_key)s" msgstr "Einreihen von %(list_key)s"
#: cluster.py:390 #: cluster.py:412
#, python-format #, python-format
msgid "%(name)s stopped pushing tasks" msgid "%(name)s stopped pushing tasks"
msgstr "%(name)s veröffentlicht keine Aufgaben mehr" msgstr "%(name)s veröffentlicht keine Aufgaben mehr"
#: cluster.py:403 #: cluster.py:427
#, python-format #, python-format
msgid "%(name)s monitoring at %(id)s" msgid "%(name)s monitoring at %(id)s"
msgstr "%(name)s beobachtet auf %(id)s" msgstr "%(name)s beobachtet auf %(id)s"
#: cluster.py:422 #: cluster.py:446
#, python-format #, python-format
msgid "Processed '%(info_name)s' (%(task_name)s)" msgid "Processed '%(info_name)s' (%(task_name)s)"
msgstr "[%(task_name)s] - '%(info_name)s' wurde verarbeitet" msgstr "[%(task_name)s] - '%(info_name)s' wurde verarbeitet"
#: cluster.py:428 #: cluster.py:452
#, python-format #, python-format
msgid "Failed '%(info_name)s' (%(task_name)s) - %(task_result)s" msgid "Failed '%(info_name)s' (%(task_name)s) - %(task_result)s"
msgstr "'%(info_name)s' (%(task_name)s) ist fehlgeschlagen - %(task_result)s" msgstr "'%(info_name)s' (%(task_name)s) ist fehlgeschlagen - %(task_result)s"
#: cluster.py:435 #: cluster.py:459
#, python-format #, python-format
msgid "%(name)s stopped monitoring results" msgid "%(name)s stopped monitoring results"
msgstr "%(name)s überwacht keine Ergebnisse mehr" msgstr "%(name)s überwacht keine Ergebnisse mehr"
#: cluster.py:451 #: cluster.py:475
#, python-format #, python-format
msgid "%(proc_name)s ready for work at %(id)s" msgid "%(proc_name)s ready for work at %(id)s"
msgstr "%(proc_name)s ist bereit für Arbeit auf %(id)s" msgstr "%(proc_name)s ist bereit für Arbeit auf %(id)s"
#: cluster.py:466 #: cluster.py:495
#, python-format #, fuzzy, python-format
msgid "%(proc_name)s processing '%(func_name)s' (%(task_name)s)" #| msgid "%(proc_name)s processing '%(func_name)s' (%(task_name)s)"
msgid "%(proc_name)s processing %(task_name)s '%(func_name)s'"
msgstr "%(proc_name)s verarbeitet '%(func_name)s' (%(task_name)s)" msgstr "%(proc_name)s verarbeitet '%(func_name)s' (%(task_name)s)"
#: cluster.py:507 #: cluster.py:543
#, python-format #, python-format
msgid "%(proc_name)s stopped doing work" msgid "%(proc_name)s stopped doing work"
msgstr "%(proc_name)s hat die Arbeit beendet" msgstr "%(proc_name)s hat die Arbeit beendet"
#: cluster.py:712 #: cluster.py:756
#, python-format #, python-format
msgid "%(process_name)s failed to create a task from schedule [%(schedule)s]" msgid "%(process_name)s failed to create a task from schedule [%(schedule)s]"
msgstr "" msgstr ""
"%(process_name)s konnte keine Aufgabe von Zeitplan [%(schedule)s] erstellen" "%(process_name)s konnte keine Aufgabe von Zeitplan [%(schedule)s] erstellen"
#: cluster.py:723 #: cluster.py:767
#, fuzzy, python-format #, fuzzy, python-format
#| msgid "%(process_name)s created a task from schedule [%(schedule)s]" #| msgid "%(process_name)s created a task from schedule [%(schedule)s]"
msgid "" msgid ""
@@ -161,22 +174,22 @@ msgid ""
msgstr "" msgstr ""
"%(process_name)s hat eine Aufgabe des Zeitplans [%(schedule)s] erstellt" "%(process_name)s hat eine Aufgabe des Zeitplans [%(schedule)s] erstellt"
#: cluster.py:769 #: cluster.py:813
msgid "Skipping cpu affinity because psutil was not found." msgid "Skipping cpu affinity because psutil was not found."
msgstr "Cpu-Affinität wird übersprungen, da psutil nicht gefunden wurde." msgstr "Cpu-Affinität wird übersprungen, da psutil nicht gefunden wurde."
#: cluster.py:774 #: cluster.py:818
msgid "Faking cpu affinity because it is not supported on this platform" msgid "Faking cpu affinity because it is not supported on this platform"
msgstr "" msgstr ""
"Vortäuschen von CPU-Affinität, da diese auf dieser Plattform nicht " "Vortäuschen von CPU-Affinität, da diese auf dieser Plattform nicht "
"unterstützt wird" "unterstützt wird"
#: cluster.py:796 #: cluster.py:840
#, python-format #, python-format
msgid "%(pid)s will use cpu %(affinity)s" msgid "%(pid)s will use cpu %(affinity)s"
msgstr "%(pid)s wird CPU %(affinity)s benutzen" msgstr "%(pid)s wird CPU %(affinity)s benutzen"
#: conf.py:85 #: conf.py:93
#, python-format #, python-format
msgid "" msgid ""
"SAVE_LIMIT_PER (%(option)s) is not a valid option. Options are: 'group', " "SAVE_LIMIT_PER (%(option)s) is not a valid option. Options are: 'group', "
@@ -186,23 +199,23 @@ msgstr ""
"'group', 'name', 'func' und None. Standard ist None." "'group', 'name', 'func' und None. Standard ist None."
#. Translators: Cluster status descriptions #. Translators: Cluster status descriptions
#: conf.py:202 #: conf.py:210
msgid "Starting" msgid "Starting"
msgstr "Wird gestartet" msgstr "Wird gestartet"
#: conf.py:203 #: conf.py:211
msgid "Working" msgid "Working"
msgstr "Arbeitet" msgstr "Arbeitet"
#: conf.py:204 #: conf.py:212
msgid "Idle" msgid "Idle"
msgstr "Leerlauf" msgstr "Leerlauf"
#: conf.py:205 #: conf.py:213
msgid "Stopped" msgid "Stopped"
msgstr "Gestoppt" msgstr "Gestoppt"
#: conf.py:206 #: conf.py:214
msgid "Stopping" msgid "Stopping"
msgstr "Wird gestoppt" msgstr "Wird gestoppt"
@@ -226,119 +239,116 @@ msgstr "Überwacht die Speichernutzung von Q Cluster"
msgid "Monitors Q Cluster activity" msgid "Monitors Q Cluster activity"
msgstr "Q-Cluster aktiv überwachen" msgstr "Q-Cluster aktiv überwachen"
#: models.py:125
#: models.py:124
msgid "Successful task" msgid "Successful task"
msgstr "Erfolgreiche Aufgabe" msgstr "Erfolgreiche Aufgabe"
#: models.py:126 #: models.py:125
msgid "Successful tasks" msgid "Successful tasks"
msgstr "Erfolgreiche Aufgaben" msgstr "Erfolgreiche Aufgaben"
#: models.py:141 #: models.py:140
msgid "Failed task" msgid "Failed task"
msgstr "Fehlgeschlagene Aufgabe" msgstr "Fehlgeschlagene Aufgabe"
#: models.py:142 #: models.py:141
msgid "Failed tasks" msgid "Failed tasks"
msgstr "Fehlgeschlagene Aufgaben" msgstr "Fehlgeschlagene Aufgaben"
#: models.py:150 models.py:234 #: models.py:149 models.py:222
msgid "Please install croniter to enable cron expressions" msgid "Please install croniter to enable cron expressions"
msgstr "Bitte installieren Sie croniter, um Cron-Ausdrücke zu aktivieren" msgstr "Bitte installieren Sie croniter, um Cron-Ausdrücke zu aktivieren"
#: models.py:170 #: models.py:165
msgid "e.g. 1, 2, 'John'" msgid "e.g. 1, 2, 'John'"
msgstr "zum Beispiel 1, 2, 'John'" msgstr "zum Beispiel 1, 2, 'John'"
#: models.py:172 #: models.py:167
msgid "e.g. x=1, y=2, name='John'" msgid "e.g. x=1, y=2, name='John'"
msgstr "zum Beispiel x=1, y=2, name='John'" msgstr "zum Beispiel x=1, y=2, name='John'"
#: models.py:186 #: models.py:181
msgid "Once" msgid "Once"
msgstr "Einmal" msgstr "Einmal"
#: models.py:187 #: models.py:182
msgid "Minutes" msgid "Minutes"
msgstr "Minuten" msgstr "Minuten"
#: models.py:188 #: models.py:183
msgid "Hourly" msgid "Hourly"
msgstr "Stündlich" msgstr "Stündlich"
#: models.py:189 #: models.py:184
msgid "Daily" msgid "Daily"
msgstr "Täglich" msgstr "Täglich"
#: models.py:190 #: models.py:185
msgid "Weekly" msgid "Weekly"
msgstr "Wöchentlich" msgstr "Wöchentlich"
#: models.py:191 #: models.py:186
msgid "Biweekly" msgid "Biweekly"
msgstr "Zweiwöchentlich" msgstr "Zweiwöchentlich"
#: models.py:192 #: models.py:187
msgid "Monthly" msgid "Monthly"
msgstr "Monatlich" msgstr "Monatlich"
#: models.py:193 #: models.py:188
msgid "Bimonthly" msgid "Bimonthly"
msgstr "Zweimonatlich" msgstr "Zweimonatlich"
#: models.py:194 #: models.py:189
msgid "Quarterly" msgid "Quarterly"
msgstr "Vierteljährlich" msgstr "Vierteljährlich"
#: models.py:195 #: models.py:190
msgid "Yearly" msgid "Yearly"
msgstr "Jährlich" msgstr "Jährlich"
#: models.py:196 #: models.py:191
msgid "Cron" msgid "Cron"
msgstr "Cron" msgstr "Cron"
#: models.py:199 #: models.py:194
msgid "Schedule Type" msgid "Schedule Type"
msgstr "Zeitplan-Typ" msgstr "Zeitplan-Typ"
#: models.py:202 #: models.py:197
msgid "Number of minutes for the Minutes type" msgid "Number of minutes for the Minutes type"
msgstr "Anzahl Minuten für den Typ 'Minuten'" msgstr "Anzahl Minuten für den Typ 'Minuten'"
#: models.py:205 #: models.py:200
msgid "Repeats" msgid "Repeats"
msgstr "Wiederhohlungen" msgstr "Wiederhohlungen"
#: models.py:205 #: models.py:200
msgid "n = n times, -1 = forever" msgid "n = n times, -1 = forever"
msgstr "n = n mal, -1 = für immer" msgstr "n = n mal, -1 = für immer"
#: models.py:208 #: models.py:203
msgid "Next Run" msgid "Next Run"
msgstr "Nächste Ausführung" msgstr "Nächste Ausführung"
#: models.py:215 #: models.py:210
msgid "Cron expression" msgid "Cron expression"
msgstr "Cron-Ausdruck" msgstr "Cron-Ausdruck"
#: models.py:224 #: models.py:287
msgid "Name of kwarg to pass intended schedule date"
msgstr ""
#: models.py:299
msgid "Scheduled task" msgid "Scheduled task"
msgstr "Geplante Aufgabe" msgstr "Geplante Aufgabe"
#: models.py:300 #: models.py:288
msgid "Scheduled tasks" msgid "Scheduled tasks"
msgstr "Geplante Aufgaben" msgstr "Geplante Aufgaben"
#: models.py:326 #: models.py:314
msgid "Queued task" msgid "Queued task"
msgstr "Eingereihte Aufgabe" msgstr "Eingereihte Aufgabe"
#: models.py:327 #: models.py:315
msgid "Queued tasks" msgid "Queued tasks"
msgstr "Eingereihte Aufgaben" msgstr "Eingereihte Aufgaben"
+101 -94
View File
@@ -6,7 +6,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: \n" "Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-01-15 23:35+0100\n" "POT-Creation-Date: 2023-01-07 19:21+0100\n"
"PO-Revision-Date: 2018-08-05 18:28+0200\n" "PO-Revision-Date: 2018-08-05 18:28+0200\n"
"Last-Translator: Thierry BOULOGNE <contact@tng-concepts.com>\n" "Last-Translator: Thierry BOULOGNE <contact@tng-concepts.com>\n"
"Language-Team: \n" "Language-Team: \n"
@@ -21,160 +21,172 @@ msgstr ""
msgid "Resubmit selected tasks to queue" msgid "Resubmit selected tasks to queue"
msgstr "Resoumettre les tâches sélectionnées à la file d'attente" msgstr "Resoumettre les tâches sélectionnées à la file d'attente"
#: admin.py:107 models.py:293 #: admin.py:107 models.py:281
#, fuzzy #, fuzzy
#| msgid "Success" #| msgid "Success"
msgid "success" msgid "success"
msgstr "succès" msgstr "succès"
#: admin.py:119 models.py:295 #: admin.py:119 models.py:283
msgid "last_run" msgid "last_run"
msgstr "" msgstr ""
#: cluster.py:76 #: cluster.py:80
#, python-format #, python-format
msgid "Q Cluster %(name)s starting." msgid "Q Cluster %(name)s starting."
msgstr "Démarrage de Q Cluster-%(name)s." msgstr "Démarrage de Q Cluster-%(name)s."
#: cluster.py:84 #: cluster.py:88
#, python-format #, python-format
msgid "Q Cluster %(name)s stopping." msgid "Q Cluster %(name)s stopping."
msgstr "Arrêt de Q Cluster-%(name)s." msgstr "Arrêt de Q Cluster-%(name)s."
#: cluster.py:87 #: cluster.py:91
#, python-format #, python-format
msgid "Q Cluster %(name)s has stopped." msgid "Q Cluster %(name)s has stopped."
msgstr "Q Cluster-%(name)s a été arrêté." msgstr "Q Cluster-%(name)s a été arrêté."
#: cluster.py:94 #: cluster.py:98
#, python-format #, python-format
msgid "%(name)s got signal %(signal)s" msgid "%(name)s got signal %(signal)s"
msgstr "%(name)s à reçu le signal %(signal)s" msgstr "%(name)s à reçu le signal %(signal)s"
#: cluster.py:221 #: cluster.py:225
#, python-format #, python-format
msgid "reincarnated monitor %(name)s after sudden death" msgid "reincarnated monitor %(name)s after sudden death"
msgstr "moniteur réintégré %(name)s après un arrêt intempestif" msgstr "surveillant %(name)s réincarné après un arrêt intempestif"
#: cluster.py:227
#: cluster.py:231
#, python-format #, python-format
msgid "reincarnated pusher %(name)s after sudden death" msgid "reincarnated pusher %(name)s after sudden death"
msgstr "pousseur réintégré %(name)s après un arrêt intempestif" msgstr "répartiteur %(name)s réincarné après un arrêt intempestif"
#: cluster.py:238 #: cluster.py:251
#, python-format
msgid ""
"reincarnated worker %(name)s after timeout while processing task "
"%(task_name)s"
msgstr ""
"processus %(name)s réincarné, délai de traitement dépassé pour la tâche "
"%(task_name)s"
#: cluster.py:256
#, python-format #, python-format
msgid "reincarnated worker %(name)s after timeout" msgid "reincarnated worker %(name)s after timeout"
msgstr "processus réintégré %(name)s après un arrêt une attente trop longue" msgstr "processus %(name)s réincarné, délai de traitement dépassé"
#: cluster.py:242 #: cluster.py:261
#, python-format #, python-format
msgid "recycled worker %(name)s" msgid "recycled worker %(name)s"
msgstr "processus recyclé %(name)s" msgstr "processus recyclé %(name)s"
#: cluster.py:245 #: cluster.py:264
#, python-format #, python-format
msgid "reincarnated worker %(name)s after death" msgid "reincarnated worker %(name)s after death"
msgstr "processus réintégré %(name)s après arrêt" msgstr "processus réintégré %(name)s après arrêt"
#: cluster.py:269 #: cluster.py:288
#, python-format #, python-format
msgid "%(name)s guarding cluster %(cluster_name)s" msgid "%(name)s guarding cluster %(cluster_name)s"
msgstr "%(name)s surveillance du cluster à %(cluster_name)s" msgstr "%(name)s surveillance du cluster à %(cluster_name)s"
#: cluster.py:278 #: cluster.py:297
#, python-format #, python-format
msgid "Q Cluster %(cluster_name)s running." msgid "Q Cluster %(cluster_name)s running."
msgstr "Démarrage de Q Cluster-%(cluster_name)s." msgstr "Démarrage de Q Cluster-%(cluster_name)s."
#: cluster.py:314 #: cluster.py:333
#, python-format #, python-format
msgid "%(name)s stopping cluster processes" msgid "%(name)s stopping cluster processes"
msgstr "%(name)s arrêt des processus de cluster" msgstr "%(name)s arrêt des processus du cluster"
#: cluster.py:339 #: cluster.py:358
#, python-format #, python-format
msgid "%(name)s waiting for the monitor." msgid "%(name)s waiting for the monitor."
msgstr "%(name)s en attente du moniteur." msgstr "%(name)s en attente du surveillant."
#: cluster.py:362 #: cluster.py:384
#, python-format #, python-format
msgid "%(process_name)s pushing tasks at %(id)s" msgid "%(name)s pushing tasks at %(id)s"
msgstr "%(process_name)s tâche envoyé à %(id)s" msgstr "%(name)s répartit les tâches %(id)s"
#: cluster.py:386 #: cluster.py:408
#, python-format #, python-format
msgid "queueing from %(list_key)s" msgid "queueing from %(list_key)s"
msgstr "mise en file d'attente de %(list_key)s" msgstr "mise en file d'attente de %(list_key)s"
#: cluster.py:390 #: cluster.py:412
#, python-format #, python-format
msgid "%(name)s stopped pushing tasks" msgid "%(name)s stopped pushing tasks"
msgstr "%(name)s a cessé de pousser les tâches" msgstr "%(name)s a cessé de répartir les tâches"
#: cluster.py:403 #: cluster.py:427
#, python-format #, python-format
msgid "%(name)s monitoring at %(id)s" msgid "%(name)s monitoring at %(id)s"
msgstr "%(name)s Surveillance de %(id)s" msgstr "%(name)s surveille les résultats %(id)s"
#: cluster.py:422 #: cluster.py:446
#, python-format #, python-format
msgid "Processed '%(info_name)s' (%(task_name)s)" msgid "Processed '%(info_name)s' (%(task_name)s)"
msgstr "traité '%(info_name)s' (%(task_name)s)" msgstr "traité '%(info_name)s' (%(task_name)s)"
#: cluster.py:428 #: cluster.py:452
#, python-format #, python-format
msgid "Failed '%(info_name)s' (%(task_name)s) - %(task_result)s" msgid "Failed '%(info_name)s' (%(task_name)s) - %(task_result)s"
msgstr "Manqué '%(info_name)s' (%(task_name)s) - %(task_result)s" msgstr "Manqué '%(info_name)s' (%(task_name)s) - %(task_result)s"
#: cluster.py:435 #: cluster.py:459
#, python-format #, python-format
msgid "%(name)s stopped monitoring results" msgid "%(name)s stopped monitoring results"
msgstr "%(name)s arrêt des résultats de surveillance" msgstr "%(name)s a cessé de de surveiller les résultats"
#: cluster.py:451 #: cluster.py:475
#, python-format #, python-format
msgid "%(proc_name)s ready for work at %(id)s" msgid "%(proc_name)s ready for work at %(id)s"
msgstr "%(proc_name)s prêt pour le travail à %(id)s" msgstr "%(proc_name)s prêt pour le travail à %(id)s"
#: cluster.py:466 #: cluster.py:495
#, python-format #, fuzzy, python-format
msgid "%(proc_name)s processing '%(func_name)s' (%(task_name)s)" msgid "%(proc_name)s processing %(task_name)s '%(func_name)s'"
msgstr "%(proc_name)s en traitement '%(func_name)s' (%(task_name)s)" msgstr "%(proc_name)s exécute %(task_name)s '%(func_name)s'"
#: cluster.py:507 #: cluster.py:543
#, python-format #, python-format
msgid "%(proc_name)s stopped doing work" msgid "%(proc_name)s stopped doing work"
msgstr "%(proc_name)s arrêté de travailler" msgstr "%(proc_name)s a cessé de travailler"
#: cluster.py:712 #: cluster.py:756
#, python-format #, python-format
msgid "%(process_name)s failed to create a task from schedule [%(schedule)s]" msgid "%(process_name)s failed to create a task from schedule [%(schedule)s]"
msgstr "" msgstr ""
"%(process_name)s Echec de la création d'une tâche à partir de Schedule " "%(process_name)s Echec de la création d'une tâche à partir de Schedule "
"[%(schedule)s]" "[%(schedule)s]"
#: cluster.py:723 #: cluster.py:767
#, python-format #, python-format
msgid "" msgid ""
"%(process_name)s created task %(task_name)s from schedule [%(schedule)s]" "%(process_name)s created task %(task_name)s from schedule [%(schedule)s]"
msgstr "%(process_name)s a créé la tâche %(task_name)s à partir de Schedule [%(schedule)s]" msgstr ""
"%(process_name)s a créé la tâche %(task_name)s à partir de Schedule "
"[%(schedule)s]"
#: cluster.py:769 #: cluster.py:813
msgid "Skipping cpu affinity because psutil was not found." msgid "Skipping cpu affinity because psutil was not found."
msgstr "Sauter l'affinité du processeur parce que psutil n'a pas été trouvé." msgstr "L'affinité cpu ne sera pas définie car psutil n'a pas été trouvé."
#: cluster.py:774 #: cluster.py:818
msgid "Faking cpu affinity because it is not supported on this platform" msgid "Faking cpu affinity because it is not supported on this platform"
msgstr "" msgstr ""
"Simulation de l'affinité du processeur parce qu'elle n'est pas supportée sur " "Simulation de l'affinité cpu parce qu'elle n'est pas supportée sur cette "
"cette plateforme." "plateforme."
#: cluster.py:796 #: cluster.py:840
#, python-format #, python-format
msgid "%(pid)s will use cpu %(affinity)s" msgid "%(pid)s will use cpu %(affinity)s"
msgstr "%(pid)s utilisera le CPU %(affinity)s" msgstr "%(pid)s utilisera le CPU %(affinity)s"
#: conf.py:85 #: conf.py:93
#, python-format #, python-format
msgid "" msgid ""
"SAVE_LIMIT_PER (%(option)s) is not a valid option. Options are: 'group', " "SAVE_LIMIT_PER (%(option)s) is not a valid option. Options are: 'group', "
@@ -184,23 +196,23 @@ msgstr ""
"'group', 'name', 'func' et None. La valeur par défaut est None." "'group', 'name', 'func' et None. La valeur par défaut est None."
#. Translators: Cluster status descriptions #. Translators: Cluster status descriptions
#: conf.py:202 #: conf.py:210
msgid "Starting" msgid "Starting"
msgstr "Démarrage" msgstr "Démarrage"
#: conf.py:203 #: conf.py:211
msgid "Working" msgid "Working"
msgstr "Actif" msgstr "Actif"
#: conf.py:204 #: conf.py:212
msgid "Idle" msgid "Idle"
msgstr "En attente" msgstr "En attente"
#: conf.py:205 #: conf.py:213
msgid "Stopped" msgid "Stopped"
msgstr "Arrêté" msgstr "Arrêté"
#: conf.py:206 #: conf.py:214
msgid "Stopping" msgid "Stopping"
msgstr "En cours d’arrêt" msgstr "En cours d’arrêt"
@@ -219,130 +231,126 @@ msgstr "Informations générales sur tous les clusters."
#, fuzzy #, fuzzy
#| msgid "Monitors Q Cluster activity" #| msgid "Monitors Q Cluster activity"
msgid "Monitors Q Cluster memory usage" msgid "Monitors Q Cluster memory usage"
msgstr "Surveille l'utilisation de la mémoire du cluster Q" msgstr "Surveille l'utilisation mémoire du Q cluster"
#. Translators: help text for qmonitor management command #. Translators: help text for qmonitor management command
#: management/commands/qmonitor.py:9 #: management/commands/qmonitor.py:9
msgid "Monitors Q Cluster activity" msgid "Monitors Q Cluster activity"
msgstr "Activité du cluster Moniteur Q" msgstr "Surveille l'activité de Q cluster"
#: models.py:125 #: models.py:124
msgid "Successful task" msgid "Successful task"
msgstr "Tâche réussie" msgstr "Tâche réussie"
#: models.py:126 #: models.py:125
msgid "Successful tasks" msgid "Successful tasks"
msgstr "Tâches réussies" msgstr "Tâches réussies"
#: models.py:141 #: models.py:140
msgid "Failed task" msgid "Failed task"
msgstr "Tâche échoué" msgstr "Tâche échoué"
#: models.py:142 #: models.py:141
msgid "Failed tasks" msgid "Failed tasks"
msgstr "Tâches échouées" msgstr "Tâches échouées"
#: models.py:150 models.py:234 #: models.py:149 models.py:222
msgid "Please install croniter to enable cron expressions" msgid "Please install croniter to enable cron expressions"
msgstr "Veuillez installer croniter pour activer les expressions croniques." msgstr "Veuillez installer croniter pour activer les expressions cron."
#: models.py:170 #: models.py:165
msgid "e.g. 1, 2, 'John'" msgid "e.g. 1, 2, 'John'"
msgstr "ex. 1, 2, ‘Jean’" msgstr "ex. 1, 2, ‘Jean’"
#: models.py:172 #: models.py:167
msgid "e.g. x=1, y=2, name='John'" msgid "e.g. x=1, y=2, name='John'"
msgstr "p. ex. x = 1, y = 2, Nom = ‘Jean’" msgstr "p. ex. x = 1, y = 2, Nom = ‘Jean’"
#: models.py:186 #: models.py:181
msgid "Once" msgid "Once"
msgstr "Une fois" msgstr "Une fois"
#: models.py:187 #: models.py:182
msgid "Minutes" msgid "Minutes"
msgstr "Minutes" msgstr "Minutes"
#: models.py:188 #: models.py:183
msgid "Hourly" msgid "Hourly"
msgstr "Toutes les heures" msgstr "Toutes les heures"
#: models.py:189 #: models.py:184
msgid "Daily" msgid "Daily"
msgstr "Quotidien" msgstr "Quotidien"
#: models.py:190 #: models.py:185
msgid "Weekly" msgid "Weekly"
msgstr "Hebdomadaire" msgstr "Hebdomadaire"
#: models.py:191 #: models.py:186
#, fuzzy #, fuzzy
#| msgid "Weekly" #| msgid "Weekly"
msgid "Biweekly" msgid "Biweekly"
msgstr "Bihebdomadaire" msgstr "Bihebdomadaire"
#: models.py:192 #: models.py:187
msgid "Monthly" msgid "Monthly"
msgstr "Mensuel" msgstr "Mensuel"
#: models.py:193 #: models.py:188
#, fuzzy #, fuzzy
#| msgid "Monthly" #| msgid "Monthly"
msgid "Bimonthly" msgid "Bimonthly"
msgstr "Bimestriel" msgstr "Bimestriel"
#: models.py:194 #: models.py:189
msgid "Quarterly" msgid "Quarterly"
msgstr "Tous les quart-d’heure" msgstr "Tous les quart-d’heure"
#: models.py:195 #: models.py:190
msgid "Yearly" msgid "Yearly"
msgstr "Annuel" msgstr "Annuel"
#: models.py:196 #: models.py:191
msgid "Cron" msgid "Cron"
msgstr "Cron" msgstr "Cron"
#: models.py:199 #: models.py:194
msgid "Schedule Type" msgid "Schedule Type"
msgstr "Type de plannification" msgstr "Type de plannification"
#: models.py:202 #: models.py:197
msgid "Number of minutes for the Minutes type" msgid "Number of minutes for the Minutes type"
msgstr "Nombre de minutes pour le type de minutes" msgstr "Nombre de minutes pour le type de minutes"
#: models.py:205 #: models.py:200
msgid "Repeats" msgid "Repeats"
msgstr "Répéter" msgstr "Répéter"
#: models.py:205 #: models.py:200
msgid "n = n times, -1 = forever" msgid "n = n times, -1 = forever"
msgstr "n = n fois,-1 = Toujours" msgstr "n = n fois,-1 = Toujours"
#: models.py:208 #: models.py:203
msgid "Next Run" msgid "Next Run"
msgstr "Prochaine exécution" msgstr "Prochaine exécution"
#: models.py:215 #: models.py:210
msgid "Cron expression" msgid "Cron expression"
msgstr "Expression du Cron" msgstr "Expression Cron"
#: models.py:224 #: models.py:287
msgid "Name of kwarg to pass intended schedule date"
msgstr "Nom du kwarg pour passer la date d'éxecution prévue"
#: models.py:299
msgid "Scheduled task" msgid "Scheduled task"
msgstr "Tâche planifiée" msgstr "Tâche planifiée"
#: models.py:300 #: models.py:288
msgid "Scheduled tasks" msgid "Scheduled tasks"
msgstr "Tâches planifiées" msgstr "Tâches planifiées"
#: models.py:326 #: models.py:314
msgid "Queued task" msgid "Queued task"
msgstr "Tâche en file d'attente" msgstr "Tâche en file d'attente"
#: models.py:327 #: models.py:315
msgid "Queued tasks" msgid "Queued tasks"
msgstr "Tâches en file d'attente" msgstr "Tâches en file d'attente"
@@ -482,13 +490,12 @@ msgstr "Aucun cluster ne semble être en cours d'exécution."
#: signals.py:22 #: signals.py:22
#, python-format #, python-format
msgid "malformed return hook '%(hook)s' for [%(name)s]" msgid "malformed return hook '%(hook)s' for [%(name)s]"
msgstr "hook de retour mal formé' %(hook)s 'pour [%(name)s]" msgstr "hook de retour '%(hook)s' mal formé pour [%(name)s]"
#: signals.py:30 #: signals.py:30
#, python-format #, python-format
msgid "return hook %(hook)s failed on [%(name)s] because %(error)s" msgid "return hook %(hook)s failed on [%(name)s] because %(error)s"
msgstr "" msgstr "hook de retour %(hook)s a échoué sur [%(name)s] à cause de %(error)s"
"le crochet de retour %(hook)s a échoué sur [%(name)s] parce que %(error)s"
#, python-format #, python-format
#~ msgid "" #~ msgid ""
+79 -73
View File
@@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: \n" "Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-01-15 23:35+0100\n" "POT-Creation-Date: 2023-01-07 19:21+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: Ethem Güner <ethemguener@gmail.com>\n" "Last-Translator: Ethem Güner <ethemguener@gmail.com>\n"
"Language-Team: \n" "Language-Team: \n"
@@ -22,157 +22,167 @@ msgstr ""
msgid "Resubmit selected tasks to queue" msgid "Resubmit selected tasks to queue"
msgstr "Seçili işleri kuyruğa tekrar gönder" msgstr "Seçili işleri kuyruğa tekrar gönder"
#: admin.py:107 models.py:293 #: admin.py:107 models.py:281
#, fuzzy #, fuzzy
#| msgid "Success" #| msgid "Success"
msgid "success" msgid "success"
msgstr "başarılı olanlar" msgstr "başarılı olanlar"
#: admin.py:119 models.py:295 #: admin.py:119 models.py:283
msgid "last_run" msgid "last_run"
msgstr "" msgstr ""
#: cluster.py:76 #: cluster.py:80
#, python-format #, python-format
msgid "Q Cluster %(name)s starting." msgid "Q Cluster %(name)s starting."
msgstr "Q Cluster %(name)s başlatılıyor." msgstr "Q Cluster %(name)s başlatılıyor."
#: cluster.py:84 #: cluster.py:88
#, python-format #, python-format
msgid "Q Cluster %(name)s stopping." msgid "Q Cluster %(name)s stopping."
msgstr "Q Cluster %(name)s durduruluyor." msgstr "Q Cluster %(name)s durduruluyor."
#: cluster.py:87 #: cluster.py:91
#, python-format #, python-format
msgid "Q Cluster %(name)s has stopped." msgid "Q Cluster %(name)s has stopped."
msgstr "Q Cluster %(name)s durduruldu." msgstr "Q Cluster %(name)s durduruldu."
#: cluster.py:94 #: cluster.py:98
#, python-format #, python-format
msgid "%(name)s got signal %(signal)s" msgid "%(name)s got signal %(signal)s"
msgstr "%(name)s, %(signal)s pid'inde izleniyor/monitoring yapılıyor." msgstr "%(name)s, %(signal)s pid'inde izleniyor/monitoring yapılıyor."
#: cluster.py:221 #: cluster.py:225
#, python-format #, python-format
msgid "reincarnated monitor %(name)s after sudden death" msgid "reincarnated monitor %(name)s after sudden death"
msgstr "Monitor %(name)s ani ölüm sonrası tekrar dirildi" msgstr "Monitor %(name)s ani ölüm sonrası tekrar dirildi"
#: cluster.py:227 #: cluster.py:231
#, python-format #, python-format
msgid "reincarnated pusher %(name)s after sudden death" msgid "reincarnated pusher %(name)s after sudden death"
msgstr "Pusher %(name)s ani ölüm sonrası tekrar dirildi" msgstr "Pusher %(name)s ani ölüm sonrası tekrar dirildi"
#: cluster.py:238 #: cluster.py:251
#, fuzzy, python-format
#| msgid "reincarnated worker %(name)s after timeout"
msgid ""
"reincarnated worker %(name)s after timeout while processing task "
"%(task_name)s"
msgstr "Worker %(name)s zaman aşımı sonrası tekrar dirildi"
#: cluster.py:256
#, python-format #, python-format
msgid "reincarnated worker %(name)s after timeout" msgid "reincarnated worker %(name)s after timeout"
msgstr "Worker %(name)s zaman aşımı sonrası tekrar dirildi" msgstr "Worker %(name)s zaman aşımı sonrası tekrar dirildi"
#: cluster.py:242 #: cluster.py:261
#, python-format #, python-format
msgid "recycled worker %(name)s" msgid "recycled worker %(name)s"
msgstr "Worker %(name)s geri döndürüldü" msgstr "Worker %(name)s geri döndürüldü"
#: cluster.py:245 #: cluster.py:264
#, python-format #, python-format
msgid "reincarnated worker %(name)s after death" msgid "reincarnated worker %(name)s after death"
msgstr "Worker %(name)s ani ölüm sonrası tekrar dirildi" msgstr "Worker %(name)s ani ölüm sonrası tekrar dirildi"
#: cluster.py:269 #: cluster.py:288
#, python-format #, python-format
msgid "%(name)s guarding cluster %(cluster_name)s" msgid "%(name)s guarding cluster %(cluster_name)s"
msgstr "%(name)s, %(cluster_name)s cluster'ını koruyor" msgstr "%(name)s, %(cluster_name)s cluster'ını koruyor"
#: cluster.py:278 #: cluster.py:297
#, python-format #, python-format
msgid "Q Cluster %(cluster_name)s running." msgid "Q Cluster %(cluster_name)s running."
msgstr "Q Cluster %(cluster_name)s başlatılıyor." msgstr "Q Cluster %(cluster_name)s başlatılıyor."
#: cluster.py:314 #: cluster.py:333
#, python-format #, python-format
msgid "%(name)s stopping cluster processes" msgid "%(name)s stopping cluster processes"
msgstr "Cluster %(name)s işlemleri durduruluyor." msgstr "Cluster %(name)s işlemleri durduruluyor."
#: cluster.py:339 #: cluster.py:358
#, python-format #, python-format
msgid "%(name)s waiting for the monitor." msgid "%(name)s waiting for the monitor."
msgstr "%(name)s monitor için bekliyor." msgstr "%(name)s monitor için bekliyor."
#: cluster.py:362 #: cluster.py:384
#, python-format #, fuzzy, python-format
msgid "%(process_name)s pushing tasks at %(id)s" #| msgid "%(process_name)s pushing tasks at %(id)s"
msgid "%(name)s pushing tasks at %(id)s"
msgstr "%(process_name)s, işleri %(id)s pid'ine gönderiyor." msgstr "%(process_name)s, işleri %(id)s pid'ine gönderiyor."
#: cluster.py:386 #: cluster.py:408
#, python-format #, python-format
msgid "queueing from %(list_key)s" msgid "queueing from %(list_key)s"
msgstr "" msgstr ""
#: cluster.py:390 #: cluster.py:412
#, python-format #, python-format
msgid "%(name)s stopped pushing tasks" msgid "%(name)s stopped pushing tasks"
msgstr "%(name)s işleri göndermeyi durdurdu" msgstr "%(name)s işleri göndermeyi durdurdu"
#: cluster.py:403 #: cluster.py:427
#, python-format #, python-format
msgid "%(name)s monitoring at %(id)s" msgid "%(name)s monitoring at %(id)s"
msgstr "%(name)s, %(id)s pid'inde izleniyor/monitoring yapılıyor." msgstr "%(name)s, %(id)s pid'inde izleniyor/monitoring yapılıyor."
#: cluster.py:422 #: cluster.py:446
#, python-format #, python-format
msgid "Processed '%(info_name)s' (%(task_name)s)" msgid "Processed '%(info_name)s' (%(task_name)s)"
msgstr "[%(task_name)s] - '%(info_name)s işlendi." msgstr "[%(task_name)s] - '%(info_name)s işlendi."
#: cluster.py:428 #: cluster.py:452
#, python-format #, python-format
msgid "Failed '%(info_name)s' (%(task_name)s) - %(task_result)s" msgid "Failed '%(info_name)s' (%(task_name)s) - %(task_result)s"
msgstr "[%(task_name)s] - '%(info_name)s' - %(task_result)s başarısız oldu" msgstr "[%(task_name)s] - '%(info_name)s' - %(task_result)s başarısız oldu"
#: cluster.py:435 #: cluster.py:459
#, python-format #, python-format
msgid "%(name)s stopped monitoring results" msgid "%(name)s stopped monitoring results"
msgstr "%(name)s sonuçları göstermeyi bıraktı" msgstr "%(name)s sonuçları göstermeyi bıraktı"
#: cluster.py:451 #: cluster.py:475
#, python-format #, python-format
msgid "%(proc_name)s ready for work at %(id)s" msgid "%(proc_name)s ready for work at %(id)s"
msgstr "%(proc_name)s, %(id)s pid'inde çalışmaya hazır" msgstr "%(proc_name)s, %(id)s pid'inde çalışmaya hazır"
#: cluster.py:466 #: cluster.py:495
#, python-format #, fuzzy, python-format
msgid "%(proc_name)s processing '%(func_name)s' (%(task_name)s)" #| msgid "%(proc_name)s processing '%(func_name)s' (%(task_name)s)"
msgid "%(proc_name)s processing %(task_name)s '%(func_name)s'"
msgstr "%(proc_name)s, '%(func_name)s' [%(task_name)s] işlerini işiyor" msgstr "%(proc_name)s, '%(func_name)s' [%(task_name)s] işlerini işiyor"
#: cluster.py:507 #: cluster.py:543
#, python-format #, python-format
msgid "%(proc_name)s stopped doing work" msgid "%(proc_name)s stopped doing work"
msgstr "%(proc_name)s çalışmayı bıraktı" msgstr "%(proc_name)s çalışmayı bıraktı"
#: cluster.py:712 #: cluster.py:756
#, python-format #, python-format
msgid "%(process_name)s failed to create a task from schedule [%(schedule)s]" msgid "%(process_name)s failed to create a task from schedule [%(schedule)s]"
msgstr "%(process_name)s programdan bir görev oluşturamadı [%(schedule)s]" msgstr "%(process_name)s programdan bir görev oluşturamadı [%(schedule)s]"
#: cluster.py:723 #: cluster.py:767
#, fuzzy, python-format #, fuzzy, python-format
#| msgid "%(process_name)s created a task from schedule [%(schedule)s]" #| msgid "%(process_name)s created a task from schedule [%(schedule)s]"
msgid "" msgid ""
"%(process_name)s created task %(task_name)s from schedule [%(schedule)s]" "%(process_name)s created task %(task_name)s from schedule [%(schedule)s]"
msgstr "%(process_name)s programdan bir görev oluşturamadı [%(schedule)s]" msgstr "%(process_name)s programdan bir görev oluşturamadı [%(schedule)s]"
#: cluster.py:769 #: cluster.py:813
msgid "Skipping cpu affinity because psutil was not found." msgid "Skipping cpu affinity because psutil was not found."
msgstr "Psutil bulunamadığı için cpu benzeşimi atlanıyor." msgstr "Psutil bulunamadığı için cpu benzeşimi atlanıyor."
#: cluster.py:774 #: cluster.py:818
msgid "Faking cpu affinity because it is not supported on this platform" msgid "Faking cpu affinity because it is not supported on this platform"
msgstr "Bu platformda desteklenmediği için sahte cpu benzeşimi" msgstr "Bu platformda desteklenmediği için sahte cpu benzeşimi"
#: cluster.py:796 #: cluster.py:840
#, python-format #, python-format
msgid "%(pid)s will use cpu %(affinity)s" msgid "%(pid)s will use cpu %(affinity)s"
msgstr "%(pid)s cpu %(affinity)s kullanacaktır" msgstr "%(pid)s cpu %(affinity)s kullanacaktır"
#: conf.py:85 #: conf.py:93
#, python-format #, python-format
msgid "" msgid ""
"SAVE_LIMIT_PER (%(option)s) is not a valid option. Options are: 'group', " "SAVE_LIMIT_PER (%(option)s) is not a valid option. Options are: 'group', "
@@ -182,23 +192,23 @@ msgstr ""
"'group', 'name', 'func' ve None. Varsayılan değer None'dır." "'group', 'name', 'func' ve None. Varsayılan değer None'dır."
#. Translators: Cluster status descriptions #. Translators: Cluster status descriptions
#: conf.py:202 #: conf.py:210
msgid "Starting" msgid "Starting"
msgstr "Başlıyor" msgstr "Başlıyor"
#: conf.py:203 #: conf.py:211
msgid "Working" msgid "Working"
msgstr "Çalışıyor" msgstr "Çalışıyor"
#: conf.py:204 #: conf.py:212
msgid "Idle" msgid "Idle"
msgstr "Boşta" msgstr "Boşta"
#: conf.py:205 #: conf.py:213
msgid "Stopped" msgid "Stopped"
msgstr "Durdu" msgstr "Durdu"
#: conf.py:206 #: conf.py:214
msgid "Stopping" msgid "Stopping"
msgstr "Durduruluyor" msgstr "Durduruluyor"
@@ -222,123 +232,119 @@ msgstr "Q Cluster'ın bellek kullanımını izler"
msgid "Monitors Q Cluster activity" msgid "Monitors Q Cluster activity"
msgstr "Q Cluster'ın aktivitelerini izler" msgstr "Q Cluster'ın aktivitelerini izler"
#: models.py:125 #: models.py:124
msgid "Successful task" msgid "Successful task"
msgstr "Başarılı iş" msgstr "Başarılı iş"
#: models.py:126 #: models.py:125
msgid "Successful tasks" msgid "Successful tasks"
msgstr "Başarılı işler" msgstr "Başarılı işler"
#: models.py:141 #: models.py:140
msgid "Failed task" msgid "Failed task"
msgstr "Başarısız iş" msgstr "Başarısız iş"
#: models.py:142 #: models.py:141
msgid "Failed tasks" msgid "Failed tasks"
msgstr "Başarısız işler" msgstr "Başarısız işler"
#: models.py:150 models.py:234 #: models.py:149 models.py:222
msgid "Please install croniter to enable cron expressions" msgid "Please install croniter to enable cron expressions"
msgstr "Cron expressions'ları açmak için croniter yükleyin" msgstr "Cron expressions'ları açmak için croniter yükleyin"
#: models.py:170 #: models.py:165
msgid "e.g. 1, 2, 'John'" msgid "e.g. 1, 2, 'John'"
msgstr "Örneğin: 1, 2, 'Melih'" msgstr "Örneğin: 1, 2, 'Melih'"
#: models.py:172 #: models.py:167
msgid "e.g. x=1, y=2, name='John'" msgid "e.g. x=1, y=2, name='John'"
msgstr "Örneğin: x=1, y=2, name='Melih'" msgstr "Örneğin: x=1, y=2, name='Melih'"
#: models.py:186 #: models.py:181
msgid "Once" msgid "Once"
msgstr "Bir kere" msgstr "Bir kere"
#: models.py:187 #: models.py:182
msgid "Minutes" msgid "Minutes"
msgstr "Dakika" msgstr "Dakika"
#: models.py:188 #: models.py:183
msgid "Hourly" msgid "Hourly"
msgstr "Saatlik" msgstr "Saatlik"
#: models.py:189 #: models.py:184
msgid "Daily" msgid "Daily"
msgstr "Günlük" msgstr "Günlük"
#: models.py:190 #: models.py:185
msgid "Weekly" msgid "Weekly"
msgstr "Haftalık" msgstr "Haftalık"
#: models.py:191 #: models.py:186
#, fuzzy #, fuzzy
#| msgid "Weekly" #| msgid "Weekly"
msgid "Biweekly" msgid "Biweekly"
msgstr "İki haftada bir" msgstr "İki haftada bir"
#: models.py:192 #: models.py:187
msgid "Monthly" msgid "Monthly"
msgstr "Aylık" msgstr "Aylık"
#: models.py:193 #: models.py:188
#, fuzzy #, fuzzy
#| msgid "Monthly" #| msgid "Monthly"
msgid "Bimonthly" msgid "Bimonthly"
msgstr "İki ayda bir" msgstr "İki ayda bir"
#: models.py:194 #: models.py:189
msgid "Quarterly" msgid "Quarterly"
msgstr "Bir Çeyrek (3 Ay)" msgstr "Bir Çeyrek (3 Ay)"
#: models.py:195 #: models.py:190
msgid "Yearly" msgid "Yearly"
msgstr "Yıllık" msgstr "Yıllık"
#: models.py:196 #: models.py:191
msgid "Cron" msgid "Cron"
msgstr "" msgstr ""
#: models.py:199 #: models.py:194
msgid "Schedule Type" msgid "Schedule Type"
msgstr "Zamanlama Tipi" msgstr "Zamanlama Tipi"
#: models.py:202 #: models.py:197
msgid "Number of minutes for the Minutes type" msgid "Number of minutes for the Minutes type"
msgstr "Dakika tipine göre dakika sayısı" msgstr "Dakika tipine göre dakika sayısı"
#: models.py:205 #: models.py:200
msgid "Repeats" msgid "Repeats"
msgstr "Tekrar eder" msgstr "Tekrar eder"
#: models.py:205 #: models.py:200
msgid "n = n times, -1 = forever" msgid "n = n times, -1 = forever"
msgstr "n = n kere, -1 = sonsuza kadar" msgstr "n = n kere, -1 = sonsuza kadar"
#: models.py:208 #: models.py:203
msgid "Next Run" msgid "Next Run"
msgstr "Bir dahaki çalışma tarihi" msgstr "Bir dahaki çalışma tarihi"
#: models.py:215 #: models.py:210
msgid "Cron expression" msgid "Cron expression"
msgstr "" msgstr ""
#: models.py:224 #: models.py:287
msgid "Name of kwarg to pass intended schedule date"
msgstr ""
#: models.py:299
msgid "Scheduled task" msgid "Scheduled task"
msgstr "Zamanlanmış iş" msgstr "Zamanlanmış iş"
#: models.py:300 #: models.py:288
msgid "Scheduled tasks" msgid "Scheduled tasks"
msgstr "Zamanlanmış işler" msgstr "Zamanlanmış işler"
#: models.py:326 #: models.py:314
msgid "Queued task" msgid "Queued task"
msgstr "Sıraya alınmış iş" msgstr "Sıraya alınmış iş"
#: models.py:327 #: models.py:315
msgid "Queued tasks" msgid "Queued tasks"
msgstr "Sıraya alınmış işler" msgstr "Sıraya alınmış işler"
+4
View File
@@ -55,6 +55,10 @@ Optional
$ pip install psutil $ pip install psutil
- `setproctitle <https://github.com/dvarrazzo/py-setproctitle>`__ python module to customize the process title by Daniele Varrazzo', is an optional requirement used to set informative process titles::
$ pip install setproctitle
- `Hiredis <https://github.com/redis/hiredis>`__ parser. This C library maintained by the core Redis team is faster than the standard PythonParser during high loads:: - `Hiredis <https://github.com/redis/hiredis>`__ parser. This C library maintained by the core Redis team is faster than the standard PythonParser during high loads::
$ pip install hiredis $ pip install hiredis
Generated
+1081 -996
View File
File diff suppressed because it is too large Load Diff
+2 -1
View File
@@ -59,6 +59,7 @@ croniter = { version = "^1.3.7", optional = true }
django-q-rollbar = {version = ">=0.1", optional = true} django-q-rollbar = {version = ">=0.1", optional = true}
django-q-sentry = {version = ">=0.1", optional = true} django-q-sentry = {version = ">=0.1", optional = true}
redis = {version = "^4.3.4", optional = true} redis = {version = "^4.3.4", optional = true}
setproctitle = {version = "^1.3.2", optional = true}
[tool.poetry.dev-dependencies] [tool.poetry.dev-dependencies]
@@ -72,7 +73,7 @@ isort = {extras = ["requirements_deprecated_finder"], version = "^5.10.1"}
[tool.poetry.extras] [tool.poetry.extras]
requires = ["poetry_core>=1.0.0"] requires = ["poetry_core>=1.0.0"]
build-backend = ["poetry.core.masonry.api"] build-backend = ["poetry.core.masonry.api"]
testing = ["django-redis", "croniter", "hiredis", "psutil", "iron-mq", "boto3", "pymongo", "blessed", "redis"] testing = ["django-redis", "croniter", "hiredis", "psutil", "iron-mq", "boto3", "pymongo", "blessed", "redis", "setproctitle"]
rollbar = ["django-q-rollbar"] rollbar = ["django-q-rollbar"]
sentry = ["django-q-sentry"] sentry = ["django-q-sentry"]