More sentry logging

This commit is contained in:
David Robertson 2023-04-13 15:02:17 +01:00
parent 80e46c234d
commit 601e3fce49
No known key found for this signature in database
GPG Key ID: 903ECE108A39DEDD
5 changed files with 23 additions and 7 deletions

View File

@ -46,8 +46,9 @@ type Storage struct {
func NewStorage(postgresURI string) *Storage {
db, err := sqlx.Open("postgres", postgresURI)
if err != nil {
logger.Panic().Err(err).Str("uri", postgresURI).Msg("failed to open SQL DB")
sentry.CaptureException(err)
// TODO: if we panic(), will sentry have a chance to flush the event?
logger.Panic().Err(err).Str("uri", postgresURI).Msg("failed to open SQL DB")
}
acc := &Accumulator{
db: db,

View File

@ -7,6 +7,7 @@ import (
"crypto/sha256"
"encoding/hex"
"fmt"
"github.com/getsentry/sentry-go"
"io"
"os"
"strings"
@ -44,6 +45,8 @@ type Storage struct {
func NewStore(postgresURI, secret string) *Storage {
db, err := sqlx.Open("postgres", postgresURI)
if err != nil {
sentry.CaptureException(err)
// TODO: if we panic(), will sentry have a chance to flush the event?
log.Panic().Err(err).Str("uri", postgresURI).Msg("failed to open SQL DB")
}
db.MustExec(`

View File

@ -4,6 +4,7 @@ import (
"context"
"encoding/json"
"fmt"
"github.com/matrix-org/sliding-sync/internal"
"strconv"
"sync"
@ -69,12 +70,15 @@ func (r *ToDeviceRequest) ProcessInitial(ctx context.Context, res *Response, ext
from, err = strconv.ParseInt(r.Since, 10, 64)
if err != nil {
l.Err(err).Str("since", r.Since).Msg("invalid since value")
// TODO add context to sentry
internal.GetSentryHubFromContextOrDefault(ctx).CaptureException(err)
return
}
// the client is confirming messages up to `from` so delete everything up to and including it.
if err = extCtx.Store.ToDeviceTable.DeleteMessagesUpToAndIncluding(extCtx.DeviceID, from); err != nil {
l.Err(err).Str("since", r.Since).Msg("failed to delete to-device messages up to this value")
// non-fatal TODO sentry
// TODO add context to sentry
internal.GetSentryHubFromContextOrDefault(ctx).CaptureException(err)
}
}
mapMu.Lock()
@ -82,22 +86,26 @@ func (r *ToDeviceRequest) ProcessInitial(ctx context.Context, res *Response, ext
mapMu.Unlock()
if from < lastSentPos {
// we told the client about a newer position, but yet they are using an older position, yell loudly
// TODO sentry
const errMsg = "Client did not increment since token: possibly sending back duplicate to-device events!"
l.Warn().Int64("last_sent", lastSentPos).Int64("recv", from).Bool("initial", extCtx.IsInitial).Msg(
"Client did not increment since token: possibly sending back duplicate to-device events!",
errMsg,
)
// TODO add context to sentry
internal.GetSentryHubFromContextOrDefault(ctx).CaptureException(fmt.Errorf(errMsg))
}
msgs, upTo, err := extCtx.Store.ToDeviceTable.Messages(extCtx.DeviceID, from, int64(r.Limit))
if err != nil {
l.Err(err).Int64("from", from).Msg("cannot query to-device messages")
// TODO sentry
// TODO add context to sentry
internal.GetSentryHubFromContextOrDefault(ctx).CaptureException(err)
return
}
err = extCtx.Store.ToDeviceTable.SetUnackedPosition(extCtx.DeviceID, upTo)
if err != nil {
l.Err(err).Msg("cannot set unacked position")
// TODO sentry
// TODO add context to sentry
internal.GetSentryHubFromContextOrDefault(ctx).CaptureException(err)
return
}
mapMu.Lock()

View File

@ -187,6 +187,7 @@ func (h *SyncLiveHandler) serve(w http.ResponseWriter, req *http.Request) error
defer req.Body.Close()
if err := json.NewDecoder(req.Body).Decode(&requestBody); err != nil {
log.Err(err).Msg("failed to read/decode request body")
internal.GetSentryHubFromContextOrDefault(req.Context()).CaptureException(err)
return &internal.HandlerError{
StatusCode: 400,
Err: err,
@ -205,6 +206,7 @@ func (h *SyncLiveHandler) serve(w http.ResponseWriter, req *http.Request) error
conn, err := h.setupConnection(req, &requestBody, req.URL.Query().Get("pos") != "")
if err != nil {
hlog.FromRequest(req).Err(err).Msg("failed to get or create Conn")
internal.GetSentryHubFromContextOrDefault(req.Context()).CaptureException(err)
return err
}
// set pos and timeout if specified
@ -233,6 +235,7 @@ func (h *SyncLiveHandler) serve(w http.ResponseWriter, req *http.Request) error
resp, herr := conn.OnIncomingRequest(req.Context(), &requestBody)
if herr != nil {
log.Err(herr).Msg("failed to OnIncomingRequest")
internal.GetSentryHubFromContextOrDefault(req.Context()).CaptureException(herr)
return herr
}
// for logging

3
v3.go
View File

@ -169,8 +169,9 @@ func RunSyncV3Server(h http.Handler, bindAddr, destV2Server, tlsCert, tlsKey str
err = http.ListenAndServe(bindAddr, srv)
}
if err != nil {
logger.Fatal().Err(err).Msg("failed to listen and serve")
sentry.CaptureException(err)
// TODO: Fatal() calls os.Exit. Will that give time for sentry.Flush() to run?
logger.Fatal().Err(err).Msg("failed to listen and serve")
}
}