mirror of
				https://github.com/zulip/zulip.git
				synced 2025-11-03 21:43:21 +00:00 
			
		
		
		
	This commit just copies all the code from MissedMessageSendingWorker class to a new EmailSendingWorker class. All the logic to send an email through a queue was already there. This commit only makes the logic generic. It does so by creating a special purpose queue called 'email_senders' to send any type of email. To make MissedMessageSendingWorker still work we derive it from EmailSendingWorker. All the tests that were testing MissedMessageSendingWorker now run against EmailSendingWorker.
		
			
				
	
	
		
			88 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			88 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
#!/usr/bin/env python3
 | 
						|
 | 
						|
 | 
						|
import os
 | 
						|
import sys
 | 
						|
import time
 | 
						|
import signal
 | 
						|
import subprocess
 | 
						|
import re
 | 
						|
 | 
						|
# check for the venv
 | 
						|
from lib import sanity_check
 | 
						|
sanity_check.check_venv(__file__)
 | 
						|
 | 
						|
from typing import IO, Text
 | 
						|
 | 
						|
# TODO: Convert this to use scripts/lib/queue_workers.py
 | 
						|
TOOLS_DIR = os.path.dirname(os.path.abspath(__file__))
 | 
						|
successful_worker_launches = [
 | 
						|
    'launching queue worker thread error_reports',
 | 
						|
    'launching queue worker thread user_presence',
 | 
						|
    'launching queue worker thread deferred_work',
 | 
						|
    'launching queue worker thread digest_emails',
 | 
						|
    'launching queue worker thread slow_queries',
 | 
						|
    'launching queue worker thread missedmessage_mobile_notifications',
 | 
						|
    'launching queue worker thread feedback_messages',
 | 
						|
    'launching queue worker thread signups',
 | 
						|
    'launching queue worker thread test',
 | 
						|
    'launching queue worker thread message_sender',
 | 
						|
    'launching queue worker thread missedmessage_emails',
 | 
						|
    'launching queue worker thread email_senders',
 | 
						|
    'launching queue worker thread missedmessage_email_senders',
 | 
						|
    'launching queue worker thread email_mirror',
 | 
						|
    'launching queue worker thread user_activity_interval',
 | 
						|
    'launching queue worker thread invites',
 | 
						|
    'launching queue worker thread user_activity'
 | 
						|
]
 | 
						|
 | 
						|
def check_worker_launch(logfile):
 | 
						|
    # type: (IO[str]) -> Text
 | 
						|
    def check(content):
 | 
						|
        # type: (str) -> bool
 | 
						|
        flag = True
 | 
						|
        for entry in successful_worker_launches:
 | 
						|
            flag = flag and entry in content
 | 
						|
        return flag
 | 
						|
 | 
						|
    failed = True
 | 
						|
    log_output = u''
 | 
						|
    print("Polling logfile", end='')
 | 
						|
    # Attempt to poll the log file for 10 sec. to see if all worker threads are launched.
 | 
						|
    for i in range(100):
 | 
						|
        time.sleep(0.3)
 | 
						|
        sys.stdout.write('.')
 | 
						|
        sys.stdout.flush()
 | 
						|
        logfile.seek(0)
 | 
						|
        content = logfile.read()
 | 
						|
        log_output = content
 | 
						|
        if check(content):
 | 
						|
            failed = False
 | 
						|
            break
 | 
						|
    sys.stdout.write('\n')
 | 
						|
 | 
						|
    if not failed:
 | 
						|
        print('Worker threads launched successfully')
 | 
						|
        return log_output
 | 
						|
    else:
 | 
						|
        print('Error in server startup. Dumping logs')
 | 
						|
        print(log_output)
 | 
						|
        sys.exit(1)
 | 
						|
 | 
						|
if __name__ == '__main__':
 | 
						|
    print('\nStarting Development Server')
 | 
						|
    logfile = open('/tmp/run-dev-output', 'w+')
 | 
						|
    args = ["{}/run-dev.py".format(TOOLS_DIR)]
 | 
						|
    run_dev = subprocess.Popen(args, stdout=logfile, stderr=logfile)
 | 
						|
 | 
						|
    check_worker_launch(logfile)
 | 
						|
    logfile.truncate(0)
 | 
						|
 | 
						|
    print("Attempting to modify a file")
 | 
						|
    subprocess.call(['touch', 'zerver/lib/actions.py'])
 | 
						|
    check_worker_launch(logfile)
 | 
						|
 | 
						|
    run_dev.send_signal(signal.SIGINT)
 | 
						|
    run_dev.wait()
 | 
						|
    logfile.close()
 |