added logging

This commit is contained in:
overflowerror 2021-08-14 14:35:45 +02:00
parent 7e853da63d
commit 9ce408f9c0
6 changed files with 52 additions and 29 deletions

View file

@ -3,6 +3,9 @@ package main
import (
"flag"
"fmt"
"github.com/google/logger"
"log"
"os"
"threadule/backend/internal/app"
"threadule/backend/internal/config"
"threadule/backend/internal/data"
@ -24,28 +27,27 @@ func main() {
}
ctx := &app.Context{
Config: cfg,
Config: cfg,
Log: logger.Init("default", false, true, os.Stderr),
AccessLog: log.New(os.Stdout, "access", log.Ldate|log.Lmicroseconds|log.Lmsgprefix),
}
ctx.Logic, err = logic.Setup(ctx)
if err != nil {
fmt.Println("couldn't setup logic layer")
fmt.Println(err)
return
ctx.Log.Error("couldn't setup logic layer")
ctx.Log.Fatal(err)
}
ctx.Data, err = data.Setup(ctx)
if err != nil {
fmt.Println("couldn't setup persistence layer")
fmt.Println(err)
return
ctx.Log.Error("couldn't setup persistence layer")
ctx.Log.Fatal(err)
}
handler := router.Setup(ctx)
err = web.StartServer(ctx, handler)
if err != nil {
fmt.Println("couldn't start web server")
fmt.Println(err)
return
ctx.Log.Error("couldn't start web server")
ctx.Log.Fatal(err)
}
}

View file

@ -5,6 +5,7 @@ go 1.16
require (
github.com/dghubble/go-twitter v0.0.0-20210609183100-2fdbf421508e
github.com/dghubble/oauth1 v0.7.0
github.com/google/logger v1.1.1
github.com/julienschmidt/httprouter v1.3.0
github.com/kr/pretty v0.1.0 // indirect
github.com/pelletier/go-toml/v2 v2.0.0-beta.3

View file

@ -12,6 +12,8 @@ github.com/go-sql-driver/mysql v1.6.0 h1:BCTh4TKNUYmOmMUcQ3IipzF5prigylS7XXjEkfC
github.com/go-sql-driver/mysql v1.6.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg=
github.com/google/go-querystring v1.0.0 h1:Xkwi/a1rcvNg1PPYe5vI8GbeBY/jrVuDX5ASuANWTrk=
github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck=
github.com/google/logger v1.1.1 h1:+6Z2geNxc9G+4D4oDO9njjjn2d0wN5d7uOo0vOIW1NQ=
github.com/google/logger v1.1.1/go.mod h1:BkeJZ+1FhQ+/d087r4dzojEg1u2ZX+ZqG1jTUrLM+zQ=
github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E=
github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc=
github.com/jinzhu/now v1.1.2 h1:eVKgfIdy9b6zbWBMgFpfDPoAMifwSZagU9HmEU6zgiI=
@ -33,6 +35,8 @@ github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
github.com/stretchr/testify v1.7.1-0.20210427113832-6241f9ab9942 h1:t0lM6y/M5IiUZyvbBTcngso8SZEZICH7is9B6g/obVU=
github.com/stretchr/testify v1.7.1-0.20210427113832-6241f9ab9942/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
golang.org/x/sys v0.0.0-20210426230700-d19ff857e887 h1:dXfMednGJh/SUUFjTLsWJz3P+TQt9qnR11GgeI3vWKs=
golang.org/x/sys v0.0.0-20210426230700-d19ff857e887/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=

View file

@ -1,9 +1,15 @@
package app
import "threadule/backend/internal/config"
import (
"github.com/google/logger"
"log"
"threadule/backend/internal/config"
)
type Context struct {
Config *config.Config
Logic Logic
Data Data
Config *config.Config
Log *logger.Logger
AccessLog *log.Logger
Logic Logic
Data Data
}

View file

@ -15,19 +15,22 @@ func (l *Logic) sendTweet(client *twitter.Client, tweet *models.Tweet, prevId in
)
if err != nil {
l.ctx.Log.Warningf("couldn't send tweet: %v", err)
tweet.Status = models.TweetFailed
errorString := new(string)
*errorString = err.Error()
tweet.Error = errorString
_ = l.ctx.Data.UpdateTweet(tweet)
// TODO log data error
err2 := l.ctx.Data.UpdateTweet(tweet)
if err2 != nil {
l.ctx.Log.Errorf("couldn't update tweet in DB: %v", err2)
}
return 0, err
}
tweet.Status = models.TweetDone
_ = l.ctx.Data.UpdateTweet(tweet)
// TODO log data error
err = l.ctx.Data.UpdateTweet(tweet)
l.ctx.Log.Errorf("couldn't update tweet in DB: %v", err)
return status.ID, nil
}
@ -50,18 +53,19 @@ func (l *Logic) sendThread(thread *models.Thread) {
client := l.getTwitterClient(thread.Account)
thread.Status = models.ThreadProcessing
_ = l.ctx.Data.UpdateThread(thread)
// TODO log data error
err := l.ctx.Data.UpdateThread(thread)
l.ctx.Log.Errorf("couldn't update thread in DB: %v", err)
tweets, err := l.ctx.Data.GetTweetsForThread(thread)
if err != nil {
// TODO log error
l.ctx.Log.Errorf("couldn't get tweets from DB: %v", err)
errorString := new(string)
*errorString = err.Error()
thread.Status = models.ThreadFailed
thread.Error = errorString
_ = l.ctx.Data.UpdateThread(thread)
// TODO log error
err = l.ctx.Data.UpdateThread(thread)
l.ctx.Log.Errorf("couldn't update thread in DB: %v", err)
return
}
@ -82,7 +86,7 @@ func (l *Logic) sendThread(thread *models.Thread) {
for _, id := range tweetIds {
_, _, err = client.Statuses.Destroy(id, nil)
if err != nil {
// TODO log error
l.ctx.Log.Errorf("couldn't destroy tweets: %v", err)
}
}
@ -94,19 +98,21 @@ func (l *Logic) sendThread(thread *models.Thread) {
thread.Error = errorString
}
_ = l.ctx.Data.UpdateThread(thread)
// TODO log data error
err = l.ctx.Data.UpdateThread(thread)
l.ctx.Log.Errorf("couldn't update thread in DB: %v", err)
return
}
thread.Status = models.ThreadDone
_ = l.ctx.Data.UpdateThread(thread)
// TODO log data error
err = l.ctx.Data.UpdateThread(thread)
l.ctx.Log.Errorf("couldn't update thread in DB: %v", err)
}
func (l *Logic) scheduleTrigger() {
threads, err := l.ctx.Data.GetScheduledThreads()
if err != nil {
// TODO log error
l.ctx.Log.Errorf("couldn't get scheduled threads from DB: %v", err)
return
}

View file

@ -5,16 +5,20 @@ import (
"net/http"
"threadule/backend/internal/app"
"threadule/backend/internal/web"
"time"
)
func ctxWrapper(appCtx *app.Context, handler web.Handler) httprouter.Handle {
return func(writer http.ResponseWriter, request *http.Request, params httprouter.Params) {
start := time.Now()
handler(&web.Context{
Response: writer,
Request: request,
Params: params,
AppCtx: appCtx,
})
end := time.Now()
appCtx.AccessLog.Printf("%s %s; %lld ms", request.Method, request.URL.String(), end.Sub(start).Milliseconds())
}
}