misc: binance momentum, telegram, frontend updates
This commit is contained in:
+46
-2
@@ -212,9 +212,12 @@ type Dashboard struct {
|
||||
|
||||
// Surge detector
|
||||
surgeDetector *SurgeDetector
|
||||
|
||||
// Binance momentum detector
|
||||
binanceMomentumDetector *BinanceMomentumDetector
|
||||
}
|
||||
|
||||
func NewDashboard(store *PriceStore, database *db.DB, addr string, cfg *Config, momentumTracker *MomentumTracker, trendDetector *TrendDetector, cumulativeTracker *CumulativeTracker, trendFilter *TrendFilter, surgeDetector *SurgeDetector) *Dashboard {
|
||||
func NewDashboard(store *PriceStore, database *db.DB, addr string, cfg *Config, momentumTracker *MomentumTracker, trendDetector *TrendDetector, cumulativeTracker *CumulativeTracker, trendFilter *TrendFilter, surgeDetector *SurgeDetector, binanceMomentumDetector *BinanceMomentumDetector) *Dashboard {
|
||||
d := &Dashboard{
|
||||
hub: NewSSEHub(),
|
||||
history: newPriceHistory(),
|
||||
@@ -228,7 +231,8 @@ func NewDashboard(store *PriceStore, database *db.DB, addr string, cfg *Config,
|
||||
trendDetector: trendDetector,
|
||||
cumulativeTracker: cumulativeTracker,
|
||||
trendFilter: trendFilter,
|
||||
surgeDetector: surgeDetector,
|
||||
surgeDetector: surgeDetector,
|
||||
binanceMomentumDetector: binanceMomentumDetector,
|
||||
}
|
||||
|
||||
// Wire trend event persistence to SQLite
|
||||
@@ -286,6 +290,8 @@ func (d *Dashboard) Run() {
|
||||
mux.HandleFunc("GET /api/trend-signals", d.handleTrendSignals)
|
||||
mux.HandleFunc("GET /api/surge-events", d.handleSurgeEvents)
|
||||
mux.HandleFunc("GET /events", d.handleSSE)
|
||||
mux.HandleFunc("GET /binance", d.handleBinanceIndex)
|
||||
mux.HandleFunc("GET /api/binance-alerts", d.handleBinanceAlerts)
|
||||
|
||||
server := &http.Server{
|
||||
Addr: d.addr,
|
||||
@@ -435,6 +441,14 @@ func (d *Dashboard) broadcastLoop() {
|
||||
d.hub.Broadcast("surge", surgeSnap)
|
||||
}
|
||||
}
|
||||
|
||||
// 9. Binance momentum snapshot (1-minute change for all coins)
|
||||
if d.binanceMomentumDetector != nil && d.cfg.BinanceMomentumEnabled {
|
||||
bmSnap := d.binanceMomentumDetector.Snapshot()
|
||||
if len(bmSnap) > 0 {
|
||||
d.hub.Broadcast("binance_momentum", bmSnap)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -648,6 +662,36 @@ func (d *Dashboard) handleSSE(w http.ResponseWriter, r *http.Request) {
|
||||
}
|
||||
}
|
||||
|
||||
// handleBinanceIndex serves the Binance momentum monitor page.
|
||||
func (d *Dashboard) handleBinanceIndex(w http.ResponseWriter, r *http.Request) {
|
||||
var data []byte
|
||||
var err error
|
||||
|
||||
data, err = os.ReadFile("frontend/dist/binance.html")
|
||||
if err != nil {
|
||||
data, err = staticFS.ReadFile("frontend/dist/binance.html")
|
||||
}
|
||||
if err != nil {
|
||||
http.Error(w, "Not found", 404)
|
||||
return
|
||||
}
|
||||
w.Header().Set("Content-Type", "text/html; charset=utf-8")
|
||||
w.Write(data)
|
||||
}
|
||||
|
||||
// handleBinanceAlerts returns recent Binance momentum alerts.
|
||||
func (d *Dashboard) handleBinanceAlerts(w http.ResponseWriter, r *http.Request) {
|
||||
if d.binanceMomentumDetector == nil {
|
||||
writeJSON(w, map[string]interface{}{"alerts": []interface{}{}})
|
||||
return
|
||||
}
|
||||
alerts := d.binanceMomentumDetector.RecentAlerts(50)
|
||||
if alerts == nil {
|
||||
alerts = []BinanceAlert{}
|
||||
}
|
||||
writeJSON(w, map[string]interface{}{"alerts": alerts})
|
||||
}
|
||||
|
||||
func writeJSON(w http.ResponseWriter, v interface{}) {
|
||||
w.Header().Set("Content-Type", "application/json")
|
||||
json.NewEncoder(w).Encode(v)
|
||||
|
||||
Reference in New Issue
Block a user