Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
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
17 changes: 17 additions & 0 deletions docs/plantuml/controllers/AppLogController.puml
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
@startuml
!include ../services/LogService.puml

package controllers{
class AppLogController{
-service *services.AppLogService
--
-logger *logrus.Logger
--
+GetList(ctx *gin.Context)
--
+GetByID(ctx *gin.Context)
}
}

AppLogController::service -- LogService
@enduml
17 changes: 17 additions & 0 deletions docs/plantuml/controllers/HTTPLogController.puml
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
@startuml
!include ../services/HTTPLogService.puml

package controllers{
class HTTPLogController{
-service *services.HTTPLogService
--
-logger *logrus.Logger
--
+GetList(ctx *gin.Context)
--
+GetByID(ctx *gin.Context)
}
}

HTTPLogController::service -- HTTPLogService
@enduml
26 changes: 4 additions & 22 deletions src/infrastructure/YamlGenericTemplateStorage.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ import (
"fmt"
"github.com/google/uuid"
"github.com/sirupsen/logrus"
"gopkg.in/yaml.v2"
"io/ioutil"
"os"
"path"
Expand Down Expand Up @@ -70,32 +69,15 @@ func (y *YamlGenericTemplateStorage[TemplateType]) reloadFromFiles() error {
return errors.Internal.Wrap(err, "reading dir error")
}
for _, f := range files {
template, err := y.getTemplateObjFromYaml(f.Name())
template, err := ReadYamlFile[TemplateType](f.Name())
if err != nil {
return errors.Internal.Wrap(err, "yaml parsing error")
}
y.Templates = append(y.Templates, *template)
y.Templates = append(y.Templates, template)
}
return nil
}

func (y *YamlGenericTemplateStorage[TemplateType]) getTemplateObjFromYaml(templateName string) (*TemplateType, error) {
template := new(TemplateType)
templateFilePath := path.Join(y.TemplatesDirectory, fmt.Sprintf(templateName))
f, err := os.Open(templateFilePath)
if err != nil {
return nil, errors.Internal.Wrap(err, "directory opening error")
}
defer f.Close()

decoder := yaml.NewDecoder(f)
err = decoder.Decode(template)
if err != nil {
return nil, errors.Internal.Wrap(err, "yaml decoding error")
}
return template, nil
}

