77 "errors"
88 "log/slog"
99 "net/http"
10+ "net/url"
1011 "strings"
1112 "time"
1213)
@@ -16,17 +17,25 @@ func (c *Client) startRealtimeUpdates(ctx context.Context) {
1617 if err != nil {
1718 panic ("Failed to fetch the environment while configuring real-time updates" )
1819 }
20+
1921 env := c .environment .GetEnvironment ()
20- stream_url := c .config .realtimeBaseUrl + "sse/environments/" + env .APIKey + "/stream"
2122 envUpdatedAt := env .UpdatedAt
23+ log := c .log .With ("environment" , env .APIKey , "current_updated_at" , & envUpdatedAt )
24+
25+ streamPath , err := url .JoinPath (c .config .realtimeBaseUrl , "sse/environments" , env .APIKey , "stream" )
26+ if err != nil {
27+ log .Error ("failed to build stream URL" , "error" , err )
28+ panic (err )
29+ }
30+
2231 for {
2332 select {
2433 case <- ctx .Done ():
2534 return
2635 default :
27- resp , err := http .Get (stream_url )
36+ resp , err := http .Get (streamPath )
2837 if err != nil {
29- c . log .Error ("failed to connect to realtime service" , "error" , err )
38+ log .Error ("failed to connect to realtime service" , "error" , err )
3039 continue
3140 }
3241 defer resp .Body .Close ()
@@ -37,11 +46,12 @@ func (c *Client) startRealtimeUpdates(ctx context.Context) {
3746 if strings .HasPrefix (line , "data: " ) {
3847 parsedTime , err := parseUpdatedAtFromSSE (line )
3948 if err != nil {
40- c . log .Error ("failed to parse realtime update event" , "error" , err , "raw_event" , line )
49+ log .Error ("failed to parse realtime update event" , "error" , err , "raw_event" , line )
4150 continue
4251 }
4352 if parsedTime .After (envUpdatedAt ) {
44- c .log .Info ("received update event" ,
53+ log .WithGroup ("event" ).Info ("received update event" ,
54+ slog .Duration ("update_delay" , parsedTime .Sub (envUpdatedAt )),
4555 slog .Time ("updated_at" , parsedTime ),
4656 slog .String ("environment" , env .APIKey ),
4757 )
@@ -59,6 +69,7 @@ func (c *Client) startRealtimeUpdates(ctx context.Context) {
5969 }
6070 }
6171}
72+
6273func parseUpdatedAtFromSSE (line string ) (time.Time , error ) {
6374 var eventData struct {
6475 UpdatedAt float64 `json:"updated_at"`
0 commit comments