From 70580298d20976284dd43d731b433291ae0d45dd Mon Sep 17 00:00:00 2001 From: "Alexander \"Arav\" Andreev" Date: Thu, 31 Mar 2022 15:39:51 +0400 Subject: [PATCH] Rewrote LastSong handler using caching IcecastLastSong function. And IcecastLastPlayedSongs is using cache as well. Now it takes between 300 nanoseconds to 2 microseconds to get a list of last songs. --- internal/handlers/handlers.go | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/internal/handlers/handlers.go b/internal/handlers/handlers.go index 3bed37e..7cec992 100644 --- a/internal/handlers/handlers.go +++ b/internal/handlers/handlers.go @@ -113,22 +113,22 @@ func (h *RadioHandlers) Stats(w http.ResponseWriter, r *http.Request) { } func (h *RadioHandlers) LastSong(w http.ResponseWriter, r *http.Request) { - songs, err := radio.IcecastLastPlayedSongs(1, h.conf.Icecast.Playlist) + song, err := radio.IcecastLastSong(h.conf.Icecast.Playlist) if err != nil { h.logErr.Println("cannot retrieve last songs:", err) } - if len(songs) == 0 { + if song.Artist == "" { w.WriteHeader(http.StatusNotFound) return } - if tim, err := time.Parse("15:04-0700", songs[0].Time); err == nil { - songs[0].Time = utils.ToClientTimezone(tim, r).Format("15:04") + if tim, err := time.Parse("15:04-0700", song.Time); err == nil { + song.Time = utils.ToClientTimezone(tim, r).Format("15:04") } w.Header().Add("Content-Type", "application/json") - json.NewEncoder(w).Encode(songs[0]) + json.NewEncoder(w).Encode(song) } func (h *RadioHandlers) Playlist(w http.ResponseWriter, _ *http.Request) {