func (y *YamlGenericTemplateStorage[TemplateType]) sortTemplatesSlice(templates *[]TemplateType, orderBy, orderDirection string) error {
if len(*templates) < 1 {
return nil
Expand Down Expand Up @@ -239,11 +221,11 @@ func (y *YamlGenericTemplateStorage[TemplateType]) Count(ctx context.Context, qu
return 0, errors.Internal.Wrap(err, "get templates files error")
}
for _, f := range files {
template, err := y.getTemplateObjFromYaml(f.Name())
template, err := ReadYamlFile[TemplateType](f.Name())
if err != nil {
return 0, errors.Internal.Wrap(err, "error converting yaml to struct")
}
templatesSlice = append(templatesSlice, *template)
templatesSlice = append(templatesSlice, template)
}
queryStr, err := queryBuilder.Build()
if err != nil {
Expand Down
9 changes: 5 additions & 4 deletions src/webapi/GinHttpServer.go
Original file line number Diff line number Diff line change
Expand Up @@ -37,15 +37,16 @@ func NewGinHTTPServer(log *logrus.Logger, config *domain.AppConfig) *GinHTTPServ
}

//Start starts http server
func (g *GinHTTPServer) Start() {
func (g *GinHTTPServer) Start() error {
err := g.Engine.Run(g.address)
if err != nil {
g.logger.Errorf("[HTTP server] start server error: %s", err.Error())
return
return err
}
return nil
}

//StartHTTPServer starts a new http server from fx.Invoke
func StartHTTPServer(server *GinHTTPServer) {
server.Start()
func StartHTTPServer(server *GinHTTPServer) error {
return server.Start()
}
4 changes: 2 additions & 2 deletions src/webapi/controllers/EthernetSwitchGinController.go
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,7 @@ func (e *EthernetSwitchGinController) GetByID(ctx *gin.Context) {
// @Failure 500 "Internal Server Error"
// @router /ethernet-switch/ [post]
func (e *EthernetSwitchGinController) Create(ctx *gin.Context) {
reqDto, err := getRequestDtoAndRestoreBody[dtos.EthernetSwitchCreateDto](ctx)
reqDto, err := getRequestDto[dtos.EthernetSwitchCreateDto](ctx)
if err != nil {
abortWithStatusByErrorType(ctx, err)
return
Expand All @@ -133,7 +133,7 @@ func (e *EthernetSwitchGinController) Create(ctx *gin.Context) {
// @Failure 500 "Internal Server Error"
// @router /ethernet-switch/{id} [put]
func (e *EthernetSwitchGinController) Update(ctx *gin.Context) {
reqDto, err := getRequestDtoAndRestoreBody[dtos.EthernetSwitchUpdateDto](ctx)
reqDto, err := getRequestDto[dtos.EthernetSwitchUpdateDto](ctx)
if err != nil {
abortWithStatusByErrorType(ctx, err)
return
Expand Down
4 changes: 2 additions & 2 deletions src/webapi/controllers/EthernetSwitchPortGinController.go
Original file line number Diff line number Diff line change
Expand Up @@ -124,7 +124,7 @@ func (e *EthernetSwitchPortGinController) GetPorts(ctx *gin.Context) {
// @Failure 500 "Internal Server Error"
// @router /ethernet-switch/{id}/port/ [post]
func (e *EthernetSwitchPortGinController) CreatePort(ctx *gin.Context) {
reqDto, err := getRequestDtoAndRestoreBody[dtos.EthernetSwitchPortCreateDto](ctx)
reqDto, err := getRequestDto[dtos.EthernetSwitchPortCreateDto](ctx)
if err != nil {
abortWithStatusByErrorType(ctx, err)
return
Expand Down Expand Up @@ -155,7 +155,7 @@ func (e *EthernetSwitchPortGinController) CreatePort(ctx *gin.Context) {
// @Failure 500 "Internal Server Error"
// @router /ethernet-switch/{id}/port/{portID} [put]
func (e *EthernetSwitchPortGinController) UpdatePort(ctx *gin.Context) {
reqDto, err := getRequestDtoAndRestoreBody[dtos.EthernetSwitchPortUpdateDto](ctx)
reqDto, err := getRequestDto[dtos.EthernetSwitchPortUpdateDto](ctx)
if err != nil {
abortWithStatusByErrorType(ctx, err)
return
Expand Down
12 changes: 2 additions & 10 deletions src/webapi/controllers/GinHelpers.go
Original file line number Diff line number Diff line change
@@ -1,11 +1,8 @@
package controllers

import (
"bytes"
"encoding/json"
"github.com/gin-gonic/gin"
"github.com/google/uuid"
"io/ioutil"
"net/http"
"rol/app/errors"
"rol/dtos"
Expand All @@ -20,19 +17,14 @@ func parseUUIDParam(ctx *gin.Context, paramName string) (uuid.UUID, error) {
return uuid, nil
}

//getRequestDtoAndRestoreBody parse json body to dto object and restore body in context
//getRequestDto parse json body to dto object and restore body in context
//for logging it later in middleware
func getRequestDtoAndRestoreBody[reqDtoType any](ctx *gin.Context) (reqDtoType, error) {
func getRequestDto[reqDtoType any](ctx *gin.Context) (reqDtoType, error) {
reqDto := new(reqDtoType)
err := ctx.ShouldBindJSON(reqDto)
if err != nil {
return *reqDto, errors.Validation.New("incorrect json")
}
buf, err := json.Marshal(reqDto)
if err != nil {
return *reqDto, errors.Internal.New("failed to marshal object back tp json for logging")
}
ctx.Request.Body = ioutil.NopCloser(bytes.NewBuffer(buf))
return *reqDto, nil
}

Expand Down
6 changes: 3 additions & 3 deletions src/webapi/controllers/HostNetworkVlanController.go
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,7 @@ func (h *HostNetworkVlanController) GetByName(ctx *gin.Context) {
// @Failure 500 "Internal Server Error"
// @router /host/network/vlan/ [post]
func (h *HostNetworkVlanController) Create(ctx *gin.Context) {
reqDto, err := getRequestDtoAndRestoreBody[dtos.HostNetworkVlanCreateDto](ctx)
reqDto, err := getRequestDto[dtos.HostNetworkVlanCreateDto](ctx)
if err != nil {
abortWithStatusByErrorType(ctx, err)
return
Expand Down Expand Up @@ -122,7 +122,7 @@ func (h *HostNetworkVlanController) Create(ctx *gin.Context) {
// @Failure 500 "Internal Server Error"
// @router /host/network/vlan/{name} [put]
func (h *HostNetworkVlanController) Update(ctx *gin.Context) {
reqDto, err := getRequestDtoAndRestoreBody[dtos.HostNetworkVlanUpdateDto](ctx)
reqDto, err := getRequestDto[dtos.HostNetworkVlanUpdateDto](ctx)
if err != nil {
abortWithStatusByErrorType(ctx, err)
return
Expand All @@ -134,7 +134,7 @@ func (h *HostNetworkVlanController) Update(ctx *gin.Context) {

//Delete host network vlan
//
//Params:
//Params:S
// ctx - gin context
//
// @Summary Delete host network vlan by name
Expand Down
22 changes: 12 additions & 10 deletions src/webapi/middleware/Logger.go
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,17 @@ func Logger(logger logrus.FieldLogger, notLogged ...string) gin.HandlerFunc {
start := time.Now()
blw := &bodyLogWriter{body: bytes.NewBufferString(""), ResponseWriter: c.Writer}
c.Writer = blw

var bodyBytes []byte
if c.Request.Body != nil {
bodyBytes, _ = ioutil.ReadAll(c.Request.Body)
}
reqBody := string(bodyBytes)
// Restore the io.ReadCloser to its original state
c.Request.Body = ioutil.NopCloser(bytes.NewBuffer(bodyBytes))

c.Next()

if strings.Contains(path, "/swagger/") {
return
}
Expand All @@ -67,6 +77,7 @@ func Logger(logger logrus.FieldLogger, notLogged ...string) gin.HandlerFunc {
clientIP := c.ClientIP()
clientUserAgent := c.Request.UserAgent()
referer := c.Request.Referer()
respBody := blw.body.String()

if _, ok := skip[path]; ok {
return
Expand Down Expand Up @@ -108,15 +119,6 @@ func Logger(logger logrus.FieldLogger, notLogged ...string) gin.HandlerFunc {
}
domain := c.Request.Host

var bodyBytes []byte
if c.Request.Body != nil {
bodyBytes, _ = ioutil.ReadAll(c.Request.Body)
}
// Restore the io.ReadCloser to its original state
c.Request.Body = ioutil.NopCloser(bytes.NewBuffer(bodyBytes))

respBody := blw.body.String()

var respHeadersArr []string
for header := range c.Writer.Header() {
respHeadersArr = append(respHeadersArr, header)
Expand All @@ -138,7 +140,7 @@ func Logger(logger logrus.FieldLogger, notLogged ...string) gin.HandlerFunc {
"userAgent": clientUserAgent,
"queryParams": queryParams,
"headers": headersString,
"requestBody": string(bodyBytes),
"requestBody": reqBody,
"requestID": requestID,
"customHeaders": customHeadersString,
"responseBody": respBody,
Expand Down