Files
khadhroony-bobobot/kb_demo_app/frontend/demo_pipeline2.html
2026-06-05 14:53:16 +02:00

491 lines
39 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!-- file: kb_demo_app/frontend/demo_pipeline2.html -->
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Khadhroony-BoBoBot — Demo Pipeline 2</title>
<link rel="stylesheet" href="sass/main.scss" />
</head>
<body class="bg-body-tertiary">
<header class="app-header">
<nav class="navbar navbar-expand-lg h-100 py-0 bg-light text-dark">
<div class="container my-0">
<a class="navbar-brand d-flex align-items-center" href="/">
<img alt="Logo" src="imgs/logo.png" class="app-logo" />
<span class="ps-2 fs-4 fw-bold text-primary font-logo">Demo Pipeline 2</span>
</a>
</div>
</nav>
</header>
<main class="app-main">
<div class="osb-scrollable pt-1 pb-4" data-simplebar>
<div class="container vcentered sketchy-translucid py-4">
<div class="row g-4">
<div class="col-12 col-xxl-4">
<div class="accordion" id="demoPipeline2LeftAccordion">
<div class="accordion-item border-0 shadow-sm mb-3">
<h1 class="accordion-header" id="demoPipeline2CatalogHeading">
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#demoPipeline2CatalogCollapse" aria-expanded="false" aria-controls="demoPipeline2CatalogCollapse">
Catalogue local
</button>
</h1>
<div id="demoPipeline2CatalogCollapse" class="accordion-collapse collapse" aria-labelledby="demoPipeline2CatalogHeading" data-bs-parent="#demoPipeline2LeftAccordion">
<div class="accordion-body">
<div class="d-flex gap-2 mb-3">
<button id="demoPipeline2RefreshCatalogButton" type="button" class="btn btn-primary">
Refresh catalog
</button>
</div>
<div class="mb-3">
<label class="form-label">Mints</label>
<textarea id="demoPipeline2TokensTextarea" class="form-control font-monospace" rows="8" readonly spellcheck="false"></textarea>
</div>
<div class="mb-3">
<label class="form-label">Pools</label>
<textarea id="demoPipeline2PoolsTextarea" class="form-control font-monospace" rows="8" readonly spellcheck="false"></textarea>
</div>
<div>
<label class="form-label">Pairs</label>
<textarea id="demoPipeline2PairsTextarea" class="form-control font-monospace" rows="8" readonly spellcheck="false"></textarea>
</div>
</div>
</div>
</div>
<div class="accordion-item border-0 shadow-sm mb-3">
<h2 class="accordion-header" id="demoPipeline2BackfillHeading">
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#demoPipeline2BackfillCollapse" aria-expanded="false" aria-controls="demoPipeline2BackfillCollapse">
Backfill ciblé
</button>
</h2>
<div id="demoPipeline2BackfillCollapse" class="accordion-collapse collapse" aria-labelledby="demoPipeline2BackfillHeading" data-bs-parent="#demoPipeline2LeftAccordion">
<div class="accordion-body">
<div class="mb-3">
<label for="demoPipeline2HttpRoleInput" class="form-label">HTTP role</label>
<input id="demoPipeline2HttpRoleInput" type="text" class="form-control" value="history_backfill" spellcheck="false" />
</div>
<div class="mb-3">
<label for="demoPipeline2MintInput" class="form-label">Token mint</label>
<input id="demoPipeline2MintInput" type="text" class="form-control font-monospace" spellcheck="false" placeholder="Mint SPL" />
</div>
<div class="row g-2 mb-3">
<div class="col-6">
<label for="demoPipeline2MintSignatureLimitInput" class="form-label">Mint sigs</label>
<input id="demoPipeline2MintSignatureLimitInput" type="number" min="1" step="1" class="form-control" value="20" />
</div>
<div class="col-6">
<label for="demoPipeline2MintPoolLimitInput" class="form-label">Pool sigs</label>
<input id="demoPipeline2MintPoolLimitInput" type="number" min="1" step="1" class="form-control" value="20" />
</div>
</div>
<div class="d-flex gap-2 mb-4">
<button id="demoPipeline2BackfillMintButton" type="button" class="btn btn-outline-primary">
Backfill mint
</button>
</div>
<div class="mb-3">
<label for="demoPipeline2PoolInput" class="form-label">Pool address</label>
<input id="demoPipeline2PoolInput" type="text" class="form-control font-monospace" spellcheck="false" placeholder="Pool / pair on-chain" />
</div>
<div class="mb-3">
<label for="demoPipeline2PoolSignatureLimitInput" class="form-label">Pool sigs</label>
<input id="demoPipeline2PoolSignatureLimitInput" type="number" min="1" step="1" class="form-control" value="20" />
</div>
<div class="d-flex gap-2">
<button id="demoPipeline2BackfillPoolButton" type="button" class="btn btn-outline-primary">
Backfill pool
</button>
</div>
<hr class="my-4" />
<div class="mb-3">
<label for="demoPipeline2SignatureInput" class="form-label">Signature</label>
<input id="demoPipeline2SignatureInput" type="text" class="form-control font-monospace" spellcheck="false" placeholder="Transaction signature from Demo3" />
</div>
<div class="d-flex gap-2">
<button id="demoPipeline2BackfillSignatureButton" type="button" class="btn btn-outline-primary">
Backfill signature
</button>
</div>
<hr class="my-4" />
<div class="mb-3">
<label for="demoPipeline2SignatureBatchTextarea" class="form-label">Signatures batch</label>
<textarea id="demoPipeline2SignatureBatchTextarea" class="form-control font-monospace" rows="8" spellcheck="false" placeholder="Une signature par ligne"></textarea>
<div class="form-text">
Backfill ciblé de plusieurs signatures. Les lignes vides et les doublons sont ignorés.
</div>
</div>
<div class="form-check mb-3">
<input id="demoPipeline2SignatureBatchContinueOnErrorCheckbox" class="form-check-input" type="checkbox" checked />
<label for="demoPipeline2SignatureBatchContinueOnErrorCheckbox" class="form-check-label">
Continuer après une erreur de signature
</label>
</div>
<div class="d-flex gap-2">
<button id="demoPipeline2BackfillSignatureBatchButton" type="button" class="btn btn-outline-primary">
Backfill signatures batch
</button>
</div>
</div>
</div>
</div>
<div class="accordion-item border-0 shadow-sm mb-3">
<h2 class="accordion-header" id="demoPipeline2ReplayHeading">
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#demoPipeline2ReplayCollapse" aria-expanded="false" aria-controls="demoPipeline2ReplayCollapse">
Replay local
</button>
</h2>
<div id="demoPipeline2ReplayCollapse" class="accordion-collapse collapse" aria-labelledby="demoPipeline2ReplayHeading" data-bs-parent="#demoPipeline2LeftAccordion">
<div class="accordion-body">
<p class="small text-body-secondary mb-3">
Rejoue le pipeline depuis les transactions déjà stockées en base sans refaire de getTransaction.
</p>
<div class="mb-3">
<label for="demoPipeline2ReplayLimitInput" class="form-label">Transaction limit</label>
<input id="demoPipeline2ReplayLimitInput" type="number" min="1" step="1" class="form-control" value="10000" />
</div>
<div class="form-check mb-3">
<input class="form-check-input" type="checkbox" id="demoPipeline2ReplayMetadataCheckbox" />
<label class="form-check-label" for="demoPipeline2ReplayMetadataCheckbox">
Refresh missing token metadata
</label>
</div>
<div class="mb-3">
<label for="demoPipeline2ReplayMetadataLimitInput" class="form-label">Metadata limit</label>
<input id="demoPipeline2ReplayMetadataLimitInput" type="number" min="1" step="1" class="form-control" value="250" />
</div>
<div class="form-check mb-2">
<input class="form-check-input" type="checkbox" id="demoPipeline2ReplaySkipCertifiedDexDecodeCheckbox" checked />
<label class="form-check-label" for="demoPipeline2ReplaySkipCertifiedDexDecodeCheckbox">
Skip certified DEX decode ledger rows
</label>
</div>
<div class="form-check mb-2">
<input class="form-check-input" type="checkbox" id="demoPipeline2ReplayForceDexDecodeCheckbox" />
<label class="form-check-label" for="demoPipeline2ReplayForceDexDecodeCheckbox">
Force DEX decode replay
</label>
</div>
<div class="form-check mb-3">
<input class="form-check-input" type="checkbox" id="demoPipeline2ReplayDeferInstructionObservationCheckbox" checked />
<label class="form-check-label" for="demoPipeline2ReplayDeferInstructionObservationCheckbox">
Refresh instruction observations once after replay
</label>
</div>
<p class="small text-body-secondary mb-3">
Le skip ne concerne que létape de décodage DEX certifiée par le ledger. Le reste du replay continue pour reconstruire les tables dérivées. Le refresh différé des observations accélère le replay mais les compteurs SQL dinstructions ne sont finalisés quà la fin.
</p>
<div class="d-flex gap-2">
<button id="demoPipeline2ReplayLocalPipelineButton" type="button" class="btn btn-outline-primary">
Replay local pipeline
</button>
</div>
</div>
</div>
</div>
<div class="accordion-item border-0 shadow-sm mb-3">
<h2 class="accordion-header" id="demoPipeline2DiagnosticsHeading">
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#demoPipeline2DiagnosticsCollapse" aria-expanded="false" aria-controls="demoPipeline2DiagnosticsCollapse">
Diagnostics locaux
</button>
</h2>
<div id="demoPipeline2DiagnosticsCollapse" class="accordion-collapse collapse" aria-labelledby="demoPipeline2DiagnosticsHeading" data-bs-parent="#demoPipeline2LeftAccordion">
<div class="accordion-body">
<p class="small text-body-secondary mb-3">
Analyse les données déjà persistées : transactions, decoded events, trades, candles, tokens, pools et pairs.
</p>
<div class="mb-3">
<label for="demoPipeline2ValidationProfileSelect" class="form-label">Validation profile</label>
<select id="demoPipeline2ValidationProfileSelect" class="form-select">
<option value="0.7.48-pre_event_coverage_db_checkpoint" selected>0.7.48-pre — Event coverage DB checkpoint</option>
<option value="0.7.43_meteora_effective_surfaces">0.7.43 — Meteora family event coverage</option>
<option value="0.7.42_raydium_family_event_coverage">0.7.42 — Raydium family event coverage</option>
<option value="0.7.41_raydium_amm_v4_swap_decoder">0.7.41 — Raydium AMM v4 swap decoder</option>
<option value="0.7.40_raydium_effective_surfaces">0.7.40 — Raydium effective surfaces</option>
<option value="0.7.39_dex_first_effective_swap_surfaces">0.7.39 — DEX-first effective swap surfaces</option>
<option value="0.7.38_token_metadata_gap_prioritization">0.7.38 — token metadata gap prioritization</option>
<option value="0.7.37_token_metadata_catalog_enrichment">0.7.37 — token metadata/catalog enrichment</option>
<option value="0.7.36_meteora_family_consolidation">0.7.36 — Meteora family consolidation</option>
<option value="0.7.35_non_trade_fee_reward_admin">0.7.35 — non-trade fee/reward admin</option>
<option value="0.7.34_non_trade_liquidity_lifecycle">0.7.34 — non-trade liquidity/lifecycle</option>
<option value="0.7.33_pair_trading_readiness">0.7.33 — pair trading readiness</option>
<option value="0.7.32_validation_report_semantics">0.7.32 — validation report semantics</option>
<option value="0.7.31_trade_event_actionability_policy">0.7.31 — trade event actionability policy</option>
<option value="0.7.30_non_trade_event_classification">0.7.30 — non-trade event classification</option>
<option value="0.7.29_multi_dex_matrix_baseline">0.7.29 — DEX matrix baseline</option>
<option value="0.7.28_multi_dex_non_regression">0.7.28 — multi-DEX non-regression</option>
<option value="0.7.27_dexes_non_regression">0.7.27 — first DEXes non-regression</option>
</select>
</div>
<div class="d-flex gap-2">
<button id="demoPipeline2DiagnoseLocalPipelineButton" type="button" class="btn btn-outline-primary">
Diagnose local pipeline
</button>
<button id="demoPipeline2ValidateLocalPipelineButton" type="button" class="btn btn-outline-success">
Validate
</button>
</div>
</div>
</div>
</div>
<div class="accordion-item border-0 shadow-sm mb-3">
<h2 class="accordion-header" id="demoPipeline2DiscriminatorDiagnosticsHeading">
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#demoPipeline2DiscriminatorDiagnosticsCollapse" aria-expanded="false" aria-controls="demoPipeline2DiscriminatorDiagnosticsCollapse">
Instruction discriminators
</button>
</h2>
<div id="demoPipeline2DiscriminatorDiagnosticsCollapse" class="accordion-collapse collapse" aria-labelledby="demoPipeline2DiscriminatorDiagnosticsHeading" data-bs-parent="#demoPipeline2LeftAccordion">
<div class="accordion-body">
<p class="small text-body-secondary mb-3">
Groupe les instructions dun programme par discriminator décodé, nombre de comptes, stack height et statut decoded/non-decoded.
</p>
<div class="mb-3">
<label for="demoPipeline2DiscriminatorProgramIdInput" class="form-label">Program id</label>
<input id="demoPipeline2DiscriminatorProgramIdInput" type="text" class="form-control font-monospace" value="LBUZKhRxPF3XUpBCjp4YzTKgLccjZhTSDM9YuVaPwxo" />
</div>
<div class="mb-3">
<label for="demoPipeline2DiscriminatorLimitInput" class="form-label">Instruction row limit</label>
<input id="demoPipeline2DiscriminatorLimitInput" type="number" min="1" step="1" class="form-control" value="200" />
</div>
<div class="d-flex gap-2">
<button id="demoPipeline2LoadDiscriminatorSummariesButton" type="button" class="btn btn-outline-warning">
Load discriminator summaries
</button>
</div>
</div>
</div>
</div>
<div class="accordion-item border-0 shadow-sm mb-3">
<h2 class="accordion-header" id="demoPipeline2ProtocolCandidatesHeading">
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#demoPipeline2ProtocolCandidatesCollapse" aria-expanded="false" aria-controls="demoPipeline2ProtocolCandidatesCollapse">
Protocol candidates
</button>
</h2>
<div id="demoPipeline2ProtocolCandidatesCollapse" class="accordion-collapse collapse" aria-labelledby="demoPipeline2ProtocolCandidatesHeading" data-bs-parent="#demoPipeline2LeftAccordion">
<div class="accordion-body">
<p class="small text-body-secondary mb-3">
Résume les programmes candidats par priorité : transaction_count, occurrence_count, dernier slot et dernière signature.
</p>
<div class="mb-3">
<label for="demoPipeline2ProtocolCandidateLimitInput" class="form-label">Summary limit</label>
<input id="demoPipeline2ProtocolCandidateLimitInput" type="number" min="1" step="1" class="form-control" value="50" />
</div>
<div class="d-flex gap-2">
<button id="demoPipeline2RefreshProtocolCandidatesButton" type="button" class="btn btn-outline-warning">
Refresh protocol candidates
</button>
</div>
</div>
</div>
</div>
<div class="accordion-item border-0 shadow-sm">
<h2 class="accordion-header" id="demoPipeline2CandlesControlHeading">
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#demoPipeline2CandlesControlCollapse" aria-expanded="false" aria-controls="demoPipeline2CandlesControlCollapse">
Chargement candles
</button>
</h2>
<div id="demoPipeline2CandlesControlCollapse" class="accordion-collapse collapse" aria-labelledby="demoPipeline2CandlesControlHeading" data-bs-parent="#demoPipeline2LeftAccordion">
<div class="accordion-body">
<div class="mb-3">
<label for="demoPipeline2PairSelect" class="form-label">Pair</label>
<select id="demoPipeline2PairSelect" class="form-select">
<option value="">Aucune</option>
</select>
</div>
<div class="row g-2 mb-3">
<div class="col-7">
<label for="demoPipeline2TimeframeSelect" class="form-label">Timeframe</label>
<select id="demoPipeline2TimeframeSelect" class="form-select">
<option value="60">1m</option>
<option value="300">5m</option>
<option value="900">15m</option>
<option value="3600">1h</option>
</select>
</div>
<div class="col-5">
<label for="demoPipeline2CustomTimeframeInput" class="form-label">Custom</label>
<input id="demoPipeline2CustomTimeframeInput" type="number" min="1" step="1" class="form-control" placeholder="120" />
</div>
</div>
<div class="form-check mb-3">
<input class="form-check-input" type="checkbox" id="demoPipeline2PreferMaterializedInput" />
<label class="form-check-label" for="demoPipeline2PreferMaterializedInput">
Prefer materialized candles
</label>
</div>
<div class="d-flex gap-2">
<button id="demoPipeline2LoadCandlesButton" type="button" class="btn btn-primary">
Load candles
</button>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="col-12 col-xxl-8">
<div class="accordion" id="demoPipeline2ContentAccordion">
<div class="accordion-item border-0 shadow-sm mb-3">
<h2 class="accordion-header" id="demoPipeline2SummaryHeading">
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#demoPipeline2SummaryCollapse" aria-expanded="false" aria-controls="demoPipeline2SummaryCollapse">
Backfill / Replay summary
</button>
</h2>
<div id="demoPipeline2SummaryCollapse" class="accordion-collapse collapse" aria-labelledby="demoPipeline2SummaryHeading" data-bs-parent="#demoPipeline2ContentAccordion">
<div class="accordion-body">
<textarea id="demoPipeline2BackfillSummaryTextarea" class="form-control font-monospace" rows="12" readonly spellcheck="false"></textarea>
</div>
</div>
</div>
<div class="accordion-item border-0 shadow-sm mb-3">
<h2 class="accordion-header" id="demoPipeline2LocalDiagnosticsHeading">
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#demoPipeline2LocalDiagnosticsCollapse" aria-expanded="false" aria-controls="demoPipeline2LocalDiagnosticsCollapse">
Local pipeline diagnostics
</button>
</h2>
<div id="demoPipeline2LocalDiagnosticsCollapse" class="accordion-collapse collapse" aria-labelledby="demoPipeline2LocalDiagnosticsHeading" data-bs-parent="#demoPipeline2ContentAccordion">
<div class="accordion-body">
<textarea id="demoPipeline2LocalDiagnosticsTextarea" class="form-control font-monospace" rows="18" readonly spellcheck="false"></textarea>
</div>
</div>
</div>
<div class="accordion-item border-0 shadow-sm mb-3">
<h2 class="accordion-header" id="demoPipeline2LocalValidationHeading">
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#demoPipeline2LocalValidationCollapse" aria-expanded="false" aria-controls="demoPipeline2LocalValidationCollapse">
Local pipeline Validation
</button>
</h2>
<div id="demoPipeline2LocalValidationCollapse" class="accordion-collapse collapse" aria-labelledby="demoPipeline2LocalValidationHeading" data-bs-parent="#demoPipeline2ContentAccordion">
<div class="accordion-body">
<textarea id="demoPipeline2LocalValidationTextarea" class="form-control font-monospace" rows="16" readonly spellcheck="false"></textarea>
</div>
</div>
</div>
<div class="accordion-item border-0 shadow-sm mb-3">
<h2 class="accordion-header" id="demoPipeline2DiscriminatorSummaryHeading">
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#demoPipeline2DiscriminatorSummaryCollapse" aria-expanded="false" aria-controls="demoPipeline2DiscriminatorSummaryCollapse">
Instruction discriminator summaries
</button>
</h2>
<div id="demoPipeline2DiscriminatorSummaryCollapse" class="accordion-collapse collapse" aria-labelledby="demoPipeline2DiscriminatorSummaryHeading" data-bs-parent="#demoPipeline2ContentAccordion">
<div class="accordion-body">
<textarea id="demoPipeline2DiscriminatorSummariesTextarea" class="form-control font-monospace" rows="18" readonly spellcheck="false"></textarea>
</div>
</div>
</div>
<div class="accordion-item border-0 shadow-sm mb-3">
<h2 class="accordion-header" id="demoPipeline2ProtocolCandidateSummaryHeading">
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#demoPipeline2ProtocolCandidateSummaryCollapse" aria-expanded="false" aria-controls="demoPipeline2ProtocolCandidateSummaryCollapse">
Protocol candidate summaries
</button>
</h2>
<div id="demoPipeline2ProtocolCandidateSummaryCollapse" class="accordion-collapse collapse" aria-labelledby="demoPipeline2ProtocolCandidateSummaryHeading" data-bs-parent="#demoPipeline2ContentAccordion">
<div class="accordion-body">
<textarea id="demoPipeline2ProtocolCandidateSummariesTextarea" class="form-control font-monospace" rows="16" readonly spellcheck="false"></textarea>
</div>
</div>
</div>
<div class="accordion-item border-0 shadow-sm mb-3">
<h2 class="accordion-header" id="demoPipeline2ChartHeading">
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#demoPipeline2ChartCollapse" aria-expanded="false" aria-controls="demoPipeline2ChartCollapse">
Candles / OHLCV
</button>
</h2>
<div id="demoPipeline2ChartCollapse" class="accordion-collapse collapse" aria-labelledby="demoPipeline2ChartHeading" data-bs-parent="#demoPipeline2ContentAccordion">
<div class="accordion-body">
<div class="d-flex flex-wrap justify-content-between align-items-center gap-3 mb-3">
<div id="demoPipeline2ChartMeta" class="small text-body-secondary">
Aucun jeu de candles chargé.
</div>
</div>
<div id="demoPipeline2Chart" class="w-100 border rounded bg-body" style="height: 680px; min-height: 680px;"></div>
</div>
</div>
</div>
<div class="accordion-item border-0 shadow-sm">
<h2 class="accordion-header" id="demoPipeline2LogHeading">
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#demoPipeline2LogCollapse" aria-expanded="false" aria-controls="demoPipeline2LogCollapse">
Log UI
</button>
</h2>
<div id="demoPipeline2LogCollapse" class="accordion-collapse collapse" aria-labelledby="demoPipeline2LogHeading" data-bs-parent="#demoPipeline2ContentAccordion">
<div class="accordion-body">
<div class="d-flex justify-content-end align-items-center mb-3">
<button id="demoPipeline2ClearLogButton" type="button" class="btn btn-outline-secondary btn-sm">
Clear log
</button>
</div>
<textarea id="demoPipeline2LogTextarea" class="form-control font-monospace" rows="14" readonly spellcheck="false"></textarea>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</main>
<footer class="app-footer bg-dark text-light">
<div class="container h-100 d-flex align-items-center">
<div class="row flex-grow-1 align-items-center">
<div class="col-12 col-md-6 text-center text-small my-1 my-md-0">
&copy; 2026 SASEDEV — Demo Pipeline 2
</div>
</div>
</div>
</footer>
<script type="module" src="ts/demo_pipeline2.ts" defer></script>
</body>
</html>