diff --git a/Dockerfile b/Dockerfile index 304684627..ce4b8449c 100644 --- a/Dockerfile +++ b/Dockerfile @@ -42,8 +42,8 @@ RUN go build -ldflags="-s -w \ -X 'mizuserver/pkg/version.SemVer=${SEM_VER}'" -o mizuagent . # Download Basenine executable, verify the sha1sum and move it to a directory in $PATH -ADD https://github.com/up9inc/basenine/releases/download/v0.2.12/basenine_linux_amd64 ./basenine_linux_amd64 -ADD https://github.com/up9inc/basenine/releases/download/v0.2.12/basenine_linux_amd64.sha256 ./basenine_linux_amd64.sha256 +ADD https://github.com/up9inc/basenine/releases/download/v0.2.13/basenine_linux_amd64 ./basenine_linux_amd64 +ADD https://github.com/up9inc/basenine/releases/download/v0.2.13/basenine_linux_amd64.sha256 ./basenine_linux_amd64.sha256 RUN shasum -a 256 -c basenine_linux_amd64.sha256 RUN chmod +x ./basenine_linux_amd64 diff --git a/agent/go.mod b/agent/go.mod index 06108bf9b..b0c7c1e5c 100644 --- a/agent/go.mod +++ b/agent/go.mod @@ -16,7 +16,7 @@ require ( github.com/op/go-logging v0.0.0-20160315200505-970db520ece7 github.com/orcaman/concurrent-map v0.0.0-20210106121528-16402b402231 github.com/patrickmn/go-cache v2.1.0+incompatible - github.com/up9inc/basenine/client/go v0.0.0-20211125004153-d0e8aec03fea + github.com/up9inc/basenine/client/go v0.0.0-20211130202146-cf837626a065 github.com/up9inc/mizu/shared v0.0.0 github.com/up9inc/mizu/tap v0.0.0 github.com/up9inc/mizu/tap/api v0.0.0 diff --git a/agent/go.sum b/agent/go.sum index 30e473925..54425e23c 100644 --- a/agent/go.sum +++ b/agent/go.sum @@ -450,8 +450,8 @@ github.com/ugorji/go v1.1.7 h1:/68gy2h+1mWMrwZFeD1kQialdSzAb432dtpeJ42ovdo= github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw= github.com/ugorji/go/codec v1.1.7 h1:2SvQaVZ1ouYrrKKwoSk2pzd4A9evlKJb9oTL+OaLUSs= github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY= -github.com/up9inc/basenine/client/go v0.0.0-20211125004153-d0e8aec03fea h1:GpJGO2PNTS/S0j2E1yqBi3ST/VXfokzuOrTQyaYgWnA= -github.com/up9inc/basenine/client/go v0.0.0-20211125004153-d0e8aec03fea/go.mod h1:SvJGPoa/6erhUQV7kvHBwM/0x5LyO6XaG2lUaCaKiUI= +github.com/up9inc/basenine/client/go v0.0.0-20211130202146-cf837626a065 h1:kfciLExAWkJMeMoKtnO5G5czqNv5/d0zjupG2nAeBmo= +github.com/up9inc/basenine/client/go v0.0.0-20211130202146-cf837626a065/go.mod h1:SvJGPoa/6erhUQV7kvHBwM/0x5LyO6XaG2lUaCaKiUI= github.com/vektah/gqlparser v1.1.2/go.mod h1:1ycwN7Ij5njmMkPPAOaRFY4rET2Enx7IkVv3vaXspKw= github.com/vishvananda/netns v0.0.0-20210104183010-2eb08e3e575f h1:p4VB7kIXpOQvVn1ZaTIVp+3vuYAXFe3OJEvjbUYJLaA= github.com/vishvananda/netns v0.0.0-20210104183010-2eb08e3e575f/go.mod h1:DD4vA1DwXk04H54A1oHXtwZmA0grkVMdPxx/VGLCah0= diff --git a/agent/pkg/controllers/entries_controller.go b/agent/pkg/controllers/entries_controller.go index 0834977ab..2d5e2e536 100644 --- a/agent/pkg/controllers/entries_controller.go +++ b/agent/pkg/controllers/entries_controller.go @@ -4,8 +4,10 @@ import ( "encoding/json" "mizuserver/pkg/models" "mizuserver/pkg/utils" + "mizuserver/pkg/validation" "net/http" "strconv" + "time" "github.com/gin-gonic/gin" @@ -36,6 +38,62 @@ func Error(c *gin.Context, err error) bool { return false // no error, can continue } +func GetEntries(c *gin.Context) { + entriesRequest := &models.EntriesRequest{} + + if err := c.BindQuery(entriesRequest); err != nil { + c.JSON(http.StatusBadRequest, err) + } + validationError := validation.Validate(entriesRequest) + if validationError != nil { + c.JSON(http.StatusBadRequest, validationError) + } + + if entriesRequest.TimeoutMs == 0 { + entriesRequest.TimeoutMs = 3000 + } + + data, meta, err := basenine.Fetch(shared.BasenineHost, shared.BaseninePort, + entriesRequest.LeftOff, entriesRequest.Direction, entriesRequest.Query, + entriesRequest.Limit, time.Duration(entriesRequest.TimeoutMs)*time.Millisecond) + if err != nil { + c.JSON(http.StatusInternalServerError, validationError) + } + + response := &models.EntriesResponse{} + var dataSlice []interface{} + + for _, row := range data { + var dataMap map[string]interface{} + err = json.Unmarshal(row, &dataMap) + if err != nil { + c.JSON(http.StatusBadRequest, gin.H{ + "error": true, + "type": "error", + "autoClose": "5000", + "msg": string(row), + }) + return // exit + } + + base := dataMap["base"].(map[string]interface{}) + base["id"] = uint(dataMap["id"].(float64)) + + dataSlice = append(dataSlice, base) + } + + var metadata *basenine.Metadata + err = json.Unmarshal(meta, &metadata) + if err != nil { + logger.Log.Debugf("Error recieving metadata: %v", err.Error()) + } + + response.Data = dataSlice + response.Meta = metadata + + c.JSON(http.StatusOK, response) +} + func GetEntry(c *gin.Context) { id, _ := strconv.Atoi(c.Param("id")) var entry tapApi.MizuEntry diff --git a/agent/pkg/models/models.go b/agent/pkg/models/models.go index 17113180e..9094ae5b1 100644 --- a/agent/pkg/models/models.go +++ b/agent/pkg/models/models.go @@ -16,6 +16,19 @@ func GetEntry(r *tapApi.MizuEntry, v tapApi.DataUnmarshaler) error { return v.UnmarshalData(r) } +type EntriesRequest struct { + LeftOff int `form:"leftOff" validate:"required,min=-1"` + Direction int `form:"direction" validate:"required,oneof='1' '-1'"` + Query string `form:"query"` + Limit int `form:"limit" validate:"required,min=1"` + TimeoutMs int `form:"timeoutMs" validate:"min=1"` +} + +type EntriesResponse struct { + Data []interface{} `json:"data"` + Meta *basenine.Metadata `json:"meta"` +} + type WebSocketEntryMessage struct { *shared.WebSocketMessageMetadata Data map[string]interface{} `json:"data,omitempty"` diff --git a/agent/pkg/routes/entries_routes.go b/agent/pkg/routes/entries_routes.go index 12a597461..d931196a9 100644 --- a/agent/pkg/routes/entries_routes.go +++ b/agent/pkg/routes/entries_routes.go @@ -10,5 +10,6 @@ import ( func EntriesRoutes(ginApp *gin.Engine) { routeGroup := ginApp.Group("/entries") + routeGroup.GET("/", controllers.GetEntries) // get entries (base/thin entries) and metadata routeGroup.GET("/:id", controllers.GetEntry) // get single (full) entry } diff --git a/debug.Dockerfile b/debug.Dockerfile index b6af5df92..9673a4048 100644 --- a/debug.Dockerfile +++ b/debug.Dockerfile @@ -37,8 +37,8 @@ COPY agent . RUN go build -gcflags="all=-N -l" -o mizuagent . # Download Basenine executable, verify the sha1sum and move it to a directory in $PATH -ADD https://github.com/up9inc/basenine/releases/download/v0.2.12/basenine_linux_amd64 ./basenine_linux_amd64 -ADD https://github.com/up9inc/basenine/releases/download/v0.2.12/basenine_linux_amd64.sha256 ./basenine_linux_amd64.sha256 +ADD https://github.com/up9inc/basenine/releases/download/v0.2.13/basenine_linux_amd64 ./basenine_linux_amd64 +ADD https://github.com/up9inc/basenine/releases/download/v0.2.13/basenine_linux_amd64.sha256 ./basenine_linux_amd64.sha256 RUN shasum -a 256 -c basenine_linux_amd64.sha256 RUN chmod +x ./basenine_linux_amd64