feat: Deploy HA auto-failover with database promotion

- Enhanced DNS failover monitor on secondary (72.62.39.24)
- Auto-promotes database: pg_ctl promote on failover
- Creates DEMOTED flag on primary via SSH (split-brain protection)
- Telegram notifications with database promotion status
- Startup safety script ready (integration pending)
- 90-second automatic recovery vs 10-30 min manual
- Zero-cost 95% enterprise HA benefit

Status: DEPLOYED and MONITORING (14:52 CET)
Next: Controlled failover test during maintenance
This commit is contained in:
mindesbunister
2025-12-12 15:54:03 +01:00
parent 7ff5c5b3a4
commit d637aac2d7
25 changed files with 1071 additions and 170 deletions

View File

@@ -267,8 +267,14 @@ export async function POST(request: NextRequest): Promise<NextResponse<TestTrade
}
// Place on-chain TP/SL orders so they appear in Drift UI
let effectiveTp2SizePercent = 0
let exitOrderSignatures: string[] = []
try {
effectiveTp2SizePercent =
config.useTp2AsTriggerOnly && (config.takeProfit2SizePercent ?? 0) <= 0
? 0
: (config.takeProfit2SizePercent ?? 0)
const exitRes = await placeExitOrders({
symbol: driftSymbol,
positionSizeUSD: actualPositionSizeUSD,
@@ -277,7 +283,7 @@ export async function POST(request: NextRequest): Promise<NextResponse<TestTrade
tp2Price,
stopLossPrice,
tp1SizePercent: config.takeProfit1SizePercent ?? 50,
tp2SizePercent: config.takeProfit2SizePercent ?? 0, // 0 = activate trailing stop for runner
tp2SizePercent: effectiveTp2SizePercent, // 0 = activate trailing stop for runner
direction: direction,
// Dual stop parameters
useDualStops: config.useDualStops,
@@ -314,7 +320,7 @@ export async function POST(request: NextRequest): Promise<NextResponse<TestTrade
takeProfit1Price: tp1Price,
takeProfit2Price: tp2Price,
tp1SizePercent: config.takeProfit1SizePercent ?? 50,
tp2SizePercent: config.takeProfit2SizePercent ?? 0, // 0 = activate trailing stop for runner
tp2SizePercent: effectiveTp2SizePercent, // 0 = activate trailing stop for runner
configSnapshot: config,
entryOrderTx: openResult.transactionSignature!,
tp1OrderTx: exitOrderSignatures[0],