Skip to content
Snippets Groups Projects
Commit a86999a6 authored by Alex Petraky's avatar Alex Petraky :basketball_player_tone1: Committed by Pavel Antonov
Browse files

feat: Обновлен сервис Logs после изменений в прото-спецификации сервиса

parent b5ccfb84
Branches
Tags
No related merge requests found
...@@ -4,7 +4,6 @@ import ( ...@@ -4,7 +4,6 @@ import (
"context" "context"
errorsgrpc "git.perx.ru/perxis/perxis-go/pkg/errors/grpc" errorsgrpc "git.perx.ru/perxis/perxis-go/pkg/errors/grpc"
"git.perx.ru/perxis/perxis-go/pkg/options"
pb "git.perx.ru/perxis/perxis-go/proto/logs" pb "git.perx.ru/perxis/perxis-go/proto/logs"
"google.golang.org/grpc" "google.golang.org/grpc"
) )
...@@ -36,15 +35,8 @@ func (c *Client) Log(ctx context.Context, entries []*Entry) error { ...@@ -36,15 +35,8 @@ func (c *Client) Log(ctx context.Context, entries []*Entry) error {
return nil return nil
} }
func (c *Client) Find(ctx context.Context, filter *Filter, opts *options.FindOptions) (*FindResult, error) { func (c *Client) Find(ctx context.Context, filter *Filter, opts *FindOptions) (*FindResult, error) {
request := new(pb.FindRequest) request := FindRequestToPB(&FindRequest{Filter: filter, Options: opts})
if filter != nil {
request.Filter = &pb.Filter{Q: filter.Q}
}
request.Options = options.FindOptionsToPB(opts)
response, err := c.client.Find(ctx, request) response, err := c.client.Find(ctx, request)
if err != nil { if err != nil {
return nil, err return nil, err
......
...@@ -10,7 +10,6 @@ import ( ...@@ -10,7 +10,6 @@ import (
"context" "context"
"git.perx.ru/perxis/perxis-go/logs" "git.perx.ru/perxis/perxis-go/logs"
"git.perx.ru/perxis/perxis-go/pkg/options"
"go.uber.org/zap" "go.uber.org/zap"
) )
...@@ -40,7 +39,7 @@ func (m *errorLoggingMiddleware) Delete(ctx context.Context, filter *logs.Filter ...@@ -40,7 +39,7 @@ func (m *errorLoggingMiddleware) Delete(ctx context.Context, filter *logs.Filter
return m.next.Delete(ctx, filter) return m.next.Delete(ctx, filter)
} }
func (m *errorLoggingMiddleware) Find(ctx context.Context, filter *logs.Filter, options *options.FindOptions) (fp1 *logs.FindResult, err error) { func (m *errorLoggingMiddleware) Find(ctx context.Context, filter *logs.Filter, options *logs.FindOptions) (fp1 *logs.FindResult, err error) {
logger := m.logger logger := m.logger
defer func() { defer func() {
if err != nil { if err != nil {
......
...@@ -12,7 +12,6 @@ import ( ...@@ -12,7 +12,6 @@ import (
"git.perx.ru/perxis/perxis-go/logs" "git.perx.ru/perxis/perxis-go/logs"
"git.perx.ru/perxis/perxis-go/pkg/auth" "git.perx.ru/perxis/perxis-go/pkg/auth"
"git.perx.ru/perxis/perxis-go/pkg/options"
"go.uber.org/zap" "go.uber.org/zap"
) )
...@@ -50,7 +49,7 @@ func (m *accessLoggingMiddleware) Delete(ctx context.Context, filter *logs.Filte ...@@ -50,7 +49,7 @@ func (m *accessLoggingMiddleware) Delete(ctx context.Context, filter *logs.Filte
return err return err
} }
func (m *accessLoggingMiddleware) Find(ctx context.Context, filter *logs.Filter, options *options.FindOptions) (fp1 *logs.FindResult, err error) { func (m *accessLoggingMiddleware) Find(ctx context.Context, filter *logs.Filter, options *logs.FindOptions) (fp1 *logs.FindResult, err error) {
begin := time.Now() begin := time.Now()
m.logger.Debug("Find.Request", m.logger.Debug("Find.Request",
......
...@@ -11,7 +11,6 @@ import ( ...@@ -11,7 +11,6 @@ import (
"fmt" "fmt"
"git.perx.ru/perxis/perxis-go/logs" "git.perx.ru/perxis/perxis-go/logs"
"git.perx.ru/perxis/perxis-go/pkg/options"
"go.uber.org/zap" "go.uber.org/zap"
) )
...@@ -43,7 +42,7 @@ func (m *recoveringMiddleware) Delete(ctx context.Context, filter *logs.Filter) ...@@ -43,7 +42,7 @@ func (m *recoveringMiddleware) Delete(ctx context.Context, filter *logs.Filter)
return m.next.Delete(ctx, filter) return m.next.Delete(ctx, filter)
} }
func (m *recoveringMiddleware) Find(ctx context.Context, filter *logs.Filter, options *options.FindOptions) (fp1 *logs.FindResult, err error) { func (m *recoveringMiddleware) Find(ctx context.Context, filter *logs.Filter, options *logs.FindOptions) (fp1 *logs.FindResult, err error) {
logger := m.logger logger := m.logger
defer func() { defer func() {
if r := recover(); r != nil { if r := recover(); r != nil {
......
...@@ -13,7 +13,6 @@ import ( ...@@ -13,7 +13,6 @@ import (
pkgId "git.perx.ru/perxis/perxis-go/id" pkgId "git.perx.ru/perxis/perxis-go/id"
"git.perx.ru/perxis/perxis-go/logs" "git.perx.ru/perxis/perxis-go/logs"
"git.perx.ru/perxis/perxis-go/pkg/auth" "git.perx.ru/perxis/perxis-go/pkg/auth"
"git.perx.ru/perxis/perxis-go/pkg/options"
"git.perx.ru/perxis/perxis-go/pkg/telemetry/metrics" "git.perx.ru/perxis/perxis-go/pkg/telemetry/metrics"
"go.opentelemetry.io/otel" "go.opentelemetry.io/otel"
"go.opentelemetry.io/otel/attribute" "go.opentelemetry.io/otel/attribute"
...@@ -93,7 +92,7 @@ func (_d telemetryMiddleware) Delete(ctx context.Context, filter *logs.Filter) ( ...@@ -93,7 +92,7 @@ func (_d telemetryMiddleware) Delete(ctx context.Context, filter *logs.Filter) (
} }
// Find implements logs.Service // Find implements logs.Service
func (_d telemetryMiddleware) Find(ctx context.Context, filter *logs.Filter, options *options.FindOptions) (fp1 *logs.FindResult, err error) { func (_d telemetryMiddleware) Find(ctx context.Context, filter *logs.Filter, options *logs.FindOptions) (fp1 *logs.FindResult, err error) {
var att = []attribute.KeyValue{ var att = []attribute.KeyValue{
attribute.String("service", "Service"), attribute.String("service", "Service"),
attribute.String("method", "Find"), attribute.String("method", "Find"),
......
// Code generated by mockery v2.40.1. DO NOT EDIT. // Code generated by mockery v2.46.3. DO NOT EDIT.
package mocks package mocks
...@@ -7,8 +7,6 @@ import ( ...@@ -7,8 +7,6 @@ import (
logs "git.perx.ru/perxis/perxis-go/logs" logs "git.perx.ru/perxis/perxis-go/logs"
mock "github.com/stretchr/testify/mock" mock "github.com/stretchr/testify/mock"
options "git.perx.ru/perxis/perxis-go/pkg/options"
) )
// Service is an autogenerated mock type for the Service type // Service is an autogenerated mock type for the Service type
...@@ -34,9 +32,9 @@ func (_m *Service) Delete(ctx context.Context, filter *logs.Filter) error { ...@@ -34,9 +32,9 @@ func (_m *Service) Delete(ctx context.Context, filter *logs.Filter) error {
return r0 return r0
} }
// Find provides a mock function with given fields: ctx, filter, _a2 // Find provides a mock function with given fields: ctx, filter, options
func (_m *Service) Find(ctx context.Context, filter *logs.Filter, _a2 *options.FindOptions) (*logs.FindResult, error) { func (_m *Service) Find(ctx context.Context, filter *logs.Filter, options *logs.FindOptions) (*logs.FindResult, error) {
ret := _m.Called(ctx, filter, _a2) ret := _m.Called(ctx, filter, options)
if len(ret) == 0 { if len(ret) == 0 {
panic("no return value specified for Find") panic("no return value specified for Find")
...@@ -44,19 +42,19 @@ func (_m *Service) Find(ctx context.Context, filter *logs.Filter, _a2 *options.F ...@@ -44,19 +42,19 @@ func (_m *Service) Find(ctx context.Context, filter *logs.Filter, _a2 *options.F
var r0 *logs.FindResult var r0 *logs.FindResult
var r1 error var r1 error
if rf, ok := ret.Get(0).(func(context.Context, *logs.Filter, *options.FindOptions) (*logs.FindResult, error)); ok { if rf, ok := ret.Get(0).(func(context.Context, *logs.Filter, *logs.FindOptions) (*logs.FindResult, error)); ok {
return rf(ctx, filter, _a2) return rf(ctx, filter, options)
} }
if rf, ok := ret.Get(0).(func(context.Context, *logs.Filter, *options.FindOptions) *logs.FindResult); ok { if rf, ok := ret.Get(0).(func(context.Context, *logs.Filter, *logs.FindOptions) *logs.FindResult); ok {
r0 = rf(ctx, filter, _a2) r0 = rf(ctx, filter, options)
} else { } else {
if ret.Get(0) != nil { if ret.Get(0) != nil {
r0 = ret.Get(0).(*logs.FindResult) r0 = ret.Get(0).(*logs.FindResult)
} }
} }
if rf, ok := ret.Get(1).(func(context.Context, *logs.Filter, *options.FindOptions) error); ok { if rf, ok := ret.Get(1).(func(context.Context, *logs.Filter, *logs.FindOptions) error); ok {
r1 = rf(ctx, filter, _a2) r1 = rf(ctx, filter, options)
} else { } else {
r1 = ret.Error(1) r1 = ret.Error(1)
} }
......
// Code generated by mockery v2.40.1. DO NOT EDIT. // Code generated by mockery v2.46.3. DO NOT EDIT.
package mocks package mocks
...@@ -7,8 +7,6 @@ import ( ...@@ -7,8 +7,6 @@ import (
logs "git.perx.ru/perxis/perxis-go/logs" logs "git.perx.ru/perxis/perxis-go/logs"
mock "github.com/stretchr/testify/mock" mock "github.com/stretchr/testify/mock"
options "git.perx.ru/perxis/perxis-go/pkg/options"
) )
// Storage is an autogenerated mock type for the Storage type // Storage is an autogenerated mock type for the Storage type
...@@ -34,41 +32,34 @@ func (_m *Storage) Delete(ctx context.Context, filter *logs.Filter) error { ...@@ -34,41 +32,34 @@ func (_m *Storage) Delete(ctx context.Context, filter *logs.Filter) error {
return r0 return r0
} }
// Find provides a mock function with given fields: ctx, filter, _a2 // Find provides a mock function with given fields: ctx, filter, options
func (_m *Storage) Find(ctx context.Context, filter *logs.Filter, _a2 *options.FindOptions) ([]*logs.Entry, int, error) { func (_m *Storage) Find(ctx context.Context, filter *logs.Filter, options *logs.FindOptions) ([]*logs.Entry, error) {
ret := _m.Called(ctx, filter, _a2) ret := _m.Called(ctx, filter, options)
if len(ret) == 0 { if len(ret) == 0 {
panic("no return value specified for Find") panic("no return value specified for Find")
} }
var r0 []*logs.Entry var r0 []*logs.Entry
var r1 int var r1 error
var r2 error if rf, ok := ret.Get(0).(func(context.Context, *logs.Filter, *logs.FindOptions) ([]*logs.Entry, error)); ok {
if rf, ok := ret.Get(0).(func(context.Context, *logs.Filter, *options.FindOptions) ([]*logs.Entry, int, error)); ok { return rf(ctx, filter, options)
return rf(ctx, filter, _a2)
} }
if rf, ok := ret.Get(0).(func(context.Context, *logs.Filter, *options.FindOptions) []*logs.Entry); ok { if rf, ok := ret.Get(0).(func(context.Context, *logs.Filter, *logs.FindOptions) []*logs.Entry); ok {
r0 = rf(ctx, filter, _a2) r0 = rf(ctx, filter, options)
} else { } else {
if ret.Get(0) != nil { if ret.Get(0) != nil {
r0 = ret.Get(0).([]*logs.Entry) r0 = ret.Get(0).([]*logs.Entry)
} }
} }
if rf, ok := ret.Get(1).(func(context.Context, *logs.Filter, *options.FindOptions) int); ok { if rf, ok := ret.Get(1).(func(context.Context, *logs.Filter, *logs.FindOptions) error); ok {
r1 = rf(ctx, filter, _a2) r1 = rf(ctx, filter, options)
} else {
r1 = ret.Get(1).(int)
}
if rf, ok := ret.Get(2).(func(context.Context, *logs.Filter, *options.FindOptions) error); ok {
r2 = rf(ctx, filter, _a2)
} else { } else {
r2 = ret.Error(2) r1 = ret.Error(1)
} }
return r0, r1, r2 return r0, r1
} }
// Init provides a mock function with given fields: ctx // Init provides a mock function with given fields: ctx
......
...@@ -2,10 +2,12 @@ package logs ...@@ -2,10 +2,12 @@ package logs
import ( import (
"context" "context"
"time"
itemstransportgrpc "git.perx.ru/perxis/perxis-go/pkg/items/transport/grpc" itemstransportgrpc "git.perx.ru/perxis/perxis-go/pkg/items/transport/grpc"
"git.perx.ru/perxis/perxis-go/pkg/options" "git.perx.ru/perxis/perxis-go/pkg/options"
pb "git.perx.ru/perxis/perxis-go/proto/logs" pb "git.perx.ru/perxis/perxis-go/proto/logs"
"google.golang.org/protobuf/types/known/timestamppb"
) )
const ServiceName = "logs" const ServiceName = "logs"
...@@ -16,7 +18,7 @@ type Service interface { ...@@ -16,7 +18,7 @@ type Service interface {
Log(ctx context.Context, entries []*Entry) error Log(ctx context.Context, entries []*Entry) error
// Find метод для поиска логов по заданным параметрам // Find метод для поиска логов по заданным параметрам
Find(ctx context.Context, filter *Filter, options *options.FindOptions) (*FindResult, error) Find(ctx context.Context, filter *Filter, options *FindOptions) (*FindResult, error)
// Delete метод для удаления логов по заданным параметрам // Delete метод для удаления логов по заданным параметрам
Delete(ctx context.Context, filter *Filter) error Delete(ctx context.Context, filter *Filter) error
...@@ -26,18 +28,43 @@ type Filter struct { ...@@ -26,18 +28,43 @@ type Filter struct {
Q []string Q []string
} }
type FindRequest struct {
Filter *Filter
Options *FindOptions
}
type FindResult struct { type FindResult struct {
// Найденные записи лога
Entries []*Entry Entries []*Entry
// Использовавшийся для поиска фильтр
Filter *Filter Filter *Filter
// Использовавшиеся для поиска опции
Options *options.FindOptions Options *options.FindOptions
Total uint32 // Запрос для получения следующей страницы
Next *FindRequest
// Запрос для получения предыдущей страницы
Prev *FindRequest
} }
func FindResultToPB(result *FindResult) *pb.FindResult { type FindOptions struct {
findResult := &pb.FindResult{ // Сортировка результатов
Total: result.Total, Sort []string
// Включить поля в результаты
Fields []string
// Исключить поля из результатов
ExcludeFields bool
// Ограничение количества результатов
Limit int
// Ограничение результатов по времени начиная с этим временем (pagination)
From time.Time
// Ограничение результатов по времени заканчивая этим временем (pagination)
To time.Time
} }
// FindResultToPB перевод в proto представление FindResult
func FindResultToPB(result *FindResult) *pb.FindResult {
findResult := &pb.FindResult{Total: 0} // поле стало deprecated всегда возвращаем 0
entries := make([]*pb.LogEntry, 0, len(result.Entries)) entries := make([]*pb.LogEntry, 0, len(result.Entries))
for _, e := range result.Entries { for _, e := range result.Entries {
entries = append(entries, EntryToPB(e)) entries = append(entries, EntryToPB(e))
...@@ -51,13 +78,20 @@ func FindResultToPB(result *FindResult) *pb.FindResult { ...@@ -51,13 +78,20 @@ func FindResultToPB(result *FindResult) *pb.FindResult {
findResult.Options, _ = itemstransportgrpc.PtrServicesFindOptionsToProto(result.Options) findResult.Options, _ = itemstransportgrpc.PtrServicesFindOptionsToProto(result.Options)
} }
if result.Next != nil {
findResult.Next = FindRequestToPB(result.Next)
}
if result.Prev != nil {
findResult.Prev = FindRequestToPB(result.Prev)
}
return findResult return findResult
} }
// FindResultFromPB перевод из proto представления FindResult
func FindResultFromPB(result *pb.FindResult) *FindResult { func FindResultFromPB(result *pb.FindResult) *FindResult {
findResult := &FindResult{ findResult := new(FindResult)
Total: result.Total,
}
entries := make([]*Entry, 0, len(result.Entries)) entries := make([]*Entry, 0, len(result.Entries))
for _, e := range result.Entries { for _, e := range result.Entries {
...@@ -72,5 +106,80 @@ func FindResultFromPB(result *pb.FindResult) *FindResult { ...@@ -72,5 +106,80 @@ func FindResultFromPB(result *pb.FindResult) *FindResult {
findResult.Options, _ = itemstransportgrpc.ProtoToPtrServicesFindOptions(result.Options) findResult.Options, _ = itemstransportgrpc.ProtoToPtrServicesFindOptions(result.Options)
} }
if result.Next != nil {
findResult.Next = FindRequestFromPB(result.Next)
}
if result.Prev != nil {
findResult.Prev = FindRequestFromPB(result.Prev)
}
return findResult return findResult
} }
// FindRequestToPB перевод в proto представление FindRequest
func FindRequestToPB(request *FindRequest) *pb.FindRequest {
if request == nil {
return nil
}
req := new(pb.FindRequest)
if request.Filter != nil {
req.Filter = &pb.Filter{Q: request.Filter.Q}
}
if request.Options != nil {
req.Options = FindOptionsToPB(request.Options)
}
return req
}
// FindRequestFromPB перевод из proto представления FindRequest
func FindRequestFromPB(request *pb.FindRequest) *FindRequest {
if request == nil {
return nil
}
req := new(FindRequest)
if request.Filter != nil {
req.Filter = &Filter{Q: request.Filter.Q}
}
if request.Options != nil {
req.Options = FindOptionsFromPB(request.Options)
}
return req
}
// FindOptionsToPB перевод в proto представление FindOptions
func FindOptionsToPB(result *FindOptions) *pb.FindOptions {
if result == nil {
return nil
}
return &pb.FindOptions{
Sort: result.Sort,
Fields: result.Fields,
ExcludeFields: result.ExcludeFields,
Limit: int32(result.Limit),
From: timestamppb.New(result.From),
To: timestamppb.New(result.To),
}
}
// FindOptionsFromPB перевод из proto представления FindOptions
func FindOptionsFromPB(result *pb.FindOptions) *FindOptions {
if result == nil {
return nil
}
return &FindOptions{
Sort: result.Sort,
Fields: result.Fields,
ExcludeFields: result.ExcludeFields,
Limit: int(result.Limit),
From: result.From.AsTime(),
To: result.To.AsTime(),
}
}
...@@ -2,14 +2,12 @@ package logs ...@@ -2,14 +2,12 @@ package logs
import ( import (
"context" "context"
"git.perx.ru/perxis/perxis-go/pkg/options"
) )
type Storage interface { type Storage interface {
Init(ctx context.Context) error Init(ctx context.Context) error
Reset(ctx context.Context) error Reset(ctx context.Context) error
Log(ctx context.Context, entry []*Entry) error Log(ctx context.Context, entry []*Entry) error
Find(ctx context.Context, filter *Filter, options *options.FindOptions) ([]*Entry, int, error) Find(ctx context.Context, filter *Filter, options *FindOptions) ([]*Entry, error)
Delete(ctx context.Context, filter *Filter) error Delete(ctx context.Context, filter *Filter) error
} }
Subproject commit 806e7b2bd397ed2f3f980a73b4ac7b5a9c47b492 Subproject commit 2b68dc129457f993c2d55aac9322fda9d582fbf4
This diff is collapsed.
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment