corel

package
v1.2.30-betax20 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 15, 2023 License: MIT Imports: 14 Imported by: 0

README

COREL (Correlation in Distributed Logs)

Usages

There are multiple places to use corel for establishment of related logs in microservice architecture. but 2 of them are most important. One while making intranet service-to-service call and the other while pushing any message to kafka topic or rabbitmq exchange.

For Api Call
import "gitlab.com/dotpe/mindbenders/corel"
....
req, err := http.NewRequest("GET",url,nil)
if err != nil {
	return res, err
}
corel.AttachCorelToHttpFromCtx(ctx, req)

corel.AttachCorelToHttpFromCtx(ctx, req) is important while adding corel information as header for http call.

For Pushing to Topic
publisher side
import "gitlab.com/dotpe/mindbenders/corel"
...
func getProduceTaskRequest(ctx context.Context, data interface{}, topic string) (*ProduceTaskRequest, error) {
	corelId, _ := corel.GetCorelationId(ctx)
	reqData := ProduceTaskRequestData{
		Data: data,
		Correlation: corel.EncodeCorel(corelId.Child()),
	}

	reqDataBytes, err := json.Marshal(reqData)
	if err != nil {
		return  nil, errors.New("unable to create produce task request")
	}

	taskRequest := ProduceTaskRequest{
		ReqBytes: reqDataBytes,
		Topic: "topic.x.y.z",
	}
	return &taskRequest, nil
}
consumer side
import "gitlab.com/dotpe/mindbenders/corel"

...
var tmp struct {
	CoRelationId string  `json:"correlation"`
	Order producer.UserOrderKafkaMsg `json:"data"`
}
if  err := json.Unmarshal(raw, &tmp); err != nil {
	return err
}
oe.CoRelationId = corel.DecodeCorelationId(tmp.CoRelationId).Sibling()
oe.Order = &tmp.Order
return  nil

.............
ctx := corel.NewCorelCtxFromCorel(oe.CoRelationId)

Documentation

Overview

The code defines a Go package called "corel" that provides functionality for generating and managing correlation IDs.

Index

Constants

View Source
const CtxCorelLocator corelstr = "corel"

Variables

This section is empty.

Functions

func AmqpLoader added in v1.2.22

func AmqpLoader(ctx context.Context, headers amqp.Table) amqp.Table

unloading of corel info from ctx and loading it in kafka header

func AmqpUnloader added in v1.2.22

func AmqpUnloader(ctx context.Context, headers amqp.Table) context.Context

This will be used to load corel from kafka message's header to context unloading of corel info from header and loading it in ctx

func EncodeCorel added in v1.2.12

func EncodeCorel(corelid *CoRelationId) string

func HttpCorelLoader added in v1.2.14

func HttpCorelLoader(ctx context.Context, header http.Header) http.Header

* inside header it will write `Corel`="base64 of json"

func HttpCorelUnLoader added in v1.2.14

func HttpCorelUnLoader(ctx context.Context, header http.Header) context.Context

*The below Unloader will work with gin.Context only.

func KafkaCorelLoader added in v1.2.14

func KafkaCorelLoader(ctx context.Context, headers []kafka.Header) []kafka.Header

unloading of corel info from ctx and loading it in kafka header

func KafkaCorelUnLoader added in v1.2.14

func KafkaCorelUnLoader(ctx context.Context, headers []kafka.Header) context.Context

This will be used to load corel from kafka message's header to context unloading of corel info from header and loading it in ctx

func NewChildContext

func NewChildContext(ctx context.Context, ids ...string) context.Context

-- if len(ids)>0 then a new corel will be created and this will be set in cotenxt.WithValue with the createdCorelId attached -- else if the passed context have a corel, *The return context is context.WithValue and in th corel it has the child corel of that of passed corel context

func NewContext

func NewContext(corelid *CoRelationId) context.Context

func NewOrphanContext

func NewOrphanContext(ids ...string) context.Context

Types

type CoRelationId

type CoRelationId struct {
	SessionId,
	RequestId,
	AppRequestId,
	RequestSource string
	// contains filtered or unexported fields
}

CoRelationId correlationData

func DecodeCorel added in v1.2.12

func DecodeCorel(encoded []byte) (corelid *CoRelationId, err error)

func GetCorelationId

func GetCorelationId(ctx context.Context) *CoRelationId

concurrent unsafe it adds corelId if not found

func NewCorelId

func NewCorelId(ids ...string) *CoRelationId

ids[0] - sessionId ids[1] - requestId ids[3] - subRequestId ids[4] - requestSource

func NewCorelIdFromHttp

func NewCorelIdFromHttp(header http.Header) *CoRelationId

func ReadCorelId

func ReadCorelId(ctx context.Context) (*CoRelationId, error)

func (*CoRelationId) Child added in v1.2.13

func (corelid *CoRelationId) Child() *CoRelationId

func (*CoRelationId) GetRequestId added in v1.2.12

func (corelid *CoRelationId) GetRequestId() string

func (*CoRelationId) GetSessionId added in v1.2.12

func (corelid *CoRelationId) GetSessionId() string

func (*CoRelationId) Sibling added in v1.2.13

func (corelid *CoRelationId) Sibling() *CoRelationId

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL