Skip to content

Commit bda842e

Browse files
committed
Rename crisis alert config to email
1 parent 7ccc4b3 commit bda842e

10 files changed

Lines changed: 134 additions & 118 deletions

.env.example

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -24,13 +24,13 @@ TELEGRAM_TOKEN=
2424
GLOBAL_TELEGRAM_CHAT_ID=
2525
FIRSTRADE_STRATEGY_PLUGIN_MOUNTS_JSON=
2626

27-
# Optional Google Voice/SMS channel for escalated strategy plugin alerts.
28-
CRISIS_ALERT_GOOGLE_VOICE_RECIPIENTS=
29-
CRISIS_ALERT_GOOGLE_VOICE_SENDER_EMAIL=
30-
CRISIS_ALERT_GOOGLE_VOICE_SENDER_PASSWORD=
31-
CRISIS_ALERT_GOOGLE_VOICE_SMTP_HOST=
32-
CRISIS_ALERT_GOOGLE_VOICE_SMTP_PORT=
33-
CRISIS_ALERT_GOOGLE_VOICE_SMTP_SECURITY=
27+
# Optional email channel for escalated strategy plugin alerts.
28+
CRISIS_ALERT_EMAIL_RECIPIENTS=
29+
CRISIS_ALERT_EMAIL_SENDER_EMAIL=
30+
CRISIS_ALERT_EMAIL_SENDER_PASSWORD=
31+
CRISIS_ALERT_EMAIL_SMTP_HOST=
32+
CRISIS_ALERT_EMAIL_SMTP_PORT=
33+
CRISIS_ALERT_EMAIL_SMTP_SECURITY=
3434

3535
# Runtime safety controls.
3636
FIRSTRADE_COOKIE_DIR=.runtime/firstrade-cookies

.github/workflows/sync-cloud-run-env.yml

Lines changed: 24 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -61,12 +61,12 @@ jobs:
6161
FIRSTRADE_STATE_PREFIX: ${{ vars.FIRSTRADE_STATE_PREFIX }}
6262
FIRSTRADE_STRATEGY_CONFIG_PATH: ${{ vars.FIRSTRADE_STRATEGY_CONFIG_PATH }}
6363
FIRSTRADE_STRATEGY_PLUGIN_MOUNTS_JSON: ${{ vars.FIRSTRADE_STRATEGY_PLUGIN_MOUNTS_JSON }}
64-
CRISIS_ALERT_GOOGLE_VOICE_RECIPIENTS: ${{ vars.CRISIS_ALERT_GOOGLE_VOICE_RECIPIENTS }}
65-
CRISIS_ALERT_GOOGLE_VOICE_SENDER_EMAIL: ${{ vars.CRISIS_ALERT_GOOGLE_VOICE_SENDER_EMAIL }}
66-
CRISIS_ALERT_GOOGLE_VOICE_SENDER_PASSWORD_SECRET_NAME: ${{ vars.CRISIS_ALERT_GOOGLE_VOICE_SENDER_PASSWORD_SECRET_NAME }}
67-
CRISIS_ALERT_GOOGLE_VOICE_SMTP_HOST: ${{ vars.CRISIS_ALERT_GOOGLE_VOICE_SMTP_HOST }}
68-
CRISIS_ALERT_GOOGLE_VOICE_SMTP_PORT: ${{ vars.CRISIS_ALERT_GOOGLE_VOICE_SMTP_PORT }}
69-
CRISIS_ALERT_GOOGLE_VOICE_SMTP_SECURITY: ${{ vars.CRISIS_ALERT_GOOGLE_VOICE_SMTP_SECURITY }}
64+
CRISIS_ALERT_EMAIL_RECIPIENTS: ${{ vars.CRISIS_ALERT_EMAIL_RECIPIENTS }}
65+
CRISIS_ALERT_EMAIL_SENDER_EMAIL: ${{ vars.CRISIS_ALERT_EMAIL_SENDER_EMAIL }}
66+
CRISIS_ALERT_EMAIL_SENDER_PASSWORD_SECRET_NAME: ${{ vars.CRISIS_ALERT_EMAIL_SENDER_PASSWORD_SECRET_NAME }}
67+
CRISIS_ALERT_EMAIL_SMTP_HOST: ${{ vars.CRISIS_ALERT_EMAIL_SMTP_HOST }}
68+
CRISIS_ALERT_EMAIL_SMTP_PORT: ${{ vars.CRISIS_ALERT_EMAIL_SMTP_PORT }}
69+
CRISIS_ALERT_EMAIL_SMTP_SECURITY: ${{ vars.CRISIS_ALERT_EMAIL_SMTP_SECURITY }}
7070
FIRSTRADE_RUNTIME_EXECUTION_WINDOW_TRADING_DAYS: ${{ vars.FIRSTRADE_RUNTIME_EXECUTION_WINDOW_TRADING_DAYS }}
7171
FIRSTRADE_TECH_RUNTIME_EXECUTION_WINDOW_TRADING_DAYS: ${{ vars.FIRSTRADE_TECH_RUNTIME_EXECUTION_WINDOW_TRADING_DAYS }}
7272
INCOME_THRESHOLD_USD: ${{ vars.INCOME_THRESHOLD_USD }}
@@ -75,7 +75,7 @@ jobs:
7575
GLOBAL_TELEGRAM_CHAT_ID: ${{ vars.GLOBAL_TELEGRAM_CHAT_ID }}
7676
NOTIFY_LANG: ${{ vars.NOTIFY_LANG }}
7777
TELEGRAM_TOKEN: ${{ secrets.TELEGRAM_TOKEN }}
78-
CRISIS_ALERT_GOOGLE_VOICE_SENDER_PASSWORD: ${{ secrets.CRISIS_ALERT_GOOGLE_VOICE_SENDER_PASSWORD }}
78+
CRISIS_ALERT_EMAIL_SENDER_PASSWORD: ${{ secrets.CRISIS_ALERT_EMAIL_SENDER_PASSWORD }}
7979
FIRSTRADE_USERNAME: ${{ secrets.FIRSTRADE_USERNAME }}
8080
FIRSTRADE_PASSWORD: ${{ secrets.FIRSTRADE_PASSWORD }}
8181
FIRSTRADE_MFA_SECRET: ${{ secrets.FIRSTRADE_MFA_SECRET }}
@@ -377,6 +377,12 @@ jobs:
377377
"CRISIS_ALERT_GOOGLE_VOICE_GATEWAY"
378378
"CRISIS_ALERT_GOOGLE_VOICE_GMAIL_USER"
379379
"CRISIS_ALERT_GOOGLE_VOICE_GMAIL_APP_PASSWORD"
380+
"CRISIS_ALERT_GOOGLE_VOICE_RECIPIENTS"
381+
"CRISIS_ALERT_GOOGLE_VOICE_SENDER_EMAIL"
382+
"CRISIS_ALERT_GOOGLE_VOICE_SENDER_PASSWORD"
383+
"CRISIS_ALERT_GOOGLE_VOICE_SMTP_HOST"
384+
"CRISIS_ALERT_GOOGLE_VOICE_SMTP_PORT"
385+
"CRISIS_ALERT_GOOGLE_VOICE_SMTP_SECURITY"
380386
"CRISIS_ALERT_SMTP_FROM"
381387
"CRISIS_ALERT_SMTP_HOST"
382388
"CRISIS_ALERT_SMTP_PORT"
@@ -385,7 +391,11 @@ jobs:
385391
"CRISIS_ALERT_SMTP_STARTTLS"
386392
"CRISIS_ALERT_SMTP_SSL"
387393
)
388-
remove_secret_vars=("CRISIS_ALERT_SMTP_PASSWORD" "CRISIS_ALERT_GOOGLE_VOICE_GMAIL_APP_PASSWORD")
394+
remove_secret_vars=(
395+
"CRISIS_ALERT_SMTP_PASSWORD"
396+
"CRISIS_ALERT_GOOGLE_VOICE_GMAIL_APP_PASSWORD"
397+
"CRISIS_ALERT_GOOGLE_VOICE_SENDER_PASSWORD"
398+
)
389399
390400
add_optional_env() {
391401
local name="$1"
@@ -442,11 +452,11 @@ jobs:
442452
add_optional_env FIRSTRADE_FEATURE_SNAPSHOT_MANIFEST_PATH
443453
add_optional_env FIRSTRADE_STRATEGY_CONFIG_PATH
444454
add_optional_env FIRSTRADE_STRATEGY_PLUGIN_MOUNTS_JSON
445-
add_optional_env CRISIS_ALERT_GOOGLE_VOICE_RECIPIENTS
446-
add_optional_env CRISIS_ALERT_GOOGLE_VOICE_SENDER_EMAIL
447-
add_optional_env CRISIS_ALERT_GOOGLE_VOICE_SMTP_HOST
448-
add_optional_env CRISIS_ALERT_GOOGLE_VOICE_SMTP_PORT
449-
add_optional_env CRISIS_ALERT_GOOGLE_VOICE_SMTP_SECURITY
455+
add_optional_env CRISIS_ALERT_EMAIL_RECIPIENTS
456+
add_optional_env CRISIS_ALERT_EMAIL_SENDER_EMAIL
457+
add_optional_env CRISIS_ALERT_EMAIL_SMTP_HOST
458+
add_optional_env CRISIS_ALERT_EMAIL_SMTP_PORT
459+
add_optional_env CRISIS_ALERT_EMAIL_SMTP_SECURITY
450460
add_optional_env FIRSTRADE_RUNTIME_EXECUTION_WINDOW_TRADING_DAYS
451461
add_optional_env FIRSTRADE_TECH_RUNTIME_EXECUTION_WINDOW_TRADING_DAYS
452462
add_optional_env INCOME_THRESHOLD_USD
@@ -456,7 +466,7 @@ jobs:
456466
add_optional_env NOTIFY_LANG
457467
458468
add_optional_secret TELEGRAM_TOKEN TELEGRAM_TOKEN_SECRET_NAME TELEGRAM_TOKEN
459-
add_optional_secret CRISIS_ALERT_GOOGLE_VOICE_SENDER_PASSWORD CRISIS_ALERT_GOOGLE_VOICE_SENDER_PASSWORD_SECRET_NAME CRISIS_ALERT_GOOGLE_VOICE_SENDER_PASSWORD
469+
add_optional_secret CRISIS_ALERT_EMAIL_SENDER_PASSWORD CRISIS_ALERT_EMAIL_SENDER_PASSWORD_SECRET_NAME CRISIS_ALERT_EMAIL_SENDER_PASSWORD
460470
add_optional_secret FIRSTRADE_USERNAME FIRSTRADE_USERNAME_SECRET_NAME FIRSTRADE_USERNAME
461471
add_optional_secret FIRSTRADE_PASSWORD FIRSTRADE_PASSWORD_SECRET_NAME FIRSTRADE_PASSWORD
462472
add_optional_secret FIRSTRADE_MFA_SECRET FIRSTRADE_MFA_SECRET_SECRET_NAME FIRSTRADE_MFA_SECRET

README.md

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -85,12 +85,12 @@ commit credentials.
8585
| `TELEGRAM_TOKEN` | Optional | Telegram bot token for strategy-cycle summaries |
8686
| `GLOBAL_TELEGRAM_CHAT_ID` | Optional | Telegram chat ID for strategy-cycle summaries |
8787
| `FIRSTRADE_STRATEGY_PLUGIN_MOUNTS_JSON` | Optional | JSON sidecar plugin mount config. Overrides global `STRATEGY_PLUGIN_MOUNTS_JSON` for this platform |
88-
| `CRISIS_ALERT_GOOGLE_VOICE_RECIPIENTS` | Optional | Email-form recipients. Use a normal mailbox for email-only delivery, or a Google Voice mailbox/address to also trigger GV prompts |
89-
| `CRISIS_ALERT_GOOGLE_VOICE_SENDER_EMAIL` | Optional | Sender email address used for Google Voice notification mail. Gmail is the default transport, but the sender naming is provider-neutral |
90-
| `CRISIS_ALERT_GOOGLE_VOICE_SENDER_PASSWORD` | Optional | Sender SMTP password or app password, preferably supplied from Secret Manager in Cloud Run |
91-
| `CRISIS_ALERT_GOOGLE_VOICE_SMTP_HOST` | Optional | SMTP host override. Defaults to Gmail SMTP when unset |
92-
| `CRISIS_ALERT_GOOGLE_VOICE_SMTP_PORT` | Optional | SMTP port override. Defaults to `465` when unset |
93-
| `CRISIS_ALERT_GOOGLE_VOICE_SMTP_SECURITY` | Optional | SMTP security override: `ssl`, `starttls`, or `none`. Defaults to `ssl` when unset |
88+
| `CRISIS_ALERT_EMAIL_RECIPIENTS` | Optional | Email-form recipients. Use a normal mailbox for email-only delivery, or a Google Voice-associated mailbox/address to also trigger Google Voice prompts |
89+
| `CRISIS_ALERT_EMAIL_SENDER_EMAIL` | Optional | Sender email address used for crisis alert email. Gmail is the default transport, but the sender naming is provider-neutral |
90+
| `CRISIS_ALERT_EMAIL_SENDER_PASSWORD` | Optional | Sender SMTP password or app password, preferably supplied from Secret Manager in Cloud Run |
91+
| `CRISIS_ALERT_EMAIL_SMTP_HOST` | Optional | SMTP host override. Defaults to Gmail SMTP when unset |
92+
| `CRISIS_ALERT_EMAIL_SMTP_PORT` | Optional | SMTP port override. Defaults to `465` when unset |
93+
| `CRISIS_ALERT_EMAIL_SMTP_SECURITY` | Optional | SMTP security override: `ssl`, `starttls`, or `none`. Defaults to `ssl` when unset |
9494
| `FIRSTRADE_COOKIE_DIR` | Optional | Cookie cache directory, default `.runtime/firstrade-cookies` |
9595
| `FIRSTRADE_ENABLE_LIVE_TRADING` | Optional | Must be `true` before any live order can be submitted |
9696
| `FIRSTRADE_RUN_SMOKE_ON_HTTP` | Optional | Must be `true` before `/smoke` performs a real login/quote |
@@ -177,9 +177,9 @@ full guarded strategy cycle:
177177
- route generated orders through the local safety layer
178178
- publish a compact Telegram summary when `TELEGRAM_TOKEN` and
179179
`GLOBAL_TELEGRAM_CHAT_ID` are configured
180-
- send independent Google Voice alerts for escalated strategy plugin signals when
181-
`CRISIS_ALERT_*` is configured
182-
- write Google Voice alert results into the response and suppress duplicate plugin
180+
- send independent email alerts for escalated strategy plugin signals when
181+
`CRISIS_ALERT_EMAIL_*` is configured
182+
- write mail alert results into the response and suppress duplicate plugin
183183
alert keys through `STRATEGY_PLUGIN_ALERT_STATE_GCS_URI`, `EXECUTION_REPORT_GCS_URI`,
184184
or the configured Firstrade state bucket
185185

@@ -312,9 +312,9 @@ Firstrade 登录、账户/行情读取、下单转换、安全闸和部署 wirin
312312
- dry-run / preview 下单验证
313313
- `/run` 执行通用美股策略的 dry-run 调仓闭环
314314
- 配置 `TELEGRAM_TOKEN``GLOBAL_TELEGRAM_CHAT_ID` 后发送运行摘要
315-
- 读取通用策略插件信号,并在危机类插件触发时通过 `CRISIS_ALERT_*`
316-
配置发送独立 Google Voice 告警
317-
- 在响应中写入 Google Voice 告警结果,并通过 `STRATEGY_PLUGIN_ALERT_STATE_GCS_URI`
315+
- 读取通用策略插件信号,并在危机类插件触发时通过 `CRISIS_ALERT_EMAIL_*`
316+
配置发送独立邮件告警
317+
- 在响应中写入邮件告警结果,并通过 `STRATEGY_PLUGIN_ALERT_STATE_GCS_URI`
318318
`EXECUTION_REPORT_GCS_URI` 或已配置的 Firstrade state bucket 抑制重复插件告警 key
319319
- 在你再次确认后,才允许极小金额实盘验证
320320
- 通用 `us_equity` 策略 profile 的平台层接入

application/rebalance_service.py

Lines changed: 26 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -51,10 +51,10 @@
5151
parse_strategy_plugin_mounts,
5252
)
5353
from quant_platform_kit.notifications.events import NotificationPublisher, RenderedNotification
54-
from quant_platform_kit.notifications.strategy_plugin_google_voice import (
55-
StrategyPluginGoogleVoiceAlertMarkerStore,
56-
build_strategy_plugin_alert_context_label as build_google_voice_alert_context_label,
57-
publish_strategy_plugin_google_voice_alerts,
54+
from quant_platform_kit.notifications.strategy_plugin_email import (
55+
StrategyPluginEmailAlertMarkerStore,
56+
build_strategy_plugin_alert_context_label as build_email_alert_context_label,
57+
publish_strategy_plugin_email_alerts,
5858
)
5959
from quant_platform_kit.strategy_contracts import build_strategy_evaluation_inputs
6060
from runtime_config_support import PlatformRuntimeSettings, load_platform_runtime_settings
@@ -212,7 +212,7 @@ def attach_strategy_plugin_result(
212212

213213

214214
def build_strategy_plugin_alert_context_label(settings: PlatformRuntimeSettings) -> str:
215-
return build_google_voice_alert_context_label(
215+
return build_email_alert_context_label(
216216
platform_id="firstrade",
217217
strategy_profile=settings.strategy_profile,
218218
account_scope=settings.account_region or settings.account_prefix,
@@ -231,7 +231,7 @@ def build_strategy_plugin_alert_store(
231231
state_bucket = env_reader("FIRSTRADE_GCS_STATE_BUCKET", None)
232232
state_prefix = env_reader("FIRSTRADE_STATE_PREFIX", "firstrade-platform") or "firstrade-platform"
233233
state_gcs_uri = f"gs://{state_bucket}/{state_prefix}" if state_bucket else None
234-
return StrategyPluginGoogleVoiceAlertMarkerStore(
234+
return StrategyPluginEmailAlertMarkerStore(
235235
local_dir=env_reader("STRATEGY_PLUGIN_ALERT_STATE_DIR", None) or "/tmp/quant_strategy_plugin_alerts",
236236
gcs_prefix_uri=explicit_gcs_uri or report_gcs_uri or state_gcs_uri,
237237
gcp_project_id=settings.project_id,
@@ -246,9 +246,9 @@ def publish_strategy_plugin_alerts(
246246
log_message: Callable[..., Any] = print,
247247
env_reader: Callable[[str, str | None], str | None] = os.getenv,
248248
):
249-
return publish_strategy_plugin_google_voice_alerts(
249+
return publish_strategy_plugin_email_alerts(
250250
signals,
251-
google_voice_settings=settings,
251+
email_settings=settings,
252252
translator=translator,
253253
strategy_label=settings.strategy_profile,
254254
context_label=build_strategy_plugin_alert_context_label(settings),
@@ -380,29 +380,29 @@ def run_strategy_cycle(
380380
}
381381
],
382382
"action_done": False,
383-
"strategy_plugin_alert_google_voice_attempted_count": 0,
384-
"strategy_plugin_alert_google_voice_sent_count": 0,
385-
"strategy_plugin_alert_google_voice_skipped_count": 0,
386-
"strategy_plugin_alert_google_voice_failed_count": 0,
387-
"strategy_plugin_alert_google_voice_deliveries": [],
383+
"strategy_plugin_alert_email_attempted_count": 0,
384+
"strategy_plugin_alert_email_sent_count": 0,
385+
"strategy_plugin_alert_email_skipped_count": 0,
386+
"strategy_plugin_alert_email_failed_count": 0,
387+
"strategy_plugin_alert_email_deliveries": [],
388388
}
389389
return attach_strategy_plugin_result(
390390
result,
391391
signals=strategy_plugin_signals,
392392
error=strategy_plugin_error,
393393
translator=translator,
394394
)
395-
strategy_plugin_alert_google_voice_result = None
396-
strategy_plugin_alert_google_voice_error = None
395+
strategy_plugin_alert_email_result = None
396+
strategy_plugin_alert_email_error = None
397397
try:
398-
strategy_plugin_alert_google_voice_result = publish_strategy_plugin_alerts(
398+
strategy_plugin_alert_email_result = publish_strategy_plugin_alerts(
399399
strategy_plugin_signals,
400400
settings=settings,
401401
translator=translator,
402402
env_reader=env_reader,
403403
)
404404
except Exception as exc:
405-
strategy_plugin_alert_google_voice_error = f"{type(exc).__name__}: {exc}"
405+
strategy_plugin_alert_email_error = f"{type(exc).__name__}: {exc}"
406406
strategy_run_persisted = False
407407
strategy_run_persistence_error = None
408408
if persist_strategy_runs:
@@ -479,20 +479,20 @@ def run_strategy_cycle(
479479
result["funding_blocked"] = True
480480
if strategy_run_persistence_error:
481481
result["strategy_run_persistence_error"] = strategy_run_persistence_error
482-
if strategy_plugin_alert_google_voice_result is not None:
483-
result.update(strategy_plugin_alert_google_voice_result.to_report_fields())
482+
if strategy_plugin_alert_email_result is not None:
483+
result.update(strategy_plugin_alert_email_result.to_report_fields())
484484
else:
485485
result.update(
486486
{
487-
"strategy_plugin_alert_google_voice_attempted_count": 0,
488-
"strategy_plugin_alert_google_voice_sent_count": 0,
489-
"strategy_plugin_alert_google_voice_skipped_count": 0,
490-
"strategy_plugin_alert_google_voice_failed_count": 0,
491-
"strategy_plugin_alert_google_voice_deliveries": [],
487+
"strategy_plugin_alert_email_attempted_count": 0,
488+
"strategy_plugin_alert_email_sent_count": 0,
489+
"strategy_plugin_alert_email_skipped_count": 0,
490+
"strategy_plugin_alert_email_failed_count": 0,
491+
"strategy_plugin_alert_email_deliveries": [],
492492
}
493493
)
494-
if strategy_plugin_alert_google_voice_error:
495-
result["strategy_plugin_alert_google_voice_error"] = strategy_plugin_alert_google_voice_error
494+
if strategy_plugin_alert_email_error:
495+
result["strategy_plugin_alert_email_error"] = strategy_plugin_alert_email_error
496496
attach_strategy_plugin_result(
497497
result,
498498
signals=strategy_plugin_signals,

pyproject.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@ authors = [
1414
]
1515
dependencies = [
1616
"firstrade==0.0.38",
17-
"quant-platform-kit @ git+https://github.com/QuantStrategyLab/QuantPlatformKit.git@43b2ecb9dc7b1a70e52fe038ce321d79f5f7987a",
18-
"us-equity-strategies @ git+https://github.com/QuantStrategyLab/UsEquityStrategies.git@a3f1899079d8d6c11601dddc40cb6f3020b6fc82",
17+
"quant-platform-kit @ git+https://github.com/QuantStrategyLab/QuantPlatformKit.git@3c8f52b16a8ebf98b9fdfa4af5e96be43e6144fe",
18+
"us-equity-strategies @ git+https://github.com/QuantStrategyLab/UsEquityStrategies.git@b84bebb784248bd2bb3d2c589db9ea0ab35ee95d",
1919
"google-cloud-storage",
2020
"requests",
2121
]

requirements.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
flask
22
gunicorn
33
firstrade==0.0.38
4-
quant-platform-kit @ git+https://github.com/QuantStrategyLab/QuantPlatformKit.git@43b2ecb9dc7b1a70e52fe038ce321d79f5f7987a
5-
us-equity-strategies @ git+https://github.com/QuantStrategyLab/UsEquityStrategies.git@a3f1899079d8d6c11601dddc40cb6f3020b6fc82
4+
quant-platform-kit @ git+https://github.com/QuantStrategyLab/QuantPlatformKit.git@3c8f52b16a8ebf98b9fdfa4af5e96be43e6144fe
5+
us-equity-strategies @ git+https://github.com/QuantStrategyLab/UsEquityStrategies.git@b84bebb784248bd2bb3d2c589db9ea0ab35ee95d
66
google-cloud-storage
77
requests
88
pytest

runtime_config_support.py

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -58,12 +58,12 @@ class PlatformRuntimeSettings:
5858
strategy_config_path: str | None = None
5959
strategy_config_source: str | None = None
6060
strategy_plugin_mounts_json: str | None = None
61-
crisis_alert_google_voice_recipients: tuple[str, ...] = ()
62-
crisis_alert_google_voice_sender_email: str | None = None
63-
crisis_alert_google_voice_sender_password: str | None = None
64-
crisis_alert_google_voice_smtp_host: str | None = None
65-
crisis_alert_google_voice_smtp_port: str | None = None
66-
crisis_alert_google_voice_smtp_security: str | None = None
61+
crisis_alert_email_recipients: tuple[str, ...] = ()
62+
crisis_alert_email_sender_email: str | None = None
63+
crisis_alert_email_sender_password: str | None = None
64+
crisis_alert_email_smtp_host: str | None = None
65+
crisis_alert_email_smtp_port: str | None = None
66+
crisis_alert_email_smtp_security: str | None = None
6767
runtime_target: RuntimeTarget | None = None
6868

6969

@@ -151,15 +151,15 @@ def load_platform_runtime_settings(
151151
os.getenv("FIRSTRADE_STRATEGY_PLUGIN_MOUNTS_JSON")
152152
or os.getenv("STRATEGY_PLUGIN_MOUNTS_JSON")
153153
),
154-
crisis_alert_google_voice_recipients=_split_env_list(os.getenv("CRISIS_ALERT_GOOGLE_VOICE_RECIPIENTS")),
155-
crisis_alert_google_voice_sender_email=_first_non_empty(os.getenv("CRISIS_ALERT_GOOGLE_VOICE_SENDER_EMAIL")),
156-
crisis_alert_google_voice_sender_password=_first_non_empty(
157-
os.getenv("CRISIS_ALERT_GOOGLE_VOICE_SENDER_PASSWORD")
154+
crisis_alert_email_recipients=_split_env_list(os.getenv("CRISIS_ALERT_EMAIL_RECIPIENTS")),
155+
crisis_alert_email_sender_email=_first_non_empty(os.getenv("CRISIS_ALERT_EMAIL_SENDER_EMAIL")),
156+
crisis_alert_email_sender_password=_first_non_empty(
157+
os.getenv("CRISIS_ALERT_EMAIL_SENDER_PASSWORD")
158158
),
159-
crisis_alert_google_voice_smtp_host=_first_non_empty(os.getenv("CRISIS_ALERT_GOOGLE_VOICE_SMTP_HOST")),
160-
crisis_alert_google_voice_smtp_port=_first_non_empty(os.getenv("CRISIS_ALERT_GOOGLE_VOICE_SMTP_PORT")),
161-
crisis_alert_google_voice_smtp_security=_first_non_empty(
162-
os.getenv("CRISIS_ALERT_GOOGLE_VOICE_SMTP_SECURITY")
159+
crisis_alert_email_smtp_host=_first_non_empty(os.getenv("CRISIS_ALERT_EMAIL_SMTP_HOST")),
160+
crisis_alert_email_smtp_port=_first_non_empty(os.getenv("CRISIS_ALERT_EMAIL_SMTP_PORT")),
161+
crisis_alert_email_smtp_security=_first_non_empty(
162+
os.getenv("CRISIS_ALERT_EMAIL_SMTP_SECURITY")
163163
),
164164
runtime_target=runtime_target,
165165
)

0 commit comments

Comments
 (0)