Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feat: added console writer for local logging #123

Merged
merged 3 commits into from
Mar 26, 2022
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion auth/basic_auth.go
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ func (a *auth) BasicAuth() echo.MiddlewareFunc {
printInMiddleware := true
defer func() {
if printInMiddleware {
a.logger.Log(ctx).Send()
a.logger.Log(ctx)
}
}()

Expand Down
11 changes: 7 additions & 4 deletions auth/signin.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,8 @@ import (

func (a *auth) SignIn(ctx echo.Context) error {
ctx.Set(types.HandlerStartTime, time.Now())
defer func() {
a.logger.Log(ctx).Send()
}()
var user User

var user User
if err := json.NewDecoder(ctx.Request().Body).Decode(&user); err != nil {
return ctx.JSON(http.StatusBadRequest, echo.Map{
"error": err.Error(),
Expand All @@ -26,6 +23,7 @@ func (a *auth) SignIn(ctx echo.Context) error {
"error": "email and username cannot be empty, please provide at least one of them",
}
ctx.Set(types.HttpEndpointErrorKey, errMsg)
a.logger.Log(ctx)
return ctx.JSON(http.StatusBadRequest, errMsg)
}

Expand All @@ -34,6 +32,7 @@ func (a *auth) SignIn(ctx echo.Context) error {
"error": "password cannot be empty",
}
ctx.Set(types.HttpEndpointErrorKey, errMsg)
a.logger.Log(ctx)
return ctx.JSON(http.StatusBadRequest, errMsg)
}

Expand All @@ -42,6 +41,7 @@ func (a *auth) SignIn(ctx echo.Context) error {
if user.Email != "" {
if err := verifyEmail(user.Email); err != nil {
ctx.Set(types.HttpEndpointErrorKey, err.Error())
a.logger.Log(ctx)
return ctx.JSON(http.StatusBadRequest, echo.Map{
"error": err.Error(),
})
Expand All @@ -55,6 +55,7 @@ func (a *auth) SignIn(ctx echo.Context) error {
userFromDb, err := a.pgStore.GetUser(ctx.Request().Context(), key)
if err != nil {
ctx.Set(types.HttpEndpointErrorKey, err.Error())
a.logger.Log(ctx)
return ctx.JSON(http.StatusBadRequest, echo.Map{
"error": err.Error(),
})
Expand All @@ -63,6 +64,7 @@ func (a *auth) SignIn(ctx echo.Context) error {
if !a.verifyPassword(userFromDb.Password, user.Password) {
errMsg := "invalid password"
ctx.Set(types.HttpEndpointErrorKey, errMsg)
a.logger.Log(ctx)
return ctx.JSON(http.StatusUnauthorized, errMsg)
}

Expand All @@ -75,6 +77,7 @@ func (a *auth) SignIn(ctx echo.Context) error {
token, err := a.newToken(uu, tokenLife)
if err != nil {
ctx.Set(types.HttpEndpointErrorKey, err.Error())
a.logger.Log(ctx)
return ctx.JSON(http.StatusInternalServerError, echo.Map{
"error": err.Error(),
})
Expand Down
8 changes: 4 additions & 4 deletions auth/signup.go
Original file line number Diff line number Diff line change
Expand Up @@ -140,14 +140,11 @@ func verifyPassword(password string) error {

func (a *auth) SignUp(ctx echo.Context) error {
ctx.Set(types.HandlerStartTime, time.Now())
defer func() {
a.logger.Log(ctx).Send()
}()

var u User

if err := json.NewDecoder(ctx.Request().Body).Decode(&u); err != nil {
ctx.Set(types.HttpEndpointErrorKey, err.Error())
a.logger.Log(ctx)
return ctx.JSON(http.StatusBadRequest, echo.Map{
"error": err.Error(),
"message": "error decoding request body in sign-up",
Expand All @@ -157,6 +154,7 @@ func (a *auth) SignUp(ctx echo.Context) error {

if err := u.Validate(a.store); err != nil {
ctx.Set(types.HttpEndpointErrorKey, err.Error())
a.logger.Log(ctx)
return ctx.JSON(http.StatusBadRequest, echo.Map{
"error": err.Error(),
})
Expand All @@ -165,6 +163,7 @@ func (a *auth) SignUp(ctx echo.Context) error {
hpwd, err := a.hashPassword(u.Password)
if err != nil {
ctx.Set(types.HttpEndpointErrorKey, err.Error())
a.logger.Log(ctx)
return ctx.JSON(http.StatusInternalServerError, echo.Map{
"error": err.Error(),
})
Expand All @@ -180,6 +179,7 @@ func (a *auth) SignUp(ctx echo.Context) error {
err = a.pgStore.AddUser(ctx.Request().Context(), newUser)
if err != nil {
ctx.Set(types.HttpEndpointErrorKey, err.Error())
a.logger.Log(ctx)
return ctx.JSON(http.StatusInternalServerError, echo.Map{
"error": err.Error(),
})
Expand Down
7 changes: 4 additions & 3 deletions auth/token.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,21 +18,20 @@ func (a *auth) Token(ctx echo.Context) error {
// TODO (jay-dee7) - check for all valid query params here like serive, client_id, offline_token, etc
// more at this link - https://docs.docker.com/registry/spec/auth/token/
ctx.Set(types.HandlerStartTime, time.Now())
defer func() {
a.logger.Log(ctx).Send()
}()

authHeader := ctx.Request().Header.Get(AuthorizationHeaderKey)
if authHeader != "" {
username, password, err := a.getCredsFromHeader(ctx.Request())
if err != nil {
ctx.Set(types.HttpEndpointErrorKey, err.Error())
a.logger.Log(ctx)
return ctx.NoContent(http.StatusUnauthorized)
}

creds, err := a.validateUser(username, password)
if err != nil {
ctx.Set(types.HttpEndpointErrorKey, err.Error())
a.logger.Log(ctx)
return ctx.JSON(http.StatusUnauthorized, echo.Map{
"error": err.Error(),
})
Expand All @@ -48,6 +47,7 @@ func (a *auth) Token(ctx echo.Context) error {
"msg": "invalid scope provided",
}
ctx.Set(types.HttpEndpointErrorKey, errMsg)
a.logger.Log(ctx)
return ctx.JSON(http.StatusBadRequest, errMsg)
}

Expand All @@ -57,6 +57,7 @@ func (a *auth) Token(ctx echo.Context) error {
token, err := a.newPublicPullToken()
if err != nil {
ctx.Set(types.HttpEndpointErrorKey, err.Error())
a.logger.Log(ctx)
return ctx.NoContent(http.StatusInternalServerError)
}

Expand Down
3 changes: 3 additions & 0 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ require (
github.com/go-playground/validator/v10 v10.9.0
github.com/golang-jwt/jwt v3.2.2+incompatible
github.com/google/uuid v1.3.0
github.com/hashicorp/go-multierror v1.0.0
github.com/labstack/echo-contrib v0.11.0
github.com/labstack/echo/v4 v4.5.0
github.com/rs/zerolog v1.24.0
Expand All @@ -18,6 +19,8 @@ require (
golang.org/x/crypto v0.0.0-20210817164053-32db794688a5
)

require github.com/hashicorp/errwrap v1.0.0 // indirect

require (
github.com/beorn7/perks v1.0.1 // indirect
github.com/cespare/xxhash v1.1.0 // indirect
Expand Down
2 changes: 2 additions & 0 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -266,10 +266,12 @@ github.com/hashicorp/consul/api v1.1.0/go.mod h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBt
github.com/hashicorp/consul/api v1.3.0/go.mod h1:MmDNSzIMUjNpY/mQ398R4bk2FnqQLoPndWW5VkKPlCE=
github.com/hashicorp/consul/sdk v0.1.1/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8=
github.com/hashicorp/consul/sdk v0.3.0/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8=
github.com/hashicorp/errwrap v1.0.0 h1:hLrqtEDnRye3+sgx6z4qVLNuviH3MR5aQ0ykNJa/UYA=
github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80=
github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60=
github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM=
github.com/hashicorp/go-multierror v1.0.0 h1:iVjPR7a6H0tWELX5NxNe7bYopibicUzc7uPribsnS6o=
github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk=
github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU=
github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU=
Expand Down
2 changes: 1 addition & 1 deletion main.go
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ func main() {
os.Exit(1)
}

logger := telemetry.ZLogger(telemetry.SetupLogger(), fluentBitCollector)
logger := telemetry.ZLogger(fluentBitCollector, cfg.Environment)
authSvc := auth.New(localCache, cfg, pgStore, logger)
skynetClient := skynet.NewClient(cfg)

Expand Down
15 changes: 8 additions & 7 deletions registry/v2/blobs.go
Original file line number Diff line number Diff line change
Expand Up @@ -33,9 +33,6 @@ func (b *blobs) errorResponse(code, msg string, detail map[string]interface{}) [

func (b *blobs) HEAD(ctx echo.Context) error {
ctx.Set(types.HandlerStartTime, time.Now())
defer func() {
b.registry.logger.Log(ctx).Send()
}()

digest := ctx.Param("digest")

Expand All @@ -47,6 +44,7 @@ func (b *blobs) HEAD(ctx echo.Context) error {
errMsg := b.errorResponse(RegistryErrorCodeManifestBlobUnknown, err.Error(), details)

ctx.Set(types.HttpEndpointErrorKey, errMsg)
b.registry.logger.Log(ctx)
return ctx.JSONBlob(http.StatusNotFound, errMsg)
}

Expand All @@ -58,6 +56,7 @@ func (b *blobs) HEAD(ctx echo.Context) error {
}
errMsg := b.errorResponse(RegistryErrorCodeManifestBlobUnknown, "Manifest does not exist", details)
ctx.Set(types.HttpEndpointErrorKey, errMsg)
b.registry.logger.Log(ctx)
return ctx.JSONBlob(http.StatusNotFound, errMsg)
}

Expand All @@ -74,9 +73,6 @@ these will be part of the txn in StartUpload
*/
func (b *blobs) UploadBlob(ctx echo.Context) error {
ctx.Set(types.HandlerStartTime, time.Now())
defer func() {
b.registry.logger.Log(ctx).Send()
}()

namespace := ctx.Param("username") + "/" + ctx.Param("imagename")
contentRange := ctx.Request().Header.Get("Content-Range")
Expand All @@ -90,7 +86,7 @@ func (b *blobs) UploadBlob(ctx echo.Context) error {
nil,
)
ctx.Set(types.HttpEndpointErrorKey, errMsg)

b.registry.logger.Log(ctx)
return ctx.JSONBlob(http.StatusBadRequest, errMsg)
}

Expand All @@ -112,6 +108,7 @@ func (b *blobs) UploadBlob(ctx echo.Context) error {
nil,
)
ctx.Set(types.HttpEndpointErrorKey, errMsg)
b.registry.logger.Log(ctx)
return ctx.JSONBlob(http.StatusBadRequest, errMsg)
}

Expand All @@ -130,12 +127,14 @@ func (b *blobs) UploadBlob(ctx echo.Context) error {
}
errMsg := b.errorResponse(RegistryErrorCodeBlobUploadUnknown, err.Error(), details)
ctx.Set(types.HttpEndpointErrorKey, errMsg)
b.registry.logger.Log(ctx)
return ctx.JSONBlob(http.StatusRequestedRangeNotSatisfiable, errMsg)
}

if start != len(b.uploads[uuid]) {
errMsg := b.errorResponse(RegistryErrorCodeBlobUploadUnknown, "content range mismatch", nil)
ctx.Set(types.HttpEndpointErrorKey, errMsg)
b.registry.logger.Log(ctx)
return ctx.JSONBlob(http.StatusRequestedRangeNotSatisfiable, errMsg)
}

Expand All @@ -148,6 +147,7 @@ func (b *blobs) UploadBlob(ctx echo.Context) error {
nil,
)
ctx.Set(types.HttpEndpointErrorKey, errMsg)
b.registry.logger.Log(ctx)
return ctx.JSONBlob(http.StatusInternalServerError, errMsg)
} // 10
ctx.Request().Body.Close()
Expand All @@ -160,6 +160,7 @@ func (b *blobs) UploadBlob(ctx echo.Context) error {
nil,
)
ctx.Set(types.HttpEndpointErrorKey, errMsg)
b.registry.logger.Log(ctx)
return ctx.JSONBlob(http.StatusBadRequest, errMsg)
}
locationHeader := fmt.Sprintf("/v2/%s/blobs/uploads/%s", namespace, uuid)
Expand Down
Loading