github.com/angryronald/go-kit@v0.0.0-20240505173814-ff2bd9c79dbf/generic/http/client/client.log.subscriber.go (about) 1 package client 2 3 import ( 4 "context" 5 "time" 6 7 "gocloud.dev/pubsub" 8 9 "github.com/google/uuid" 10 "github.com/sirupsen/logrus" 11 12 "github.com/angryronald/go-kit/cast" 13 "github.com/angryronald/go-kit/constant" 14 "github.com/angryronald/go-kit/subscriber" 15 ) 16 17 type ClientRequestLogSubscriber struct { 18 subscription map[string]*pubsub.Subscription 19 service ClientRequestLogServiceInterface 20 } 21 22 func (s *ClientRequestLogSubscriber) Run(ctx context.Context) { 23 go s.onClientRequestLogCreated(ctx) 24 } 25 26 func (s *ClientRequestLogSubscriber) onClientRequestLogCreated(ctx context.Context) { 27 for { 28 msg, err := s.subscription[string(constant.CLIENT_REQUEST_LOG_CREATED_EVENT)].Receive(ctx) 29 if err != nil { 30 logrus.Debugf("Receiving message: %v", err) 31 break 32 } 33 34 var clientRequestLogEvent ClientRequestLog 35 cast.FromBytes(msg.Body, &clientRequestLogEvent) 36 37 clientRequestLog := &ClientRequestLog{ 38 CalledAt: clientRequestLogEvent.CalledAt, 39 RequestID: clientRequestLogEvent.RequestID, 40 URLPath: clientRequestLogEvent.URLPath, 41 Method: string(clientRequestLogEvent.Method), 42 Headers: clientRequestLogEvent.Headers, 43 ClientName: clientRequestLogEvent.ClientName, 44 RequestPayload: clientRequestLogEvent.RequestPayload, 45 ResponsePayload: clientRequestLogEvent.ResponsePayload, 46 Latency: clientRequestLogEvent.Latency, 47 StatusCode: clientRequestLogEvent.StatusCode, 48 CreatedAt: time.Now().UTC(), 49 CreatedBy: clientRequestLogEvent.TriggeredBy, 50 } 51 52 clientRequestLog.ID, _ = uuid.NewRandom() 53 54 if err := s.service.Add(ctx, clientRequestLog); err != nil { 55 logrus.Debugf("failed to add client request log: %v", err) 56 break 57 } 58 59 msg.Ack() 60 } 61 } 62 63 func NewClientRequestLogSubscriber( 64 subscription map[string]*pubsub.Subscription, 65 service ClientRequestLogServiceInterface, 66 ) subscriber.Subscriber { 67 return &ClientRequestLogSubscriber{ 68 subscription: subscription, 69 service: service, 70 } 71 }