Skip to content
Snippets Groups Projects
Select Git revision
  • 55f9bf09b419a5ef3c148ed98c8e3de7cb667681
  • master default protected
  • feature/PRXS-3383-CollectionsRankSort
  • feature/3149-LocaleCodeAsID
  • refactor/PRXS-3053-RefactorFiles
  • feature/3146-UpdateItemStorageInterface
  • feature/3180-RemoveOldHugo
  • feature/3264-FixExtracTranslationsArrays
  • feature/3274-ObjectIndexesFixes
  • feature/2931-AllowPartialDecode
  • feature/3055-ItemsRestAPI
  • feature/3082-gitlab-triage
  • feature/3055-LogsRestAPI
  • feature/2985-add-preset-settings
  • feature/2929-MultiInvitationFix
  • feature/2929-MultiInvitation
  • docs/2889-HugoModules
  • docs/2954-CheckResource
  • docs/3012-SplitBuild
  • docs/3024-PerxisWebStatic
  • feature/2911-GetArchive
  • v0.27.0
  • v0.21.0
  • v0.19.0
  • v0.20.0
25 results

manager.proto

Blame
  • log.go 2.58 KiB
    package log
    
    import (
    	"encoding/json"
    	"time"
    
    	pb "git.perx.ru/perxis/perxis-go/proto/log"
    	"github.com/golang/protobuf/ptypes/any"
    	"google.golang.org/protobuf/proto"
    	"google.golang.org/protobuf/types/known/anypb"
    	"google.golang.org/protobuf/types/known/timestamppb"
    	wrappers "google.golang.org/protobuf/types/known/wrapperspb"
    )
    
    type Level int
    
    const (
    	Info     = Level(pb.LogLevel_INFO)
    	Warning  = Level(pb.LogLevel_WARNING)
    	Error    = Level(pb.LogLevel_ERROR)
    	Critical = Level(pb.LogLevel_CRITICAL)
    	Fatal    = Level(pb.LogLevel_FATAL)
    )
    
    func (l Level) String() string {
    	s := pb.LogLevel_name[int32(l)]
    	if s == "" {
    		s = "UNKNOWN"
    	}
    	return s
    }
    
    type Entry struct {
    	ID        string      `json:"id" bson:"id"`
    	Timestamp time.Time   `json:"timestamp,omitempty" bson:"timestamp,omitempty"`
    	LogLevel  Level       `json:"log_level,omitempty" bson:"log_level,omitempty"`
    	Message   string      `json:"message,omitempty" bson:"message,omitempty"`
    	Category  string      `json:"category,omitempty" bson:"category,omitempty"`
    	Component string      `json:"component,omitempty" bson:"component,omitempty"`
    	Event     string      `json:"event,omitempty" bson:"event,omitempty"`
    	Object    string      `json:"object,omitempty" bson:"object,omitempty"`
    	Caller    string      `json:"caller,omitempty" bson:"caller,omitempty"`
    	Attr      interface{} `json:"attr,omitempty" bson:"attr,omitempty"`
    	Tags      []string    `json:"tags,omitempty" bson:"tags,omitempty"`
    }
    
    func convertInterfaceToAny(v interface{}) (*any.Any, error) {
    	anyValue := &any.Any{}
    	bytes, _ := json.Marshal(v)
    	bytesValue := &wrappers.BytesValue{
    		Value: bytes,
    	}
    	err := anypb.MarshalFrom(anyValue, bytesValue, proto.MarshalOptions{})
    	return anyValue, err
    }
    
    func EntryToPB(entry *Entry) *pb.LogEntry {
    	logEntry := &pb.LogEntry{
    		Id:        entry.ID,
    		Timestamp: timestamppb.New(entry.Timestamp),
    		Level:     pb.LogLevel(entry.LogLevel),
    		Message:   entry.Message,
    		Category:  entry.Category,
    		Component: entry.Component,
    		Event:     entry.Event,
    		Object:    entry.Object,
    		Caller:    entry.Caller,
    		Tags:      entry.Tags,
    	}
    	logEntry.Attr, _ = convertInterfaceToAny(entry.Attr)
    
    	return logEntry
    }
    
    func EntryFromPB(request *pb.LogEntry) *Entry {
    	return &Entry{
    		ID:        request.Id,
    		Timestamp: request.Timestamp.AsTime(),
    		LogLevel:  Level(request.Level),
    		Message:   request.Message,
    		Category:  request.Category,
    		Component: request.Component,
    		Event:     request.Event,
    		Object:    request.Object,
    		Caller:    request.Caller,
    		Attr:      request.Attr, // todo: как с этим работать?
    		Tags:      request.Tags,
    	}
    }