33 lines
728 B
Go
33 lines
728 B
Go
package app
|
|
|
|
import (
|
|
"net/http"
|
|
eventstreampkg "selective-vpn-api/app/eventstream"
|
|
"time"
|
|
)
|
|
|
|
func parseSinceID(r *http.Request) int64 {
|
|
return eventstreampkg.ParseSinceID(r)
|
|
}
|
|
|
|
func handleEventsStream(w http.ResponseWriter, r *http.Request) {
|
|
heartbeat := time.Duration(envInt("SVPN_EVENTS_HEARTBEAT_SEC", defaultHeartbeatSeconds)) * time.Second
|
|
eventstreampkg.Serve(
|
|
w,
|
|
r,
|
|
500*time.Millisecond,
|
|
heartbeat,
|
|
func(since int64) []eventstreampkg.Event {
|
|
raw := events.since(since)
|
|
if len(raw) == 0 {
|
|
return nil
|
|
}
|
|
out := make([]eventstreampkg.Event, 0, len(raw))
|
|
for _, ev := range raw {
|
|
out = append(out, eventstreampkg.Event{ID: ev.ID, Kind: ev.Kind, Data: ev})
|
|
}
|
|
return out
|
|
},
|
|
)
|
|
}
|