refactor: replace logrus with log/slog
This commit is contained in:
parent
56c745d6f5
commit
c940b4a2cd
@ -6,7 +6,6 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/PuerkitoBio/goquery"
|
"github.com/PuerkitoBio/goquery"
|
||||||
"github.com/sirupsen/logrus"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
type Song struct {
|
type Song struct {
|
||||||
@ -49,17 +48,25 @@ type customPerformance struct {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *Song) parseLyrics(doc *goquery.Document) {
|
func (s *Song) parseLyrics(doc *goquery.Document) error {
|
||||||
|
var htmlError error
|
||||||
|
|
||||||
doc.Find("[data-lyrics-container='true']").Each(func(i int, ss *goquery.Selection) {
|
doc.Find("[data-lyrics-container='true']").Each(func(i int, ss *goquery.Selection) {
|
||||||
h, err := ss.Html()
|
h, err := ss.Html()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logrus.Errorln("unable to parse lyrics", err)
|
htmlError = err
|
||||||
}
|
}
|
||||||
s.Lyrics += h
|
s.Lyrics += h
|
||||||
})
|
})
|
||||||
|
|
||||||
|
if htmlError != nil {
|
||||||
|
return htmlError
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *Song) parseSongData(doc *goquery.Document) {
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *Song) parseSongData(doc *goquery.Document) error {
|
||||||
attr, exists := doc.Find("meta[property='twitter:app:url:iphone']").Attr("content")
|
attr, exists := doc.Find("meta[property='twitter:app:url:iphone']").Attr("content")
|
||||||
if exists {
|
if exists {
|
||||||
songID := strings.Replace(attr, "genius://songs/", "", 1)
|
songID := strings.Replace(attr, "genius://songs/", "", 1)
|
||||||
@ -68,7 +75,7 @@ func (s *Song) parseSongData(doc *goquery.Document) {
|
|||||||
|
|
||||||
res, err := sendRequest(u)
|
res, err := sendRequest(u)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logrus.Errorln(err)
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
defer res.Body.Close()
|
defer res.Body.Close()
|
||||||
@ -77,7 +84,7 @@ func (s *Song) parseSongData(doc *goquery.Document) {
|
|||||||
decoder := json.NewDecoder(res.Body)
|
decoder := json.NewDecoder(res.Body)
|
||||||
err = decoder.Decode(&data)
|
err = decoder.Decode(&data)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logrus.Errorln(err)
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
songData := data.Response.Song
|
songData := data.Response.Song
|
||||||
@ -99,6 +106,8 @@ func (s *Song) parseSongData(doc *goquery.Document) {
|
|||||||
s.Credits[perf.Label] = strings.Join(artists, ", ")
|
s.Credits[perf.Label] = strings.Join(artists, ", ")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func truncateText(text string) string {
|
func truncateText(text string) string {
|
||||||
@ -111,7 +120,14 @@ func truncateText(text string) string {
|
|||||||
return text
|
return text
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *Song) Parse(doc *goquery.Document) {
|
func (s *Song) Parse(doc *goquery.Document) error {
|
||||||
s.parseLyrics(doc)
|
if err := s.parseLyrics(doc); err != nil {
|
||||||
s.parseSongData(doc)
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := s.parseSongData(doc); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
1
go.mod
1
go.mod
@ -11,7 +11,6 @@ require (
|
|||||||
github.com/caffix/cloudflare-roundtripper v0.0.0-20181218223503-4c29d231c9cb
|
github.com/caffix/cloudflare-roundtripper v0.0.0-20181218223503-4c29d231c9cb
|
||||||
github.com/gorilla/handlers v1.5.2
|
github.com/gorilla/handlers v1.5.2
|
||||||
github.com/gorilla/mux v1.8.1
|
github.com/gorilla/mux v1.8.1
|
||||||
github.com/sirupsen/logrus v1.9.3
|
|
||||||
)
|
)
|
||||||
|
|
||||||
require (
|
require (
|
||||||
|
4
go.sum
4
go.sum
@ -196,15 +196,12 @@ github.com/shurcooL/reactions v0.0.0-20181006231557-f2e0b4ca5b82/go.mod h1:TCR1l
|
|||||||
github.com/shurcooL/sanitized_anchor_name v0.0.0-20170918181015-86672fcb3f95/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc=
|
github.com/shurcooL/sanitized_anchor_name v0.0.0-20170918181015-86672fcb3f95/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc=
|
||||||
github.com/shurcooL/users v0.0.0-20180125191416-49c67e49c537/go.mod h1:QJTqeLYEDaXHZDBsXlPCDqdhQuJkuw4NOtaxYe3xii4=
|
github.com/shurcooL/users v0.0.0-20180125191416-49c67e49c537/go.mod h1:QJTqeLYEDaXHZDBsXlPCDqdhQuJkuw4NOtaxYe3xii4=
|
||||||
github.com/shurcooL/webdavfs v0.0.0-20170829043945-18c3829fa133/go.mod h1:hKmq5kWdCj2z2KEozexVbfEZIWiTjhE0+UjmZgPqehw=
|
github.com/shurcooL/webdavfs v0.0.0-20170829043945-18c3829fa133/go.mod h1:hKmq5kWdCj2z2KEozexVbfEZIWiTjhE0+UjmZgPqehw=
|
||||||
github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ=
|
|
||||||
github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
|
|
||||||
github.com/sourcegraph/annotate v0.0.0-20160123013949-f4cad6c6324d/go.mod h1:UdhH50NIW0fCiwBSr0co2m7BnFLdv4fQTgdqdJTHFeE=
|
github.com/sourcegraph/annotate v0.0.0-20160123013949-f4cad6c6324d/go.mod h1:UdhH50NIW0fCiwBSr0co2m7BnFLdv4fQTgdqdJTHFeE=
|
||||||
github.com/sourcegraph/syntaxhighlight v0.0.0-20170531221838-bd320f5d308e/go.mod h1:HuIsMU8RRBOtsCgI77wP899iHVBQpCmg4ErYMZB+2IA=
|
github.com/sourcegraph/syntaxhighlight v0.0.0-20170531221838-bd320f5d308e/go.mod h1:HuIsMU8RRBOtsCgI77wP899iHVBQpCmg4ErYMZB+2IA=
|
||||||
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||||
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
|
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
|
||||||
github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
|
github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
|
||||||
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||||
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
|
||||||
github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
|
github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
|
||||||
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
|
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
|
||||||
github.com/tarm/serial v0.0.0-20180830185346-98f6abe2eb07/go.mod h1:kDXzergiv9cbyO7IOYJZWg1U88JhDg3PB6klq9Hg2pA=
|
github.com/tarm/serial v0.0.0-20180830185346-98f6abe2eb07/go.mod h1:kDXzergiv9cbyO7IOYJZWg1U88JhDg3PB6klq9Hg2pA=
|
||||||
@ -312,7 +309,6 @@ golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBc
|
|||||||
golang.org/x/sys v0.0.0-20220319134239-a9b59b0215f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20220319134239-a9b59b0215f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.0.0-20220422013727-9388b58f7150/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20220422013727-9388b58f7150/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
|
||||||
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
|
@ -8,11 +8,11 @@ import (
|
|||||||
"github.com/PuerkitoBio/goquery"
|
"github.com/PuerkitoBio/goquery"
|
||||||
"github.com/gorilla/mux"
|
"github.com/gorilla/mux"
|
||||||
"github.com/rramiachraf/dumb/data"
|
"github.com/rramiachraf/dumb/data"
|
||||||
|
"github.com/rramiachraf/dumb/utils"
|
||||||
"github.com/rramiachraf/dumb/views"
|
"github.com/rramiachraf/dumb/views"
|
||||||
"github.com/sirupsen/logrus"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
func album(l *logrus.Logger) http.HandlerFunc {
|
func album(l *utils.Logger) http.HandlerFunc {
|
||||||
return func(w http.ResponseWriter, r *http.Request) {
|
return func(w http.ResponseWriter, r *http.Request) {
|
||||||
artist := mux.Vars(r)["artist"]
|
artist := mux.Vars(r)["artist"]
|
||||||
albumName := mux.Vars(r)["albumName"]
|
albumName := mux.Vars(r)["albumName"]
|
||||||
@ -28,7 +28,7 @@ func album(l *logrus.Logger) http.HandlerFunc {
|
|||||||
|
|
||||||
resp, err := sendRequest(url)
|
resp, err := sendRequest(url)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
l.Errorln(err)
|
l.Error(err.Error())
|
||||||
w.WriteHeader(http.StatusInternalServerError)
|
w.WriteHeader(http.StatusInternalServerError)
|
||||||
views.ErrorPage(500, "cannot reach Genius servers").Render(context.Background(), w)
|
views.ErrorPage(500, "cannot reach Genius servers").Render(context.Background(), w)
|
||||||
return
|
return
|
||||||
@ -44,7 +44,7 @@ func album(l *logrus.Logger) http.HandlerFunc {
|
|||||||
|
|
||||||
doc, err := goquery.NewDocumentFromReader(resp.Body)
|
doc, err := goquery.NewDocumentFromReader(resp.Body)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
l.Errorln(err)
|
l.Error(err.Error())
|
||||||
w.WriteHeader(http.StatusInternalServerError)
|
w.WriteHeader(http.StatusInternalServerError)
|
||||||
views.ErrorPage(500, "something went wrong").Render(context.Background(), w)
|
views.ErrorPage(500, "something went wrong").Render(context.Background(), w)
|
||||||
return
|
return
|
||||||
@ -52,20 +52,20 @@ func album(l *logrus.Logger) http.HandlerFunc {
|
|||||||
|
|
||||||
cf := doc.Find(".cloudflare_content").Length()
|
cf := doc.Find(".cloudflare_content").Length()
|
||||||
if cf > 0 {
|
if cf > 0 {
|
||||||
l.Errorln("cloudflare got in the way")
|
l.Error("cloudflare got in the way")
|
||||||
views.ErrorPage(500, "i'll fix this later #21").Render(context.Background(), w)
|
views.ErrorPage(500, "i'll fix this later #21").Render(context.Background(), w)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
var a data.Album
|
var a data.Album
|
||||||
if err = a.Parse(doc); err != nil {
|
if err = a.Parse(doc); err != nil {
|
||||||
l.Error(err)
|
l.Error(err.Error())
|
||||||
}
|
}
|
||||||
|
|
||||||
views.AlbumPage(a).Render(context.Background(), w)
|
views.AlbumPage(a).Render(context.Background(), w)
|
||||||
|
|
||||||
if err = setCache(id, a); err != nil {
|
if err = setCache(id, a); err != nil {
|
||||||
l.Errorln(err)
|
l.Error(err.Error())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3,10 +3,12 @@ package handlers
|
|||||||
import (
|
import (
|
||||||
"net/http"
|
"net/http"
|
||||||
"net/http/httptest"
|
"net/http/httptest"
|
||||||
|
"os"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/PuerkitoBio/goquery"
|
"github.com/PuerkitoBio/goquery"
|
||||||
"github.com/sirupsen/logrus"
|
|
||||||
|
"github.com/rramiachraf/dumb/utils"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestAlbum(t *testing.T) {
|
func TestAlbum(t *testing.T) {
|
||||||
@ -19,7 +21,7 @@ func TestAlbum(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
rr := httptest.NewRecorder()
|
rr := httptest.NewRecorder()
|
||||||
l := logrus.New()
|
l := utils.NewLogger(os.Stdout)
|
||||||
m := New(l)
|
m := New(l)
|
||||||
|
|
||||||
m.ServeHTTP(rr, r)
|
m.ServeHTTP(rr, r)
|
||||||
|
@ -12,11 +12,11 @@ import (
|
|||||||
"github.com/PuerkitoBio/goquery"
|
"github.com/PuerkitoBio/goquery"
|
||||||
"github.com/gorilla/mux"
|
"github.com/gorilla/mux"
|
||||||
"github.com/rramiachraf/dumb/data"
|
"github.com/rramiachraf/dumb/data"
|
||||||
|
"github.com/rramiachraf/dumb/utils"
|
||||||
"github.com/rramiachraf/dumb/views"
|
"github.com/rramiachraf/dumb/views"
|
||||||
"github.com/sirupsen/logrus"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
func annotations(l *logrus.Logger) http.HandlerFunc {
|
func annotations(l *utils.Logger) http.HandlerFunc {
|
||||||
return func(w http.ResponseWriter, r *http.Request) {
|
return func(w http.ResponseWriter, r *http.Request) {
|
||||||
id := mux.Vars(r)["annotation-id"]
|
id := mux.Vars(r)["annotation-id"]
|
||||||
if a, err := getCache[data.Annotation]("annotation:" + id); err == nil {
|
if a, err := getCache[data.Annotation]("annotation:" + id); err == nil {
|
||||||
@ -24,7 +24,7 @@ func annotations(l *logrus.Logger) http.HandlerFunc {
|
|||||||
|
|
||||||
w.Header().Set("content-type", "application/json")
|
w.Header().Set("content-type", "application/json")
|
||||||
if err = encoder.Encode(&a); err != nil {
|
if err = encoder.Encode(&a); err != nil {
|
||||||
l.Errorln(err)
|
l.Error(err.Error())
|
||||||
}
|
}
|
||||||
|
|
||||||
return
|
return
|
||||||
@ -34,7 +34,7 @@ func annotations(l *logrus.Logger) http.HandlerFunc {
|
|||||||
resp, err := sendRequest(url)
|
resp, err := sendRequest(url)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
l.Errorln(err)
|
l.Error(err.Error())
|
||||||
w.WriteHeader(http.StatusInternalServerError)
|
w.WriteHeader(http.StatusInternalServerError)
|
||||||
views.ErrorPage(500, "cannot reach genius servers").Render(context.Background(), w)
|
views.ErrorPage(500, "cannot reach genius servers").Render(context.Background(), w)
|
||||||
return
|
return
|
||||||
@ -51,7 +51,7 @@ func annotations(l *logrus.Logger) http.HandlerFunc {
|
|||||||
buf := new(bytes.Buffer)
|
buf := new(bytes.Buffer)
|
||||||
_, err = buf.ReadFrom(resp.Body)
|
_, err = buf.ReadFrom(resp.Body)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
l.Errorln("Error paring genius api response", err)
|
l.Error("Error paring genius api response: %s", err.Error())
|
||||||
w.WriteHeader(http.StatusInternalServerError)
|
w.WriteHeader(http.StatusInternalServerError)
|
||||||
views.ErrorPage(500, "something went wrong").Render(context.Background(), w)
|
views.ErrorPage(500, "something went wrong").Render(context.Background(), w)
|
||||||
return
|
return
|
||||||
@ -60,7 +60,7 @@ func annotations(l *logrus.Logger) http.HandlerFunc {
|
|||||||
var data data.AnnotationsResponse
|
var data data.AnnotationsResponse
|
||||||
err = json.Unmarshal(buf.Bytes(), &data)
|
err = json.Unmarshal(buf.Bytes(), &data)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
l.Errorf("could not unmarshal json: %s\n", err)
|
l.Error("could not unmarshal json: %s\n", err)
|
||||||
w.WriteHeader(http.StatusInternalServerError)
|
w.WriteHeader(http.StatusInternalServerError)
|
||||||
views.ErrorPage(500, "something went wrong").Render(context.Background(), w)
|
views.ErrorPage(500, "something went wrong").Render(context.Background(), w)
|
||||||
return
|
return
|
||||||
@ -73,12 +73,12 @@ func annotations(l *logrus.Logger) http.HandlerFunc {
|
|||||||
encoder := json.NewEncoder(w)
|
encoder := json.NewEncoder(w)
|
||||||
|
|
||||||
if err = encoder.Encode(&body); err != nil {
|
if err = encoder.Encode(&body); err != nil {
|
||||||
l.Errorln("Error sending response: ", err)
|
l.Error("Error sending response: %s", err.Error())
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if err = setCache("annotation:"+id, body); err != nil {
|
if err = setCache("annotation:"+id, body); err != nil {
|
||||||
l.Errorln(err)
|
l.Error(err.Error())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -4,9 +4,10 @@ import (
|
|||||||
"encoding/json"
|
"encoding/json"
|
||||||
"net/http"
|
"net/http"
|
||||||
"net/http/httptest"
|
"net/http/httptest"
|
||||||
|
"os"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/sirupsen/logrus"
|
"github.com/rramiachraf/dumb/utils"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestAnnotations(t *testing.T) {
|
func TestAnnotations(t *testing.T) {
|
||||||
@ -18,7 +19,7 @@ func TestAnnotations(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
rr := httptest.NewRecorder()
|
rr := httptest.NewRecorder()
|
||||||
l := logrus.New()
|
l := utils.NewLogger(os.Stdout)
|
||||||
m := New(l)
|
m := New(l)
|
||||||
|
|
||||||
m.ServeHTTP(rr, r)
|
m.ServeHTTP(rr, r)
|
||||||
|
@ -7,11 +7,11 @@ import (
|
|||||||
"github.com/a-h/templ"
|
"github.com/a-h/templ"
|
||||||
gorillaHandlers "github.com/gorilla/handlers"
|
gorillaHandlers "github.com/gorilla/handlers"
|
||||||
"github.com/gorilla/mux"
|
"github.com/gorilla/mux"
|
||||||
|
"github.com/rramiachraf/dumb/utils"
|
||||||
"github.com/rramiachraf/dumb/views"
|
"github.com/rramiachraf/dumb/views"
|
||||||
"github.com/sirupsen/logrus"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
func New(logger *logrus.Logger) *mux.Router {
|
func New(logger *utils.Logger) *mux.Router {
|
||||||
r := mux.NewRouter()
|
r := mux.NewRouter()
|
||||||
|
|
||||||
r.Use(mustHeaders)
|
r.Use(mustHeaders)
|
||||||
|
@ -5,22 +5,22 @@ import (
|
|||||||
"io"
|
"io"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
|
||||||
|
"github.com/rramiachraf/dumb/utils"
|
||||||
"github.com/rramiachraf/dumb/views"
|
"github.com/rramiachraf/dumb/views"
|
||||||
"github.com/sirupsen/logrus"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
const ContentTypeJSON = "application/json"
|
const ContentTypeJSON = "application/json"
|
||||||
|
|
||||||
// TODO: move this to utils, so it can be used by other handlers.
|
// TODO: move this to utils, so it can be used by other handlers.
|
||||||
func sendError(err error, status int, msg string, l *logrus.Logger, w http.ResponseWriter) {
|
func sendError(err error, status int, msg string, l *utils.Logger, w http.ResponseWriter) {
|
||||||
l.Errorln(err)
|
l.Error(err.Error())
|
||||||
w.WriteHeader(status)
|
w.WriteHeader(status)
|
||||||
if err := views.ErrorPage(status, msg).Render(context.Background(), w); err != nil {
|
if err := views.ErrorPage(status, msg).Render(context.Background(), w); err != nil {
|
||||||
l.Errorln(err)
|
l.Error(err.Error())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func instances(l *logrus.Logger) http.HandlerFunc {
|
func instances(l *utils.Logger) http.HandlerFunc {
|
||||||
return func(w http.ResponseWriter, r *http.Request) {
|
return func(w http.ResponseWriter, r *http.Request) {
|
||||||
if instances, err := getCache[[]byte]("instances"); err == nil {
|
if instances, err := getCache[[]byte]("instances"); err == nil {
|
||||||
w.Header().Set("content-type", ContentTypeJSON)
|
w.Header().Set("content-type", ContentTypeJSON)
|
||||||
@ -46,11 +46,11 @@ func instances(l *logrus.Logger) http.HandlerFunc {
|
|||||||
|
|
||||||
w.Header().Set("content-type", ContentTypeJSON)
|
w.Header().Set("content-type", ContentTypeJSON)
|
||||||
if _, err = w.Write(instances); err != nil {
|
if _, err = w.Write(instances); err != nil {
|
||||||
l.Errorln(err)
|
l.Error(err.Error())
|
||||||
}
|
}
|
||||||
|
|
||||||
if err = setCache("instances", instances); err != nil {
|
if err = setCache("instances", instances); err != nil {
|
||||||
l.Errorln(err)
|
l.Error(err.Error())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -4,9 +4,10 @@ import (
|
|||||||
"encoding/json"
|
"encoding/json"
|
||||||
"net/http"
|
"net/http"
|
||||||
"net/http/httptest"
|
"net/http/httptest"
|
||||||
|
"os"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/sirupsen/logrus"
|
"github.com/rramiachraf/dumb/utils"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestInstancesList(t *testing.T) {
|
func TestInstancesList(t *testing.T) {
|
||||||
@ -16,7 +17,7 @@ func TestInstancesList(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
rr := httptest.NewRecorder()
|
rr := httptest.NewRecorder()
|
||||||
l := logrus.New()
|
l := utils.NewLogger(os.Stdout)
|
||||||
|
|
||||||
m := New(l)
|
m := New(l)
|
||||||
m.ServeHTTP(rr, r)
|
m.ServeHTTP(rr, r)
|
||||||
|
@ -8,11 +8,11 @@ import (
|
|||||||
"github.com/PuerkitoBio/goquery"
|
"github.com/PuerkitoBio/goquery"
|
||||||
"github.com/gorilla/mux"
|
"github.com/gorilla/mux"
|
||||||
"github.com/rramiachraf/dumb/data"
|
"github.com/rramiachraf/dumb/data"
|
||||||
|
"github.com/rramiachraf/dumb/utils"
|
||||||
"github.com/rramiachraf/dumb/views"
|
"github.com/rramiachraf/dumb/views"
|
||||||
"github.com/sirupsen/logrus"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
func lyrics(l *logrus.Logger) http.HandlerFunc {
|
func lyrics(l *utils.Logger) http.HandlerFunc {
|
||||||
return func(w http.ResponseWriter, r *http.Request) {
|
return func(w http.ResponseWriter, r *http.Request) {
|
||||||
// prefer artist-song over annotation-id for cache key when available
|
// prefer artist-song over annotation-id for cache key when available
|
||||||
id := mux.Vars(r)["artist-song"]
|
id := mux.Vars(r)["artist-song"]
|
||||||
@ -30,7 +30,7 @@ func lyrics(l *logrus.Logger) http.HandlerFunc {
|
|||||||
url := fmt.Sprintf("https://genius.com/%s", id)
|
url := fmt.Sprintf("https://genius.com/%s", id)
|
||||||
resp, err := sendRequest(url)
|
resp, err := sendRequest(url)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
l.Errorln(err)
|
l.Error(err.Error())
|
||||||
w.WriteHeader(http.StatusInternalServerError)
|
w.WriteHeader(http.StatusInternalServerError)
|
||||||
views.ErrorPage(500, "cannot reach Genius servers").Render(context.Background(), w)
|
views.ErrorPage(500, "cannot reach Genius servers").Render(context.Background(), w)
|
||||||
return
|
return
|
||||||
@ -46,7 +46,7 @@ func lyrics(l *logrus.Logger) http.HandlerFunc {
|
|||||||
|
|
||||||
doc, err := goquery.NewDocumentFromReader(resp.Body)
|
doc, err := goquery.NewDocumentFromReader(resp.Body)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
l.Errorln(err)
|
l.Error(err.Error())
|
||||||
w.WriteHeader(http.StatusInternalServerError)
|
w.WriteHeader(http.StatusInternalServerError)
|
||||||
views.ErrorPage(500, "something went wrong").Render(context.Background(), w)
|
views.ErrorPage(500, "something went wrong").Render(context.Background(), w)
|
||||||
return
|
return
|
||||||
@ -54,17 +54,19 @@ func lyrics(l *logrus.Logger) http.HandlerFunc {
|
|||||||
|
|
||||||
cf := doc.Find(".cloudflare_content").Length()
|
cf := doc.Find(".cloudflare_content").Length()
|
||||||
if cf > 0 {
|
if cf > 0 {
|
||||||
l.Errorln("cloudflare got in the way")
|
l.Error("cloudflare got in the way")
|
||||||
views.ErrorPage(500, "TODO: fix Cloudflare #21").Render(context.Background(), w)
|
views.ErrorPage(500, "TODO: fix Cloudflare #21").Render(context.Background(), w)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
var s data.Song
|
var s data.Song
|
||||||
s.Parse(doc)
|
if err := s.Parse(doc); err != nil {
|
||||||
|
l.Error(err.Error())
|
||||||
|
}
|
||||||
|
|
||||||
views.LyricsPage(s).Render(context.Background(), w)
|
views.LyricsPage(s).Render(context.Background(), w)
|
||||||
if err = setCache(id, s); err != nil {
|
if err = setCache(id, s); err != nil {
|
||||||
l.Errorln(err)
|
l.Error(err.Error())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3,10 +3,11 @@ package handlers
|
|||||||
import (
|
import (
|
||||||
"net/http"
|
"net/http"
|
||||||
"net/http/httptest"
|
"net/http/httptest"
|
||||||
|
"os"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/PuerkitoBio/goquery"
|
"github.com/PuerkitoBio/goquery"
|
||||||
"github.com/sirupsen/logrus"
|
"github.com/rramiachraf/dumb/utils"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestLyrics(t *testing.T) {
|
func TestLyrics(t *testing.T) {
|
||||||
@ -31,7 +32,7 @@ func testLyrics(t *testing.T, url string) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
rr := httptest.NewRecorder()
|
rr := httptest.NewRecorder()
|
||||||
l := logrus.New()
|
l := utils.NewLogger(os.Stdout)
|
||||||
m := New(l)
|
m := New(l)
|
||||||
|
|
||||||
m.ServeHTTP(rr, r)
|
m.ServeHTTP(rr, r)
|
||||||
|
@ -9,8 +9,8 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/gorilla/mux"
|
"github.com/gorilla/mux"
|
||||||
|
"github.com/rramiachraf/dumb/utils"
|
||||||
"github.com/rramiachraf/dumb/views"
|
"github.com/rramiachraf/dumb/views"
|
||||||
"github.com/sirupsen/logrus"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
func isValidExt(ext string) bool {
|
func isValidExt(ext string) bool {
|
||||||
@ -24,7 +24,7 @@ func isValidExt(ext string) bool {
|
|||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
func imageProxy(l *logrus.Logger) http.HandlerFunc {
|
func imageProxy(l *utils.Logger) http.HandlerFunc {
|
||||||
return func(w http.ResponseWriter, r *http.Request) {
|
return func(w http.ResponseWriter, r *http.Request) {
|
||||||
v := mux.Vars(r)
|
v := mux.Vars(r)
|
||||||
f := v["filename"]
|
f := v["filename"]
|
||||||
@ -41,7 +41,7 @@ func imageProxy(l *logrus.Logger) http.HandlerFunc {
|
|||||||
|
|
||||||
res, err := sendRequest(url)
|
res, err := sendRequest(url)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
l.Errorln(err)
|
l.Error(err.Error())
|
||||||
w.WriteHeader(http.StatusInternalServerError)
|
w.WriteHeader(http.StatusInternalServerError)
|
||||||
views.ErrorPage(500, "cannot reach Genius servers").Render(context.Background(), w)
|
views.ErrorPage(500, "cannot reach Genius servers").Render(context.Background(), w)
|
||||||
return
|
return
|
||||||
@ -56,7 +56,7 @@ func imageProxy(l *logrus.Logger) http.HandlerFunc {
|
|||||||
w.Header().Add("Content-type", mime.TypeByExtension("."+ext))
|
w.Header().Add("Content-type", mime.TypeByExtension("."+ext))
|
||||||
w.Header().Add("Cache-Control", "max-age=1296000")
|
w.Header().Add("Cache-Control", "max-age=1296000")
|
||||||
if _, err = io.Copy(w, res.Body); err != nil {
|
if _, err = io.Copy(w, res.Body); err != nil {
|
||||||
l.Errorln("unable to write image", err)
|
l.Error("unable to write image, %s", err.Error())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -4,9 +4,10 @@ import (
|
|||||||
"mime"
|
"mime"
|
||||||
"net/http"
|
"net/http"
|
||||||
"net/http/httptest"
|
"net/http/httptest"
|
||||||
|
"os"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/sirupsen/logrus"
|
"github.com/rramiachraf/dumb/utils"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestImageProxy(t *testing.T) {
|
func TestImageProxy(t *testing.T) {
|
||||||
@ -18,7 +19,7 @@ func TestImageProxy(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
rr := httptest.NewRecorder()
|
rr := httptest.NewRecorder()
|
||||||
l := logrus.New()
|
l := utils.NewLogger(os.Stdout)
|
||||||
m := New(l)
|
m := New(l)
|
||||||
|
|
||||||
m.ServeHTTP(rr, r)
|
m.ServeHTTP(rr, r)
|
||||||
|
@ -8,18 +8,18 @@ import (
|
|||||||
"net/url"
|
"net/url"
|
||||||
|
|
||||||
"github.com/rramiachraf/dumb/data"
|
"github.com/rramiachraf/dumb/data"
|
||||||
|
"github.com/rramiachraf/dumb/utils"
|
||||||
"github.com/rramiachraf/dumb/views"
|
"github.com/rramiachraf/dumb/views"
|
||||||
"github.com/sirupsen/logrus"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
func search(l *logrus.Logger) http.HandlerFunc {
|
func search(l *utils.Logger) http.HandlerFunc {
|
||||||
return func(w http.ResponseWriter, r *http.Request) {
|
return func(w http.ResponseWriter, r *http.Request) {
|
||||||
query := r.URL.Query().Get("q")
|
query := r.URL.Query().Get("q")
|
||||||
url := fmt.Sprintf(`https://genius.com/api/search/multi?q=%s`, url.QueryEscape(query))
|
url := fmt.Sprintf(`https://genius.com/api/search/multi?q=%s`, url.QueryEscape(query))
|
||||||
|
|
||||||
res, err := sendRequest(url)
|
res, err := sendRequest(url)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
l.Errorln(err)
|
l.Error(err.Error())
|
||||||
w.WriteHeader(http.StatusInternalServerError)
|
w.WriteHeader(http.StatusInternalServerError)
|
||||||
views.ErrorPage(500, "cannot reach Genius servers").Render(context.Background(), w)
|
views.ErrorPage(500, "cannot reach Genius servers").Render(context.Background(), w)
|
||||||
return
|
return
|
||||||
@ -31,7 +31,7 @@ func search(l *logrus.Logger) http.HandlerFunc {
|
|||||||
|
|
||||||
d := json.NewDecoder(res.Body)
|
d := json.NewDecoder(res.Body)
|
||||||
if err = d.Decode(&sRes); err != nil {
|
if err = d.Decode(&sRes); err != nil {
|
||||||
l.Errorln(err)
|
l.Error(err.Error())
|
||||||
w.WriteHeader(http.StatusInternalServerError)
|
w.WriteHeader(http.StatusInternalServerError)
|
||||||
views.ErrorPage(500, "something went wrong").Render(context.Background(), w)
|
views.ErrorPage(500, "something went wrong").Render(context.Background(), w)
|
||||||
}
|
}
|
||||||
|
@ -3,10 +3,11 @@ package handlers
|
|||||||
import (
|
import (
|
||||||
"net/http"
|
"net/http"
|
||||||
"net/http/httptest"
|
"net/http/httptest"
|
||||||
|
"os"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/PuerkitoBio/goquery"
|
"github.com/PuerkitoBio/goquery"
|
||||||
"github.com/sirupsen/logrus"
|
"github.com/rramiachraf/dumb/utils"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestSearch(t *testing.T) {
|
func TestSearch(t *testing.T) {
|
||||||
@ -19,7 +20,7 @@ func TestSearch(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
rr := httptest.NewRecorder()
|
rr := httptest.NewRecorder()
|
||||||
l := logrus.New()
|
l := utils.NewLogger(os.Stdout)
|
||||||
m := New(l)
|
m := New(l)
|
||||||
|
|
||||||
m.ServeHTTP(rr, r)
|
m.ServeHTTP(rr, r)
|
||||||
|
14
main.go
14
main.go
@ -9,11 +9,11 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/rramiachraf/dumb/handlers"
|
"github.com/rramiachraf/dumb/handlers"
|
||||||
"github.com/sirupsen/logrus"
|
"github.com/rramiachraf/dumb/utils"
|
||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
var logger = logrus.New()
|
logger := utils.NewLogger(os.Stdout)
|
||||||
|
|
||||||
server := &http.Server{
|
server := &http.Server{
|
||||||
Handler: handlers.New(logger),
|
Handler: handlers.New(logger),
|
||||||
@ -25,14 +25,18 @@ func main() {
|
|||||||
|
|
||||||
if port == 0 {
|
if port == 0 {
|
||||||
port = 5555
|
port = 5555
|
||||||
|
logger.Info("using default port %d", port)
|
||||||
}
|
}
|
||||||
|
|
||||||
l, err := net.Listen("tcp", fmt.Sprintf(":%d", port))
|
l, err := net.Listen("tcp", fmt.Sprintf(":%d", port))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Fatalln(err)
|
logger.Error(err.Error())
|
||||||
}
|
}
|
||||||
|
|
||||||
logger.Infof("server is listening on port %d\n", port)
|
logger.Info("server is listening on port %d", port)
|
||||||
|
|
||||||
logger.Fatalln(server.Serve(l))
|
if err := server.Serve(l); err != nil {
|
||||||
|
logger.Error(err.Error())
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
26
utils/logger.go
Normal file
26
utils/logger.go
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
package utils
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"io"
|
||||||
|
"log/slog"
|
||||||
|
)
|
||||||
|
|
||||||
|
type Logger struct {
|
||||||
|
slog *slog.Logger
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewLogger(w io.WriteCloser) *Logger {
|
||||||
|
handler := slog.NewTextHandler(w, &slog.HandlerOptions{})
|
||||||
|
sl := slog.New(handler)
|
||||||
|
|
||||||
|
return &Logger{slog: sl}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (l *Logger) Error(f string, args ...any) {
|
||||||
|
l.slog.Error(fmt.Sprintf(f, args...))
|
||||||
|
}
|
||||||
|
|
||||||
|
func (l *Logger) Info(f string, args ...any) {
|
||||||
|
l.slog.Info(fmt.Sprintf(f, args...))
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user