Addr flag for debug server, logging
This commit is contained in:
parent
03178f59e6
commit
d767921e0e
11 changed files with 54 additions and 13 deletions
2
go.mod
2
go.mod
|
@ -5,7 +5,7 @@ go 1.23.0
|
||||||
toolchain go1.23.7
|
toolchain go1.23.7
|
||||||
|
|
||||||
require (
|
require (
|
||||||
git.mstar.dev/mstar/goutils v1.12.1
|
git.mstar.dev/mstar/goutils v1.12.2
|
||||||
github.com/BurntSushi/toml v1.4.0
|
github.com/BurntSushi/toml v1.4.0
|
||||||
github.com/dgraph-io/ristretto v0.2.0
|
github.com/dgraph-io/ristretto v0.2.0
|
||||||
github.com/eko/gocache/lib/v4 v4.1.6
|
github.com/eko/gocache/lib/v4 v4.1.6
|
||||||
|
|
2
go.sum
2
go.sum
|
@ -61,6 +61,8 @@ git.mstar.dev/mstar/goutils v1.12.0 h1:d88hLS8KnLUCI+8aWBR6228M43hxHdJpj8WuSqm4L
|
||||||
git.mstar.dev/mstar/goutils v1.12.0/go.mod h1:juxY0eZEMnA95fedRp2LVXvUBgEjz66nE8SEdGKcxMA=
|
git.mstar.dev/mstar/goutils v1.12.0/go.mod h1:juxY0eZEMnA95fedRp2LVXvUBgEjz66nE8SEdGKcxMA=
|
||||||
git.mstar.dev/mstar/goutils v1.12.1 h1:HZKKzMNfx7JKSUi5s8SwwUFEqEX6xvkM6NMf+Pht+lo=
|
git.mstar.dev/mstar/goutils v1.12.1 h1:HZKKzMNfx7JKSUi5s8SwwUFEqEX6xvkM6NMf+Pht+lo=
|
||||||
git.mstar.dev/mstar/goutils v1.12.1/go.mod h1:juxY0eZEMnA95fedRp2LVXvUBgEjz66nE8SEdGKcxMA=
|
git.mstar.dev/mstar/goutils v1.12.1/go.mod h1:juxY0eZEMnA95fedRp2LVXvUBgEjz66nE8SEdGKcxMA=
|
||||||
|
git.mstar.dev/mstar/goutils v1.12.2 h1:twCnsl+WRgP52mV5D5FRVJK6Yst1/3VtulHd77U++BY=
|
||||||
|
git.mstar.dev/mstar/goutils v1.12.2/go.mod h1:juxY0eZEMnA95fedRp2LVXvUBgEjz66nE8SEdGKcxMA=
|
||||||
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
|
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
|
||||||
github.com/BurntSushi/toml v1.4.0 h1:kuoIxZQy2WRRk1pttg9asf+WVv6tWQuBNVmK8+nqPr0=
|
github.com/BurntSushi/toml v1.4.0 h1:kuoIxZQy2WRRk1pttg9asf+WVv6tWQuBNVmK8+nqPr0=
|
||||||
github.com/BurntSushi/toml v1.4.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho=
|
github.com/BurntSushi/toml v1.4.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho=
|
||||||
|
|
2
main.go
2
main.go
|
@ -154,7 +154,7 @@ func newServer() {
|
||||||
if *shared.FlagStartDebugServer {
|
if *shared.FlagStartDebugServer {
|
||||||
go func() {
|
go func() {
|
||||||
log.Info().Msg("Starting debug server")
|
log.Info().Msg("Starting debug server")
|
||||||
if err = webdebug.New().Start(); err != nil {
|
if err = webdebug.New(*shared.FlagDebugPort).Start(); err != nil {
|
||||||
log.Fatal().Err(err).Msg("Debug server failed")
|
log.Fatal().Err(err).Msg("Debug server failed")
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
|
|
@ -25,6 +25,11 @@ var (
|
||||||
false,
|
false,
|
||||||
"Also start the local debugging server",
|
"Also start the local debugging server",
|
||||||
)
|
)
|
||||||
|
FlagDebugPort *string = flag.String(
|
||||||
|
"debugport",
|
||||||
|
"127.0.0.1:3305",
|
||||||
|
"Set the address the debug server will listen on. Format: IP:Port",
|
||||||
|
)
|
||||||
FlagLogFile *string = flag.String(
|
FlagLogFile *string = flag.String(
|
||||||
"logfile",
|
"logfile",
|
||||||
"/var/log/linstrom/logs",
|
"/var/log/linstrom/logs",
|
||||||
|
|
|
@ -8,7 +8,7 @@ import (
|
||||||
|
|
||||||
webutils "git.mstar.dev/mstar/goutils/http"
|
webutils "git.mstar.dev/mstar/goutils/http"
|
||||||
"git.mstar.dev/mstar/goutils/sliceutils"
|
"git.mstar.dev/mstar/goutils/sliceutils"
|
||||||
"github.com/rs/zerolog/log"
|
"github.com/rs/zerolog/hlog"
|
||||||
"gorm.io/gorm"
|
"gorm.io/gorm"
|
||||||
|
|
||||||
"git.mstar.dev/mstar/linstrom/storage-new"
|
"git.mstar.dev/mstar/linstrom/storage-new"
|
||||||
|
@ -22,6 +22,7 @@ func postAs(w http.ResponseWriter, r *http.Request) {
|
||||||
Username string `json:"username"`
|
Username string `json:"username"`
|
||||||
Content string `json:"content"`
|
Content string `json:"content"`
|
||||||
}
|
}
|
||||||
|
log := hlog.FromRequest(r)
|
||||||
dec := json.NewDecoder(r.Body)
|
dec := json.NewDecoder(r.Body)
|
||||||
data := Inbound{}
|
data := Inbound{}
|
||||||
err := dec.Decode(&data)
|
err := dec.Decode(&data)
|
||||||
|
@ -76,6 +77,7 @@ func postAs(w http.ResponseWriter, r *http.Request) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func notesFrom(w http.ResponseWriter, r *http.Request) {
|
func notesFrom(w http.ResponseWriter, r *http.Request) {
|
||||||
|
log := hlog.FromRequest(r)
|
||||||
username := r.FormValue("username")
|
username := r.FormValue("username")
|
||||||
user, err := dbgen.User.GetByUsername(username)
|
user, err := dbgen.User.GetByUsername(username)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
@ -12,15 +12,15 @@ package webdebug
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"net/http"
|
"net/http"
|
||||||
)
|
|
||||||
|
|
||||||
const DebugAddr = "127.0.0.1:3305"
|
webutils "git.mstar.dev/mstar/goutils/http"
|
||||||
|
)
|
||||||
|
|
||||||
type Server struct {
|
type Server struct {
|
||||||
server *http.Server
|
server *http.Server
|
||||||
}
|
}
|
||||||
|
|
||||||
func New() *Server {
|
func New(addr string) *Server {
|
||||||
handler := http.NewServeMux()
|
handler := http.NewServeMux()
|
||||||
handler.HandleFunc("GET /non-deleted", getNonDeletedUsers)
|
handler.HandleFunc("GET /non-deleted", getNonDeletedUsers)
|
||||||
handler.HandleFunc("POST /local-user", createLocalUser)
|
handler.HandleFunc("POST /local-user", createLocalUser)
|
||||||
|
@ -28,8 +28,11 @@ func New() *Server {
|
||||||
handler.HandleFunc("POST /post-as", postAs)
|
handler.HandleFunc("POST /post-as", postAs)
|
||||||
handler.HandleFunc("GET /notes-for", notesFrom)
|
handler.HandleFunc("GET /notes-for", notesFrom)
|
||||||
web := http.Server{
|
web := http.Server{
|
||||||
Addr: DebugAddr,
|
Addr: addr,
|
||||||
Handler: handler,
|
Handler: webutils.ChainMiddlewares(
|
||||||
|
handler,
|
||||||
|
webutils.BuildLoggingMiddleware(map[string]string{"server": "debug"}),
|
||||||
|
),
|
||||||
}
|
}
|
||||||
return &Server{&web}
|
return &Server{&web}
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,7 +11,7 @@ import (
|
||||||
webutils "git.mstar.dev/mstar/goutils/http"
|
webutils "git.mstar.dev/mstar/goutils/http"
|
||||||
"git.mstar.dev/mstar/goutils/other"
|
"git.mstar.dev/mstar/goutils/other"
|
||||||
"git.mstar.dev/mstar/goutils/sliceutils"
|
"git.mstar.dev/mstar/goutils/sliceutils"
|
||||||
"github.com/rs/zerolog/log"
|
"github.com/rs/zerolog/hlog"
|
||||||
|
|
||||||
"git.mstar.dev/mstar/linstrom/shared"
|
"git.mstar.dev/mstar/linstrom/shared"
|
||||||
"git.mstar.dev/mstar/linstrom/storage-new/dbgen"
|
"git.mstar.dev/mstar/linstrom/storage-new/dbgen"
|
||||||
|
@ -20,18 +20,38 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
func getNonDeletedUsers(w http.ResponseWriter, r *http.Request) {
|
func getNonDeletedUsers(w http.ResponseWriter, r *http.Request) {
|
||||||
|
log := hlog.FromRequest(r)
|
||||||
pageStr := r.FormValue("page")
|
pageStr := r.FormValue("page")
|
||||||
page := 0
|
page := 0
|
||||||
if pageStr != "" {
|
if pageStr != "" {
|
||||||
var err error
|
var err error
|
||||||
page, err = strconv.Atoi(pageStr)
|
page, err = strconv.Atoi(pageStr)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
webutils.HttpErr(w, 0, "page is not a number", http.StatusBadRequest)
|
webutils.ProblemDetails(
|
||||||
|
w,
|
||||||
|
http.StatusBadRequest,
|
||||||
|
"/errors/bad-page",
|
||||||
|
"bad page number",
|
||||||
|
other.IntoPointer("page number must be an uint"),
|
||||||
|
nil,
|
||||||
|
)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if page < 0 {
|
||||||
|
webutils.ProblemDetails(
|
||||||
|
w,
|
||||||
|
http.StatusBadRequest,
|
||||||
|
"/errors/bad-page",
|
||||||
|
"bad page number",
|
||||||
|
other.IntoPointer("page number must be >= 0"),
|
||||||
|
nil,
|
||||||
|
)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
users, err := dbgen.User.GetPagedAllNonDeleted(uint(page))
|
users, err := dbgen.User.GetPagedAllNonDeleted(uint(page))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
log.Error().Err(err).Int("page", page).Msg("Failed to get non-deleted users")
|
||||||
webutils.ProblemDetails(
|
webutils.ProblemDetails(
|
||||||
w,
|
w,
|
||||||
http.StatusInternalServerError,
|
http.StatusInternalServerError,
|
||||||
|
@ -58,6 +78,7 @@ func createLocalUser(w http.ResponseWriter, r *http.Request) {
|
||||||
Location *string `json:"location"`
|
Location *string `json:"location"`
|
||||||
IsBot bool `json:"is_bot"`
|
IsBot bool `json:"is_bot"`
|
||||||
}
|
}
|
||||||
|
log := hlog.FromRequest(r)
|
||||||
jsonDecoder := json.NewDecoder(r.Body)
|
jsonDecoder := json.NewDecoder(r.Body)
|
||||||
data := Inbound{}
|
data := Inbound{}
|
||||||
err := jsonDecoder.Decode(&data)
|
err := jsonDecoder.Decode(&data)
|
||||||
|
|
|
@ -8,7 +8,7 @@ import (
|
||||||
|
|
||||||
webutils "git.mstar.dev/mstar/goutils/http"
|
webutils "git.mstar.dev/mstar/goutils/http"
|
||||||
"git.mstar.dev/mstar/goutils/other"
|
"git.mstar.dev/mstar/goutils/other"
|
||||||
"github.com/rs/zerolog/log"
|
"github.com/rs/zerolog/hlog"
|
||||||
"gorm.io/gorm"
|
"gorm.io/gorm"
|
||||||
|
|
||||||
"git.mstar.dev/mstar/linstrom/config"
|
"git.mstar.dev/mstar/linstrom/config"
|
||||||
|
@ -30,6 +30,7 @@ func WellKnownWebfinger(w http.ResponseWriter, r *http.Request) {
|
||||||
Links []OutboundLink `json:"links"`
|
Links []OutboundLink `json:"links"`
|
||||||
Aliases []string `json:"aliases,omitempty"`
|
Aliases []string `json:"aliases,omitempty"`
|
||||||
}
|
}
|
||||||
|
log := hlog.FromRequest(r)
|
||||||
requestedResource := r.FormValue("resource")
|
requestedResource := r.FormValue("resource")
|
||||||
matches := webfingerResourceRegex.FindStringSubmatch(requestedResource)
|
matches := webfingerResourceRegex.FindStringSubmatch(requestedResource)
|
||||||
if len(matches) == 0 {
|
if len(matches) == 0 {
|
||||||
|
@ -104,6 +105,7 @@ func WellKnownWebfinger(w http.ResponseWriter, r *http.Request) {
|
||||||
|
|
||||||
func Nodeinfo(w http.ResponseWriter, r *http.Request) {
|
func Nodeinfo(w http.ResponseWriter, r *http.Request) {
|
||||||
u := dbgen.User
|
u := dbgen.User
|
||||||
|
log := hlog.FromRequest(r)
|
||||||
userCount, err := u.Where(u.DeletedAt.IsNull(), u.Verified.Is(true)).Count()
|
userCount, err := u.Where(u.DeletedAt.IsNull(), u.Verified.Is(true)).Count()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
webutils.ProblemDetails(w, 500, "/errors/db-failure", "internal database failure", nil, nil)
|
webutils.ProblemDetails(w, 500, "/errors/db-failure", "internal database failure", nil, nil)
|
||||||
|
|
|
@ -11,6 +11,7 @@ var errorDescriptions = map[string]string{
|
||||||
"webfinger-bad-resource": "The given format for the \"resource\" url parameter was missing or invalid. It must follow the form \"acct:<username>@<domain>\"",
|
"webfinger-bad-resource": "The given format for the \"resource\" url parameter was missing or invalid. It must follow the form \"acct:<username>@<domain>\"",
|
||||||
"db-failure": "The database query for this request failed for an undisclosed reason. This is often caused by bad input data conflicting with existing information. Try to submit different data or wait for some time",
|
"db-failure": "The database query for this request failed for an undisclosed reason. This is often caused by bad input data conflicting with existing information. Try to submit different data or wait for some time",
|
||||||
"bad-request-data": "The data provided in the request doesn't match the requirements, see problem details' detail field for more information",
|
"bad-request-data": "The data provided in the request doesn't match the requirements, see problem details' detail field for more information",
|
||||||
|
"bad-page": "The provided page number was not valid. See response details for more information",
|
||||||
}
|
}
|
||||||
|
|
||||||
func errorTypeHandler(w http.ResponseWriter, r *http.Request) {
|
func errorTypeHandler(w http.ResponseWriter, r *http.Request) {
|
||||||
|
|
|
@ -57,8 +57,11 @@ func New(addr string, duckImg *string) *Server {
|
||||||
fmt.Fprint(w, *duckImg)
|
fmt.Fprint(w, *duckImg)
|
||||||
})
|
})
|
||||||
server := http.Server{
|
server := http.Server{
|
||||||
Handler: webutils.ChainMiddlewares(handler, webutils.LoggingMiddleware),
|
Handler: webutils.ChainMiddlewares(
|
||||||
Addr: addr,
|
handler,
|
||||||
|
webutils.BuildLoggingMiddleware(map[string]string{"server": "public"}),
|
||||||
|
),
|
||||||
|
Addr: addr,
|
||||||
}
|
}
|
||||||
return &Server{&server}
|
return &Server{&server}
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,6 +19,7 @@ type User struct {
|
||||||
CreatedAt time.Time `json:"created_at"`
|
CreatedAt time.Time `json:"created_at"`
|
||||||
ServerId uint `json:"server_id"`
|
ServerId uint `json:"server_id"`
|
||||||
Displayname string `json:"displayname"`
|
Displayname string `json:"displayname"`
|
||||||
|
Username string `json:"username"`
|
||||||
Description string `json:"description"`
|
Description string `json:"description"`
|
||||||
IsBot bool `json:"is_bot"`
|
IsBot bool `json:"is_bot"`
|
||||||
IconId *string `json:"icon_id"`
|
IconId *string `json:"icon_id"`
|
||||||
|
@ -88,6 +89,7 @@ func (u *User) FromModel(m *models.User) {
|
||||||
u.ServerId = m.ServerId
|
u.ServerId = m.ServerId
|
||||||
u.Displayname = m.DisplayName
|
u.Displayname = m.DisplayName
|
||||||
u.IsBot = m.IsBot
|
u.IsBot = m.IsBot
|
||||||
|
u.Username = m.Username
|
||||||
if m.IconId.Valid {
|
if m.IconId.Valid {
|
||||||
u.IconId = &m.IconId.String
|
u.IconId = &m.IconId.String
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue