Support node, deno, & python runtimes for timer functions
This commit is contained in:
21
worker.py
21
worker.py
@@ -19,7 +19,11 @@ init_app(app)
|
||||
# Initialize scheduler
|
||||
scheduler = APScheduler()
|
||||
TIMER_CHECK_INTERVAL = int(os.environ.get('TIMER_CHECK_INTERVAL_MINUTES', 1)) # Change back to 5 minutes
|
||||
API_URL = os.environ.get('API_URL', 'http://isolator.web:5000/execute')
|
||||
|
||||
# Runtime-specific API URLs matching app.py configuration
|
||||
NODE_API_URL = os.environ.get('NODE_API_URL', 'http://isolator.web:5000/execute')
|
||||
DENO_API_URL = os.environ.get('DENO_API_URL', 'http://deno-isolator.web:5000/execute')
|
||||
PYTHON_API_URL = os.environ.get('PYTHON_API_URL', 'http://python-isolator.web:5000/execute')
|
||||
|
||||
async def execute_timer_function_async(timer_function):
|
||||
"""
|
||||
@@ -30,9 +34,18 @@ async def execute_timer_function_async(timer_function):
|
||||
environment = timer_function['environment']
|
||||
name = timer_function['name']
|
||||
version_number = timer_function['version_number']
|
||||
runtime = timer_function.get('runtime', 'node') # Default to node if not specified
|
||||
|
||||
# Select the appropriate API URL based on runtime
|
||||
if runtime == 'deno':
|
||||
api_url = DENO_API_URL
|
||||
elif runtime == 'python':
|
||||
api_url = PYTHON_API_URL
|
||||
else:
|
||||
api_url = NODE_API_URL
|
||||
|
||||
async with aiohttp.ClientSession() as session:
|
||||
async with session.post(API_URL, json={
|
||||
async with session.post(api_url, json={
|
||||
'code': code,
|
||||
'request': {'method': 'TIMER'},
|
||||
'environment': environment,
|
||||
@@ -93,7 +106,7 @@ def check_and_execute_timer_functions():
|
||||
SELECT
|
||||
id, name, code, environment, version_number,
|
||||
trigger_type, frequency_minutes, run_date,
|
||||
next_run, enabled,
|
||||
next_run, enabled, runtime,
|
||||
EXTRACT(EPOCH FROM (NOW() - next_run)) as seconds_since_next_run
|
||||
FROM timer_functions
|
||||
WHERE enabled = true
|
||||
@@ -139,4 +152,4 @@ if __name__ == '__main__':
|
||||
try:
|
||||
asyncio.get_event_loop().run_forever()
|
||||
except (KeyboardInterrupt, SystemExit):
|
||||
pass
|
||||
pass
|
||||
Reference in New Issue
Block a user