Pārlūkot izejas kodu

Add possibility to use RedisProgressTracker

Bastien Sevajol (Algoo) 7 gadus atpakaļ
vecāks
revīzija
ba3519764e
2 mainītis faili ar 57 papildinājumiem un 1 dzēšanām
  1. 3 0
      tracim/development.ini.base
  2. 54 1
      tracim/tracim/config/app_cfg.py

+ 3 - 0
tracim/development.ini.base Parādīt failu

@@ -192,6 +192,9 @@ email.notification.smtp.port = 25
192 192
 email.notification.smtp.user = your_smtp_user
193 193
 email.notification.smtp.password = your_smtp_password
194 194
 
195
+# Asyncjob tracker, can be memory or redis default is memory
196
+asyncjob.tracker = memory
197
+
195 198
 ## Radical (CalDav server) configuration
196 199
 # radicale.server.host = 0.0.0.0
197 200
 # radicale.server.port = 5232

+ 54 - 1
tracim/tracim/config/app_cfg.py Parādīt failu

@@ -19,6 +19,8 @@ from urllib.parse import urlparse
19 19
 import tg
20 20
 from paste.deploy.converters import asbool
21 21
 from tg.configuration.milestones import environment_loaded
22
+from tgext.asyncjob.trackers.memory import MemoryProgressTracker
23
+from tgext.asyncjob.trackers.redisdb import RedisProgressTracker
22 24
 
23 25
 from tgext.pluggable import plug
24 26
 from tgext.pluggable import replace_template
@@ -339,6 +341,32 @@ class CFG(object):
339 341
         if not self.WSGIDAV_CLIENT_BASE_URL.endswith('/'):
340 342
             self.WSGIDAV_CLIENT_BASE_URL += '/'
341 343
 
344
+        self.ASYNC_JOB_TRACKER = tg.config.get(
345
+            'asyncjob.tracker',
346
+            'memory',
347
+        )
348
+
349
+        if self.ASYNC_JOB_TRACKER not in ('memory', 'redis'):
350
+            raise Exception(
351
+                'asyncjob.tracker configuration '
352
+                'can ''be "memory" or "redis", not "{0}"'.format(
353
+                    self.ASYNC_JOB_TRACKER,
354
+                )
355
+            )
356
+
357
+        if self.ASYNC_JOB_TRACKER == 'redis':
358
+            self.ASYNC_JOB_TRACKER_REDIS_HOST = tg.config.get(
359
+                'asyncjob.tracker.redis.host',
360
+                'localhost',
361
+            )
362
+            self.ASYNC_JOB_TRACKER_REDIS_PORT = int(tg.config.get(
363
+                'asyncjob.tracker.redis.port',
364
+                6379,
365
+            ))
366
+            self.ASYNC_JOB_TRACKER_REDIS_DB = int(tg.config.get(
367
+                'asyncjob.tracker.redis.db',
368
+                15,
369
+            ))
342 370
 
343 371
     def get_tracker_js_content(self, js_tracker_file_path = None):
344 372
         js_tracker_file_path = tg.config.get('js_tracker_path', None)
@@ -381,4 +409,29 @@ base_config.variable_provider = lambda: {
381 409
     'CFG': CFG.get_instance()
382 410
 }
383 411
 
384
-plug(base_config, 'tgext.asyncjob')
412
+
413
+def plug_asyncjob():
414
+    cfg = CFG.get_instance()
415
+
416
+    # # Manual creation of async job tracker to be able to log it
417
+    async_job_tracker = cfg.ASYNC_JOB_TRACKER
418
+    if async_job_tracker == 'redis':
419
+        async_job_progress_tracker = RedisProgressTracker(
420
+            host=cfg.ASYNC_JOB_TRACKER_REDIS_HOST,
421
+            port=cfg.ASYNC_JOB_TRACKER_REDIS_PORT,
422
+            db=cfg.ASYNC_JOB_TRACKER_REDIS_DB,
423
+        )
424
+    else:
425
+        async_job_progress_tracker = MemoryProgressTracker()
426
+
427
+    logger.info(
428
+        cfg,
429
+        'Async job track using {0}'.format(str(async_job_progress_tracker)),
430
+    )
431
+    plug(
432
+        base_config,
433
+        'tgext.asyncjob',
434
+        progress_tracker=async_job_progress_tracker,
435
+    )
436
+
437
+environment_loaded.register(lambda: plug_asyncjob())