Skip to content

Commit

Permalink
Introduce structured logging (#37)
Browse files Browse the repository at this point in the history
* deps added

* slog added

* slog added

* slog added

* slog added

* slog added

* slog added

* slog added

* slog added

* slog added

* slog added

* slog added

* slog added

* slog added

* userid vasr

* import fixes

* simple verbiage

---------

Co-authored-by: Josh Smith <[email protected]>
  • Loading branch information
metal-face and cmyui authored Nov 11, 2023
1 parent 712e110 commit c629ca4
Show file tree
Hide file tree
Showing 15 changed files with 58 additions and 40 deletions.
5 changes: 3 additions & 2 deletions app/method.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,13 @@ package app

import (
"encoding/json"
"fmt"
"reflect"
"regexp"
"strings"
"unsafe"

"golang.org/x/exp/slog"

"github.com/osuAkatsuki/akatsuki-api/common"
"github.com/valyala/fasthttp"
)
Expand Down Expand Up @@ -102,7 +103,7 @@ var callbackJSONP = regexp.MustCompile(`^[a-zA-Z_\$][a-zA-Z0-9_\$]*$`)
func mkjson(c *fasthttp.RequestCtx, data interface{}) {
exported, err := json.MarshalIndent(data, "", "\t")
if err != nil {
fmt.Println(err)
slog.Error("Error marshalling JSON", "error", err.Error())
exported = []byte(`{ "code": 500, "message": "something has gone really really really really really really wrong." }`)
}
cb := string(c.URI().QueryArgs().Peek("callback"))
Expand Down
3 changes: 2 additions & 1 deletion app/tokens.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import (
"crypto/sha256"
"database/sql"
"fmt"
"golang.org/x/exp/slog"
"time"

"github.com/jmoiron/sqlx"
Expand Down Expand Up @@ -81,7 +82,7 @@ func tokenUpdater(db *sqlx.DB) {
q = db.Rebind(q)
_, err := db.Exec(q, a...)
if err != nil {
fmt.Println(err)
slog.Error("Error updating tokens", "error", err.Error())
}
}
}
Expand Down
3 changes: 2 additions & 1 deletion app/v1/manage_user.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import (
"database/sql"
"encoding/json"
"fmt"
"golang.org/x/exp/slog"
"strings"
"time"

Expand Down Expand Up @@ -67,7 +68,7 @@ type userEditData struct {
func UserEditPOST(md common.MethodData) common.CodeMessager {
var data userEditData
if err := md.Unmarshal(&data); err != nil {
fmt.Println(err)
slog.Error("Error unmarshalling", "error", err.Error())
return ErrBadJSON
}

Expand Down
16 changes: 9 additions & 7 deletions app/v1/meta_linux.go
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
//go:build !windows
// +build !windows

// TODO: Make all these methods POST
Expand All @@ -7,12 +8,13 @@ package v1
import (
"io"
"io/ioutil"
"log"
"os"
"os/exec"
"syscall"
"time"

"golang.org/x/exp/slog"

"github.com/osuAkatsuki/akatsuki-api/common"
)

Expand Down Expand Up @@ -67,7 +69,7 @@ func MetaUpdateGET(md common.MethodData) common.CodeMessager {

proc, err := os.FindProcess(syscall.Getpid())
if err != nil {
log.Println(err)
slog.Error("Couldn't find process", "error", err.Error())
return
}
proc.Signal(syscall.SIGUSR2)
Expand All @@ -80,26 +82,26 @@ func execCommand(command string, args ...string) bool {
cmd.Env = os.Environ()
stdout, err := cmd.StdoutPipe()
if err != nil {
log.Println(err)
slog.Error("Error getting stdout pipe", "error", err.Error())
return false
}
stderr, err := cmd.StderrPipe()
if err != nil {
log.Println(err)
slog.Error("Error getting stderr pipe", "error", err.Error())
return false
}
if err := cmd.Start(); err != nil {
log.Println(err)
slog.Error("Error starting command", "error", err.Error())
return false
}
data, err := ioutil.ReadAll(stderr)
if err != nil {
log.Println(err)
slog.Error("Error reading stderr", "error", err.Error())
return false
}
// Bob. We got a problem.
if len(data) != 0 {
log.Println(string(data))
slog.Error("Error running command", "error", string(data))
}
io.Copy(os.Stdout, stdout)
cmd.Wait()
Expand Down
5 changes: 3 additions & 2 deletions app/v1/rap.go
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
package v1

import (
"fmt"
"time"

"golang.org/x/exp/slog"

"github.com/osuAkatsuki/akatsuki-api/common"
)

Expand Down Expand Up @@ -31,7 +32,7 @@ func RAPLogPOST(md common.MethodData) common.CodeMessager {

var d rapLogData
if err := md.Unmarshal(&d); err != nil {
fmt.Println(err)
slog.Error("Error unmarshalling rap log data", "error", err.Error())
return ErrBadJSON
}

Expand Down
7 changes: 4 additions & 3 deletions app/v1/token.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import (

"github.com/jmoiron/sqlx"
"github.com/osuAkatsuki/akatsuki-api/common"
"golang.org/x/exp/slog"
)

// TokenSelfDeletePOST deletes the token the user is connecting with.
Expand Down Expand Up @@ -185,7 +186,7 @@ FROM tokens
LEFT JOIN users ON users.id = tokens.user
`+wc, params...)
if err != nil {
fmt.Println(err)
slog.Error("Error fetching data", "error", err.Error())
return
}
for rows.Next() {
Expand All @@ -198,7 +199,7 @@ LEFT JOIN users ON users.id = tokens.user
)
err := rows.Scan(&id, &privsRaw, &privilegesRaw)
if err != nil {
fmt.Println(err)
slog.Error("Error copying data", "error", err.Error())
continue
}
privileges := common.UserPrivileges(privilegesRaw)
Expand All @@ -207,7 +208,7 @@ LEFT JOIN users ON users.id = tokens.user
if newPrivs != privs {
_, err := db.Exec("UPDATE tokens SET privileges = ? WHERE id = ? LIMIT 1", uint64(newPrivs), id)
if err != nil {
fmt.Println(err)
slog.Error("Error updating tokens table", "error", err.Error())
continue
}
}
Expand Down
6 changes: 4 additions & 2 deletions app/v1/user.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@ import (
"strings"
"unicode"

"golang.org/x/exp/slog"

"github.com/jmoiron/sqlx"
"github.com/osuAkatsuki/akatsuki-api/common"
"github.com/osuAkatsuki/akatsuki-api/externals"
Expand Down Expand Up @@ -250,7 +252,7 @@ SELECT
users_stats.ranked_score_mania, users_stats.total_score_mania, users_stats.playcount_mania, users_stats.playtime_mania,
users_stats.replays_watched_mania, users_stats.total_hits_mania,
users_stats.avg_accuracy_mania, users_stats.pp_mania, users_stats.max_combo_mania,
rx_stats.ranked_score_std, rx_stats.total_score_std, rx_stats.playcount_std, users_stats.playtime_std,
rx_stats.replays_watched_std, rx_stats.total_hits_std,
rx_stats.avg_accuracy_std, rx_stats.pp_std, rx_stats.max_combo_std,
Expand Down Expand Up @@ -540,7 +542,7 @@ func UserUnweightedPerformanceGET(md common.MethodData) common.CodeMessager {
err := md.DB.QueryRow("SELECT SUM(pp) FROM scores"+tab+" WHERE userid = ? AND completed = 3 AND mode = ?", id, mode).Scan(&r.performance)
if err != nil {
if err == sql.ErrNoRows {
fmt.Println("User", id, "has no scores in scores"+tab, "???")
slog.Error("User has no scores", "user_id", id, "table", "scores"+tab)
return r
}
return Err500
Expand Down
5 changes: 3 additions & 2 deletions app/v1/user_achievements.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,10 @@ package v1

import (
"database/sql"
"fmt"
"time"

"golang.org/x/exp/slog"

"github.com/jmoiron/sqlx"
"github.com/osuAkatsuki/akatsuki-api/common"
)
Expand All @@ -25,7 +26,7 @@ func LoadAchievementsEvery(db *sqlx.DB, d time.Duration) {
err := db.Select(&achievs,
"SELECT id, name, description, icon FROM achievements ORDER BY id ASC")
if err != nil {
fmt.Println("LoadAchievements error", err)
slog.Error("LoadAchievements error", "error", err.Error())
common.GenericError(err)
}
time.Sleep(d)
Expand Down
7 changes: 4 additions & 3 deletions app/websockets/multi.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,9 @@ package websockets

import (
"encoding/json"
"fmt"
"sync"

"golang.org/x/exp/slog"
)

// SubscribeMultiMatches subscribes to receiving information from completed
Expand Down Expand Up @@ -32,12 +33,12 @@ var multiSubscriptionsMtx = new(sync.RWMutex)
func matchRetriever() {
ps, err := red.Subscribe("api:mp_complete_match")
if err != nil {
fmt.Println(err)
slog.Error("Error subscribing to api:mp_complete_match", "error", err.Error())
}
for {
msg, err := ps.ReceiveMessage()
if err != nil {
fmt.Println(err.Error())
slog.Error("Error receiving message from api:mp_complete_match", "error", err.Error())
return
}
go handleNewMultiGame(msg.Payload)
Expand Down
13 changes: 7 additions & 6 deletions app/websockets/scores.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,12 @@ package websockets

import (
"encoding/json"
"fmt"
"strings"
"sync"

"github.com/osuAkatsuki/akatsuki-api/app/v1"
v1 "github.com/osuAkatsuki/akatsuki-api/app/v1"
"github.com/osuAkatsuki/akatsuki-api/common"
"golang.org/x/exp/slog"
"gopkg.in/thehowl/go-osuapi.v1"
"zxq.co/x/getrank"
)
Expand All @@ -22,6 +22,7 @@ func SubscribeScores(c *conn, message incomingMessage) {
var ssu []subscribeScoresUser
err := json.Unmarshal(message.Data, &ssu)
if err != nil {
slog.Error("Error unmarshalling subscribe scores user", "error", err.Error())
c.WriteJSON(TypeInvalidMessage, err.Error())
return
}
Expand Down Expand Up @@ -58,12 +59,12 @@ var scoreSubscriptionsMtx = new(sync.RWMutex)
func scoreRetriever() {
ps, err := red.Subscribe("api:score_submission")
if err != nil {
fmt.Println(err)
slog.Error("Error subscribing to api:score_submission", "error", err.Error())
}
for {
msg, err := ps.ReceiveMessage()
if err != nil {
fmt.Println(err.Error())
slog.Error("Error receiving message from api:score_submission", "error", err.Error())
return
}
go handleNewScore(msg.Payload)
Expand Down Expand Up @@ -100,7 +101,7 @@ FROM scores s
INNER JOIN users u ON s.userid = u.id
WHERE s.id = ?`, id)
if err != nil {
fmt.Println(err)
slog.Error("Error fetching score", "error", err.Error())
return
}
s.Rank = strings.ToUpper(getrank.GetRank(
Expand Down Expand Up @@ -167,7 +168,7 @@ func catchPanic() {
case error:
common.WSErr(r)
default:
fmt.Println("PANIC", r)
slog.Error("PANIC", "error", r)
}
}
}
7 changes: 4 additions & 3 deletions common/method_data.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,14 @@ package common

import (
"encoding/json"
"fmt"
"runtime"
"strconv"
"strings"

"github.com/getsentry/raven-go"
"github.com/jmoiron/sqlx"
"github.com/valyala/fasthttp"
"golang.org/x/exp/slog"
"gopkg.in/redis.v5"
)

Expand Down Expand Up @@ -81,9 +81,10 @@ func GenericError(err error) {
func _err(err error, tags map[string]string, user *raven.User, c *fasthttp.RequestCtx) {
_, file, no, ok := runtime.Caller(2)
if ok {
fmt.Println("ERROR in", file, "at line", no)
slog.Error("An error occurred", "filename", file, "line", no, "error", err.Error())
} else {
slog.Error("An error occurred", "error", err.Error())
}
fmt.Println(err)
}

func generateRavenHTTP(ctx *fasthttp.RequestCtx) *raven.Http {
Expand Down
3 changes: 2 additions & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ require (
github.com/onsi/gomega v1.13.0 // indirect
github.com/pkg/errors v0.9.1 // indirect
github.com/valyala/bytebufferpool v1.0.0 // indirect
golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa
golang.org/x/net v0.10.0 // indirect
golang.org/x/sys v0.8.0 // indirect
golang.org/x/sys v0.14.0 // indirect
)
3 changes: 3 additions & 0 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,8 @@ golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACk
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20220214200702-86341886e292/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa h1:FRnLl4eNAQl8hwxVVC17teOw8kdjVDVAiFMtgUdTSRQ=
golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa/go.mod h1:zk2irFbV9DP96SEBUUAy67IdHUaZuSnrz1n472HUCLE=
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
Expand Down Expand Up @@ -117,6 +119,7 @@ golang.org/x/sys v0.0.0-20220227234510-4e6760a101f9/go.mod h1:oPkhp1MJrh7nUepCBc
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f h1:v4INt8xihDGvnrfjMDVXGxw9wrfxYyCjk0KbXjhR55s=
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.14.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
Expand Down
5 changes: 3 additions & 2 deletions limit/limit.go
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
package limit

import (
"fmt"
"sync"
"time"

"golang.org/x/exp/slog"
)

// Request is a Request with DefaultLimiter.
Expand Down Expand Up @@ -82,7 +83,7 @@ func (s *RateLimiter) filler(el string, perMinute int) {
defer func() {
r := recover()
if r != nil {
fmt.Println(r)
slog.Error("PANIC", "error", r)
}
}()

Expand Down
Loading

0 comments on commit c629ca4

Please sign in to comment.