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  }