Browse Source

Add possibility to use RedisProgressTracker

Bastien Sevajol (Algoo) 8 years ago
parent
commit
ba3519764e
2 changed files with 57 additions and 1 deletions
  1. 3 0
      tracim/development.ini.base
  2. 54 1
      tracim/tracim/config/app_cfg.py

+ 3 - 0
tracim/development.ini.base View File

192
 email.notification.smtp.user = your_smtp_user
192
 email.notification.smtp.user = your_smtp_user
193
 email.notification.smtp.password = your_smtp_password
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
 ## Radical (CalDav server) configuration
198
 ## Radical (CalDav server) configuration
196
 # radicale.server.host = 0.0.0.0
199
 # radicale.server.host = 0.0.0.0
197
 # radicale.server.port = 5232
200
 # radicale.server.port = 5232

+ 54 - 1
tracim/tracim/config/app_cfg.py View File

19
 import tg
19
 import tg
20
 from paste.deploy.converters import asbool
20
 from paste.deploy.converters import asbool
21
 from tg.configuration.milestones import environment_loaded
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
 from tgext.pluggable import plug
25
 from tgext.pluggable import plug
24
 from tgext.pluggable import replace_template
26
 from tgext.pluggable import replace_template
339
         if not self.WSGIDAV_CLIENT_BASE_URL.endswith('/'):
341
         if not self.WSGIDAV_CLIENT_BASE_URL.endswith('/'):
340
             self.WSGIDAV_CLIENT_BASE_URL += '/'
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
     def get_tracker_js_content(self, js_tracker_file_path = None):
371
     def get_tracker_js_content(self, js_tracker_file_path = None):
344
         js_tracker_file_path = tg.config.get('js_tracker_path', None)
372
         js_tracker_file_path = tg.config.get('js_tracker_path', None)
381
     'CFG': CFG.get_instance()
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())