From 40300ceaa96016ed1d7f937f7feeff865a2424d5 Mon Sep 17 00:00:00 2001 From: kenanfarukcakir Date: Wed, 12 Jun 2024 17:54:42 +0300 Subject: [PATCH 01/24] parse kafka headers on kernel --- ebpf/c/bpf.c | 1 + ebpf/c/bpf_bpfeb.go | 2 +- ebpf/c/bpf_bpfeb.o | Bin 349136 -> 356984 bytes ebpf/c/bpf_bpfel.go | 2 +- ebpf/c/bpf_bpfel.o | Bin 349424 -> 357536 bytes ebpf/c/kafka.c | 74 ++++++++++++++++++++++++++++++++++++++++++++ ebpf/c/l7.c | 24 ++++++++++++++ ebpf/l7_req/l7.go | 21 +++++++++++++ 8 files changed, 122 insertions(+), 2 deletions(-) create mode 100644 ebpf/c/kafka.c diff --git a/ebpf/c/bpf.c b/ebpf/c/bpf.c index ef937c0..618b336 100644 --- a/ebpf/c/bpf.c +++ b/ebpf/c/bpf.c @@ -34,6 +34,7 @@ #include "amqp.c" #include "postgres.c" #include "redis.c" +#include "kafka.c" #include "openssl.c" #include "http2.c" #include "tcp_sock.c" diff --git a/ebpf/c/bpf_bpfeb.go b/ebpf/c/bpf_bpfeb.go index 5644d36..92455fe 100644 --- a/ebpf/c/bpf_bpfeb.go +++ b/ebpf/c/bpf_bpfeb.go @@ -65,7 +65,7 @@ type bpfL7Request struct { _ [2]byte Seq uint32 Tid uint32 - _ [4]byte + CorrelationId int32 } type bpfLogMessage struct { diff --git a/ebpf/c/bpf_bpfeb.o b/ebpf/c/bpf_bpfeb.o index 983b28cbdd5b401d73fa96ca2198b4d9809547dd..5eba882cd417742d98af1fc8594ecae36212ac10 100644 GIT binary patch literal 356984 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 *Ki+ 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 diff --git a/ebpf/c/bpf_bpfel.go b/ebpf/c/bpf_bpfel.go index d7789f8..ff1bc8f 100644 --- a/ebpf/c/bpf_bpfel.go +++ b/ebpf/c/bpf_bpfel.go @@ -65,7 +65,7 @@ type bpfL7Request struct { _ [2]byte Seq uint32 Tid uint32 - _ [4]byte + CorrelationId int32 } type bpfLogMessage struct { diff --git a/ebpf/c/bpf_bpfel.o b/ebpf/c/bpf_bpfel.o index 42c345a047ae94d97e1914b745b57cf002f566e9..6f4d8963c2fec7f4c019e14b4311d22547b7818e 100644 GIT binary patch literal 357536 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 literal 357536 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

r>(GVqteT*BVRX(Pa6*iU#rF2$&se|t?J%y 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 LX8bF9bJqV01l-~7 diff --git a/ebpf/c/kafka.c b/ebpf/c/kafka.c index eaf5ced..4e2acc9 100644 --- a/ebpf/c/kafka.c +++ b/ebpf/c/kafka.c @@ -12,7 +12,12 @@ // client_id => NULLABLE_STRING // added in v1 // method will be decoded in user space -// #define METHOD_KAFKA_PRODUCE 1 +#define METHOD_KAFKA_PRODUCE_REQUEST 1 +#define METHOD_KAFKA_FETCH_RESPONSE 2 + + +#define KAFKA_API_KEY_PRODUCE_API 0 +#define KAFKA_API_KEY_FETCH_API 1 struct kafka_request_header { __s32 size; @@ -30,7 +35,7 @@ struct kafka_response_header { }; static __always_inline -int is_kafka_request_header(char *buf, __u64 buf_size, __s32 *request_id) { +int is_kafka_request_header(char *buf, __u64 buf_size, __s32 *request_id, __s16 *api_key, __s16 *api_version) { struct kafka_request_header h = {}; if (buf_size < sizeof(h)) { return 0; @@ -49,10 +54,12 @@ int is_kafka_request_header(char *buf, __u64 buf_size, __s32 *request_id) { } h.api_key = bpf_htons(h.api_key); // determines message api, ProduceAPI, FetchAPI, etc. -// h.api_version = bpf_htons(h.api_version); // version of the API, v8, v9, etc. + h.api_version = bpf_htons(h.api_version); // version of the API, v8, v9, etc. h.correlation_id = bpf_htonl(h.correlation_id); if (h.correlation_id > 0 && (h.api_key >= 0 && h.api_key <= 74)) { // https://kafka.apache.org/protocol.html#protocol_api_keys *request_id = h.correlation_id; + *api_key = h.api_key; + *api_version = h.api_version; return 1; } return 0; diff --git a/ebpf/c/l7.c b/ebpf/c/l7.c index 3fcb853..b6b3cf5 100644 --- a/ebpf/c/l7.c +++ b/ebpf/c/l7.c @@ -30,6 +30,8 @@ struct l7_event { __u32 seq; // tcp sequence number __u32 tid; + + __s16 kafka_api_version; // used only for kafka }; struct l7_request { @@ -43,6 +45,8 @@ struct l7_request { __u32 seq; __u32 tid; __s32 correlation_id; // used only for kafka + __s16 api_key; // used only for kafka + __s16 api_version; // used only for kafka }; struct socket_key { @@ -238,7 +242,7 @@ int process_enter_of_syscalls_write_sendto(void* ctx, __u64 fd, __u8 is_tls, cha }else if (!is_redis_pong(buf,count) && is_redis_command(buf,count)){ req->protocol = PROTOCOL_REDIS; req->method = METHOD_UNKNOWN; - }else if (is_kafka_request_header(buf, count, &req->correlation_id)){ + }else if (is_kafka_request_header(buf, count, &req->correlation_id, &req->api_key, &req->api_version)){ // request pipelining, batch publish // if multiple writes are done subsequently over the same connection // do not change record in active_l7_requests @@ -695,6 +699,21 @@ int process_exit_of_syscalls_read_recvfrom(void* ctx, __u64 id, __u32 pid, __s64 } }else if (e->protocol == PROTOCOL_KAFKA){ e->status = is_kafka_response_header(read_info->buf, active_req->correlation_id); + if (active_req->api_key == KAFKA_API_KEY_PRODUCE_API){ + e->method = METHOD_KAFKA_PRODUCE_REQUEST; + }else if (active_req->api_key == KAFKA_API_KEY_FETCH_API){ + e->method = METHOD_KAFKA_FETCH_RESPONSE; + // send the response to userspace + // copy req payload + e->payload_size = ret; + bpf_probe_read(e->payload, MAX_PAYLOAD_SIZE, read_info->buf); + if(ret > MAX_PAYLOAD_SIZE){ + e->payload_read_complete = 0; + }else{ + e->payload_read_complete = 1; + } + e->kafka_api_version = active_req->api_version; + } } }else{ bpf_map_delete_elem(&active_reads, &id); diff --git a/ebpf/l7_req/l7.go b/ebpf/l7_req/l7.go index a2c32a6..3d7873d 100644 --- a/ebpf/l7_req/l7.go +++ b/ebpf/l7_req/l7.go @@ -120,6 +120,13 @@ const ( METHOD_REDIS_PING ) +// match with values in l7.c, order is important +const ( + BPF_KAFKA_METHOD_UNKNOWN = iota + METHOD_KAFKA_PRODUCE_REQUEST + METHOD_KAFKA_FETCH_RESPONSE +) + // for http, user space const ( GET = "GET" @@ -159,6 +166,12 @@ const ( REDIS_PING = "PING" ) +// for kafka, user space +const ( + KAFKA_PRODUCE_REQUEST = "PRODUCE_REQUEST" + KAFKA_FETCH_RESPONSE = "FETCH_RESPONSE" +) + // Custom type for the enumeration type HTTPMethodConversion uint32 @@ -252,6 +265,21 @@ func (e RedisMethodConversion) String() string { } } +// Custom type for the enumeration +type KafkaMethodConversion uint32 + +// String representation of the enumeration values +func (e KafkaMethodConversion) String() string { + switch e { + case METHOD_KAFKA_PRODUCE_REQUEST: + return KAFKA_PRODUCE_REQUEST + case METHOD_KAFKA_FETCH_RESPONSE: + return KAFKA_FETCH_RESPONSE + default: + return "Unknown" + } +} + var FirstKernelTime uint64 = 0 // nanoseconds since boot var FirstUserspaceTime uint64 = 0 @@ -286,7 +314,8 @@ type bpfL7Event struct { _ [1]byte Seq uint32 Tid uint32 - _ [4]byte + KafkaApiVersion int16 + _ [2]byte } type bpfTraceEvent struct { @@ -328,6 +357,7 @@ type L7Event struct { WriteTimeNs uint64 // start time of write syscall Tid uint32 Seq uint32 // tcp seq num + KafkaApiVersion int16 } const L7_EVENT = "l7_event" @@ -615,6 +645,8 @@ func (l7p *L7Prog) Consume(ctx context.Context, ch chan interface{}) { method = Http2MethodConversion(l7Event.Method).String() case L7_PROTOCOL_REDIS: method = RedisMethodConversion(l7Event.Method).String() + case L7_PROTOCOL_KAFKA: + method = KafkaMethodConversion(l7Event.Method).String() // no method set for kafka on kernel side default: method = "Unknown" @@ -639,11 +671,12 @@ func (l7p *L7Prog) Consume(ctx context.Context, ch chan interface{}) { WriteTimeNs: l7Event.WriteTimeNs, Tid: l7Event.Tid, Seq: l7Event.Seq, + KafkaApiVersion: l7Event.KafkaApiVersion, } if userspacel7Event.Protocol == L7_PROTOCOL_KAFKA { // log all information - log.Logger.Info(). + log.Logger.Warn(). Uint32("pid", userspacel7Event.Pid). Uint32("status", userspacel7Event.Status). Uint64("duration", userspacel7Event.Duration). @@ -654,7 +687,7 @@ func (l7p *L7Prog) Consume(ctx context.Context, ch chan interface{}) { Uint32("seq", userspacel7Event.Seq). Str("payload", string(userspacel7Event.Payload[:userspacel7Event.PayloadSize])). Msg("kafka event") - return + // return } go func(l7Event *L7Event) { @@ -663,12 +696,22 @@ func (l7p *L7Prog) Consume(ctx context.Context, ch chan interface{}) { default: droppedCount++ if droppedCount%100 == 0 { - log.Logger.Warn(). - Str("protocol", l7Event.Protocol). - Str("method", l7Event.Method). - Uint32("pid", l7Event.Pid). - Uint32("status", l7Event.Status). - Msg("channel full, dropping l7 event") + if l7Event.Protocol == L7_PROTOCOL_KAFKA { + log.Logger.Warn(). + Str("protocol", l7Event.Protocol). + Str("method", l7Event.Method). + Uint32("pid", l7Event.Pid). + Uint32("status", l7Event.Status). + Msg("channel full, dropping kafka event") + } else { + log.Logger.Debug(). + Str("protocol", l7Event.Protocol). + Str("method", l7Event.Method). + Uint32("pid", l7Event.Pid). + Uint32("status", l7Event.Status). + Msg("channel full, dropping l7 event") + } + } } }(userspacel7Event) From 2ab0a60ae55fb654b159d338155d91eac487dbf5 Mon Sep 17 00:00:00 2001 From: kenanfarukcakir Date: Fri, 14 Jun 2024 19:03:05 +0300 Subject: [PATCH 04/24] decode kafka produceRequests and fetchResponses --- aggregator/data.go | 128 ++++++++++++++++++++++++++++++++++++++++++-- logstreamer/pool.go | 6 +-- 2 files changed, 128 insertions(+), 6 deletions(-) diff --git a/aggregator/data.go b/aggregator/data.go index 2406a21..6defe37 100644 --- a/aggregator/data.go +++ b/aggregator/data.go @@ -42,6 +42,17 @@ import ( "github.com/patrickmn/go-cache" "k8s.io/apimachinery/pkg/types" + + "github.com/segmentio/kafka-go/protocol" + _ "github.com/segmentio/kafka-go/protocol/fetch" + _ "github.com/segmentio/kafka-go/protocol/produce" + _ "github.com/segmentio/kafka-go/protocol/saslauthenticate" + + "github.com/cisco-open/libnasp/components/kafka-protocol-go/pkg/protocol/messages/fetch" + "github.com/cisco-open/libnasp/components/kafka-protocol-go/pkg/protocol/messages/produce" + + cisco_req "github.com/cisco-open/libnasp/components/kafka-protocol-go/pkg/request" + cisco_resp "github.com/cisco-open/libnasp/components/kafka-protocol-go/pkg/response" ) type Aggregator struct { @@ -978,6 +989,109 @@ func (a *Aggregator) getConnKey(pid uint32, fd uint64) string { return fmt.Sprintf("%d-%d", pid, fd) } +func (a *Aggregator) decodeKafkaProduceRequest(req *cisco_req.Request) { + produceDatas := req.Data().(*produce.Request).TopicData() + for _, produceData := range produceDatas { + log.Logger.Warn().Interface("TopicProduceData.name", produceData.Name()).Msg("kafka produce data") + + l := produceData.PartitionData() + for _, ppd := range l { // ppd : PartitionProduceData + ppd.Index() + recordBatches := ppd.Records() + for _, recordBatch := range recordBatches.Items() { + batchRecords := recordBatch.Records() + for _, batchRecord := range batchRecords { + log.Logger.Warn().Str("key", string(batchRecord.Key())).Msg("kafka produce data- key") + log.Logger.Warn().Str("value", string(batchRecord.Value())).Msg("kafka produce data- value") + } + } + // log.Logger.Info().Int32("PartitionProduceData.partition", ppd.Records()).Msg("kafka produce data") + } + } +} + +func (a *Aggregator) decodeKafkaFetchResponse(resp *cisco_resp.Response) { + responses := resp.Data().(*fetch.Response).Responses() + for _, response := range responses { + topic := response.Topic() + pts := response.Partitions() + for _, pt := range pts { + ptIndex := pt.PartitionIndex() + startOffset := pt.LogStartOffset() + lastStableOffset := pt.LastStableOffset() + + log.Logger.Warn().Str("topic", topic.String()).Int32("partition", ptIndex).Int64("startOffset", startOffset).Int64("lastStableOffset", lastStableOffset).Msg("kafka fetch response") + + recordBatches := pt.Records() + for _, recordBatch := range recordBatches.Items() { + batchRecords := recordBatch.Records() + for _, batchRecord := range batchRecords { + log.Logger.Warn().Str("key", string(batchRecord.Key())).Msg("kafka fetch data- key") + log.Logger.Warn().Str("value", string(batchRecord.Value())).Msg("kafka fetch data- value") + } + } + } + } +} + +func (a *Aggregator) decodeKafkaPayload(d *l7_req.L7Event, reqDto *datastore.Request) error { + // kafka payload is a json + // decode json + // extract path, method, status code + // set to reqDto + + log.Logger.Warn().Msg("decode kafka payload start") + + r := bytes.NewReader(d.Payload[:d.PayloadSize]) + + // apiVersion is written in request header + // response header only has correlation_id + // so while returning fetch response from kafka, we need to send the api version too. + + var apiVersion int16 + var correlationID int32 + var clientID string + var message protocol.Message + var err error + + if d.Method == l7_req.KAFKA_PRODUCE_REQUEST { + apiVersion, correlationID, clientID, message, err = protocol.ReadRequest(r) + } else if d.Method == l7_req.KAFKA_FETCH_RESPONSE { + // apiVersion how to know ??? + correlationID, message, err = protocol.ReadResponse(r, protocol.Fetch, d.KafkaApiVersion) + } + + if err != nil { + log.Logger.Error().Err(err).Msg("error reading kafka request") + return err + } else { + log.Logger.Warn().Int16("apiVersion", apiVersion). + Int16("d.apiVersion", d.KafkaApiVersion). + Int32("correlationID", correlationID). + Str("clientID", clientID). + Str("apiKey", message.ApiKey().String()).Msg("kafka request") + + switch message.ApiKey() { + case protocol.Produce: + req, err := cisco_req.Parse(d.Payload[4:d.PayloadSize]) + if err != nil { + log.Logger.Error().Err(err).Msg("error parsing kafka request cisco") + } else { + a.decodeKafkaProduceRequest(&req) + } + case protocol.Fetch: + resp, err := cisco_resp.Parse(d.Payload[4:d.PayloadSize], int16(protocol.Fetch), d.KafkaApiVersion, correlationID) + if err != nil { + log.Logger.Error().Err(err).Msg("error parsing kafka response cisco") + } else { + a.decodeKafkaFetchResponse(&resp) + } + } + + return nil + } +} + func (a *Aggregator) processL7(ctx context.Context, d *l7_req.L7Event) { // other protocols events come as whole, but http2 events come as frames // we need to aggregate frames to get the whole request @@ -1025,7 +1139,7 @@ func (a *Aggregator) processL7(ctx context.Context, d *l7_req.L7Event) { a.fetchSocketOnNotFound(ctx, d) } - reqDto := datastore.Request{ + reqDto := &datastore.Request{ StartTime: int64(convertKernelTimeToUserspaceTime(d.WriteTimeNs) / 1e6), Latency: d.Duration, FromIP: skInfo.Saddr, @@ -1053,7 +1167,15 @@ func (a *Aggregator) processL7(ctx context.Context, d *l7_req.L7Event) { path = string(d.Payload[0:d.PayloadSize]) } - err := a.setFromTo(skInfo, d, &reqDto, reqHostHeader) + if d.Protocol == l7_req.L7_PROTOCOL_KAFKA { + log.Logger.Warn().Uint32("tid", d.Tid).Uint32("seq", d.Seq).Msg("kafka req in aggregator") + err := a.decodeKafkaPayload(d, reqDto) + if err != nil { + return + } + } + + err := a.setFromTo(skInfo, d, reqDto, reqHostHeader) if err != nil { return } @@ -1077,7 +1199,7 @@ func (a *Aggregator) processL7(ctx context.Context, d *l7_req.L7Event) { reqDto.Protocol = "HTTPS" } - err = a.ds.PersistRequest(&reqDto) + err = a.ds.PersistRequest(reqDto) if err != nil { log.Logger.Error().Err(err).Msg("error persisting request") } diff --git a/logstreamer/pool.go b/logstreamer/pool.go index 46a96d2..4e61e7e 100644 --- a/logstreamer/pool.go +++ b/logstreamer/pool.go @@ -110,12 +110,12 @@ func (c *channelPool) Get() (*PoolConn, error) { select { case conn := <-conns: if conn == nil { - return nil, ErrClosed + return nil, fmt.Errorf("connection is nil") } if conn.unusable { log.Logger.Info().Msg("connection is unusable on Get, closing it") conn.Close() - return nil, ErrClosed + return nil, fmt.Errorf("connection is unusable") } if conn.isAlive() { @@ -123,7 +123,7 @@ func (c *channelPool) Get() (*PoolConn, error) { } else { conn.MarkUnusable() conn.Close() - return nil, ErrClosed + return nil, fmt.Errorf("connection is dead") } default: conn, err := factory() From e826cf15b910bfe5e751addab9578245b2b3793d Mon Sep 17 00:00:00 2001 From: kenanfarukcakir Date: Fri, 21 Jun 2024 13:05:07 +0300 Subject: [PATCH 05/24] add kafka decoder --- aggregator/data.go | 178 +++++----- aggregator/kafka/crc32_field.go | 87 +++++ aggregator/kafka/decoder.go | 119 +++++++ aggregator/kafka/decompress.go | 98 ++++++ aggregator/kafka/errors.go | 428 +++++++++++++++++++++++++ aggregator/kafka/fetch_response.go | 481 ++++++++++++++++++++++++++++ aggregator/kafka/length_field.go | 99 ++++++ aggregator/kafka/message.go | 146 +++++++++ aggregator/kafka/message_set.go | 92 ++++++ aggregator/kafka/produce_request.go | 172 ++++++++++ aggregator/kafka/real_decoder.go | 461 ++++++++++++++++++++++++++ aggregator/kafka/record.go | 87 +++++ aggregator/kafka/record_batch.go | 161 ++++++++++ aggregator/kafka/records.go | 195 +++++++++++ aggregator/kafka/request.go | 216 +++++++++++++ aggregator/kafka/response_header.go | 313 ++++++++++++++++++ aggregator/kafka/timestamp.go | 26 ++ aggregator/kafka/versions.go | 294 +++++++++++++++++ aggregator/kafka/ztsd.go | 67 ++++ 19 files changed, 3616 insertions(+), 104 deletions(-) create mode 100644 aggregator/kafka/crc32_field.go create mode 100644 aggregator/kafka/decoder.go create mode 100644 aggregator/kafka/decompress.go create mode 100644 aggregator/kafka/errors.go create mode 100644 aggregator/kafka/fetch_response.go create mode 100644 aggregator/kafka/length_field.go create mode 100644 aggregator/kafka/message.go create mode 100644 aggregator/kafka/message_set.go create mode 100644 aggregator/kafka/produce_request.go create mode 100644 aggregator/kafka/real_decoder.go create mode 100644 aggregator/kafka/record.go create mode 100644 aggregator/kafka/record_batch.go create mode 100644 aggregator/kafka/records.go create mode 100644 aggregator/kafka/request.go create mode 100644 aggregator/kafka/response_header.go create mode 100644 aggregator/kafka/timestamp.go create mode 100644 aggregator/kafka/versions.go create mode 100644 aggregator/kafka/ztsd.go diff --git a/aggregator/data.go b/aggregator/data.go index 6defe37..271bce6 100644 --- a/aggregator/data.go +++ b/aggregator/data.go @@ -29,6 +29,7 @@ import ( "time" + "github.com/ddosify/alaz/aggregator/kafka" "github.com/ddosify/alaz/datastore" "github.com/ddosify/alaz/ebpf" "github.com/ddosify/alaz/ebpf/l7_req" @@ -43,16 +44,9 @@ import ( "github.com/patrickmn/go-cache" "k8s.io/apimachinery/pkg/types" - "github.com/segmentio/kafka-go/protocol" _ "github.com/segmentio/kafka-go/protocol/fetch" _ "github.com/segmentio/kafka-go/protocol/produce" _ "github.com/segmentio/kafka-go/protocol/saslauthenticate" - - "github.com/cisco-open/libnasp/components/kafka-protocol-go/pkg/protocol/messages/fetch" - "github.com/cisco-open/libnasp/components/kafka-protocol-go/pkg/protocol/messages/produce" - - cisco_req "github.com/cisco-open/libnasp/components/kafka-protocol-go/pkg/request" - cisco_resp "github.com/cisco-open/libnasp/components/kafka-protocol-go/pkg/response" ) type Aggregator struct { @@ -989,107 +983,83 @@ func (a *Aggregator) getConnKey(pid uint32, fd uint64) string { return fmt.Sprintf("%d-%d", pid, fd) } -func (a *Aggregator) decodeKafkaProduceRequest(req *cisco_req.Request) { - produceDatas := req.Data().(*produce.Request).TopicData() - for _, produceData := range produceDatas { - log.Logger.Warn().Interface("TopicProduceData.name", produceData.Name()).Msg("kafka produce data") - - l := produceData.PartitionData() - for _, ppd := range l { // ppd : PartitionProduceData - ppd.Index() - recordBatches := ppd.Records() - for _, recordBatch := range recordBatches.Items() { - batchRecords := recordBatch.Records() - for _, batchRecord := range batchRecords { - log.Logger.Warn().Str("key", string(batchRecord.Key())).Msg("kafka produce data- key") - log.Logger.Warn().Str("value", string(batchRecord.Value())).Msg("kafka produce data- value") - } - } - // log.Logger.Info().Int32("PartitionProduceData.partition", ppd.Records()).Msg("kafka produce data") - } - } -} - -func (a *Aggregator) decodeKafkaFetchResponse(resp *cisco_resp.Response) { - responses := resp.Data().(*fetch.Response).Responses() - for _, response := range responses { - topic := response.Topic() - pts := response.Partitions() - for _, pt := range pts { - ptIndex := pt.PartitionIndex() - startOffset := pt.LogStartOffset() - lastStableOffset := pt.LastStableOffset() - - log.Logger.Warn().Str("topic", topic.String()).Int32("partition", ptIndex).Int64("startOffset", startOffset).Int64("lastStableOffset", lastStableOffset).Msg("kafka fetch response") - - recordBatches := pt.Records() - for _, recordBatch := range recordBatches.Items() { - batchRecords := recordBatch.Records() - for _, batchRecord := range batchRecords { - log.Logger.Warn().Str("key", string(batchRecord.Key())).Msg("kafka fetch data- key") - log.Logger.Warn().Str("value", string(batchRecord.Value())).Msg("kafka fetch data- value") - } - } - } - } -} - func (a *Aggregator) decodeKafkaPayload(d *l7_req.L7Event, reqDto *datastore.Request) error { - // kafka payload is a json - // decode json - // extract path, method, status code - // set to reqDto - - log.Logger.Warn().Msg("decode kafka payload start") - - r := bytes.NewReader(d.Payload[:d.PayloadSize]) - // apiVersion is written in request header // response header only has correlation_id - // so while returning fetch response from kafka, we need to send the api version too. + // so while returning a response message from kafka, we need to send the api version to userspace + // in order to parse the response message. + // d.KafkaApiVersion is set in kafka request event - var apiVersion int16 - var correlationID int32 - var clientID string - var message protocol.Message - var err error + // r := bytes.NewReader(d.Payload[:d.PayloadSize]) + + // var apiVersion int16 // only in request + // var clientID string // only in request + // var correlationID int32 // both in request and response + // var message protocol.Message + // var err error if d.Method == l7_req.KAFKA_PRODUCE_REQUEST { - apiVersion, correlationID, clientID, message, err = protocol.ReadRequest(r) + saramaReq, _, err := kafka.DecodeRequest(bytes.NewReader(d.Payload[:d.PayloadSize])) + if err != nil { + // non-kafka messages sometimes classifed as kafka messages on kernel side + return nil + } else { + rs := saramaReq.Body.(*kafka.ProduceRequest).Records + for topicName, r := range rs { + for partition, record := range r { + records := record.RecordBatch.Records + for _, msg := range records { + log.Logger.Warn().Str("key", string(msg.Key)). + Str("val", string(msg.Value)). + Str("topicName", topicName). + Int32("partition", partition). + Msg("kafka produce data key") + } + } + } + } } else if d.Method == l7_req.KAFKA_FETCH_RESPONSE { - // apiVersion how to know ??? - correlationID, message, err = protocol.ReadResponse(r, protocol.Fetch, d.KafkaApiVersion) - } + payload := d.Payload[:d.PayloadSize] + // decode response header first + decodedHeader := &kafka.ResponseHeader{} + off, err := kafka.VersionedDecode(payload, decodedHeader, kafka.ResponseHeaderVersion(1, d.KafkaApiVersion)) + if err != nil { + return fmt.Errorf("kafka decode header failure: %w", err) + } - if err != nil { - log.Logger.Error().Err(err).Msg("error reading kafka request") - return err - } else { - log.Logger.Warn().Int16("apiVersion", apiVersion). - Int16("d.apiVersion", d.KafkaApiVersion). - Int32("correlationID", correlationID). - Str("clientID", clientID). - Str("apiKey", message.ApiKey().String()).Msg("kafka request") - - switch message.ApiKey() { - case protocol.Produce: - req, err := cisco_req.Parse(d.Payload[4:d.PayloadSize]) - if err != nil { - log.Logger.Error().Err(err).Msg("error parsing kafka request cisco") - } else { - a.decodeKafkaProduceRequest(&req) - } - case protocol.Fetch: - resp, err := cisco_resp.Parse(d.Payload[4:d.PayloadSize], int16(protocol.Fetch), d.KafkaApiVersion, correlationID) - if err != nil { - log.Logger.Error().Err(err).Msg("error parsing kafka response cisco") - } else { - a.decodeKafkaFetchResponse(&resp) + // skip header + payload = payload[off:] + fetchApiVersion := d.KafkaApiVersion + + res := &kafka.FetchResponse{} + _, err = kafka.VersionedDecode(payload, res, fetchApiVersion) + if err != nil { + return fmt.Errorf("kafka decode fetch response failure: %w", err) + } else { + for topic, mapfrb := range res.Blocks { + for partition, frb := range mapfrb { + log.Logger.Warn().Int32("partition", partition).Msg("sarama kafka fetch data- partition") + recordSet := frb.RecordsSet + for _, record := range recordSet { + // record.MsgSet --> legacy records + // record.RecordBatch --> default records + for _, r := range record.RecordBatch.Records { + log.Logger.Warn(). + Str("key", string(r.Key)). + Str("val", string(r.Value)). + Str("topicName", topic). + Int64("offset", r.OffsetDelta). + Int32("partition", partition). + Msg("kafka fetch response decoded") + } + } + } } } - return nil } + + return nil } func (a *Aggregator) processL7(ctx context.Context, d *l7_req.L7Event) { @@ -1167,14 +1137,6 @@ func (a *Aggregator) processL7(ctx context.Context, d *l7_req.L7Event) { path = string(d.Payload[0:d.PayloadSize]) } - if d.Protocol == l7_req.L7_PROTOCOL_KAFKA { - log.Logger.Warn().Uint32("tid", d.Tid).Uint32("seq", d.Seq).Msg("kafka req in aggregator") - err := a.decodeKafkaPayload(d, reqDto) - if err != nil { - return - } - } - err := a.setFromTo(skInfo, d, reqDto, reqHostHeader) if err != nil { return @@ -1199,6 +1161,14 @@ func (a *Aggregator) processL7(ctx context.Context, d *l7_req.L7Event) { reqDto.Protocol = "HTTPS" } + if d.Protocol == l7_req.L7_PROTOCOL_KAFKA { + log.Logger.Warn().Uint32("tid", d.Tid).Uint32("seq", d.Seq).Msg("kafka req in aggregator") + err := a.decodeKafkaPayload(d, reqDto) + if err != nil { + return + } + } + err = a.ds.PersistRequest(reqDto) if err != nil { log.Logger.Error().Err(err).Msg("error persisting request") diff --git a/aggregator/kafka/crc32_field.go b/aggregator/kafka/crc32_field.go new file mode 100644 index 0000000..84be334 --- /dev/null +++ b/aggregator/kafka/crc32_field.go @@ -0,0 +1,87 @@ +package kafka + +import ( + "encoding/binary" + "fmt" + "hash/crc32" + "sync" +) + +type crcPolynomial int8 + +const ( + crcIEEE crcPolynomial = iota + crcCastagnoli +) + +var crc32FieldPool = sync.Pool{} + +func acquireCrc32Field(polynomial crcPolynomial) *crc32Field { + val := crc32FieldPool.Get() + if val != nil { + c := val.(*crc32Field) + c.polynomial = polynomial + return c + } + return newCRC32Field(polynomial) +} + +func releaseCrc32Field(c *crc32Field) { + crc32FieldPool.Put(c) +} + +var castagnoliTable = crc32.MakeTable(crc32.Castagnoli) + +// crc32Field implements the pushEncoder and pushDecoder interfaces for calculating CRC32s. +type crc32Field struct { + startOffset int + polynomial crcPolynomial +} + +func (c *crc32Field) saveOffset(in int) { + c.startOffset = in +} + +func (c *crc32Field) reserveLength() int { + return 4 +} + +func newCRC32Field(polynomial crcPolynomial) *crc32Field { + return &crc32Field{polynomial: polynomial} +} + +func (c *crc32Field) run(curOffset int, buf []byte) error { + crc, err := c.crc(curOffset, buf) + if err != nil { + return err + } + binary.BigEndian.PutUint32(buf[c.startOffset:], crc) + return nil +} + +func (c *crc32Field) check(curOffset int, buf []byte) error { + crc, err := c.crc(curOffset, buf) + if err != nil { + return err + } + + expected := binary.BigEndian.Uint32(buf[c.startOffset:]) + if crc != expected { + return PacketDecodingError{fmt.Sprintf("CRC didn't match expected %#x got %#x", expected, crc)} + } + + return nil +} + +func (c *crc32Field) crc(curOffset int, buf []byte) (uint32, error) { + var tab *crc32.Table + switch c.polynomial { + case crcIEEE: + tab = crc32.IEEETable + case crcCastagnoli: + tab = castagnoliTable + default: + return 0, PacketDecodingError{"invalid CRC type"} + } + return crc32.Checksum(buf[c.startOffset+4:curOffset], tab), nil +} diff --git a/aggregator/kafka/decoder.go b/aggregator/kafka/decoder.go new file mode 100644 index 0000000..be896cd --- /dev/null +++ b/aggregator/kafka/decoder.go @@ -0,0 +1,119 @@ +package kafka + +type versionedDecoder interface { + decode(pd packetDecoder, version int16) error +} + +type packetDecoder interface { + // Primitives + getInt8() (int8, error) + getInt16() (int16, error) + getInt32() (int32, error) + getInt64() (int64, error) + getVarint() (int64, error) + getUVarint() (uint64, error) + getFloat64() (float64, error) + getArrayLength() (int, error) + getCompactArrayLength() (int, error) + getBool() (bool, error) + getEmptyTaggedFieldArray() (int, error) + + // Collections + getBytes() ([]byte, error) + getVarintBytes() ([]byte, error) + getCompactBytes() ([]byte, error) + getRawBytes(length int) ([]byte, error) + getString() (string, error) + getNullableString() (*string, error) + getCompactString() (string, error) + getCompactNullableString() (*string, error) + getCompactInt32Array() ([]int32, error) + getInt32Array() ([]int32, error) + getInt64Array() ([]int64, error) + getStringArray() ([]string, error) + + // Subsets + remaining() int + getSubset(length int) (packetDecoder, error) + peek(offset, length int) (packetDecoder, error) // similar to getSubset, but it doesn't advance the offset + peekInt8(offset int) (int8, error) // similar to peek, but just one byte + + // Stacks, see PushDecoder + push(in pushDecoder) error + pop() error +} + +// PushDecoder is the interface for decoding fields like CRCs and lengths where the validity +// of the field depends on what is after it in the packet. Start them with PacketDecoder.Push() where +// the actual value is located in the packet, then PacketDecoder.Pop() them when all the bytes they +// depend upon have been decoded. +type pushDecoder interface { + // Saves the offset into the input buffer as the location to actually read the calculated value when able. + saveOffset(in int) + + // Returns the length of data to reserve for the input of this encoder (e.g. 4 bytes for a CRC32). + reserveLength() int + + // Indicates that all required data is now available to calculate and check the field. + // SaveOffset is guaranteed to have been called first. The implementation should read ReserveLength() bytes + // of data from the saved offset, and verify it based on the data between the saved offset and curOffset. + check(curOffset int, buf []byte) error +} + +// dynamicPushDecoder extends the interface of pushDecoder for uses cases where the length of the +// fields itself is unknown until its value was decoded (for instance varint encoded length +// fields). +// During push, dynamicPushDecoder.decode() method will be called instead of reserveLength() +type dynamicPushDecoder interface { + pushDecoder + decoder +} + +type decoder interface { + decode(pd packetDecoder) error +} + +// decode takes bytes and a decoder and fills the fields of the decoder from the bytes, +// interpreted using Kafka's encoding rules. +func decode(buf []byte, in decoder) error { + if buf == nil { + return nil + } + + helper := realDecoder{ + raw: buf, + } + err := in.decode(&helper) + if err != nil { + return err + } + + if helper.off != len(buf) { + return PacketDecodingError{"invalid length"} + } + + return nil +} + +func VersionedDecode(buf []byte, in versionedDecoder, version int16) (int, error) { + if buf == nil { + return 0, nil + } + + helper := realDecoder{ + raw: buf, + } + + err := in.decode(&helper, version) + if err != nil { + return helper.off, err + } + + // if helper.off != len(buf) { + // return helper.off, PacketDecodingError{ + // Info: fmt.Sprintf("invalid length (off=%d, len=%d)", helper.off, len(buf)), + // } + // } + + return helper.off, nil +} diff --git a/aggregator/kafka/decompress.go b/aggregator/kafka/decompress.go new file mode 100644 index 0000000..07d9dce --- /dev/null +++ b/aggregator/kafka/decompress.go @@ -0,0 +1,98 @@ +package kafka + +import ( + "bytes" + "fmt" + "sync" + + snappy "github.com/eapache/go-xerial-snappy" + "github.com/klauspost/compress/gzip" + "github.com/pierrec/lz4/v4" +) + +var ( + lz4ReaderPool = sync.Pool{ + New: func() interface{} { + return lz4.NewReader(nil) + }, + } + + gzipReaderPool sync.Pool + + bufferPool = sync.Pool{ + New: func() interface{} { + return new(bytes.Buffer) + }, + } + + bytesPool = sync.Pool{ + New: func() interface{} { + res := make([]byte, 0, 4096) + return &res + }, + } +) + +func decompress(cc CompressionCodec, data []byte) ([]byte, error) { + switch cc { + case CompressionNone: + return data, nil + case CompressionGZIP: + var err error + reader, ok := gzipReaderPool.Get().(*gzip.Reader) + if !ok { + reader, err = gzip.NewReader(bytes.NewReader(data)) + } else { + err = reader.Reset(bytes.NewReader(data)) + } + + if err != nil { + return nil, err + } + + buffer := bufferPool.Get().(*bytes.Buffer) + _, err = buffer.ReadFrom(reader) + // copy the buffer to a new slice with the correct length + // reuse gzipReader and buffer + gzipReaderPool.Put(reader) + res := make([]byte, buffer.Len()) + copy(res, buffer.Bytes()) + buffer.Reset() + bufferPool.Put(buffer) + + return res, err + case CompressionSnappy: + return snappy.Decode(data) + case CompressionLZ4: + reader, ok := lz4ReaderPool.Get().(*lz4.Reader) + if !ok { + reader = lz4.NewReader(bytes.NewReader(data)) + } else { + reader.Reset(bytes.NewReader(data)) + } + buffer := bufferPool.Get().(*bytes.Buffer) + _, err := buffer.ReadFrom(reader) + // copy the buffer to a new slice with the correct length + // reuse lz4Reader and buffer + lz4ReaderPool.Put(reader) + res := make([]byte, buffer.Len()) + copy(res, buffer.Bytes()) + buffer.Reset() + bufferPool.Put(buffer) + + return res, err + case CompressionZSTD: + buffer := *bytesPool.Get().(*[]byte) + var err error + buffer, err = zstdDecompress(ZstdDecoderParams{}, buffer, data) + // copy the buffer to a new slice with the correct length and reuse buffer + res := make([]byte, len(buffer)) + copy(res, buffer) + buffer = buffer[:0] + bytesPool.Put(&buffer) + + return res, err + default: + return nil, PacketDecodingError{fmt.Sprintf("invalid compression specified (%d)", cc)} + } +} diff --git a/aggregator/kafka/errors.go b/aggregator/kafka/errors.go new file mode 100644 index 0000000..8ee2eaf --- /dev/null +++ b/aggregator/kafka/errors.go @@ -0,0 +1,428 @@ +package kafka + +import ( + "errors" + "fmt" +) + +// ErrOutOfBrokers is the error returned when the client has run out of brokers to talk to because all of them errored +// or otherwise failed to respond. +var ErrOutOfBrokers = errors.New("kafka: client has run out of available brokers to talk to") + +// ErrBrokerNotFound is the error returned when there's no broker found for the requested ID. +var ErrBrokerNotFound = errors.New("kafka: broker for ID is not found") + +// ErrClosedClient is the error returned when a method is called on a client that has been closed. +var ErrClosedClient = errors.New("kafka: tried to use a client that was closed") + +// ErrIncompleteResponse is the error returned when the server returns a syntactically valid response, but it does +// not contain the expected information. +var ErrIncompleteResponse = errors.New("kafka: response did not contain all the expected topic/partition blocks") + +// ErrInvalidPartition is the error returned when a partitioner returns an invalid partition index +// (meaning one outside of the range [0...numPartitions-1]). +var ErrInvalidPartition = errors.New("kafka: partitioner returned an invalid partition index") + +// ErrAlreadyConnected is the error returned when calling Open() on a Broker that is already connected or connecting. +var ErrAlreadyConnected = errors.New("kafka: broker connection already initiated") + +// ErrNotConnected is the error returned when trying to send or call Close() on a Broker that is not connected. +var ErrNotConnected = errors.New("kafka: broker not connected") + +// ErrInsufficientData is returned when decoding and the packet is truncated. This can be expected +// when requesting messages, since as an optimization the server is allowed to return a partial message at the end +// of the message set. +var ErrInsufficientData = errors.New("kafka: insufficient data to decode packet, more bytes expected") + +// ErrShuttingDown is returned when a producer receives a message during shutdown. +var ErrShuttingDown = errors.New("kafka: message received by producer in process of shutting down") + +// ErrMessageTooLarge is returned when the next message to consume is larger than the configured Consumer.Fetch.Max +var ErrMessageTooLarge = errors.New("kafka: message is larger than Consumer.Fetch.Max") + +// ErrConsumerOffsetNotAdvanced is returned when a partition consumer didn't advance its offset after parsing +// a RecordBatch. +var ErrConsumerOffsetNotAdvanced = errors.New("kafka: consumer offset was not advanced after a RecordBatch") + +// ErrControllerNotAvailable is returned when server didn't give correct controller id. May be kafka server's version +// is lower than 0.10.0.0. +var ErrControllerNotAvailable = errors.New("kafka: controller is not available") + +// ErrNoTopicsToUpdateMetadata is returned when Meta.Full is set to false but no specific topics were found to update +// the metadata. +var ErrNoTopicsToUpdateMetadata = errors.New("kafka: no specific topics to update metadata") + +// ErrUnknownScramMechanism is returned when user tries to AlterUserScramCredentials with unknown SCRAM mechanism +var ErrUnknownScramMechanism = errors.New("kafka: unknown SCRAM mechanism provided") + +// ErrReassignPartitions is returned when altering partition assignments for a topic fails +var ErrReassignPartitions = errors.New("failed to reassign partitions for topic") + +// ErrDeleteRecords is the type of error returned when fail to delete the required records +var ErrDeleteRecords = errors.New("kafka server: failed to delete records") + +// ErrCreateACLs is the type of error returned when ACL creation failed +var ErrCreateACLs = errors.New("kafka server: failed to create one or more ACL rules") + +// ErrAddPartitionsToTxn is returned when AddPartitionsToTxn failed multiple times +var ErrAddPartitionsToTxn = errors.New("transaction manager: failed to send partitions to transaction") + +// ErrTxnOffsetCommit is returned when TxnOffsetCommit failed multiple times +var ErrTxnOffsetCommit = errors.New("transaction manager: failed to send offsets to transaction") + +// ErrTransactionNotReady when transaction status is invalid for the current action. +var ErrTransactionNotReady = errors.New("transaction manager: transaction is not ready") + +// ErrNonTransactedProducer when calling BeginTxn, CommitTxn or AbortTxn on a non transactional producer. +var ErrNonTransactedProducer = errors.New("transaction manager: you need to add TransactionalID to producer") + +// ErrTransitionNotAllowed when txnmgr state transition is not valid. +var ErrTransitionNotAllowed = errors.New("transaction manager: invalid transition attempted") + +// ErrCannotTransitionNilError when transition is attempted with an nil error. +var ErrCannotTransitionNilError = errors.New("transaction manager: cannot transition with a nil error") + +// ErrTxnUnableToParseResponse when response is nil +var ErrTxnUnableToParseResponse = errors.New("transaction manager: unable to parse response") + +type sentinelError struct { + sentinel error + wrapped error +} + +func (err sentinelError) Error() string { + if err.wrapped != nil { + return fmt.Sprintf("%s: %v", err.sentinel, err.wrapped) + } else { + return fmt.Sprintf("%s", err.sentinel) + } +} + +func (err sentinelError) Is(target error) bool { + return errors.Is(err.sentinel, target) || errors.Is(err.wrapped, target) +} + +func (err sentinelError) Unwrap() error { + return err.wrapped +} + +// func Wrap(sentinel error, wrapped ...error) sentinelError { +// return sentinelError{sentinel: sentinel, wrapped: multiError(wrapped...)} +// } + +// PacketEncodingError is returned from a failure while encoding a Kafka packet. This can happen, for example, +// if you try to encode a string over 2^15 characters in length, since Kafka's encoding rules do not permit that. +type PacketEncodingError struct { + Info string +} + +func (err PacketEncodingError) Error() string { + return fmt.Sprintf("kafka: error encoding packet: %s", err.Info) +} + +// PacketDecodingError is returned when there was an error (other than truncated data) decoding the Kafka broker's response. +// This can be a bad CRC or length field, or any other invalid value. +type PacketDecodingError struct { + Info string +} + +func (err PacketDecodingError) Error() string { + return fmt.Sprintf("kafka: error decoding packet: %s", err.Info) +} + +// ConfigurationError is the type of error returned from a constructor (e.g. NewClient, or NewConsumer) +// when the specified configuration is invalid. +type ConfigurationError string + +func (err ConfigurationError) Error() string { + return "kafka: invalid configuration (" + string(err) + ")" +} + +// KError is the type of error that can be returned directly by the Kafka broker. +// See https://cwiki.apache.org/confluence/display/KAFKA/A+Guide+To+The+Kafka+Protocol#AGuideToTheKafkaProtocol-ErrorCodes +type KError int16 + +// Numeric error codes returned by the Kafka server. +const ( + ErrUnknown KError = -1 // Errors.UNKNOWN_SERVER_ERROR + ErrNoError KError = 0 // Errors.NONE + ErrOffsetOutOfRange KError = 1 // Errors.OFFSET_OUT_OF_RANGE + ErrInvalidMessage KError = 2 // Errors.CORRUPT_MESSAGE + ErrUnknownTopicOrPartition KError = 3 // Errors.UNKNOWN_TOPIC_OR_PARTITION + ErrInvalidMessageSize KError = 4 // Errors.INVALID_FETCH_SIZE + ErrLeaderNotAvailable KError = 5 // Errors.LEADER_NOT_AVAILABLE + ErrNotLeaderForPartition KError = 6 // Errors.NOT_LEADER_OR_FOLLOWER + ErrRequestTimedOut KError = 7 // Errors.REQUEST_TIMED_OUT + ErrBrokerNotAvailable KError = 8 // Errors.BROKER_NOT_AVAILABLE + ErrReplicaNotAvailable KError = 9 // Errors.REPLICA_NOT_AVAILABLE + ErrMessageSizeTooLarge KError = 10 // Errors.MESSAGE_TOO_LARGE + ErrStaleControllerEpochCode KError = 11 // Errors.STALE_CONTROLLER_EPOCH + ErrOffsetMetadataTooLarge KError = 12 // Errors.OFFSET_METADATA_TOO_LARGE + ErrNetworkException KError = 13 // Errors.NETWORK_EXCEPTION + ErrOffsetsLoadInProgress KError = 14 // Errors.COORDINATOR_LOAD_IN_PROGRESS + ErrConsumerCoordinatorNotAvailable KError = 15 // Errors.COORDINATOR_NOT_AVAILABLE + ErrNotCoordinatorForConsumer KError = 16 // Errors.NOT_COORDINATOR + ErrInvalidTopic KError = 17 // Errors.INVALID_TOPIC_EXCEPTION + ErrMessageSetSizeTooLarge KError = 18 // Errors.RECORD_LIST_TOO_LARGE + ErrNotEnoughReplicas KError = 19 // Errors.NOT_ENOUGH_REPLICAS + ErrNotEnoughReplicasAfterAppend KError = 20 // Errors.NOT_ENOUGH_REPLICAS_AFTER_APPEND + ErrInvalidRequiredAcks KError = 21 // Errors.INVALID_REQUIRED_ACKS + ErrIllegalGeneration KError = 22 // Errors.ILLEGAL_GENERATION + ErrInconsistentGroupProtocol KError = 23 // Errors.INCONSISTENT_GROUP_PROTOCOL + ErrInvalidGroupId KError = 24 // Errors.INVALID_GROUP_ID + ErrUnknownMemberId KError = 25 // Errors.UNKNOWN_MEMBER_ID + ErrInvalidSessionTimeout KError = 26 // Errors.INVALID_SESSION_TIMEOUT + ErrRebalanceInProgress KError = 27 // Errors.REBALANCE_IN_PROGRESS + ErrInvalidCommitOffsetSize KError = 28 // Errors.INVALID_COMMIT_OFFSET_SIZE + ErrTopicAuthorizationFailed KError = 29 // Errors.TOPIC_AUTHORIZATION_FAILED + ErrGroupAuthorizationFailed KError = 30 // Errors.GROUP_AUTHORIZATION_FAILED + ErrClusterAuthorizationFailed KError = 31 // Errors.CLUSTER_AUTHORIZATION_FAILED + ErrInvalidTimestamp KError = 32 // Errors.INVALID_TIMESTAMP + ErrUnsupportedSASLMechanism KError = 33 // Errors.UNSUPPORTED_SASL_MECHANISM + ErrIllegalSASLState KError = 34 // Errors.ILLEGAL_SASL_STATE + ErrUnsupportedVersion KError = 35 // Errors.UNSUPPORTED_VERSION + ErrTopicAlreadyExists KError = 36 // Errors.TOPIC_ALREADY_EXISTS + ErrInvalidPartitions KError = 37 // Errors.INVALID_PARTITIONS + ErrInvalidReplicationFactor KError = 38 // Errors.INVALID_REPLICATION_FACTOR + ErrInvalidReplicaAssignment KError = 39 // Errors.INVALID_REPLICA_ASSIGNMENT + ErrInvalidConfig KError = 40 // Errors.INVALID_CONFIG + ErrNotController KError = 41 // Errors.NOT_CONTROLLER + ErrInvalidRequest KError = 42 // Errors.INVALID_REQUEST + ErrUnsupportedForMessageFormat KError = 43 // Errors.UNSUPPORTED_FOR_MESSAGE_FORMAT + ErrPolicyViolation KError = 44 // Errors.POLICY_VIOLATION + ErrOutOfOrderSequenceNumber KError = 45 // Errors.OUT_OF_ORDER_SEQUENCE_NUMBER + ErrDuplicateSequenceNumber KError = 46 // Errors.DUPLICATE_SEQUENCE_NUMBER + ErrInvalidProducerEpoch KError = 47 // Errors.INVALID_PRODUCER_EPOCH + ErrInvalidTxnState KError = 48 // Errors.INVALID_TXN_STATE + ErrInvalidProducerIDMapping KError = 49 // Errors.INVALID_PRODUCER_ID_MAPPING + ErrInvalidTransactionTimeout KError = 50 // Errors.INVALID_TRANSACTION_TIMEOUT + ErrConcurrentTransactions KError = 51 // Errors.CONCURRENT_TRANSACTIONS + ErrTransactionCoordinatorFenced KError = 52 // Errors.TRANSACTION_COORDINATOR_FENCED + ErrTransactionalIDAuthorizationFailed KError = 53 // Errors.TRANSACTIONAL_ID_AUTHORIZATION_FAILED + ErrSecurityDisabled KError = 54 // Errors.SECURITY_DISABLED + ErrOperationNotAttempted KError = 55 // Errors.OPERATION_NOT_ATTEMPTED + ErrKafkaStorageError KError = 56 // Errors.KAFKA_STORAGE_ERROR + ErrLogDirNotFound KError = 57 // Errors.LOG_DIR_NOT_FOUND + ErrSASLAuthenticationFailed KError = 58 // Errors.SASL_AUTHENTICATION_FAILED + ErrUnknownProducerID KError = 59 // Errors.UNKNOWN_PRODUCER_ID + ErrReassignmentInProgress KError = 60 // Errors.REASSIGNMENT_IN_PROGRESS + ErrDelegationTokenAuthDisabled KError = 61 // Errors.DELEGATION_TOKEN_AUTH_DISABLED + ErrDelegationTokenNotFound KError = 62 // Errors.DELEGATION_TOKEN_NOT_FOUND + ErrDelegationTokenOwnerMismatch KError = 63 // Errors.DELEGATION_TOKEN_OWNER_MISMATCH + ErrDelegationTokenRequestNotAllowed KError = 64 // Errors.DELEGATION_TOKEN_REQUEST_NOT_ALLOWED + ErrDelegationTokenAuthorizationFailed KError = 65 // Errors.DELEGATION_TOKEN_AUTHORIZATION_FAILED + ErrDelegationTokenExpired KError = 66 // Errors.DELEGATION_TOKEN_EXPIRED + ErrInvalidPrincipalType KError = 67 // Errors.INVALID_PRINCIPAL_TYPE + ErrNonEmptyGroup KError = 68 // Errors.NON_EMPTY_GROUP + ErrGroupIDNotFound KError = 69 // Errors.GROUP_ID_NOT_FOUND + ErrFetchSessionIDNotFound KError = 70 // Errors.FETCH_SESSION_ID_NOT_FOUND + ErrInvalidFetchSessionEpoch KError = 71 // Errors.INVALID_FETCH_SESSION_EPOCH + ErrListenerNotFound KError = 72 // Errors.LISTENER_NOT_FOUND + ErrTopicDeletionDisabled KError = 73 // Errors.TOPIC_DELETION_DISABLED + ErrFencedLeaderEpoch KError = 74 // Errors.FENCED_LEADER_EPOCH + ErrUnknownLeaderEpoch KError = 75 // Errors.UNKNOWN_LEADER_EPOCH + ErrUnsupportedCompressionType KError = 76 // Errors.UNSUPPORTED_COMPRESSION_TYPE + ErrStaleBrokerEpoch KError = 77 // Errors.STALE_BROKER_EPOCH + ErrOffsetNotAvailable KError = 78 // Errors.OFFSET_NOT_AVAILABLE + ErrMemberIdRequired KError = 79 // Errors.MEMBER_ID_REQUIRED + ErrPreferredLeaderNotAvailable KError = 80 // Errors.PREFERRED_LEADER_NOT_AVAILABLE + ErrGroupMaxSizeReached KError = 81 // Errors.GROUP_MAX_SIZE_REACHED + ErrFencedInstancedId KError = 82 // Errors.FENCED_INSTANCE_ID + ErrEligibleLeadersNotAvailable KError = 83 // Errors.ELIGIBLE_LEADERS_NOT_AVAILABLE + ErrElectionNotNeeded KError = 84 // Errors.ELECTION_NOT_NEEDED + ErrNoReassignmentInProgress KError = 85 // Errors.NO_REASSIGNMENT_IN_PROGRESS + ErrGroupSubscribedToTopic KError = 86 // Errors.GROUP_SUBSCRIBED_TO_TOPIC + ErrInvalidRecord KError = 87 // Errors.INVALID_RECORD + ErrUnstableOffsetCommit KError = 88 // Errors.UNSTABLE_OFFSET_COMMIT + ErrThrottlingQuotaExceeded KError = 89 // Errors.THROTTLING_QUOTA_EXCEEDED + ErrProducerFenced KError = 90 // Errors.PRODUCER_FENCED +) + +func (err KError) Error() string { + // Error messages stolen/adapted from + // https://kafka.apache.org/protocol#protocol_error_codes + switch err { + case ErrNoError: + return "kafka server: Not an error, why are you printing me?" + case ErrUnknown: + return "kafka server: Unexpected (unknown?) server error" + case ErrOffsetOutOfRange: + return "kafka server: The requested offset is outside the range of offsets maintained by the server for the given topic/partition" + case ErrInvalidMessage: + return "kafka server: Message contents does not match its CRC" + case ErrUnknownTopicOrPartition: + return "kafka server: Request was for a topic or partition that does not exist on this broker" + case ErrInvalidMessageSize: + return "kafka server: The message has a negative size" + case ErrLeaderNotAvailable: + return "kafka server: In the middle of a leadership election, there is currently no leader for this partition and hence it is unavailable for writes" + case ErrNotLeaderForPartition: + return "kafka server: Tried to send a message to a replica that is not the leader for some partition. Your metadata is out of date" + case ErrRequestTimedOut: + return "kafka server: Request exceeded the user-specified time limit in the request" + case ErrBrokerNotAvailable: + return "kafka server: Broker not available. Not a client facing error, we should never receive this!!!" + case ErrReplicaNotAvailable: + return "kafka server: Replica information not available, one or more brokers are down" + case ErrMessageSizeTooLarge: + return "kafka server: Message was too large, server rejected it to avoid allocation error" + case ErrStaleControllerEpochCode: + return "kafka server: StaleControllerEpochCode (internal error code for broker-to-broker communication)" + case ErrOffsetMetadataTooLarge: + return "kafka server: Specified a string larger than the configured maximum for offset metadata" + case ErrNetworkException: + return "kafka server: The server disconnected before a response was received" + case ErrOffsetsLoadInProgress: + return "kafka server: The coordinator is still loading offsets and cannot currently process requests" + case ErrConsumerCoordinatorNotAvailable: + return "kafka server: Offset's topic has not yet been created" + case ErrNotCoordinatorForConsumer: + return "kafka server: Request was for a consumer group that is not coordinated by this broker" + case ErrInvalidTopic: + return "kafka server: The request attempted to perform an operation on an invalid topic" + case ErrMessageSetSizeTooLarge: + return "kafka server: The request included message batch larger than the configured segment size on the server" + case ErrNotEnoughReplicas: + return "kafka server: Messages are rejected since there are fewer in-sync replicas than required" + case ErrNotEnoughReplicasAfterAppend: + return "kafka server: Messages are written to the log, but to fewer in-sync replicas than required" + case ErrInvalidRequiredAcks: + return "kafka server: The number of required acks is invalid (should be either -1, 0, or 1)" + case ErrIllegalGeneration: + return "kafka server: The provided generation id is not the current generation" + case ErrInconsistentGroupProtocol: + return "kafka server: The provider group protocol type is incompatible with the other members" + case ErrInvalidGroupId: + return "kafka server: The provided group id was empty" + case ErrUnknownMemberId: + return "kafka server: The provided member is not known in the current generation" + case ErrInvalidSessionTimeout: + return "kafka server: The provided session timeout is outside the allowed range" + case ErrRebalanceInProgress: + return "kafka server: A rebalance for the group is in progress. Please re-join the group" + case ErrInvalidCommitOffsetSize: + return "kafka server: The provided commit metadata was too large" + case ErrTopicAuthorizationFailed: + return "kafka server: The client is not authorized to access this topic" + case ErrGroupAuthorizationFailed: + return "kafka server: The client is not authorized to access this group" + case ErrClusterAuthorizationFailed: + return "kafka server: The client is not authorized to send this request type" + case ErrInvalidTimestamp: + return "kafka server: The timestamp of the message is out of acceptable range" + case ErrUnsupportedSASLMechanism: + return "kafka server: The broker does not support the requested SASL mechanism" + case ErrIllegalSASLState: + return "kafka server: Request is not valid given the current SASL state" + case ErrUnsupportedVersion: + return "kafka server: The version of API is not supported" + case ErrTopicAlreadyExists: + return "kafka server: Topic with this name already exists" + case ErrInvalidPartitions: + return "kafka server: Number of partitions is invalid" + case ErrInvalidReplicationFactor: + return "kafka server: Replication-factor is invalid" + case ErrInvalidReplicaAssignment: + return "kafka server: Replica assignment is invalid" + case ErrInvalidConfig: + return "kafka server: Configuration is invalid" + case ErrNotController: + return "kafka server: This is not the correct controller for this cluster" + case ErrInvalidRequest: + return "kafka server: This most likely occurs because of a request being malformed by the client library or the message was sent to an incompatible broker. See the broker logs for more details" + case ErrUnsupportedForMessageFormat: + return "kafka server: The requested operation is not supported by the message format version" + case ErrPolicyViolation: + return "kafka server: Request parameters do not satisfy the configured policy" + case ErrOutOfOrderSequenceNumber: + return "kafka server: The broker received an out of order sequence number" + case ErrDuplicateSequenceNumber: + return "kafka server: The broker received a duplicate sequence number" + case ErrInvalidProducerEpoch: + return "kafka server: Producer attempted an operation with an old epoch" + case ErrInvalidTxnState: + return "kafka server: The producer attempted a transactional operation in an invalid state" + case ErrInvalidProducerIDMapping: + return "kafka server: The producer attempted to use a producer id which is not currently assigned to its transactional id" + case ErrInvalidTransactionTimeout: + return "kafka server: The transaction timeout is larger than the maximum value allowed by the broker (as configured by max.transaction.timeout.ms)" + case ErrConcurrentTransactions: + return "kafka server: The producer attempted to update a transaction while another concurrent operation on the same transaction was ongoing" + case ErrTransactionCoordinatorFenced: + return "kafka server: The transaction coordinator sending a WriteTxnMarker is no longer the current coordinator for a given producer" + case ErrTransactionalIDAuthorizationFailed: + return "kafka server: Transactional ID authorization failed" + case ErrSecurityDisabled: + return "kafka server: Security features are disabled" + case ErrOperationNotAttempted: + return "kafka server: The broker did not attempt to execute this operation" + case ErrKafkaStorageError: + return "kafka server: Disk error when trying to access log file on the disk" + case ErrLogDirNotFound: + return "kafka server: The specified log directory is not found in the broker config" + case ErrSASLAuthenticationFailed: + return "kafka server: SASL Authentication failed" + case ErrUnknownProducerID: + return "kafka server: The broker could not locate the producer metadata associated with the Producer ID" + case ErrReassignmentInProgress: + return "kafka server: A partition reassignment is in progress" + case ErrDelegationTokenAuthDisabled: + return "kafka server: Delegation Token feature is not enabled" + case ErrDelegationTokenNotFound: + return "kafka server: Delegation Token is not found on server" + case ErrDelegationTokenOwnerMismatch: + return "kafka server: Specified Principal is not valid Owner/Renewer" + case ErrDelegationTokenRequestNotAllowed: + return "kafka server: Delegation Token requests are not allowed on PLAINTEXT/1-way SSL channels and on delegation token authenticated channels" + case ErrDelegationTokenAuthorizationFailed: + return "kafka server: Delegation Token authorization failed" + case ErrDelegationTokenExpired: + return "kafka server: Delegation Token is expired" + case ErrInvalidPrincipalType: + return "kafka server: Supplied principalType is not supported" + case ErrNonEmptyGroup: + return "kafka server: The group is not empty" + case ErrGroupIDNotFound: + return "kafka server: The group id does not exist" + case ErrFetchSessionIDNotFound: + return "kafka server: The fetch session ID was not found" + case ErrInvalidFetchSessionEpoch: + return "kafka server: The fetch session epoch is invalid" + case ErrListenerNotFound: + return "kafka server: There is no listener on the leader broker that matches the listener on which metadata request was processed" + case ErrTopicDeletionDisabled: + return "kafka server: Topic deletion is disabled" + case ErrFencedLeaderEpoch: + return "kafka server: The leader epoch in the request is older than the epoch on the broker" + case ErrUnknownLeaderEpoch: + return "kafka server: The leader epoch in the request is newer than the epoch on the broker" + case ErrUnsupportedCompressionType: + return "kafka server: The requesting client does not support the compression type of given partition" + case ErrStaleBrokerEpoch: + return "kafka server: Broker epoch has changed" + case ErrOffsetNotAvailable: + return "kafka server: The leader high watermark has not caught up from a recent leader election so the offsets cannot be guaranteed to be monotonically increasing" + case ErrMemberIdRequired: + return "kafka server: The group member needs to have a valid member id before actually entering a consumer group" + case ErrPreferredLeaderNotAvailable: + return "kafka server: The preferred leader was not available" + case ErrGroupMaxSizeReached: + return "kafka server: Consumer group The consumer group has reached its max size. already has the configured maximum number of members" + case ErrFencedInstancedId: + return "kafka server: The broker rejected this static consumer since another consumer with the same group.instance.id has registered with a different member.id" + case ErrEligibleLeadersNotAvailable: + return "kafka server: Eligible topic partition leaders are not available" + case ErrElectionNotNeeded: + return "kafka server: Leader election not needed for topic partition" + case ErrNoReassignmentInProgress: + return "kafka server: No partition reassignment is in progress" + case ErrGroupSubscribedToTopic: + return "kafka server: Deleting offsets of a topic is forbidden while the consumer group is actively subscribed to it" + case ErrInvalidRecord: + return "kafka server: This record has failed the validation on broker and hence will be rejected" + case ErrUnstableOffsetCommit: + return "kafka server: There are unstable offsets that need to be cleared" + } + + return fmt.Sprintf("Unknown error, how did this happen? Error code = %d", err) +} diff --git a/aggregator/kafka/fetch_response.go b/aggregator/kafka/fetch_response.go new file mode 100644 index 0000000..f18209f --- /dev/null +++ b/aggregator/kafka/fetch_response.go @@ -0,0 +1,481 @@ +package kafka + +import ( + "errors" + + "github.com/ddosify/alaz/log" + + "sort" + "time" +) + +const ( + invalidLeaderEpoch = -1 + invalidPreferredReplicaID = -1 +) + +type AbortedTransaction struct { + // ProducerID contains the producer id associated with the aborted transaction. + ProducerID int64 + // FirstOffset contains the first offset in the aborted transaction. + FirstOffset int64 +} + +func (t *AbortedTransaction) decode(pd packetDecoder) (err error) { + if t.ProducerID, err = pd.getInt64(); err != nil { + return err + } + + if t.FirstOffset, err = pd.getInt64(); err != nil { + return err + } + + return nil +} + +type FetchResponseBlock struct { + // Err contains the error code, or 0 if there was no fetch error. + Err KError + // HighWatermarkOffset contains the current high water mark. + HighWaterMarkOffset int64 + // LastStableOffset contains the last stable offset (or LSO) of the + // partition. This is the last offset such that the state of all + // transactional records prior to this offset have been decided (ABORTED or + // COMMITTED) + LastStableOffset int64 + LastRecordsBatchOffset *int64 + // LogStartOffset contains the current log start offset. + LogStartOffset int64 + // AbortedTransactions contains the aborted transactions. + AbortedTransactions []*AbortedTransaction + // PreferredReadReplica contains the preferred read replica for the + // consumer to use on its next fetch request + PreferredReadReplica int32 + // RecordsSet contains the record data. + RecordsSet []*Records + + Partial bool + Records *Records // deprecated: use FetchResponseBlock.RecordsSet +} + +func (b *FetchResponseBlock) decode(pd packetDecoder, version int16) (err error) { + tmp, err := pd.getInt16() + if err != nil { + return err + } + b.Err = KError(tmp) + + b.HighWaterMarkOffset, err = pd.getInt64() + if err != nil { + return err + } + + if version >= 4 { + b.LastStableOffset, err = pd.getInt64() + if err != nil { + return err + } + + if version >= 5 { + b.LogStartOffset, err = pd.getInt64() + if err != nil { + return err + } + } + + numTransact, err := pd.getArrayLength() + if err != nil { + return err + } + + if numTransact >= 0 { + b.AbortedTransactions = make([]*AbortedTransaction, numTransact) + } + + for i := 0; i < numTransact; i++ { + transact := new(AbortedTransaction) + if err = transact.decode(pd); err != nil { + return err + } + b.AbortedTransactions[i] = transact + } + } + + if version >= 11 { + b.PreferredReadReplica, err = pd.getInt32() + if err != nil { + return err + } + } else { + b.PreferredReadReplica = -1 + } + + recordsSize, err := pd.getInt32() + if err != nil { + return err + } + + recordsDecoder, err := pd.getSubset(int(recordsSize)) + if err != nil { + return err + } + + b.RecordsSet = []*Records{} + + for recordsDecoder.remaining() > 0 { + records := &Records{} + if err := records.decode(recordsDecoder); err != nil { + // If we have at least one decoded records, this is not an error + if errors.Is(err, ErrInsufficientData) { + if len(b.RecordsSet) == 0 { + b.Partial = true + } + break + } + return err + } + + b.LastRecordsBatchOffset, err = records.recordsOffset() + if err != nil { + return err + } + + partial, err := records.isPartial() + if err != nil { + return err + } + + n, err := records.numRecords() + if err != nil { + return err + } + + if n > 0 || (partial && len(b.RecordsSet) == 0) { + b.RecordsSet = append(b.RecordsSet, records) + + if b.Records == nil { + b.Records = records + } + } + + overflow, err := records.isOverflow() + if err != nil { + return err + } + + if partial || overflow { + break + } + } + + return nil +} + +func (b *FetchResponseBlock) numRecords() (int, error) { + sum := 0 + + for _, records := range b.RecordsSet { + count, err := records.numRecords() + if err != nil { + return 0, err + } + + sum += count + } + + return sum, nil +} + +func (b *FetchResponseBlock) isPartial() (bool, error) { + if b.Partial { + return true, nil + } + + if len(b.RecordsSet) == 1 { + return b.RecordsSet[0].isPartial() + } + + return false, nil +} + +func (b *FetchResponseBlock) getAbortedTransactions() []*AbortedTransaction { + // I can't find any doc that guarantee the field `fetchResponse.AbortedTransactions` is ordered + // plus Java implementation use a PriorityQueue based on `FirstOffset`. I guess we have to order it ourself + at := b.AbortedTransactions + sort.Slice( + at, + func(i, j int) bool { return at[i].FirstOffset < at[j].FirstOffset }, + ) + return at +} + +type FetchResponse struct { + // Version defines the protocol version to use for encode and decode + Version int16 + // ThrottleTime contains the duration in milliseconds for which the request + // was throttled due to a quota violation, or zero if the request did not + // violate any quota. + ThrottleTime time.Duration + // ErrorCode contains the top level response error code. + ErrorCode int16 + // SessionID contains the fetch session ID, or 0 if this is not part of a fetch session. + SessionID int32 + // Blocks contains the response topics. + Blocks map[string]map[int32]*FetchResponseBlock + + LogAppendTime bool + Timestamp time.Time +} + +func (r *FetchResponse) decode(pd packetDecoder, version int16) (err error) { + r.Version = version + + if r.Version >= 1 { + throttle, err := pd.getInt32() + if err != nil { + return err + } + r.ThrottleTime = time.Duration(throttle) * time.Millisecond + } + + if r.Version >= 7 { + r.ErrorCode, err = pd.getInt16() + if err != nil { + return err + } + r.SessionID, err = pd.getInt32() + if err != nil { + return err + } + } + + numTopics, err := pd.getArrayLength() + if err != nil { + return err + } + + log.Logger.Warn().Msgf("sarama-numTopics: %d", numTopics) + + r.Blocks = make(map[string]map[int32]*FetchResponseBlock, numTopics) + for i := 0; i < numTopics; i++ { + name, err := pd.getString() + if err != nil { + return err + } + + numBlocks, err := pd.getArrayLength() + if err != nil { + return err + } + + r.Blocks[name] = make(map[int32]*FetchResponseBlock, numBlocks) + + for j := 0; j < numBlocks; j++ { + id, err := pd.getInt32() + if err != nil { + return err + } + + block := new(FetchResponseBlock) + err = block.decode(pd, version) + if err != nil { + return err + } + r.Blocks[name][id] = block + } + } + + return nil +} + +func (r *FetchResponse) key() int16 { + return 1 +} + +func (r *FetchResponse) version() int16 { + return r.Version +} + +func (r *FetchResponse) headerVersion() int16 { + return 0 +} + +func (r *FetchResponse) isValidVersion() bool { + return r.Version >= 0 && r.Version <= 11 +} + +func (r *FetchResponse) requiredVersion() KafkaVersion { + switch r.Version { + case 11: + return V2_3_0_0 + case 9, 10: + return V2_1_0_0 + case 8: + return V2_0_0_0 + case 7: + return V1_1_0_0 + case 6: + return V1_0_0_0 + case 4, 5: + return V0_11_0_0 + case 3: + return V0_10_1_0 + case 2: + return V0_10_0_0 + case 1: + return V0_9_0_0 + case 0: + return V0_8_2_0 + default: + return V2_3_0_0 + } +} + +func (r *FetchResponse) throttleTime() time.Duration { + return r.ThrottleTime +} + +func (r *FetchResponse) GetBlock(topic string, partition int32) *FetchResponseBlock { + if r.Blocks == nil { + return nil + } + + if r.Blocks[topic] == nil { + return nil + } + + return r.Blocks[topic][partition] +} + +func (r *FetchResponse) AddError(topic string, partition int32, err KError) { + if r.Blocks == nil { + r.Blocks = make(map[string]map[int32]*FetchResponseBlock) + } + partitions, ok := r.Blocks[topic] + if !ok { + partitions = make(map[int32]*FetchResponseBlock) + r.Blocks[topic] = partitions + } + frb, ok := partitions[partition] + if !ok { + frb = new(FetchResponseBlock) + partitions[partition] = frb + } + frb.Err = err +} + +func (r *FetchResponse) getOrCreateBlock(topic string, partition int32) *FetchResponseBlock { + if r.Blocks == nil { + r.Blocks = make(map[string]map[int32]*FetchResponseBlock) + } + partitions, ok := r.Blocks[topic] + if !ok { + partitions = make(map[int32]*FetchResponseBlock) + r.Blocks[topic] = partitions + } + frb, ok := partitions[partition] + if !ok { + frb = new(FetchResponseBlock) + partitions[partition] = frb + } + + return frb +} + +func encodeKV(key, value Encoder) ([]byte, []byte) { + var kb []byte + var vb []byte + if key != nil { + kb, _ = key.Encode() + } + if value != nil { + vb, _ = value.Encode() + } + + return kb, vb +} + +func (r *FetchResponse) AddMessageWithTimestamp(topic string, partition int32, key, value Encoder, offset int64, timestamp time.Time, version int8) { + frb := r.getOrCreateBlock(topic, partition) + kb, vb := encodeKV(key, value) + if r.LogAppendTime { + timestamp = r.Timestamp + } + msg := &Message{Key: kb, Value: vb, LogAppendTime: r.LogAppendTime, Timestamp: timestamp, Version: version} + msgBlock := &MessageBlock{Msg: msg, Offset: offset} + if len(frb.RecordsSet) == 0 { + records := newLegacyRecords(&MessageSet{}) + frb.RecordsSet = []*Records{&records} + } + set := frb.RecordsSet[0].MsgSet + set.Messages = append(set.Messages, msgBlock) +} + +func (r *FetchResponse) AddRecordWithTimestamp(topic string, partition int32, key, value Encoder, offset int64, timestamp time.Time) { + frb := r.getOrCreateBlock(topic, partition) + kb, vb := encodeKV(key, value) + if len(frb.RecordsSet) == 0 { + records := newDefaultRecords(&RecordBatch{Version: 2, LogAppendTime: r.LogAppendTime, FirstTimestamp: timestamp, MaxTimestamp: r.Timestamp}) + frb.RecordsSet = []*Records{&records} + } + batch := frb.RecordsSet[0].RecordBatch + rec := &Record{Key: kb, Value: vb, OffsetDelta: offset, TimestampDelta: timestamp.Sub(batch.FirstTimestamp)} + batch.addRecord(rec) +} + +// AddRecordBatchWithTimestamp is similar to AddRecordWithTimestamp +// But instead of appending 1 record to a batch, it append a new batch containing 1 record to the fetchResponse +// Since transaction are handled on batch level (the whole batch is either committed or aborted), use this to test transactions +func (r *FetchResponse) AddRecordBatchWithTimestamp(topic string, partition int32, key, value Encoder, offset int64, producerID int64, isTransactional bool, timestamp time.Time) { + frb := r.getOrCreateBlock(topic, partition) + kb, vb := encodeKV(key, value) + + records := newDefaultRecords(&RecordBatch{Version: 2, LogAppendTime: r.LogAppendTime, FirstTimestamp: timestamp, MaxTimestamp: r.Timestamp}) + batch := &RecordBatch{ + Version: 2, + LogAppendTime: r.LogAppendTime, + FirstTimestamp: timestamp, + MaxTimestamp: r.Timestamp, + FirstOffset: offset, + LastOffsetDelta: 0, + ProducerID: producerID, + IsTransactional: isTransactional, + } + rec := &Record{Key: kb, Value: vb, OffsetDelta: 0, TimestampDelta: timestamp.Sub(batch.FirstTimestamp)} + batch.addRecord(rec) + records.RecordBatch = batch + + frb.RecordsSet = append(frb.RecordsSet, &records) +} + +func (r *FetchResponse) AddMessage(topic string, partition int32, key, value Encoder, offset int64) { + r.AddMessageWithTimestamp(topic, partition, key, value, offset, time.Time{}, 0) +} + +func (r *FetchResponse) AddRecord(topic string, partition int32, key, value Encoder, offset int64) { + r.AddRecordWithTimestamp(topic, partition, key, value, offset, time.Time{}) +} + +func (r *FetchResponse) AddRecordBatch(topic string, partition int32, key, value Encoder, offset int64, producerID int64, isTransactional bool) { + r.AddRecordBatchWithTimestamp(topic, partition, key, value, offset, producerID, isTransactional, time.Time{}) +} + +// func (r *FetchResponse) AddControlRecord(topic string, partition int32, offset int64, producerID int64, recordType ControlRecordType) { +// // define controlRecord key and value +// r.AddControlRecordWithTimestamp(topic, partition, offset, producerID, recordType, time.Time{}) +// } + +func (r *FetchResponse) SetLastOffsetDelta(topic string, partition int32, offset int32) { + frb := r.getOrCreateBlock(topic, partition) + if len(frb.RecordsSet) == 0 { + records := newDefaultRecords(&RecordBatch{Version: 2}) + frb.RecordsSet = []*Records{&records} + } + batch := frb.RecordsSet[0].RecordBatch + batch.LastOffsetDelta = offset +} + +func (r *FetchResponse) SetLastStableOffset(topic string, partition int32, offset int64) { + frb := r.getOrCreateBlock(topic, partition) + frb.LastStableOffset = offset +} diff --git a/aggregator/kafka/length_field.go b/aggregator/kafka/length_field.go new file mode 100644 index 0000000..fd2c67d --- /dev/null +++ b/aggregator/kafka/length_field.go @@ -0,0 +1,99 @@ +package kafka + +import ( + "encoding/binary" + "sync" +) + +// LengthField implements the PushEncoder and PushDecoder interfaces for calculating 4-byte lengths. +type lengthField struct { + startOffset int + length int32 +} + +var lengthFieldPool = sync.Pool{} + +func acquireLengthField() *lengthField { + val := lengthFieldPool.Get() + if val != nil { + return val.(*lengthField) + } + return &lengthField{} +} + +func releaseLengthField(m *lengthField) { + lengthFieldPool.Put(m) +} + +func (l *lengthField) decode(pd packetDecoder) error { + var err error + l.length, err = pd.getInt32() + if err != nil { + return err + } + if l.length > int32(pd.remaining()) { + return ErrInsufficientData + } + return nil +} + +func (l *lengthField) saveOffset(in int) { + l.startOffset = in +} + +func (l *lengthField) reserveLength() int { + return 4 +} + +func (l *lengthField) run(curOffset int, buf []byte) error { + binary.BigEndian.PutUint32(buf[l.startOffset:], uint32(curOffset-l.startOffset-4)) + return nil +} + +func (l *lengthField) check(curOffset int, buf []byte) error { + if int32(curOffset-l.startOffset-4) != l.length { + return PacketDecodingError{"length field invalid"} + } + + return nil +} + +type varintLengthField struct { + startOffset int + length int64 +} + +func (l *varintLengthField) decode(pd packetDecoder) error { + var err error + l.length, err = pd.getVarint() + return err +} + +func (l *varintLengthField) saveOffset(in int) { + l.startOffset = in +} + +func (l *varintLengthField) adjustLength(currOffset int) int { + oldFieldSize := l.reserveLength() + l.length = int64(currOffset - l.startOffset - oldFieldSize) + + return l.reserveLength() - oldFieldSize +} + +func (l *varintLengthField) reserveLength() int { + var tmp [binary.MaxVarintLen64]byte + return binary.PutVarint(tmp[:], l.length) +} + +func (l *varintLengthField) run(curOffset int, buf []byte) error { + binary.PutVarint(buf[l.startOffset:], l.length) + return nil +} + +func (l *varintLengthField) check(curOffset int, buf []byte) error { + if int64(curOffset-l.startOffset-l.reserveLength()) != l.length { + return PacketDecodingError{"length field invalid"} + } + + return nil +} diff --git a/aggregator/kafka/message.go b/aggregator/kafka/message.go new file mode 100644 index 0000000..1a75a58 --- /dev/null +++ b/aggregator/kafka/message.go @@ -0,0 +1,146 @@ +package kafka + +import ( + "fmt" + "time" +) + +const ( + // CompressionNone no compression + CompressionNone CompressionCodec = iota + // CompressionGZIP compression using GZIP + CompressionGZIP + // CompressionSnappy compression using snappy + CompressionSnappy + // CompressionLZ4 compression using LZ4 + CompressionLZ4 + // CompressionZSTD compression using ZSTD + CompressionZSTD + + // The lowest 3 bits contain the compression codec used for the message + compressionCodecMask int8 = 0x07 + + // Bit 3 set for "LogAppend" timestamps + timestampTypeMask = 0x08 + + // CompressionLevelDefault is the constant to use in CompressionLevel + // to have the default compression level for any codec. The value is picked + // that we don't use any existing compression levels. + CompressionLevelDefault = -1000 +) + +// CompressionCodec represents the various compression codecs recognized by Kafka in messages. +type CompressionCodec int8 + +func (cc CompressionCodec) String() string { + return []string{ + "none", + "gzip", + "snappy", + "lz4", + "zstd", + }[int(cc)] +} + +// UnmarshalText returns a CompressionCodec from its string representation. +func (cc *CompressionCodec) UnmarshalText(text []byte) error { + codecs := map[string]CompressionCodec{ + "none": CompressionNone, + "gzip": CompressionGZIP, + "snappy": CompressionSnappy, + "lz4": CompressionLZ4, + "zstd": CompressionZSTD, + } + codec, ok := codecs[string(text)] + if !ok { + return fmt.Errorf("cannot parse %q as a compression codec", string(text)) + } + *cc = codec + return nil +} + +// MarshalText transforms a CompressionCodec into its string representation. +func (cc CompressionCodec) MarshalText() ([]byte, error) { + return []byte(cc.String()), nil +} + +// Message is a kafka message type +type Message struct { + Codec CompressionCodec // codec used to compress the message contents + CompressionLevel int // compression level + LogAppendTime bool // the used timestamp is LogAppendTime + Key []byte // the message key, may be nil + Value []byte // the message contents + Set *MessageSet // the message set a message might wrap + Version int8 // v1 requires Kafka 0.10 + Timestamp time.Time // the timestamp of the message (version 1+ only) + + compressedCache []byte + compressedSize int // used for computing the compression ratio metrics +} + +func (m *Message) decode(pd packetDecoder) (err error) { + crc32Decoder := acquireCrc32Field(crcIEEE) + defer releaseCrc32Field(crc32Decoder) + + err = pd.push(crc32Decoder) + if err != nil { + return err + } + + m.Version, err = pd.getInt8() + if err != nil { + return err + } + + if m.Version > 1 { + return PacketDecodingError{fmt.Sprintf("unknown magic byte (%v)", m.Version)} + } + + attribute, err := pd.getInt8() + if err != nil { + return err + } + m.Codec = CompressionCodec(attribute & compressionCodecMask) + m.LogAppendTime = attribute×tampTypeMask == timestampTypeMask + + if m.Version == 1 { + if err := (Timestamp{&m.Timestamp}).decode(pd); err != nil { + return err + } + } + + m.Key, err = pd.getBytes() + if err != nil { + return err + } + + m.Value, err = pd.getBytes() + if err != nil { + return err + } + + // Required for deep equal assertion during tests but might be useful + // for future metrics about the compression ratio in fetch requests + m.compressedSize = len(m.Value) + + if m.Value != nil && m.Codec != CompressionNone { + m.Value, err = decompress(m.Codec, m.Value) + if err != nil { + return err + } + + if err := m.decodeSet(); err != nil { + return err + } + } + + return pd.pop() +} + +// decodes a message set from a previously encoded bulk-message +func (m *Message) decodeSet() (err error) { + pd := realDecoder{raw: m.Value} + m.Set = &MessageSet{} + return m.Set.decode(&pd) +} diff --git a/aggregator/kafka/message_set.go b/aggregator/kafka/message_set.go new file mode 100644 index 0000000..148976a --- /dev/null +++ b/aggregator/kafka/message_set.go @@ -0,0 +1,92 @@ +package kafka + +import "errors" + +type MessageBlock struct { + Offset int64 + Msg *Message +} + +// Messages convenience helper which returns either all the +// messages that are wrapped in this block +func (msb *MessageBlock) Messages() []*MessageBlock { + if msb.Msg.Set != nil { + return msb.Msg.Set.Messages + } + return []*MessageBlock{msb} +} + +func (msb *MessageBlock) decode(pd packetDecoder) (err error) { + if msb.Offset, err = pd.getInt64(); err != nil { + return err + } + + lengthDecoder := acquireLengthField() + defer releaseLengthField(lengthDecoder) + + if err = pd.push(lengthDecoder); err != nil { + return err + } + + msb.Msg = new(Message) + if err = msb.Msg.decode(pd); err != nil { + return err + } + + if err = pd.pop(); err != nil { + return err + } + + return nil +} + +type MessageSet struct { + PartialTrailingMessage bool // whether the set on the wire contained an incomplete trailing MessageBlock + OverflowMessage bool // whether the set on the wire contained an overflow message + Messages []*MessageBlock +} + +func (ms *MessageSet) decode(pd packetDecoder) (err error) { + ms.Messages = nil + + for pd.remaining() > 0 { + magic, err := magicValue(pd) + if err != nil { + if errors.Is(err, ErrInsufficientData) { + ms.PartialTrailingMessage = true + return nil + } + return err + } + + if magic > 1 { + return nil + } + + msb := new(MessageBlock) + err = msb.decode(pd) + if err == nil { + ms.Messages = append(ms.Messages, msb) + } else if errors.Is(err, ErrInsufficientData) { + // As an optimization the server is allowed to return a partial message at the + // end of the message set. Clients should handle this case. So we just ignore such things. + if msb.Offset == -1 { + // This is an overflow message caused by chunked down conversion + ms.OverflowMessage = true + } else { + ms.PartialTrailingMessage = true + } + return nil + } else { + return err + } + } + + return nil +} + +func (ms *MessageSet) addMessage(msg *Message) { + block := new(MessageBlock) + block.Msg = msg + ms.Messages = append(ms.Messages, block) +} diff --git a/aggregator/kafka/produce_request.go b/aggregator/kafka/produce_request.go new file mode 100644 index 0000000..569d4ac --- /dev/null +++ b/aggregator/kafka/produce_request.go @@ -0,0 +1,172 @@ +package kafka + +// RequiredAcks is used in Produce Requests to tell the broker how many replica acknowledgements +// it must see before responding. Any of the constants defined here are valid. On broker versions +// prior to 0.8.2.0 any other positive int16 is also valid (the broker will wait for that many +// acknowledgements) but in 0.8.2.0 and later this will raise an exception (it has been replaced +// by setting the `min.isr` value in the brokers configuration). +type RequiredAcks int16 + +const ( + // NoResponse doesn't send any response, the TCP ACK is all you get. + NoResponse RequiredAcks = 0 + // WaitForLocal waits for only the local commit to succeed before responding. + WaitForLocal RequiredAcks = 1 + // WaitForAll waits for all in-sync replicas to commit before responding. + // The minimum number of in-sync replicas is configured on the broker via + // the `min.insync.replicas` configuration key. + WaitForAll RequiredAcks = -1 +) + +type ProduceRequest struct { + TransactionalID *string + RequiredAcks RequiredAcks + Timeout int32 + Version int16 // v1 requires Kafka 0.9, v2 requires Kafka 0.10, v3 requires Kafka 0.11 + Records map[string]map[int32]Records +} + +func updateMsgSetMetrics(msgSet *MessageSet) int64 { + var topicRecordCount int64 + for _, messageBlock := range msgSet.Messages { + // Is this a fake "message" wrapping real messages? + if messageBlock.Msg.Set != nil { + topicRecordCount += int64(len(messageBlock.Msg.Set.Messages)) + } else { + // A single uncompressed message + topicRecordCount++ + } + } + return topicRecordCount +} + +func (r *ProduceRequest) decode(pd packetDecoder, version int16) error { + r.Version = version + + if version >= 3 { + id, err := pd.getNullableString() + if err != nil { + return err + } + r.TransactionalID = id + } + requiredAcks, err := pd.getInt16() + if err != nil { + return err + } + r.RequiredAcks = RequiredAcks(requiredAcks) + if r.Timeout, err = pd.getInt32(); err != nil { + return err + } + topicCount, err := pd.getArrayLength() + if err != nil { + return err + } + if topicCount == 0 { + return nil + } + + r.Records = make(map[string]map[int32]Records) + for i := 0; i < topicCount; i++ { + topic, err := pd.getString() + if err != nil { + return err + } + partitionCount, err := pd.getArrayLength() + if err != nil { + return err + } + r.Records[topic] = make(map[int32]Records) + + for j := 0; j < partitionCount; j++ { + partition, err := pd.getInt32() + if err != nil { + return err + } + size, err := pd.getInt32() + if err != nil { + return err + } + recordsDecoder, err := pd.getSubset(int(size)) + if err != nil { + return err + } + var records Records + if err := records.decode(recordsDecoder); err != nil { + return err + } + r.Records[topic][partition] = records + } + } + + return nil +} + +func (r *ProduceRequest) key() int16 { + return 0 +} + +func (r *ProduceRequest) version() int16 { + return r.Version +} + +func (r *ProduceRequest) headerVersion() int16 { + return 1 +} + +func (r *ProduceRequest) isValidVersion() bool { + return r.Version >= 0 && r.Version <= 7 +} + +func (r *ProduceRequest) requiredVersion() KafkaVersion { + switch r.Version { + case 7: + return V2_1_0_0 + case 6: + return V2_0_0_0 + case 4, 5: + return V1_0_0_0 + case 3: + return V0_11_0_0 + case 2: + return V0_10_0_0 + case 1: + return V0_9_0_0 + case 0: + return V0_8_2_0 + default: + return V2_1_0_0 + } +} + +func (r *ProduceRequest) ensureRecords(topic string, partition int32) { + if r.Records == nil { + r.Records = make(map[string]map[int32]Records) + } + + if r.Records[topic] == nil { + r.Records[topic] = make(map[int32]Records) + } +} + +func (r *ProduceRequest) AddMessage(topic string, partition int32, msg *Message) { + r.ensureRecords(topic, partition) + set := r.Records[topic][partition].MsgSet + + if set == nil { + set = new(MessageSet) + r.Records[topic][partition] = newLegacyRecords(set) + } + + set.addMessage(msg) +} + +func (r *ProduceRequest) AddSet(topic string, partition int32, set *MessageSet) { + r.ensureRecords(topic, partition) + r.Records[topic][partition] = newLegacyRecords(set) +} + +func (r *ProduceRequest) AddBatch(topic string, partition int32, batch *RecordBatch) { + r.ensureRecords(topic, partition) + r.Records[topic][partition] = newDefaultRecords(batch) +} diff --git a/aggregator/kafka/real_decoder.go b/aggregator/kafka/real_decoder.go new file mode 100644 index 0000000..a5bd8c4 --- /dev/null +++ b/aggregator/kafka/real_decoder.go @@ -0,0 +1,461 @@ +package kafka + +import ( + "encoding/binary" + "math" +) + +var ( + errInvalidArrayLength = PacketDecodingError{"invalid array length"} + errInvalidByteSliceLength = PacketDecodingError{"invalid byteslice length"} + errInvalidStringLength = PacketDecodingError{"invalid string length"} + errVarintOverflow = PacketDecodingError{"varint overflow"} + errUVarintOverflow = PacketDecodingError{"uvarint overflow"} + errInvalidBool = PacketDecodingError{"invalid bool"} +) + +type realDecoder struct { + raw []byte + off int + stack []pushDecoder +} + +// primitives + +func (rd *realDecoder) getInt8() (int8, error) { + if rd.remaining() < 1 { + rd.off = len(rd.raw) + return -1, ErrInsufficientData + } + tmp := int8(rd.raw[rd.off]) + rd.off++ + return tmp, nil +} + +func (rd *realDecoder) getInt16() (int16, error) { + if rd.remaining() < 2 { + rd.off = len(rd.raw) + return -1, ErrInsufficientData + } + tmp := int16(binary.BigEndian.Uint16(rd.raw[rd.off:])) + rd.off += 2 + return tmp, nil +} + +func (rd *realDecoder) getInt32() (int32, error) { + if rd.remaining() < 4 { + rd.off = len(rd.raw) + return -1, ErrInsufficientData + } + tmp := int32(binary.BigEndian.Uint32(rd.raw[rd.off:])) + rd.off += 4 + return tmp, nil +} + +func (rd *realDecoder) getInt64() (int64, error) { + if rd.remaining() < 8 { + rd.off = len(rd.raw) + return -1, ErrInsufficientData + } + tmp := int64(binary.BigEndian.Uint64(rd.raw[rd.off:])) + rd.off += 8 + return tmp, nil +} + +func (rd *realDecoder) getVarint() (int64, error) { + tmp, n := binary.Varint(rd.raw[rd.off:]) + if n == 0 { + rd.off = len(rd.raw) + return -1, ErrInsufficientData + } + if n < 0 { + rd.off -= n + return -1, errVarintOverflow + } + rd.off += n + return tmp, nil +} + +func (rd *realDecoder) getUVarint() (uint64, error) { + tmp, n := binary.Uvarint(rd.raw[rd.off:]) + if n == 0 { + rd.off = len(rd.raw) + return 0, ErrInsufficientData + } + + if n < 0 { + rd.off -= n + return 0, errUVarintOverflow + } + + rd.off += n + return tmp, nil +} + +func (rd *realDecoder) getFloat64() (float64, error) { + if rd.remaining() < 8 { + rd.off = len(rd.raw) + return -1, ErrInsufficientData + } + tmp := math.Float64frombits(binary.BigEndian.Uint64(rd.raw[rd.off:])) + rd.off += 8 + return tmp, nil +} + +func (rd *realDecoder) getArrayLength() (int, error) { + if rd.remaining() < 4 { + rd.off = len(rd.raw) + return -1, ErrInsufficientData + } + tmp := int(int32(binary.BigEndian.Uint32(rd.raw[rd.off:]))) + rd.off += 4 + if tmp > rd.remaining() { + rd.off = len(rd.raw) + return -1, ErrInsufficientData + } else if tmp > 2*math.MaxUint16 { + return -1, errInvalidArrayLength + } + return tmp, nil +} + +func (rd *realDecoder) getCompactArrayLength() (int, error) { + n, err := rd.getUVarint() + if err != nil { + return 0, err + } + + if n == 0 { + return 0, nil + } + + return int(n) - 1, nil +} + +func (rd *realDecoder) getBool() (bool, error) { + b, err := rd.getInt8() + if err != nil || b == 0 { + return false, err + } + if b != 1 { + return false, errInvalidBool + } + return true, nil +} + +func (rd *realDecoder) getEmptyTaggedFieldArray() (int, error) { + tagCount, err := rd.getUVarint() + if err != nil { + return 0, err + } + + // skip over any tagged fields without deserializing them + // as we don't currently support doing anything with them + for i := uint64(0); i < tagCount; i++ { + // fetch and ignore tag identifier + _, err := rd.getUVarint() + if err != nil { + return 0, err + } + length, err := rd.getUVarint() + if err != nil { + return 0, err + } + if _, err := rd.getRawBytes(int(length)); err != nil { + return 0, err + } + } + + return 0, nil +} + +// collections + +func (rd *realDecoder) getBytes() ([]byte, error) { + tmp, err := rd.getInt32() + if err != nil { + return nil, err + } + if tmp == -1 { + return nil, nil + } + + return rd.getRawBytes(int(tmp)) +} + +func (rd *realDecoder) getVarintBytes() ([]byte, error) { + tmp, err := rd.getVarint() + if err != nil { + return nil, err + } + if tmp == -1 { + return nil, nil + } + + return rd.getRawBytes(int(tmp)) +} + +func (rd *realDecoder) getCompactBytes() ([]byte, error) { + n, err := rd.getUVarint() + if err != nil { + return nil, err + } + + length := int(n - 1) + return rd.getRawBytes(length) +} + +func (rd *realDecoder) getStringLength() (int, error) { + length, err := rd.getInt16() + if err != nil { + return 0, err + } + + n := int(length) + + switch { + case n < -1: + return 0, errInvalidStringLength + case n > rd.remaining(): + rd.off = len(rd.raw) + return 0, ErrInsufficientData + } + + return n, nil +} + +func (rd *realDecoder) getString() (string, error) { + n, err := rd.getStringLength() + if err != nil || n == -1 { + return "", err + } + + tmpStr := string(rd.raw[rd.off : rd.off+n]) + rd.off += n + return tmpStr, nil +} + +func (rd *realDecoder) getNullableString() (*string, error) { + n, err := rd.getStringLength() + if err != nil || n == -1 { + return nil, err + } + + tmpStr := string(rd.raw[rd.off : rd.off+n]) + rd.off += n + return &tmpStr, err +} + +func (rd *realDecoder) getCompactString() (string, error) { + n, err := rd.getUVarint() + if err != nil { + return "", err + } + + length := int(n - 1) + if length < 0 { + return "", errInvalidByteSliceLength + } + tmpStr := string(rd.raw[rd.off : rd.off+length]) + rd.off += length + return tmpStr, nil +} + +func (rd *realDecoder) getCompactNullableString() (*string, error) { + n, err := rd.getUVarint() + if err != nil { + return nil, err + } + + length := int(n - 1) + + if length < 0 { + return nil, err + } + + tmpStr := string(rd.raw[rd.off : rd.off+length]) + rd.off += length + return &tmpStr, err +} + +func (rd *realDecoder) getCompactInt32Array() ([]int32, error) { + n, err := rd.getUVarint() + if err != nil { + return nil, err + } + + if n == 0 { + return nil, nil + } + + arrayLength := int(n) - 1 + + ret := make([]int32, arrayLength) + + for i := range ret { + ret[i] = int32(binary.BigEndian.Uint32(rd.raw[rd.off:])) + rd.off += 4 + } + return ret, nil +} + +func (rd *realDecoder) getInt32Array() ([]int32, error) { + if rd.remaining() < 4 { + rd.off = len(rd.raw) + return nil, ErrInsufficientData + } + n := int(binary.BigEndian.Uint32(rd.raw[rd.off:])) + rd.off += 4 + + if rd.remaining() < 4*n { + rd.off = len(rd.raw) + return nil, ErrInsufficientData + } + + if n == 0 { + return nil, nil + } + + if n < 0 { + return nil, errInvalidArrayLength + } + + ret := make([]int32, n) + for i := range ret { + ret[i] = int32(binary.BigEndian.Uint32(rd.raw[rd.off:])) + rd.off += 4 + } + return ret, nil +} + +func (rd *realDecoder) getInt64Array() ([]int64, error) { + if rd.remaining() < 4 { + rd.off = len(rd.raw) + return nil, ErrInsufficientData + } + n := int(binary.BigEndian.Uint32(rd.raw[rd.off:])) + rd.off += 4 + + if rd.remaining() < 8*n { + rd.off = len(rd.raw) + return nil, ErrInsufficientData + } + + if n == 0 { + return nil, nil + } + + if n < 0 { + return nil, errInvalidArrayLength + } + + ret := make([]int64, n) + for i := range ret { + ret[i] = int64(binary.BigEndian.Uint64(rd.raw[rd.off:])) + rd.off += 8 + } + return ret, nil +} + +func (rd *realDecoder) getStringArray() ([]string, error) { + if rd.remaining() < 4 { + rd.off = len(rd.raw) + return nil, ErrInsufficientData + } + n := int(binary.BigEndian.Uint32(rd.raw[rd.off:])) + rd.off += 4 + + if n == 0 { + return nil, nil + } + + if n < 0 { + return nil, errInvalidArrayLength + } + + ret := make([]string, n) + for i := range ret { + str, err := rd.getString() + if err != nil { + return nil, err + } + + ret[i] = str + } + return ret, nil +} + +// subsets + +func (rd *realDecoder) remaining() int { + return len(rd.raw) - rd.off +} + +func (rd *realDecoder) getSubset(length int) (packetDecoder, error) { + buf, err := rd.getRawBytes(length) + if err != nil { + return nil, err + } + return &realDecoder{raw: buf}, nil +} + +func (rd *realDecoder) getRawBytes(length int) ([]byte, error) { + if length < 0 { + return nil, errInvalidByteSliceLength + } else if length > rd.remaining() { + rd.off = len(rd.raw) + return nil, ErrInsufficientData + } + + start := rd.off + rd.off += length + return rd.raw[start:rd.off], nil +} + +func (rd *realDecoder) peek(offset, length int) (packetDecoder, error) { + if rd.remaining() < offset+length { + return nil, ErrInsufficientData + } + off := rd.off + offset + return &realDecoder{raw: rd.raw[off : off+length]}, nil +} + +func (rd *realDecoder) peekInt8(offset int) (int8, error) { + const byteLen = 1 + if rd.remaining() < offset+byteLen { + return -1, ErrInsufficientData + } + return int8(rd.raw[rd.off+offset]), nil +} + +// stacks + +func (rd *realDecoder) push(in pushDecoder) error { + in.saveOffset(rd.off) + + var reserve int + if dpd, ok := in.(dynamicPushDecoder); ok { + if err := dpd.decode(rd); err != nil { + return err + } + } else { + reserve = in.reserveLength() + if rd.remaining() < reserve { + rd.off = len(rd.raw) + return ErrInsufficientData + } + } + + rd.stack = append(rd.stack, in) + + rd.off += reserve + + return nil +} + +func (rd *realDecoder) pop() error { + // this is go's ugly pop pattern (the inverse of append) + in := rd.stack[len(rd.stack)-1] + rd.stack = rd.stack[:len(rd.stack)-1] + + return in.check(rd.off, rd.raw) +} diff --git a/aggregator/kafka/record.go b/aggregator/kafka/record.go new file mode 100644 index 0000000..ea968bb --- /dev/null +++ b/aggregator/kafka/record.go @@ -0,0 +1,87 @@ +package kafka + +import ( + "encoding/binary" + "time" +) + +const ( + isTransactionalMask = 0x10 + controlMask = 0x20 + maximumRecordOverhead = 5*binary.MaxVarintLen32 + binary.MaxVarintLen64 + 1 +) + +// RecordHeader stores key and value for a record header +type RecordHeader struct { + Key []byte + Value []byte +} + +func (h *RecordHeader) decode(pd packetDecoder) (err error) { + if h.Key, err = pd.getVarintBytes(); err != nil { + return err + } + + if h.Value, err = pd.getVarintBytes(); err != nil { + return err + } + return nil +} + +// Record is kafka record type +type Record struct { + Headers []*RecordHeader + + Attributes int8 + TimestampDelta time.Duration + OffsetDelta int64 + Key []byte + Value []byte + length varintLengthField +} + +func (r *Record) decode(pd packetDecoder) (err error) { + if err = pd.push(&r.length); err != nil { + return err + } + + if r.Attributes, err = pd.getInt8(); err != nil { + return err + } + + timestamp, err := pd.getVarint() + if err != nil { + return err + } + r.TimestampDelta = time.Duration(timestamp) * time.Millisecond + + if r.OffsetDelta, err = pd.getVarint(); err != nil { + return err + } + + if r.Key, err = pd.getVarintBytes(); err != nil { + return err + } + + if r.Value, err = pd.getVarintBytes(); err != nil { + return err + } + + numHeaders, err := pd.getVarint() + if err != nil { + return err + } + + if numHeaders >= 0 { + r.Headers = make([]*RecordHeader, numHeaders) + } + for i := int64(0); i < numHeaders; i++ { + hdr := new(RecordHeader) + if err := hdr.decode(pd); err != nil { + return err + } + r.Headers[i] = hdr + } + + return pd.pop() +} diff --git a/aggregator/kafka/record_batch.go b/aggregator/kafka/record_batch.go new file mode 100644 index 0000000..a3f4f7f --- /dev/null +++ b/aggregator/kafka/record_batch.go @@ -0,0 +1,161 @@ +package kafka + +import ( + "errors" + "time" +) + +const recordBatchOverhead = 49 + +type recordsArray []*Record + +func (e recordsArray) decode(pd packetDecoder) error { + records := make([]Record, len(e)) + for i := range e { + if err := records[i].decode(pd); err != nil { + return err + } + e[i] = &records[i] + } + return nil +} + +type RecordBatch struct { + FirstOffset int64 + PartitionLeaderEpoch int32 + Version int8 + Codec CompressionCodec + CompressionLevel int + Control bool + LogAppendTime bool + LastOffsetDelta int32 + FirstTimestamp time.Time + MaxTimestamp time.Time + ProducerID int64 + ProducerEpoch int16 + FirstSequence int32 + Records []*Record + PartialTrailingRecord bool + IsTransactional bool + + compressedRecords []byte + recordsLen int // uncompressed records size +} + +func (b *RecordBatch) LastOffset() int64 { + return b.FirstOffset + int64(b.LastOffsetDelta) +} + +func (b *RecordBatch) decode(pd packetDecoder) (err error) { + if b.FirstOffset, err = pd.getInt64(); err != nil { + return err + } + + batchLen, err := pd.getInt32() + if err != nil { + return err + } + + if b.PartitionLeaderEpoch, err = pd.getInt32(); err != nil { + return err + } + + if b.Version, err = pd.getInt8(); err != nil { + return err + } + + crc32Decoder := acquireCrc32Field(crcCastagnoli) + defer releaseCrc32Field(crc32Decoder) + + if err = pd.push(crc32Decoder); err != nil { + return err + } + + attributes, err := pd.getInt16() + if err != nil { + return err + } + b.Codec = CompressionCodec(int8(attributes) & compressionCodecMask) + b.Control = attributes&controlMask == controlMask + b.LogAppendTime = attributes×tampTypeMask == timestampTypeMask + b.IsTransactional = attributes&isTransactionalMask == isTransactionalMask + + if b.LastOffsetDelta, err = pd.getInt32(); err != nil { + return err + } + + if err = (Timestamp{&b.FirstTimestamp}).decode(pd); err != nil { + return err + } + + if err = (Timestamp{&b.MaxTimestamp}).decode(pd); err != nil { + return err + } + + if b.ProducerID, err = pd.getInt64(); err != nil { + return err + } + + if b.ProducerEpoch, err = pd.getInt16(); err != nil { + return err + } + + if b.FirstSequence, err = pd.getInt32(); err != nil { + return err + } + + numRecs, err := pd.getArrayLength() + if err != nil { + return err + } + if numRecs >= 0 { + b.Records = make([]*Record, numRecs) + } + + bufSize := int(batchLen) - recordBatchOverhead + recBuffer, err := pd.getRawBytes(bufSize) + if err != nil { + if errors.Is(err, ErrInsufficientData) { + b.PartialTrailingRecord = true + b.Records = nil + return nil + } + return err + } + + if err = pd.pop(); err != nil { + return err + } + + recBuffer, err = decompress(b.Codec, recBuffer) + if err != nil { + return err + } + + b.recordsLen = len(recBuffer) + err = decode(recBuffer, recordsArray(b.Records)) + if errors.Is(err, ErrInsufficientData) { + b.PartialTrailingRecord = true + b.Records = nil + return nil + } + return err +} + +func (b *RecordBatch) computeAttributes() int16 { + attr := int16(b.Codec) & int16(compressionCodecMask) + if b.Control { + attr |= controlMask + } + if b.LogAppendTime { + attr |= timestampTypeMask + } + if b.IsTransactional { + attr |= isTransactionalMask + } + return attr +} + +func (b *RecordBatch) addRecord(r *Record) { + b.Records = append(b.Records, r) +} diff --git a/aggregator/kafka/records.go b/aggregator/kafka/records.go new file mode 100644 index 0000000..6b49dae --- /dev/null +++ b/aggregator/kafka/records.go @@ -0,0 +1,195 @@ +package kafka + +import "fmt" + +const ( + unknownRecords = iota + legacyRecords + defaultRecords + + magicOffset = 16 +) + +// Records implements a union type containing either a RecordBatch or a legacy MessageSet. +type Records struct { + recordsType int + MsgSet *MessageSet + RecordBatch *RecordBatch +} + +func newLegacyRecords(msgSet *MessageSet) Records { + return Records{recordsType: legacyRecords, MsgSet: msgSet} +} + +func newDefaultRecords(batch *RecordBatch) Records { + return Records{recordsType: defaultRecords, RecordBatch: batch} +} + +// setTypeFromFields sets type of Records depending on which of MsgSet or RecordBatch is not nil. +// The first return value indicates whether both fields are nil (and the type is not set). +// If both fields are not nil, it returns an error. +func (r *Records) setTypeFromFields() (bool, error) { + if r.MsgSet == nil && r.RecordBatch == nil { + return true, nil + } + if r.MsgSet != nil && r.RecordBatch != nil { + return false, fmt.Errorf("both MsgSet and RecordBatch are set, but record type is unknown") + } + r.recordsType = defaultRecords + if r.MsgSet != nil { + r.recordsType = legacyRecords + } + return false, nil +} + +func (r *Records) setTypeFromMagic(pd packetDecoder) error { + magic, err := magicValue(pd) + if err != nil { + return err + } + + r.recordsType = defaultRecords + if magic < 2 { + r.recordsType = legacyRecords + } + + return nil +} + +func (r *Records) decode(pd packetDecoder) error { + if r.recordsType == unknownRecords { + if err := r.setTypeFromMagic(pd); err != nil { + return err + } + } + + switch r.recordsType { + case legacyRecords: + r.MsgSet = &MessageSet{} + return r.MsgSet.decode(pd) + case defaultRecords: + r.RecordBatch = &RecordBatch{} + return r.RecordBatch.decode(pd) + } + return fmt.Errorf("unknown records type: %v", r.recordsType) +} + +func (r *Records) numRecords() (int, error) { + if r.recordsType == unknownRecords { + if empty, err := r.setTypeFromFields(); err != nil || empty { + return 0, err + } + } + + switch r.recordsType { + case legacyRecords: + if r.MsgSet == nil { + return 0, nil + } + return len(r.MsgSet.Messages), nil + case defaultRecords: + if r.RecordBatch == nil { + return 0, nil + } + return len(r.RecordBatch.Records), nil + } + return 0, fmt.Errorf("unknown records type: %v", r.recordsType) +} + +func (r *Records) isPartial() (bool, error) { + if r.recordsType == unknownRecords { + if empty, err := r.setTypeFromFields(); err != nil || empty { + return false, err + } + } + + switch r.recordsType { + case unknownRecords: + return false, nil + case legacyRecords: + if r.MsgSet == nil { + return false, nil + } + return r.MsgSet.PartialTrailingMessage, nil + case defaultRecords: + if r.RecordBatch == nil { + return false, nil + } + return r.RecordBatch.PartialTrailingRecord, nil + } + return false, fmt.Errorf("unknown records type: %v", r.recordsType) +} + +func (r *Records) isControl() (bool, error) { + if r.recordsType == unknownRecords { + if empty, err := r.setTypeFromFields(); err != nil || empty { + return false, err + } + } + + switch r.recordsType { + case legacyRecords: + return false, nil + case defaultRecords: + if r.RecordBatch == nil { + return false, nil + } + return r.RecordBatch.Control, nil + } + return false, fmt.Errorf("unknown records type: %v", r.recordsType) +} + +func (r *Records) isOverflow() (bool, error) { + if r.recordsType == unknownRecords { + if empty, err := r.setTypeFromFields(); err != nil || empty { + return false, err + } + } + + switch r.recordsType { + case unknownRecords: + return false, nil + case legacyRecords: + if r.MsgSet == nil { + return false, nil + } + return r.MsgSet.OverflowMessage, nil + case defaultRecords: + return false, nil + } + return false, fmt.Errorf("unknown records type: %v", r.recordsType) +} + +func (r *Records) recordsOffset() (*int64, error) { + switch r.recordsType { + case unknownRecords: + return nil, nil + case legacyRecords: + return nil, nil + case defaultRecords: + if r.RecordBatch == nil { + return nil, nil + } + return &r.RecordBatch.FirstOffset, nil + } + return nil, fmt.Errorf("unknown records type: %v", r.recordsType) +} + +func magicValue(pd packetDecoder) (int8, error) { + return pd.peekInt8(magicOffset) +} + +// func (r *Records) getControlRecord() (ControlRecord, error) { +// if r.RecordBatch == nil || len(r.RecordBatch.Records) == 0 { +// return ControlRecord{}, fmt.Errorf("cannot get control record, record batch is empty") +// } + +// firstRecord := r.RecordBatch.Records[0] +// controlRecord := ControlRecord{} +// err := controlRecord.decode(&realDecoder{raw: firstRecord.Key}, &realDecoder{raw: firstRecord.Value}) +// if err != nil { +// return ControlRecord{}, err +// } + +// return controlRecord, nil +// } diff --git a/aggregator/kafka/request.go b/aggregator/kafka/request.go new file mode 100644 index 0000000..d88b695 --- /dev/null +++ b/aggregator/kafka/request.go @@ -0,0 +1,216 @@ +package kafka + +import ( + "encoding/binary" + "fmt" + "io" +) + +// KafkaVersion instances represent versions of the upstream Kafka broker. +type KafkaVersion struct { + // it's a struct rather than just typing the array directly to make it opaque and stop people + // generating their own arbitrary versions + version [4]uint +} + +type ProtocolBody interface { + // encoder + versionedDecoder + key() int16 + version() int16 + headerVersion() int16 + isValidVersion() bool + requiredVersion() KafkaVersion +} + +const MaxRequestSize int32 = 100 * 1024 * 1024 + +func (r *Request) decode(pd packetDecoder) (err error) { + key, err := pd.getInt16() + if err != nil { + return err + } + + version, err := pd.getInt16() + if err != nil { + return err + } + + r.CorrelationID, err = pd.getInt32() + if err != nil { + return err + } + + r.ClientID, err = pd.getString() + if err != nil { + return err + } + + r.Body = allocateBody(key, version) + if r.Body == nil { + return fmt.Errorf(fmt.Sprintf("unknown request key (%d)", key)) + } + + if r.Body.headerVersion() >= 2 { + // tagged field + _, err = pd.getUVarint() + if err != nil { + return err + } + } + + return r.Body.decode(pd, version) +} + +type Request struct { + CorrelationID int32 + ClientID string + Body ProtocolBody +} + +func allocateBody(key, version int16) ProtocolBody { + switch key { + case 0: + return &ProduceRequest{Version: version} + // case 1: + // return &FetchRequest{Version: version} + // case 2: + // return &OffsetRequest{Version: version} + // case 3: + // return &MetadataRequest{Version: version} + // // 4: LeaderAndIsrRequest + // // 5: StopReplicaRequest + // // 6: UpdateMetadataRequest + // // 7: ControlledShutdownRequest + // case 8: + // return &OffsetCommitRequest{Version: version} + // case 9: + // return &OffsetFetchRequest{Version: version} + // case 10: + // return &FindCoordinatorRequest{Version: version} + // case 11: + // return &JoinGroupRequest{Version: version} + // case 12: + // return &HeartbeatRequest{Version: version} + // case 13: + // return &LeaveGroupRequest{Version: version} + // case 14: + // return &SyncGroupRequest{Version: version} + // case 15: + // return &DescribeGroupsRequest{Version: version} + // case 16: + // return &ListGroupsRequest{Version: version} + // case 17: + // return &SaslHandshakeRequest{Version: version} + // case 18: + // return &ApiVersionsRequest{Version: version} + // case 19: + // return &CreateTopicsRequest{Version: version} + // case 20: + // return &DeleteTopicsRequest{Version: version} + // case 21: + // return &DeleteRecordsRequest{Version: version} + // case 22: + // return &InitProducerIDRequest{Version: version} + // // 23: OffsetForLeaderEpochRequest + // case 24: + // return &AddPartitionsToTxnRequest{Version: version} + // case 25: + // return &AddOffsetsToTxnRequest{Version: version} + // case 26: + // return &EndTxnRequest{Version: version} + // // 27: WriteTxnMarkersRequest + // case 28: + // return &TxnOffsetCommitRequest{Version: version} + // case 29: + // return &DescribeAclsRequest{Version: int(version)} + // case 30: + // return &CreateAclsRequest{Version: version} + // case 31: + // return &DeleteAclsRequest{Version: int(version)} + // case 32: + // return &DescribeConfigsRequest{Version: version} + // case 33: + // return &AlterConfigsRequest{Version: version} + // // 34: AlterReplicaLogDirsRequest + // case 35: + // return &DescribeLogDirsRequest{Version: version} + // case 36: + // return &SaslAuthenticateRequest{Version: version} + // case 37: + // return &CreatePartitionsRequest{Version: version} + // // 38: CreateDelegationTokenRequest + // // 39: RenewDelegationTokenRequest + // // 40: ExpireDelegationTokenRequest + // // 41: DescribeDelegationTokenRequest + // case 42: + // return &DeleteGroupsRequest{Version: version} + // // 43: ElectLeadersRequest + // case 44: + // return &IncrementalAlterConfigsRequest{Version: version} + // case 45: + // return &AlterPartitionReassignmentsRequest{Version: version} + // case 46: + // return &ListPartitionReassignmentsRequest{Version: version} + // case 47: + // return &DeleteOffsetsRequest{Version: version} + // case 48: + // return &DescribeClientQuotasRequest{Version: version} + // case 49: + // return &AlterClientQuotasRequest{Version: version} + // case 50: + // return &DescribeUserScramCredentialsRequest{Version: version} + // case 51: + // return &AlterUserScramCredentialsRequest{Version: version} + // 52: VoteRequest + // 53: BeginQuorumEpochRequest + // 54: EndQuorumEpochRequest + // 55: DescribeQuorumRequest + // 56: AlterPartitionRequest + // 57: UpdateFeaturesRequest + // 58: EnvelopeRequest + // 59: FetchSnapshotRequest + // 60: DescribeClusterRequest + // 61: DescribeProducersRequest + // 62: BrokerRegistrationRequest + // 63: BrokerHeartbeatRequest + // 64: UnregisterBrokerRequest + // 65: DescribeTransactionsRequest + // 66: ListTransactionsRequest + // 67: AllocateProducerIdsRequest + // 68: ConsumerGroupHeartbeatRequest + } + return nil +} + +func DecodeRequest(r io.Reader) (*Request, int, error) { + var ( + bytesRead int + lengthBytes = make([]byte, 4) + ) + + if _, err := io.ReadFull(r, lengthBytes); err != nil { + return nil, bytesRead, err + } + + bytesRead += len(lengthBytes) + length := int32(binary.BigEndian.Uint32(lengthBytes)) + + if length <= 4 || length > MaxRequestSize { + return nil, bytesRead, PacketDecodingError{fmt.Sprintf("message of length %d too large or too small", length)} + } + + encodedReq := make([]byte, length) + if _, err := io.ReadFull(r, encodedReq); err != nil { + return nil, bytesRead, err + } + + bytesRead += len(encodedReq) + + req := &Request{} + if err := decode(encodedReq, req); err != nil { + return nil, bytesRead, err + } + + return req, bytesRead, nil +} diff --git a/aggregator/kafka/response_header.go b/aggregator/kafka/response_header.go new file mode 100644 index 0000000..384e027 --- /dev/null +++ b/aggregator/kafka/response_header.go @@ -0,0 +1,313 @@ +package kafka + +import "fmt" + +const MaxResponseSize int32 = 100 * 1024 * 1024 + +// headerVersion derives the header version from the request api key and request api version +// +//nolint:funlen,gocognit,gocyclo,cyclop,maintidx +func ResponseHeaderVersion(apiKey, apiVersion int16) int16 { + switch apiKey { + case 0: // Produce + if apiVersion >= 9 { + return 1 + } + return 0 + case 1: // Fetch + if apiVersion >= 12 { + return 1 + } + return 0 + case 2: // ListOffsets + if apiVersion >= 6 { + return 1 + } + return 0 + case 3: // Metadata + if apiVersion >= 9 { + return 1 + } + return 0 + case 4: // LeaderAndIsr + if apiVersion >= 4 { + return 1 + } + return 0 + case 5: // StopReplica + if apiVersion >= 2 { + return 1 + } + return 0 + case 6: // UpdateMetadata + if apiVersion >= 6 { + return 1 + } + return 0 + case 7: // ControlledShutdown + if apiVersion >= 3 { + return 1 + } + return 0 + case 8: // OffsetCommit + if apiVersion >= 8 { + return 1 + } + return 0 + case 9: // OffsetFetch + if apiVersion >= 6 { + return 1 + } + return 0 + case 10: // FindCoordinator + if apiVersion >= 3 { + return 1 + } + return 0 + case 11: // JoinGroup + if apiVersion >= 6 { + return 1 + } + return 0 + case 12: // Heartbeat + if apiVersion >= 4 { + return 1 + } + return 0 + case 13: // LeaveGroup + if apiVersion >= 4 { + return 1 + } + return 0 + case 14: // SyncGroup + if apiVersion >= 4 { + return 1 + } + return 0 + case 15: // DescribeGroups + if apiVersion >= 5 { + return 1 + } + return 0 + case 16: // ListGroups + if apiVersion >= 3 { + return 1 + } + return 0 + case 17: // SaslHandshake + return 0 + case 18: // ApiVersions + // ApiVersionsResponse always includes a v0 header. + // See KIP-511 for details. + return 0 + case 19: // CreateTopics + if apiVersion >= 5 { + return 1 + } + return 0 + case 20: // DeleteTopics + if apiVersion >= 4 { + return 1 + } + return 0 + case 21: // DeleteRecords + if apiVersion >= 2 { + return 1 + } + return 0 + case 22: // InitProducerId + if apiVersion >= 2 { + return 1 + } + return 0 + case 23: // OffsetForLeaderEpoch + if apiVersion >= 4 { + return 1 + } + return 0 + case 24: // AddPartitionsToTxn + if apiVersion >= 3 { + return 1 + } + return 0 + case 25: // AddOffsetsToTxn + if apiVersion >= 3 { + return 1 + } + return 0 + case 26: // EndTxn + if apiVersion >= 3 { + return 1 + } + return 0 + case 27: // WriteTxnMarkers + if apiVersion >= 1 { + return 1 + } + return 0 + case 28: // TxnOffsetCommit + if apiVersion >= 3 { + return 1 + } + return 0 + case 29: // DescribeAcls + if apiVersion >= 2 { + return 1 + } + return 0 + case 30: // CreateAcls + if apiVersion >= 2 { + return 1 + } + return 0 + case 31: // DeleteAcls + if apiVersion >= 2 { + return 1 + } + return 0 + case 32: // DescribeConfigs + if apiVersion >= 4 { + return 1 + } + return 0 + case 33: // AlterConfigs + if apiVersion >= 2 { + return 1 + } + return 0 + case 34: // AlterReplicaLogDirs + if apiVersion >= 2 { + return 1 + } + return 0 + case 35: // DescribeLogDirs + if apiVersion >= 2 { + return 1 + } + return 0 + case 36: // SaslAuthenticate + if apiVersion >= 2 { + return 1 + } + return 0 + case 37: // CreatePartitions + if apiVersion >= 2 { + return 1 + } + return 0 + case 38: // CreateDelegationToken + if apiVersion >= 2 { + return 1 + } + return 0 + case 39: // RenewDelegationToken + if apiVersion >= 2 { + return 1 + } + return 0 + case 40: // ExpireDelegationToken + if apiVersion >= 2 { + return 1 + } + return 0 + case 41: // DescribeDelegationToken + if apiVersion >= 2 { + return 1 + } + return 0 + case 42: // DeleteGroups + if apiVersion >= 2 { + return 1 + } + return 0 + case 43: // ElectLeaders + if apiVersion >= 2 { + return 1 + } + return 0 + case 44: // IncrementalAlterConfigs + if apiVersion >= 1 { + return 1 + } + return 0 + case 45: // AlterPartitionReassignments + return 1 + case 46: // ListPartitionReassignments + return 1 + case 47: // OffsetDelete + return 0 + case 48: // DescribeClientQuotas + if apiVersion >= 1 { + return 1 + } + return 0 + case 49: // AlterClientQuotas + if apiVersion >= 1 { + return 1 + } + return 0 + case 50: // DescribeUserScramCredentials + return 1 + case 51: // AlterUserScramCredentials + return 1 + case 52: // Vote + return 1 + case 53: // BeginQuorumEpoch + return 0 + case 54: // EndQuorumEpoch + return 0 + case 55: // DescribeQuorum + return 1 + case 56: // AlterIsr + return 1 + case 57: // UpdateFeatures + return 1 + case 58: // Envelope + return 1 + case 59: // FetchSnapshot + return 1 + case 60: // DescribeCluster + return 1 + case 61: // DescribeProducers + return 1 + case 62: // BrokerRegistration + return 1 + case 63: // BrokerHeartbeat + return 1 + case 64: // UnregisterBroker + return 1 + case 65: // DescribeTransactions + return 1 + case 66: // ListTransactions + return 1 + case 67: // AllocateProducerIds + return 1 + default: + return -1 + } +} + +type ResponseHeader struct { + Length int32 + CorrelationID int32 +} + +func (r *ResponseHeader) decode(pd packetDecoder, version int16) (err error) { + r.Length, err = pd.getInt32() + if err != nil { + return err + } + if r.Length <= 4 || r.Length > MaxResponseSize { + return PacketDecodingError{fmt.Sprintf("message of length %d too large or too small", r.Length)} + } + + r.CorrelationID, err = pd.getInt32() + + if version >= 1 { + if _, err := pd.getEmptyTaggedFieldArray(); err != nil { + return err + } + } + + return err +} diff --git a/aggregator/kafka/timestamp.go b/aggregator/kafka/timestamp.go new file mode 100644 index 0000000..456d396 --- /dev/null +++ b/aggregator/kafka/timestamp.go @@ -0,0 +1,26 @@ +package kafka + +import ( + "time" +) + +type Timestamp struct { + *time.Time +} + +func (t Timestamp) decode(pd packetDecoder) error { + millis, err := pd.getInt64() + if err != nil { + return err + } + + // negative timestamps are invalid, in these cases we should return + // a zero time + timestamp := time.Time{} + if millis >= 0 { + timestamp = time.Unix(millis/1000, (millis%1000)*int64(time.Millisecond)) + } + + *t.Time = timestamp + return nil +} diff --git a/aggregator/kafka/versions.go b/aggregator/kafka/versions.go new file mode 100644 index 0000000..7cb18dd --- /dev/null +++ b/aggregator/kafka/versions.go @@ -0,0 +1,294 @@ +package kafka + +import ( + "bufio" + "fmt" + "net" + "regexp" +) + +type none struct{} + +// make []int32 sortable so we can sort partition numbers +type int32Slice []int32 + +func (slice int32Slice) Len() int { + return len(slice) +} + +func (slice int32Slice) Less(i, j int) bool { + return slice[i] < slice[j] +} + +func (slice int32Slice) Swap(i, j int) { + slice[i], slice[j] = slice[j], slice[i] +} + +func dupInt32Slice(input []int32) []int32 { + ret := make([]int32, 0, len(input)) + ret = append(ret, input...) + return ret +} + +// Encoder is a simple interface for any type that can be encoded as an array of bytes +// in order to be sent as the key or value of a Kafka message. Length() is provided as an +// optimization, and must return the same as len() on the result of Encode(). +type Encoder interface { + Encode() ([]byte, error) + Length() int +} + +// make strings and byte slices encodable for convenience so they can be used as keys +// and/or values in kafka messages + +// StringEncoder implements the Encoder interface for Go strings so that they can be used +// as the Key or Value in a ProducerMessage. +type StringEncoder string + +func (s StringEncoder) Encode() ([]byte, error) { + return []byte(s), nil +} + +func (s StringEncoder) Length() int { + return len(s) +} + +// ByteEncoder implements the Encoder interface for Go byte slices so that they can be used +// as the Key or Value in a ProducerMessage. +type ByteEncoder []byte + +func (b ByteEncoder) Encode() ([]byte, error) { + return b, nil +} + +func (b ByteEncoder) Length() int { + return len(b) +} + +// bufConn wraps a net.Conn with a buffer for reads to reduce the number of +// reads that trigger syscalls. +type bufConn struct { + net.Conn + buf *bufio.Reader +} + +func newBufConn(conn net.Conn) *bufConn { + return &bufConn{ + Conn: conn, + buf: bufio.NewReader(conn), + } +} + +func (bc *bufConn) Read(b []byte) (n int, err error) { + return bc.buf.Read(b) +} + +func newKafkaVersion(major, minor, veryMinor, patch uint) KafkaVersion { + return KafkaVersion{ + version: [4]uint{major, minor, veryMinor, patch}, + } +} + +// IsAtLeast return true if and only if the version it is called on is +// greater than or equal to the version passed in: +// +// V1.IsAtLeast(V2) // false +// V2.IsAtLeast(V1) // true +func (v KafkaVersion) IsAtLeast(other KafkaVersion) bool { + for i := range v.version { + if v.version[i] > other.version[i] { + return true + } else if v.version[i] < other.version[i] { + return false + } + } + return true +} + +// Effective constants defining the supported kafka versions. +var ( + V0_8_2_0 = newKafkaVersion(0, 8, 2, 0) + V0_8_2_1 = newKafkaVersion(0, 8, 2, 1) + V0_8_2_2 = newKafkaVersion(0, 8, 2, 2) + V0_9_0_0 = newKafkaVersion(0, 9, 0, 0) + V0_9_0_1 = newKafkaVersion(0, 9, 0, 1) + V0_10_0_0 = newKafkaVersion(0, 10, 0, 0) + V0_10_0_1 = newKafkaVersion(0, 10, 0, 1) + V0_10_1_0 = newKafkaVersion(0, 10, 1, 0) + V0_10_1_1 = newKafkaVersion(0, 10, 1, 1) + V0_10_2_0 = newKafkaVersion(0, 10, 2, 0) + V0_10_2_1 = newKafkaVersion(0, 10, 2, 1) + V0_10_2_2 = newKafkaVersion(0, 10, 2, 2) + V0_11_0_0 = newKafkaVersion(0, 11, 0, 0) + V0_11_0_1 = newKafkaVersion(0, 11, 0, 1) + V0_11_0_2 = newKafkaVersion(0, 11, 0, 2) + V1_0_0_0 = newKafkaVersion(1, 0, 0, 0) + V1_0_1_0 = newKafkaVersion(1, 0, 1, 0) + V1_0_2_0 = newKafkaVersion(1, 0, 2, 0) + V1_1_0_0 = newKafkaVersion(1, 1, 0, 0) + V1_1_1_0 = newKafkaVersion(1, 1, 1, 0) + V2_0_0_0 = newKafkaVersion(2, 0, 0, 0) + V2_0_1_0 = newKafkaVersion(2, 0, 1, 0) + V2_1_0_0 = newKafkaVersion(2, 1, 0, 0) + V2_1_1_0 = newKafkaVersion(2, 1, 1, 0) + V2_2_0_0 = newKafkaVersion(2, 2, 0, 0) + V2_2_1_0 = newKafkaVersion(2, 2, 1, 0) + V2_2_2_0 = newKafkaVersion(2, 2, 2, 0) + V2_3_0_0 = newKafkaVersion(2, 3, 0, 0) + V2_3_1_0 = newKafkaVersion(2, 3, 1, 0) + V2_4_0_0 = newKafkaVersion(2, 4, 0, 0) + V2_4_1_0 = newKafkaVersion(2, 4, 1, 0) + V2_5_0_0 = newKafkaVersion(2, 5, 0, 0) + V2_5_1_0 = newKafkaVersion(2, 5, 1, 0) + V2_6_0_0 = newKafkaVersion(2, 6, 0, 0) + V2_6_1_0 = newKafkaVersion(2, 6, 1, 0) + V2_6_2_0 = newKafkaVersion(2, 6, 2, 0) + V2_6_3_0 = newKafkaVersion(2, 6, 3, 0) + V2_7_0_0 = newKafkaVersion(2, 7, 0, 0) + V2_7_1_0 = newKafkaVersion(2, 7, 1, 0) + V2_7_2_0 = newKafkaVersion(2, 7, 2, 0) + V2_8_0_0 = newKafkaVersion(2, 8, 0, 0) + V2_8_1_0 = newKafkaVersion(2, 8, 1, 0) + V2_8_2_0 = newKafkaVersion(2, 8, 2, 0) + V3_0_0_0 = newKafkaVersion(3, 0, 0, 0) + V3_0_1_0 = newKafkaVersion(3, 0, 1, 0) + V3_0_2_0 = newKafkaVersion(3, 0, 2, 0) + V3_1_0_0 = newKafkaVersion(3, 1, 0, 0) + V3_1_1_0 = newKafkaVersion(3, 1, 1, 0) + V3_1_2_0 = newKafkaVersion(3, 1, 2, 0) + V3_2_0_0 = newKafkaVersion(3, 2, 0, 0) + V3_2_1_0 = newKafkaVersion(3, 2, 1, 0) + V3_2_2_0 = newKafkaVersion(3, 2, 2, 0) + V3_2_3_0 = newKafkaVersion(3, 2, 3, 0) + V3_3_0_0 = newKafkaVersion(3, 3, 0, 0) + V3_3_1_0 = newKafkaVersion(3, 3, 1, 0) + V3_3_2_0 = newKafkaVersion(3, 3, 2, 0) + V3_4_0_0 = newKafkaVersion(3, 4, 0, 0) + V3_4_1_0 = newKafkaVersion(3, 4, 1, 0) + V3_5_0_0 = newKafkaVersion(3, 5, 0, 0) + V3_5_1_0 = newKafkaVersion(3, 5, 1, 0) + V3_6_0_0 = newKafkaVersion(3, 6, 0, 0) + + SupportedVersions = []KafkaVersion{ + V0_8_2_0, + V0_8_2_1, + V0_8_2_2, + V0_9_0_0, + V0_9_0_1, + V0_10_0_0, + V0_10_0_1, + V0_10_1_0, + V0_10_1_1, + V0_10_2_0, + V0_10_2_1, + V0_10_2_2, + V0_11_0_0, + V0_11_0_1, + V0_11_0_2, + V1_0_0_0, + V1_0_1_0, + V1_0_2_0, + V1_1_0_0, + V1_1_1_0, + V2_0_0_0, + V2_0_1_0, + V2_1_0_0, + V2_1_1_0, + V2_2_0_0, + V2_2_1_0, + V2_2_2_0, + V2_3_0_0, + V2_3_1_0, + V2_4_0_0, + V2_4_1_0, + V2_5_0_0, + V2_5_1_0, + V2_6_0_0, + V2_6_1_0, + V2_6_2_0, + V2_7_0_0, + V2_7_1_0, + V2_8_0_0, + V2_8_1_0, + V2_8_2_0, + V3_0_0_0, + V3_0_1_0, + V3_0_2_0, + V3_1_0_0, + V3_1_1_0, + V3_1_2_0, + V3_2_0_0, + V3_2_1_0, + V3_2_2_0, + V3_2_3_0, + V3_3_0_0, + V3_3_1_0, + V3_3_2_0, + V3_4_0_0, + V3_4_1_0, + V3_5_0_0, + V3_5_1_0, + V3_6_0_0, + } + MinVersion = V0_8_2_0 + MaxVersion = V3_6_0_0 + DefaultVersion = V2_1_0_0 + + // reduced set of protocol versions to matrix test + fvtRangeVersions = []KafkaVersion{ + V0_8_2_2, + V0_10_2_2, + V1_0_2_0, + V1_1_1_0, + V2_0_1_0, + V2_2_2_0, + V2_4_1_0, + V2_6_2_0, + V2_8_2_0, + V3_1_2_0, + V3_3_2_0, + V3_6_0_0, + } +) + +var ( + // This regex validates that a string complies with the pre kafka 1.0.0 format for version strings, for example 0.11.0.3 + validPreKafka1Version = regexp.MustCompile(`^0\.\d+\.\d+\.\d+$`) + + // This regex validates that a string complies with the post Kafka 1.0.0 format, for example 1.0.0 + validPostKafka1Version = regexp.MustCompile(`^\d+\.\d+\.\d+$`) +) + +// ParseKafkaVersion parses and returns kafka version or error from a string +func ParseKafkaVersion(s string) (KafkaVersion, error) { + if len(s) < 5 { + return DefaultVersion, fmt.Errorf("invalid version `%s`", s) + } + var major, minor, veryMinor, patch uint + var err error + if s[0] == '0' { + err = scanKafkaVersion(s, validPreKafka1Version, "0.%d.%d.%d", [3]*uint{&minor, &veryMinor, &patch}) + } else { + err = scanKafkaVersion(s, validPostKafka1Version, "%d.%d.%d", [3]*uint{&major, &minor, &veryMinor}) + } + if err != nil { + return DefaultVersion, err + } + return newKafkaVersion(major, minor, veryMinor, patch), nil +} + +func scanKafkaVersion(s string, pattern *regexp.Regexp, format string, v [3]*uint) error { + if !pattern.MatchString(s) { + return fmt.Errorf("invalid version `%s`", s) + } + _, err := fmt.Sscanf(s, format, v[0], v[1], v[2]) + return err +} + +func (v KafkaVersion) String() string { + if v.version[0] == 0 { + return fmt.Sprintf("0.%d.%d.%d", v.version[1], v.version[2], v.version[3]) + } + + return fmt.Sprintf("%d.%d.%d", v.version[0], v.version[1], v.version[2]) +} diff --git a/aggregator/kafka/ztsd.go b/aggregator/kafka/ztsd.go new file mode 100644 index 0000000..2d0523f --- /dev/null +++ b/aggregator/kafka/ztsd.go @@ -0,0 +1,67 @@ +package kafka + +import ( + "sync" + + "github.com/klauspost/compress/zstd" +) + +// zstdMaxBufferedEncoders maximum number of not-in-use zstd encoders +// If the pool of encoders is exhausted then new encoders will be created on the fly +const zstdMaxBufferedEncoders = 1 + +type ZstdEncoderParams struct { + Level int +} +type ZstdDecoderParams struct { +} + +var zstdDecMap sync.Map + +var zstdAvailableEncoders sync.Map + +func getZstdEncoderChannel(params ZstdEncoderParams) chan *zstd.Encoder { + if c, ok := zstdAvailableEncoders.Load(params); ok { + return c.(chan *zstd.Encoder) + } + c, _ := zstdAvailableEncoders.LoadOrStore(params, make(chan *zstd.Encoder, zstdMaxBufferedEncoders)) + return c.(chan *zstd.Encoder) +} + +func getZstdEncoder(params ZstdEncoderParams) *zstd.Encoder { + select { + case enc := <-getZstdEncoderChannel(params): + return enc + default: + encoderLevel := zstd.SpeedDefault + if params.Level != CompressionLevelDefault { + encoderLevel = zstd.EncoderLevelFromZstd(params.Level) + } + zstdEnc, _ := zstd.NewWriter(nil, zstd.WithZeroFrames(true), + zstd.WithEncoderLevel(encoderLevel), + zstd.WithEncoderConcurrency(1)) + return zstdEnc + } +} + +func releaseEncoder(params ZstdEncoderParams, enc *zstd.Encoder) { + select { + case getZstdEncoderChannel(params) <- enc: + default: + } +} + +func getDecoder(params ZstdDecoderParams) *zstd.Decoder { + if ret, ok := zstdDecMap.Load(params); ok { + return ret.(*zstd.Decoder) + } + // It's possible to race and create multiple new readers. + // Only one will survive GC after use. + zstdDec, _ := zstd.NewReader(nil, zstd.WithDecoderConcurrency(0)) + zstdDecMap.Store(params, zstdDec) + return zstdDec +} + +func zstdDecompress(params ZstdDecoderParams, dst, src []byte) ([]byte, error) { + return getDecoder(params).DecodeAll(src, dst) +} From 6e756cd312e894a38bd8175414e03888342c81ec Mon Sep 17 00:00:00 2001 From: kenanfarukcakir Date: Fri, 21 Jun 2024 14:55:14 +0300 Subject: [PATCH 06/24] remove unnecessary code for kafka decoder --- aggregator/kafka/crc32_field.go | 9 -- aggregator/kafka/errors.go | 25 ---- aggregator/kafka/fetch_response.go | 193 ---------------------------- aggregator/kafka/length_field.go | 17 --- aggregator/kafka/message.go | 6 +- aggregator/kafka/message_set.go | 6 - aggregator/kafka/produce_request.go | 46 ------- aggregator/kafka/record_batch.go | 14 -- aggregator/kafka/records.go | 42 ------ 9 files changed, 3 insertions(+), 355 deletions(-) diff --git a/aggregator/kafka/crc32_field.go b/aggregator/kafka/crc32_field.go index 84be334..163e39a 100644 --- a/aggregator/kafka/crc32_field.go +++ b/aggregator/kafka/crc32_field.go @@ -50,15 +50,6 @@ func newCRC32Field(polynomial crcPolynomial) *crc32Field { return &crc32Field{polynomial: polynomial} } -func (c *crc32Field) run(curOffset int, buf []byte) error { - crc, err := c.crc(curOffset, buf) - if err != nil { - return err - } - binary.BigEndian.PutUint32(buf[c.startOffset:], crc) - return nil -} - func (c *crc32Field) check(curOffset int, buf []byte) error { crc, err := c.crc(curOffset, buf) if err != nil { diff --git a/aggregator/kafka/errors.go b/aggregator/kafka/errors.go index 8ee2eaf..24a852d 100644 --- a/aggregator/kafka/errors.go +++ b/aggregator/kafka/errors.go @@ -85,31 +85,6 @@ var ErrCannotTransitionNilError = errors.New("transaction manager: cannot transi // ErrTxnUnableToParseResponse when response is nil var ErrTxnUnableToParseResponse = errors.New("transaction manager: unable to parse response") -type sentinelError struct { - sentinel error - wrapped error -} - -func (err sentinelError) Error() string { - if err.wrapped != nil { - return fmt.Sprintf("%s: %v", err.sentinel, err.wrapped) - } else { - return fmt.Sprintf("%s", err.sentinel) - } -} - -func (err sentinelError) Is(target error) bool { - return errors.Is(err.sentinel, target) || errors.Is(err.wrapped, target) -} - -func (err sentinelError) Unwrap() error { - return err.wrapped -} - -// func Wrap(sentinel error, wrapped ...error) sentinelError { -// return sentinelError{sentinel: sentinel, wrapped: multiError(wrapped...)} -// } - // PacketEncodingError is returned from a failure while encoding a Kafka packet. This can happen, for example, // if you try to encode a string over 2^15 characters in length, since Kafka's encoding rules do not permit that. type PacketEncodingError struct { diff --git a/aggregator/kafka/fetch_response.go b/aggregator/kafka/fetch_response.go index f18209f..9d0b1d0 100644 --- a/aggregator/kafka/fetch_response.go +++ b/aggregator/kafka/fetch_response.go @@ -5,15 +5,9 @@ import ( "github.com/ddosify/alaz/log" - "sort" "time" ) -const ( - invalidLeaderEpoch = -1 - invalidPreferredReplicaID = -1 -) - type AbortedTransaction struct { // ProducerID contains the producer id associated with the aborted transaction. ProducerID int64 @@ -171,44 +165,6 @@ func (b *FetchResponseBlock) decode(pd packetDecoder, version int16) (err error) return nil } -func (b *FetchResponseBlock) numRecords() (int, error) { - sum := 0 - - for _, records := range b.RecordsSet { - count, err := records.numRecords() - if err != nil { - return 0, err - } - - sum += count - } - - return sum, nil -} - -func (b *FetchResponseBlock) isPartial() (bool, error) { - if b.Partial { - return true, nil - } - - if len(b.RecordsSet) == 1 { - return b.RecordsSet[0].isPartial() - } - - return false, nil -} - -func (b *FetchResponseBlock) getAbortedTransactions() []*AbortedTransaction { - // I can't find any doc that guarantee the field `fetchResponse.AbortedTransactions` is ordered - // plus Java implementation use a PriorityQueue based on `FirstOffset`. I guess we have to order it ourself - at := b.AbortedTransactions - sort.Slice( - at, - func(i, j int) bool { return at[i].FirstOffset < at[j].FirstOffset }, - ) - return at -} - type FetchResponse struct { // Version defines the protocol version to use for encode and decode Version int16 @@ -330,152 +286,3 @@ func (r *FetchResponse) requiredVersion() KafkaVersion { return V2_3_0_0 } } - -func (r *FetchResponse) throttleTime() time.Duration { - return r.ThrottleTime -} - -func (r *FetchResponse) GetBlock(topic string, partition int32) *FetchResponseBlock { - if r.Blocks == nil { - return nil - } - - if r.Blocks[topic] == nil { - return nil - } - - return r.Blocks[topic][partition] -} - -func (r *FetchResponse) AddError(topic string, partition int32, err KError) { - if r.Blocks == nil { - r.Blocks = make(map[string]map[int32]*FetchResponseBlock) - } - partitions, ok := r.Blocks[topic] - if !ok { - partitions = make(map[int32]*FetchResponseBlock) - r.Blocks[topic] = partitions - } - frb, ok := partitions[partition] - if !ok { - frb = new(FetchResponseBlock) - partitions[partition] = frb - } - frb.Err = err -} - -func (r *FetchResponse) getOrCreateBlock(topic string, partition int32) *FetchResponseBlock { - if r.Blocks == nil { - r.Blocks = make(map[string]map[int32]*FetchResponseBlock) - } - partitions, ok := r.Blocks[topic] - if !ok { - partitions = make(map[int32]*FetchResponseBlock) - r.Blocks[topic] = partitions - } - frb, ok := partitions[partition] - if !ok { - frb = new(FetchResponseBlock) - partitions[partition] = frb - } - - return frb -} - -func encodeKV(key, value Encoder) ([]byte, []byte) { - var kb []byte - var vb []byte - if key != nil { - kb, _ = key.Encode() - } - if value != nil { - vb, _ = value.Encode() - } - - return kb, vb -} - -func (r *FetchResponse) AddMessageWithTimestamp(topic string, partition int32, key, value Encoder, offset int64, timestamp time.Time, version int8) { - frb := r.getOrCreateBlock(topic, partition) - kb, vb := encodeKV(key, value) - if r.LogAppendTime { - timestamp = r.Timestamp - } - msg := &Message{Key: kb, Value: vb, LogAppendTime: r.LogAppendTime, Timestamp: timestamp, Version: version} - msgBlock := &MessageBlock{Msg: msg, Offset: offset} - if len(frb.RecordsSet) == 0 { - records := newLegacyRecords(&MessageSet{}) - frb.RecordsSet = []*Records{&records} - } - set := frb.RecordsSet[0].MsgSet - set.Messages = append(set.Messages, msgBlock) -} - -func (r *FetchResponse) AddRecordWithTimestamp(topic string, partition int32, key, value Encoder, offset int64, timestamp time.Time) { - frb := r.getOrCreateBlock(topic, partition) - kb, vb := encodeKV(key, value) - if len(frb.RecordsSet) == 0 { - records := newDefaultRecords(&RecordBatch{Version: 2, LogAppendTime: r.LogAppendTime, FirstTimestamp: timestamp, MaxTimestamp: r.Timestamp}) - frb.RecordsSet = []*Records{&records} - } - batch := frb.RecordsSet[0].RecordBatch - rec := &Record{Key: kb, Value: vb, OffsetDelta: offset, TimestampDelta: timestamp.Sub(batch.FirstTimestamp)} - batch.addRecord(rec) -} - -// AddRecordBatchWithTimestamp is similar to AddRecordWithTimestamp -// But instead of appending 1 record to a batch, it append a new batch containing 1 record to the fetchResponse -// Since transaction are handled on batch level (the whole batch is either committed or aborted), use this to test transactions -func (r *FetchResponse) AddRecordBatchWithTimestamp(topic string, partition int32, key, value Encoder, offset int64, producerID int64, isTransactional bool, timestamp time.Time) { - frb := r.getOrCreateBlock(topic, partition) - kb, vb := encodeKV(key, value) - - records := newDefaultRecords(&RecordBatch{Version: 2, LogAppendTime: r.LogAppendTime, FirstTimestamp: timestamp, MaxTimestamp: r.Timestamp}) - batch := &RecordBatch{ - Version: 2, - LogAppendTime: r.LogAppendTime, - FirstTimestamp: timestamp, - MaxTimestamp: r.Timestamp, - FirstOffset: offset, - LastOffsetDelta: 0, - ProducerID: producerID, - IsTransactional: isTransactional, - } - rec := &Record{Key: kb, Value: vb, OffsetDelta: 0, TimestampDelta: timestamp.Sub(batch.FirstTimestamp)} - batch.addRecord(rec) - records.RecordBatch = batch - - frb.RecordsSet = append(frb.RecordsSet, &records) -} - -func (r *FetchResponse) AddMessage(topic string, partition int32, key, value Encoder, offset int64) { - r.AddMessageWithTimestamp(topic, partition, key, value, offset, time.Time{}, 0) -} - -func (r *FetchResponse) AddRecord(topic string, partition int32, key, value Encoder, offset int64) { - r.AddRecordWithTimestamp(topic, partition, key, value, offset, time.Time{}) -} - -func (r *FetchResponse) AddRecordBatch(topic string, partition int32, key, value Encoder, offset int64, producerID int64, isTransactional bool) { - r.AddRecordBatchWithTimestamp(topic, partition, key, value, offset, producerID, isTransactional, time.Time{}) -} - -// func (r *FetchResponse) AddControlRecord(topic string, partition int32, offset int64, producerID int64, recordType ControlRecordType) { -// // define controlRecord key and value -// r.AddControlRecordWithTimestamp(topic, partition, offset, producerID, recordType, time.Time{}) -// } - -func (r *FetchResponse) SetLastOffsetDelta(topic string, partition int32, offset int32) { - frb := r.getOrCreateBlock(topic, partition) - if len(frb.RecordsSet) == 0 { - records := newDefaultRecords(&RecordBatch{Version: 2}) - frb.RecordsSet = []*Records{&records} - } - batch := frb.RecordsSet[0].RecordBatch - batch.LastOffsetDelta = offset -} - -func (r *FetchResponse) SetLastStableOffset(topic string, partition int32, offset int64) { - frb := r.getOrCreateBlock(topic, partition) - frb.LastStableOffset = offset -} diff --git a/aggregator/kafka/length_field.go b/aggregator/kafka/length_field.go index fd2c67d..f6119b2 100644 --- a/aggregator/kafka/length_field.go +++ b/aggregator/kafka/length_field.go @@ -45,11 +45,6 @@ func (l *lengthField) reserveLength() int { return 4 } -func (l *lengthField) run(curOffset int, buf []byte) error { - binary.BigEndian.PutUint32(buf[l.startOffset:], uint32(curOffset-l.startOffset-4)) - return nil -} - func (l *lengthField) check(curOffset int, buf []byte) error { if int32(curOffset-l.startOffset-4) != l.length { return PacketDecodingError{"length field invalid"} @@ -73,23 +68,11 @@ func (l *varintLengthField) saveOffset(in int) { l.startOffset = in } -func (l *varintLengthField) adjustLength(currOffset int) int { - oldFieldSize := l.reserveLength() - l.length = int64(currOffset - l.startOffset - oldFieldSize) - - return l.reserveLength() - oldFieldSize -} - func (l *varintLengthField) reserveLength() int { var tmp [binary.MaxVarintLen64]byte return binary.PutVarint(tmp[:], l.length) } -func (l *varintLengthField) run(curOffset int, buf []byte) error { - binary.PutVarint(buf[l.startOffset:], l.length) - return nil -} - func (l *varintLengthField) check(curOffset int, buf []byte) error { if int64(curOffset-l.startOffset-l.reserveLength()) != l.length { return PacketDecodingError{"length field invalid"} diff --git a/aggregator/kafka/message.go b/aggregator/kafka/message.go index 1a75a58..a019494 100644 --- a/aggregator/kafka/message.go +++ b/aggregator/kafka/message.go @@ -75,8 +75,8 @@ type Message struct { Version int8 // v1 requires Kafka 0.10 Timestamp time.Time // the timestamp of the message (version 1+ only) - compressedCache []byte - compressedSize int // used for computing the compression ratio metrics + // compressedCache []byte + // compressedSize int // used for computing the compression ratio metrics } func (m *Message) decode(pd packetDecoder) (err error) { @@ -122,7 +122,7 @@ func (m *Message) decode(pd packetDecoder) (err error) { // Required for deep equal assertion during tests but might be useful // for future metrics about the compression ratio in fetch requests - m.compressedSize = len(m.Value) + // m.compressedSize = len(m.Value) if m.Value != nil && m.Codec != CompressionNone { m.Value, err = decompress(m.Codec, m.Value) diff --git a/aggregator/kafka/message_set.go b/aggregator/kafka/message_set.go index 148976a..0c20568 100644 --- a/aggregator/kafka/message_set.go +++ b/aggregator/kafka/message_set.go @@ -84,9 +84,3 @@ func (ms *MessageSet) decode(pd packetDecoder) (err error) { return nil } - -func (ms *MessageSet) addMessage(msg *Message) { - block := new(MessageBlock) - block.Msg = msg - ms.Messages = append(ms.Messages, block) -} diff --git a/aggregator/kafka/produce_request.go b/aggregator/kafka/produce_request.go index 569d4ac..08b7002 100644 --- a/aggregator/kafka/produce_request.go +++ b/aggregator/kafka/produce_request.go @@ -26,20 +26,6 @@ type ProduceRequest struct { Records map[string]map[int32]Records } -func updateMsgSetMetrics(msgSet *MessageSet) int64 { - var topicRecordCount int64 - for _, messageBlock := range msgSet.Messages { - // Is this a fake "message" wrapping real messages? - if messageBlock.Msg.Set != nil { - topicRecordCount += int64(len(messageBlock.Msg.Set.Messages)) - } else { - // A single uncompressed message - topicRecordCount++ - } - } - return topicRecordCount -} - func (r *ProduceRequest) decode(pd packetDecoder, version int16) error { r.Version = version @@ -138,35 +124,3 @@ func (r *ProduceRequest) requiredVersion() KafkaVersion { return V2_1_0_0 } } - -func (r *ProduceRequest) ensureRecords(topic string, partition int32) { - if r.Records == nil { - r.Records = make(map[string]map[int32]Records) - } - - if r.Records[topic] == nil { - r.Records[topic] = make(map[int32]Records) - } -} - -func (r *ProduceRequest) AddMessage(topic string, partition int32, msg *Message) { - r.ensureRecords(topic, partition) - set := r.Records[topic][partition].MsgSet - - if set == nil { - set = new(MessageSet) - r.Records[topic][partition] = newLegacyRecords(set) - } - - set.addMessage(msg) -} - -func (r *ProduceRequest) AddSet(topic string, partition int32, set *MessageSet) { - r.ensureRecords(topic, partition) - r.Records[topic][partition] = newLegacyRecords(set) -} - -func (r *ProduceRequest) AddBatch(topic string, partition int32, batch *RecordBatch) { - r.ensureRecords(topic, partition) - r.Records[topic][partition] = newDefaultRecords(batch) -} diff --git a/aggregator/kafka/record_batch.go b/aggregator/kafka/record_batch.go index a3f4f7f..2a700e4 100644 --- a/aggregator/kafka/record_batch.go +++ b/aggregator/kafka/record_batch.go @@ -142,20 +142,6 @@ func (b *RecordBatch) decode(pd packetDecoder) (err error) { return err } -func (b *RecordBatch) computeAttributes() int16 { - attr := int16(b.Codec) & int16(compressionCodecMask) - if b.Control { - attr |= controlMask - } - if b.LogAppendTime { - attr |= timestampTypeMask - } - if b.IsTransactional { - attr |= isTransactionalMask - } - return attr -} - func (b *RecordBatch) addRecord(r *Record) { b.Records = append(b.Records, r) } diff --git a/aggregator/kafka/records.go b/aggregator/kafka/records.go index 6b49dae..78c009a 100644 --- a/aggregator/kafka/records.go +++ b/aggregator/kafka/records.go @@ -17,14 +17,6 @@ type Records struct { RecordBatch *RecordBatch } -func newLegacyRecords(msgSet *MessageSet) Records { - return Records{recordsType: legacyRecords, MsgSet: msgSet} -} - -func newDefaultRecords(batch *RecordBatch) Records { - return Records{recordsType: defaultRecords, RecordBatch: batch} -} - // setTypeFromFields sets type of Records depending on which of MsgSet or RecordBatch is not nil. // The first return value indicates whether both fields are nil (and the type is not set). // If both fields are not nil, it returns an error. @@ -120,25 +112,6 @@ func (r *Records) isPartial() (bool, error) { return false, fmt.Errorf("unknown records type: %v", r.recordsType) } -func (r *Records) isControl() (bool, error) { - if r.recordsType == unknownRecords { - if empty, err := r.setTypeFromFields(); err != nil || empty { - return false, err - } - } - - switch r.recordsType { - case legacyRecords: - return false, nil - case defaultRecords: - if r.RecordBatch == nil { - return false, nil - } - return r.RecordBatch.Control, nil - } - return false, fmt.Errorf("unknown records type: %v", r.recordsType) -} - func (r *Records) isOverflow() (bool, error) { if r.recordsType == unknownRecords { if empty, err := r.setTypeFromFields(); err != nil || empty { @@ -178,18 +151,3 @@ func (r *Records) recordsOffset() (*int64, error) { func magicValue(pd packetDecoder) (int8, error) { return pd.peekInt8(magicOffset) } - -// func (r *Records) getControlRecord() (ControlRecord, error) { -// if r.RecordBatch == nil || len(r.RecordBatch.Records) == 0 { -// return ControlRecord{}, fmt.Errorf("cannot get control record, record batch is empty") -// } - -// firstRecord := r.RecordBatch.Records[0] -// controlRecord := ControlRecord{} -// err := controlRecord.decode(&realDecoder{raw: firstRecord.Key}, &realDecoder{raw: firstRecord.Value}) -// if err != nil { -// return ControlRecord{}, err -// } - -// return controlRecord, nil -// } From 6fbb3596b0a4522f2cf5a0a0f79f831d62bd8155 Mon Sep 17 00:00:00 2001 From: kenanfarukcakir Date: Fri, 21 Jun 2024 14:55:27 +0300 Subject: [PATCH 07/24] refactor aggregator --- aggregator/data.go | 357 ++++++++++++++++++++++++++++++++++----------- 1 file changed, 274 insertions(+), 83 deletions(-) diff --git a/aggregator/data.go b/aggregator/data.go index 271bce6..0e5b7d0 100644 --- a/aggregator/data.go +++ b/aggregator/data.go @@ -983,7 +983,15 @@ func (a *Aggregator) getConnKey(pid uint32, fd uint64) string { return fmt.Sprintf("%d-%d", pid, fd) } -func (a *Aggregator) decodeKafkaPayload(d *l7_req.L7Event, reqDto *datastore.Request) error { +type KafkaMessage struct { + TopicName string + Partition int32 + Key string + Value string + Type string // PUBLISH or CONSUME +} + +func (a *Aggregator) decodeKafkaPayload(d *l7_req.L7Event) ([]*KafkaMessage, error) { // apiVersion is written in request header // response header only has correlation_id // so while returning a response message from kafka, we need to send the api version to userspace @@ -998,22 +1006,26 @@ func (a *Aggregator) decodeKafkaPayload(d *l7_req.L7Event, reqDto *datastore.Req // var message protocol.Message // var err error + result := make([]*KafkaMessage, 0) + if d.Method == l7_req.KAFKA_PRODUCE_REQUEST { saramaReq, _, err := kafka.DecodeRequest(bytes.NewReader(d.Payload[:d.PayloadSize])) if err != nil { // non-kafka messages sometimes classifed as kafka messages on kernel side - return nil + return nil, fmt.Errorf("kafka decode request failure: %w", err) } else { rs := saramaReq.Body.(*kafka.ProduceRequest).Records for topicName, r := range rs { for partition, record := range r { records := record.RecordBatch.Records for _, msg := range records { - log.Logger.Warn().Str("key", string(msg.Key)). - Str("val", string(msg.Value)). - Str("topicName", topicName). - Int32("partition", partition). - Msg("kafka produce data key") + result = append(result, &KafkaMessage{ + TopicName: topicName, + Partition: partition, + Key: string(msg.Key), + Value: string(msg.Value), + Type: "PUBLISH", + }) } } } @@ -1024,7 +1036,7 @@ func (a *Aggregator) decodeKafkaPayload(d *l7_req.L7Event, reqDto *datastore.Req decodedHeader := &kafka.ResponseHeader{} off, err := kafka.VersionedDecode(payload, decodedHeader, kafka.ResponseHeaderVersion(1, d.KafkaApiVersion)) if err != nil { - return fmt.Errorf("kafka decode header failure: %w", err) + return nil, fmt.Errorf("kafka decode response header failure: %w", err) } // skip header @@ -1034,7 +1046,7 @@ func (a *Aggregator) decodeKafkaPayload(d *l7_req.L7Event, reqDto *datastore.Req res := &kafka.FetchResponse{} _, err = kafka.VersionedDecode(payload, res, fetchApiVersion) if err != nil { - return fmt.Errorf("kafka decode fetch response failure: %w", err) + return nil, fmt.Errorf("kafka decode fetch response failure: %w", err) } else { for topic, mapfrb := range res.Blocks { for partition, frb := range mapfrb { @@ -1044,13 +1056,13 @@ func (a *Aggregator) decodeKafkaPayload(d *l7_req.L7Event, reqDto *datastore.Req // record.MsgSet --> legacy records // record.RecordBatch --> default records for _, r := range record.RecordBatch.Records { - log.Logger.Warn(). - Str("key", string(r.Key)). - Str("val", string(r.Value)). - Str("topicName", topic). - Int64("offset", r.OffsetDelta). - Int32("partition", partition). - Msg("kafka fetch response decoded") + result = append(result, &KafkaMessage{ + TopicName: topic, + Partition: partition, + Key: string(r.Key), + Value: string(r.Value), + Type: "CONSUME", + }) } } } @@ -1059,54 +1071,135 @@ func (a *Aggregator) decodeKafkaPayload(d *l7_req.L7Event, reqDto *datastore.Req } - return nil + return result, nil } -func (a *Aggregator) processL7(ctx context.Context, d *l7_req.L7Event) { - // other protocols events come as whole, but http2 events come as frames +func (a *Aggregator) processHttp2Event(d *l7_req.L7Event) { + // http2 events come as frames // we need to aggregate frames to get the whole request - defer func() { - if r := recover(); r != nil { - // TODO: we need to fix this properly - log.Logger.Debug().Msgf("probably a http2 frame sent on a closed chan: %v", r) - } - }() + var ok bool - if d.Protocol == l7_req.L7_PROTOCOL_HTTP2 { - var ok bool + a.liveProcessesMu.RLock() + _, ok = a.liveProcesses[d.Pid] + a.liveProcessesMu.RUnlock() + if !ok { + return // if a late event comes, do not create parsers and new worker to avoid memory leak + } - a.liveProcessesMu.RLock() - _, ok = a.liveProcesses[d.Pid] - a.liveProcessesMu.RUnlock() - if !ok { - return // if a late event comes, do not create parsers and new worker to avoid memory leak - } + a.h2Ch <- d + return +} + +func (a *Aggregator) processKafkaEvent(ctx context.Context, d *l7_req.L7Event) { + skInfo := a.findRelatedSocket(ctx, d) + if skInfo == nil { + log.Logger.Debug().Uint32("pid", d.Pid). + Uint64("fd", d.Fd).Uint64("writeTime", d.WriteTimeNs). + Str("protocol", d.Protocol).Any("payload", string(d.Payload[:d.PayloadSize])).Msg("socket not found for kafka event") - a.h2Ch <- d return } - var path string - if d.Protocol == l7_req.L7_PROTOCOL_POSTGRES { - // parse sql command from payload - // path = sql command - // method = sql message type - var err error - path, err = a.parseSqlCommand(d) + kafkaMessages, err := a.decodeKafkaPayload(d) + if err != nil { + return + } + + for _, msg := range kafkaMessages { + reqDto := &datastore.Request{ + StartTime: int64(convertKernelTimeToUserspaceTime(d.WriteTimeNs) / 1e6), + Latency: d.Duration, + FromIP: skInfo.Saddr, + FromType: "", + FromUID: "", + FromPort: 0, + ToIP: skInfo.Daddr, + ToType: "", + ToUID: "", + ToPort: 0, + Protocol: d.Protocol, + Tls: d.Tls, + Completed: true, + StatusCode: d.Status, + FailReason: "", + Method: msg.Type, + Path: msg.Value, + Tid: d.Tid, + Seq: d.Seq, + } + + err := a.setFromTo(skInfo, d, reqDto, "") if err != nil { - log.Logger.Error().AnErr("err", err) return } + + if reqDto.Method == "CONSUME" { + // TODO: reverse the from and to + // do we show arrows originating from outbound services ? + } + + err = a.ds.PersistRequest(reqDto) + if err != nil { + log.Logger.Error().Err(err).Msg("error persisting request") + } } + return +} + +func (a *Aggregator) processAmqpEvent(ctx context.Context, d *l7_req.L7Event) { skInfo := a.findRelatedSocket(ctx, d) if skInfo == nil { log.Logger.Debug().Uint32("pid", d.Pid). Uint64("fd", d.Fd).Uint64("writeTime", d.WriteTimeNs). - Str("protocol", d.Protocol).Any("payload", string(d.Payload[:d.PayloadSize])).Msg("socket not found") + Str("protocol", d.Protocol).Any("payload", string(d.Payload[:d.PayloadSize])).Msg("socket not found for amqp event") + return + } - // go check pid-fd for the socket - a.fetchSocketOnNotFound(ctx, d) + reqDto := &datastore.Request{ + StartTime: int64(convertKernelTimeToUserspaceTime(d.WriteTimeNs) / 1e6), + Latency: d.Duration, + FromIP: skInfo.Saddr, + ToIP: skInfo.Daddr, + Protocol: d.Protocol, + Tls: d.Tls, + Completed: true, + StatusCode: d.Status, + FailReason: "", + Method: d.Method, + Path: "", + Tid: d.Tid, + Seq: d.Seq, + } + + err := a.setFromTo(skInfo, d, reqDto, "") + if err != nil { + return + } + + // In AMQP-DELIVER or REDIS-PUSHED_EVENT event, we are capturing from read syscall, + // exchange sockets + // In Alaz context, From is always the one that makes the write + // and To is the one that makes the read + if d.Method == l7_req.DELIVER { + reverseFromTo(reqDto) + } + + err = a.ds.PersistRequest(reqDto) + if err != nil { + log.Logger.Error().Err(err).Msg("error persisting request") + } +} + +func (a *Aggregator) processRedisEvent(ctx context.Context, d *l7_req.L7Event) { + query := string(d.Payload[0:d.PayloadSize]) + + skInfo := a.findRelatedSocket(ctx, d) + if skInfo == nil { + log.Logger.Debug().Uint32("pid", d.Pid). + Uint64("fd", d.Fd).Uint64("writeTime", d.WriteTimeNs). + Str("protocol", d.Protocol).Any("payload", string(d.Payload[:d.PayloadSize])).Msg("socket not found for redis event") + return } reqDto := &datastore.Request{ @@ -1120,21 +1213,67 @@ func (a *Aggregator) processL7(ctx context.Context, d *l7_req.L7Event) { StatusCode: d.Status, FailReason: "", Method: d.Method, + Path: query, Tid: d.Tid, Seq: d.Seq, } - // Since we process events concurrently - // TCP events and L7 events can be processed out of order + err := a.setFromTo(skInfo, d, reqDto, "") + if err != nil { + return + } + + // REDIS-PUSHED_EVENT event, we are capturing from read syscall, + // exchange sockets + // In Alaz context, From is always the one that makes the write + // and To is the one that makes the read + if d.Method == l7_req.REDIS_PUSHED_EVENT { + reverseFromTo(reqDto) + } + err = a.ds.PersistRequest(reqDto) + if err != nil { + log.Logger.Error().Err(err).Msg("error persisting request") + } +} + +func reverseFromTo(req *datastore.Request) { + req.FromIP, req.ToIP = req.ToIP, req.FromIP + req.FromPort, req.ToPort = req.ToPort, req.FromPort + req.FromUID, req.ToUID = req.ToUID, req.FromUID + req.FromType, req.ToType = req.ToType, req.FromType +} + +func (a *Aggregator) processHttpEvent(ctx context.Context, d *l7_req.L7Event) { var reqHostHeader string + var path string // parse http payload, extract path, query params, headers if d.Protocol == l7_req.L7_PROTOCOL_HTTP { _, path, _, reqHostHeader = parseHttpPayload(string(d.Payload[0:d.PayloadSize])) } - if d.Protocol == l7_req.L7_PROTOCOL_REDIS { - path = string(d.Payload[0:d.PayloadSize]) + skInfo := a.findRelatedSocket(ctx, d) + if skInfo == nil { + log.Logger.Debug().Uint32("pid", d.Pid). + Uint64("fd", d.Fd).Uint64("writeTime", d.WriteTimeNs). + Str("protocol", d.Protocol).Any("payload", string(d.Payload[:d.PayloadSize])).Msg("socket not found for http event") + return + } + + reqDto := &datastore.Request{ + StartTime: int64(convertKernelTimeToUserspaceTime(d.WriteTimeNs) / 1e6), + Latency: d.Duration, + FromIP: skInfo.Saddr, + ToIP: skInfo.Daddr, + Protocol: d.Protocol, + Tls: d.Tls, + Completed: true, + StatusCode: d.Status, + FailReason: "", + Method: d.Method, + Path: path, + Tid: d.Tid, + Seq: d.Seq, } err := a.setFromTo(skInfo, d, reqDto, reqHostHeader) @@ -1142,38 +1281,88 @@ func (a *Aggregator) processL7(ctx context.Context, d *l7_req.L7Event) { return } - reqDto.Path = path - reqDto.Completed = !d.Failed + if d.Protocol == l7_req.L7_PROTOCOL_HTTP && d.Tls { + reqDto.Protocol = "HTTPS" + } - // In AMQP-DELIVER or REDIS-PUSHED_EVENT event, we are capturing from read syscall, - // exchange sockets - // In Alaz context, From is always the one that makes the write - // and To is the one that makes the read - if (d.Protocol == l7_req.L7_PROTOCOL_AMQP && d.Method == l7_req.DELIVER) || - (d.Protocol == l7_req.L7_PROTOCOL_REDIS && d.Method == l7_req.REDIS_PUSHED_EVENT) { - reqDto.FromIP, reqDto.ToIP = reqDto.ToIP, reqDto.FromIP - reqDto.FromPort, reqDto.ToPort = reqDto.ToPort, reqDto.FromPort - reqDto.FromUID, reqDto.ToUID = reqDto.ToUID, reqDto.FromUID - reqDto.FromType, reqDto.ToType = reqDto.ToType, reqDto.FromType + err = a.ds.PersistRequest(reqDto) + if err != nil { + log.Logger.Error().Err(err).Msg("error persisting request") } - if d.Protocol == l7_req.L7_PROTOCOL_HTTP && d.Tls { - reqDto.Protocol = "HTTPS" +} + +func (a *Aggregator) processPostgresEvent(ctx context.Context, d *l7_req.L7Event) { + // parse sql command from payload + // path = sql command + // method = sql message type + + query, err := a.parseSqlCommand(d) + if err != nil { + log.Logger.Error().AnErr("err", err) + return } - if d.Protocol == l7_req.L7_PROTOCOL_KAFKA { - log.Logger.Warn().Uint32("tid", d.Tid).Uint32("seq", d.Seq).Msg("kafka req in aggregator") - err := a.decodeKafkaPayload(d, reqDto) - if err != nil { - return - } + skInfo := a.findRelatedSocket(ctx, d) + if skInfo == nil { + log.Logger.Debug().Uint32("pid", d.Pid). + Uint64("fd", d.Fd).Uint64("writeTime", d.WriteTimeNs). + Str("protocol", d.Protocol).Any("payload", string(d.Payload[:d.PayloadSize])).Msg("socket not found for postgres event") + + return + } + + reqDto := &datastore.Request{ + StartTime: int64(convertKernelTimeToUserspaceTime(d.WriteTimeNs) / 1e6), + Latency: d.Duration, + FromIP: skInfo.Saddr, + ToIP: skInfo.Daddr, + Protocol: d.Protocol, + Tls: d.Tls, + Completed: true, + StatusCode: d.Status, + FailReason: "", + Method: d.Method, + Path: query, + Tid: d.Tid, + Seq: d.Seq, + } + + err = a.setFromTo(skInfo, d, reqDto, "") + if err != nil { + return } err = a.ds.PersistRequest(reqDto) if err != nil { log.Logger.Error().Err(err).Msg("error persisting request") } +} +func (a *Aggregator) processL7(ctx context.Context, d *l7_req.L7Event) { + // // other protocols events come as whole, but http2 events come as frames + // // we need to aggregate frames to get the whole request + // defer func() { + // if r := recover(); r != nil { + // // TODO: we need to fix this properly + // log.Logger.Debug().Msgf("probably a http2 frame sent on a closed chan: %v", r) + // } + // }() + + switch d.Protocol { + case l7_req.L7_PROTOCOL_HTTP2: + a.processHttp2Event(d) + case l7_req.L7_PROTOCOL_POSTGRES: + a.processPostgresEvent(ctx, d) + case l7_req.L7_PROTOCOL_HTTP: + a.processHttpEvent(ctx, d) + case l7_req.L7_PROTOCOL_REDIS: + a.processRedisEvent(ctx, d) + case l7_req.L7_PROTOCOL_AMQP: + a.processAmqpEvent(ctx, d) + case l7_req.L7_PROTOCOL_KAFKA: + a.processKafkaEvent(ctx, d) + } } // reverse dns lookup @@ -1391,20 +1580,16 @@ func (a *Aggregator) fetchSocketOnNotFound(ctx context.Context, d *l7_req.L7Even } a.liveProcessesMu.Unlock() - // creates sockMap.M - skInfo := a.findRelatedSocket(ctx, d) - if skInfo == nil { - // go try reading from kernel files - err := sockMap.M[d.Fd].getConnectionInfo() - if err != nil { - log.Logger.Debug().Uint32("pid", d.Pid).Uint64("fd", d.Fd).Err(err).Msg("fetchSocketOnNotFound: failed to get connection info") - return false - } else { - log.Logger.Debug().Uint32("pid", d.Pid).Uint64("fd", d.Fd).Msg("fetchSocketOnNotFound: connection info found") - return true - } + // go try reading from kernel files + err := sockMap.M[d.Fd].getConnectionInfo() + if err != nil { + log.Logger.Debug().Uint32("pid", d.Pid).Uint64("fd", d.Fd).Err(err).Msg("fetchSocketOnNotFound: failed to get connection info") + return false + } else { + log.Logger.Debug().Uint32("pid", d.Pid).Uint64("fd", d.Fd).Msg("fetchSocketOnNotFound: connection info found") + return true } - return true + } func (a *Aggregator) findRelatedSocket(ctx context.Context, d *l7_req.L7Event) *SockInfo { @@ -1433,8 +1618,14 @@ func (a *Aggregator) findRelatedSocket(ctx context.Context, d *l7_req.L7Event) * sockMap.mu.Unlock() skInfo := a.fetchSkInfo(ctx, skLine, d) + if skInfo == nil { - return nil + log.Logger.Debug().Uint32("pid", d.Pid). + Uint64("fd", d.Fd).Uint64("writeTime", d.WriteTimeNs). + Str("protocol", d.Protocol).Any("payload", string(d.Payload[:d.PayloadSize])).Msg("socket not found") + + // go check pid-fd for the socket + a.fetchSocketOnNotFound(ctx, d) } return skInfo From 015d34edee9e37b4d7bc0a70a9eac6943a8a57cd Mon Sep 17 00:00:00 2001 From: kenanfarukcakir Date: Mon, 1 Jul 2024 08:37:06 +0000 Subject: [PATCH 08/24] refactor aggregator --- aggregator/cluster.go | 93 ++++++ aggregator/data.go | 547 +++++++++++++++--------------------- aggregator/sock_num_line.go | 3 + aggregator/socket.go | 121 ++++++++ 4 files changed, 439 insertions(+), 325 deletions(-) create mode 100644 aggregator/cluster.go create mode 100644 aggregator/socket.go diff --git a/aggregator/cluster.go b/aggregator/cluster.go new file mode 100644 index 0000000..1eb02dd --- /dev/null +++ b/aggregator/cluster.go @@ -0,0 +1,93 @@ +package aggregator + +import ( + "sync" + "sync/atomic" + + "k8s.io/apimachinery/pkg/types" +) + +type ClusterInfo struct { + k8smu sync.RWMutex + PodIPToPodUid map[string]types.UID `json:"podIPToPodUid"` + ServiceIPToServiceUid map[string]types.UID `json:"serviceIPToServiceUid"` + + // Pid -> SocketMap + // pid -> fd -> {saddr, sport, daddr, dport} + SocketMaps []*SocketMap // index symbolizes pid + + // Below mutexes guard socketMaps, set to mu inside SocketMap struct + // Used to find the correct mutex for the process, some pids can share the same mutex + muIndex atomic.Uint64 + muArray []*sync.RWMutex + + signalChan chan uint32 // pids are signaled on this channel to notify clusterInfo struct to initialize a SocketMap +} + +func newClusterInfo(liveProcCount int) *ClusterInfo { + ci := &ClusterInfo{ + PodIPToPodUid: map[string]types.UID{}, + ServiceIPToServiceUid: map[string]types.UID{}, + } + ci.signalChan = make(chan uint32) + sockMaps := make([]*SocketMap, maxPid+1) // index=pid + // initialize sockMaps + for i := range sockMaps { + sockMaps[i] = &SocketMap{ + M: nil, // initialized on demand later + mu: nil, + } + } + ci.SocketMaps = sockMaps + ci.muIndex = atomic.Uint64{} + + // initialize mutex array + + // normally, mutex per pid is straightforward solution + // on regular systems, maxPid is around 32768 + // so, we allocate 32768 mutexes, which is 32768 * 24 bytes = 786KB + // but on 64-bit systems, maxPid can be 4194304 + // and we don't want to allocate 4194304 mutexes, it adds up to 4194304 * 24 bytes = 100MB + // So, some process will have to share the mutex + + // assume liveprocesses can increase up to 100 times of current count + // if processes exceeds the count of mutex, they will share the mutex + countMuArray := liveProcCount * 100 + if countMuArray > maxPid { + countMuArray = maxPid + } + // for 2k processes, 200k mutex => 200k * 24 bytes = 4.80MB + // in case of maxPid is 32678, 32678 * 24 bytes = 784KB, pick the smaller one + ci.muArray = make([]*sync.RWMutex, countMuArray) + go ci.handleSocketMapCreation() + return ci +} + +func (ci *ClusterInfo) SignalSocketMapCreation(pid uint32) { + ci.signalChan <- pid +} + +// events will be processed sequentially here in one goroutine. +// in order to prevent race. +func (ci *ClusterInfo) handleSocketMapCreation() { + for pid := range ci.signalChan { + if ci.SocketMaps[pid].mu == nil { + ci.muIndex.Add(1) + i := (ci.muIndex.Load()) % uint64(len(ci.muArray)) + ci.muArray[i] = &sync.RWMutex{} + ci.SocketMaps[pid].mu = ci.muArray[i] + ci.SocketMaps[pid].pid = pid + ci.SocketMaps[pid].M = make(map[uint64]*SocketLine) + ci.SocketMaps[pid].fetchExistingSockets() + } + } +} + +func (ci *ClusterInfo) clearProc(pid uint32) { + if ci.SocketMaps[pid].mu == nil { + return + } + ci.SocketMaps[pid].mu.Lock() + ci.SocketMaps[pid].M = nil + ci.SocketMaps[pid].mu.Unlock() +} diff --git a/aggregator/data.go b/aggregator/data.go index 0e5b7d0..1bf9bb7 100644 --- a/aggregator/data.go +++ b/aggregator/data.go @@ -11,18 +11,18 @@ import ( "bytes" "context" "encoding/binary" + "encoding/json" "fmt" "io" "net" + "net/http" "os" "os/exec" - "path" "regexp" "runtime" "strconv" "strings" "sync" - "sync/atomic" "syscall" "golang.org/x/time/rate" @@ -43,15 +43,24 @@ import ( "github.com/patrickmn/go-cache" "k8s.io/apimachinery/pkg/types" +) + +const ( + POD = "pod" + SVC = "service" + OUTBOUND = "outbound" +) - _ "github.com/segmentio/kafka-go/protocol/fetch" - _ "github.com/segmentio/kafka-go/protocol/produce" - _ "github.com/segmentio/kafka-go/protocol/saslauthenticate" +const ( + KAFKA = "kafka" // LOG_CONTEXT_KEY should match + REDIS = "redis" ) type Aggregator struct { ctx context.Context + ctxForKafka context.Context + // listen to events from different sources k8sChan <-chan interface{} ebpfChan <-chan interface{} @@ -70,36 +79,19 @@ type Aggregator struct { h2Ch chan *l7_req.L7Event h2Frames map[string]*FrameArrival // pid-fd-streamId -> frame + h2ParserMu sync.RWMutex + h2Parsers map[string]*http2Parser // pid-fd -> http2Parser + // postgres prepared stmt pgStmtsMu sync.RWMutex pgStmts map[string]string // pid-fd-stmtname -> query - h2ParserMu sync.RWMutex - h2Parsers map[string]*http2Parser // pid-fd -> http2Parser - liveProcessesMu sync.RWMutex liveProcesses map[uint32]struct{} // pid -> struct{} // Used to rate limit and drop trace events based on pid rateLimiters map[uint32]*rate.Limiter // pid -> rateLimiter rateLimitMu sync.RWMutex - - // Used to find the correct mutex for the pid, some pids can share the same mutex - muIndex atomic.Uint64 - muArray []*sync.RWMutex -} - -// We need to keep track of the following -// in order to build find relationships between -// connections and pods/services - -type SockInfo struct { - Pid uint32 `json:"pid"` - Fd uint64 `json:"fd"` - Saddr string `json:"saddr"` - Sport uint16 `json:"sport"` - Daddr string `json:"daddr"` - Dport uint16 `json:"dport"` } type http2Parser struct { @@ -114,33 +106,6 @@ type http2Parser struct { serverHpackDecoder *hpack.Decoder } -// type SocketMap -type SocketMap struct { - mu *sync.RWMutex - M map[uint64]*SocketLine `json:"fdToSockLine"` // fd -> SockLine -} - -type ClusterInfo struct { - k8smu sync.RWMutex - PodIPToPodUid map[string]types.UID `json:"podIPToPodUid"` - ServiceIPToServiceUid map[string]types.UID `json:"serviceIPToServiceUid"` - - // Pid -> SocketMap - // pid -> fd -> {saddr, sport, daddr, dport} - SocketMaps []*SocketMap // index symbolizes pid -} - -// If we have information from the container runtimes -// we would have pid's of the containers within the pod -// and we can use that to find the podUid directly - -// If we don't have the pid's of the containers -// we can use the following to find the podUid -// {saddr+sport} -> search in podIPToPodUid -> podUid -// {daddr+dport} -> search in serviceIPToServiceUid -> serviceUid -// or -// {daddr+dport} -> search in podIPToPodUid -> podUid - var ( // default exponential backoff (*2) // when attemptLimit is increased, we are blocking the events that we wait it to be processed more @@ -154,6 +119,7 @@ var ( var reverseDnsCache *cache.Cache var re *regexp.Regexp +var maxPid int func init() { reverseDnsCache = cache.New(defaultExpiration, purgeTime) @@ -162,6 +128,12 @@ func init() { // Case-insensitive matching re = regexp.MustCompile(strings.Join(keywords, "|")) + + var err error + maxPid, err = getPidMax() + if err != nil { + log.Logger.Fatal().Err(err).Msg("error getting max pid") + } } func NewAggregator(parentCtx context.Context, k8sChan <-chan interface{}, @@ -170,19 +142,16 @@ func NewAggregator(parentCtx context.Context, k8sChan <-chan interface{}, tcpEvents chan interface{}, tlsAttachSignalChan chan uint32, ds datastore.DataStore) *Aggregator { + ctx, _ := context.WithCancel(parentCtx) - clusterInfo := &ClusterInfo{ - PodIPToPodUid: map[string]types.UID{}, - ServiceIPToServiceUid: map[string]types.UID{}, - } a := &Aggregator{ - ctx: ctx, - k8sChan: k8sChan, - ebpfChan: events, - ebpfProcChan: procEvents, - ebpfTcpChan: tcpEvents, - clusterInfo: clusterInfo, + ctx: ctx, + k8sChan: k8sChan, + ebpfChan: events, + ebpfProcChan: procEvents, + ebpfTcpChan: tcpEvents, + // clusterInfo: clusterInfo, ds: ds, tlsAttachSignalChan: tlsAttachSignalChan, h2Ch: make(chan *l7_req.L7Event, 1000000), @@ -191,57 +160,21 @@ func NewAggregator(parentCtx context.Context, k8sChan <-chan interface{}, liveProcesses: make(map[uint32]struct{}), rateLimiters: make(map[uint32]*rate.Limiter), pgStmts: make(map[string]string), - muIndex: atomic.Uint64{}, - muArray: nil, - } - - maxPid, err := getPidMax() - if err != nil { - log.Logger.Fatal().Err(err).Msg("error getting max pid") - } - sockMaps := make([]*SocketMap, maxPid+1) // index=pid - // initialize sockMaps - for i := range sockMaps { - sockMaps[i] = &SocketMap{ - M: nil, // initialized on demand later - mu: nil, - } } - clusterInfo.SocketMaps = sockMaps a.getLiveProcesses() a.liveProcessesMu.RLock() - countLiveProcesses := len(a.liveProcesses) + liveProcCount := len(a.liveProcesses) a.liveProcessesMu.RUnlock() - // normally, mutex per pid is straightforward solution - // on regular systems, maxPid is around 32768 - // so, we allocate 32768 mutexes, which is 32768 * 24 bytes = 786KB - // but on 64-bit systems, maxPid can be 4194304 - // and we don't want to allocate 4194304 mutexes, it adds up to 4194304 * 24 bytes = 100MB - // So, some process will have to share the mutex - - // assume liveprocesses can increase up to 100 times of current count - // if processes exceeds the count of mutex, they will share the mutex - countMuArray := countLiveProcesses * 100 - if countMuArray > maxPid { - countMuArray = maxPid - } - // for 2k processes, 200k mutex => 200k * 24 bytes = 4.80MB - // in case of maxPid is 32678, 32678 * 24 bytes = 784KB, pick the smaller one - a.muArray = make([]*sync.RWMutex, countMuArray) - - // set distinct mutex for every live process + a.clusterInfo = newClusterInfo(liveProcCount) for pid := range a.liveProcesses { - a.muIndex.Add(1) - a.muArray[a.muIndex.Load()] = &sync.RWMutex{} - sockMaps[pid].mu = a.muArray[a.muIndex.Load()] - a.getAlreadyExistingSockets(pid) + a.clusterInfo.SignalSocketMapCreation(pid) } go a.clearSocketLines(ctx) - go a.updateSocketMap(ctx) + // go a.updateSocketMap(ctx) return a } @@ -294,7 +227,7 @@ func (a *Aggregator) Run() { if err != nil { // pid does not exist delete(a.liveProcesses, pid) - a.removeFromClusterInfo(pid) + a.clusterInfo.clearProc(pid) a.h2ParserMu.Lock() for key, parser := range a.h2Parsers { @@ -334,6 +267,8 @@ func (a *Aggregator) Run() { numWorker = 50 // min number } + a.ctxForKafka = context.WithValue(a.ctx, log.LOG_CONTEXT, KAFKA) + for i := 0; i < numWorker; i++ { go a.processEbpf(a.ctx) go a.processEbpfTcp(a.ctx) @@ -458,28 +393,20 @@ func (a *Aggregator) getRateLimiterForPid(pid uint32) *rate.Limiter { } func (a *Aggregator) processExec(d *proc.ProcEvent) { - a.liveProcessesMu.Lock() - defer a.liveProcessesMu.Unlock() + // a.liveProcessesMu.Lock() + // defer a.liveProcessesMu.Unlock() - a.liveProcesses[d.Pid] = struct{}{} + // a.liveProcesses[d.Pid] = struct{}{} - // if duplicate exec event comes, underlying mutex will be changed - // if first assigned mutex is locked and another exec event comes, mutex will be changed - // and unlock of unlocked mutex now is a possibility - // to avoid this case, if a socket map already has a mutex, don't change it - if a.clusterInfo.SocketMaps[d.Pid].mu == nil { - // create lock on demand - a.muIndex.Add(1) - a.muArray[(a.muIndex.Load())%uint64(len(a.muArray))] = &sync.RWMutex{} - a.clusterInfo.SocketMaps[d.Pid].mu = a.muArray[(a.muIndex.Load())%uint64(len(a.muArray))] - } + a.clusterInfo.SignalSocketMapCreation(d.Pid) } func (a *Aggregator) processExit(pid uint32) { - a.liveProcessesMu.Lock() - delete(a.liveProcesses, pid) - a.removeFromClusterInfo(pid) - a.liveProcessesMu.Unlock() + // a.liveProcessesMu.Lock() + // delete(a.liveProcesses, pid) + // a.liveProcessesMu.Unlock() + + a.clusterInfo.clearProc(pid) a.h2ParserMu.Lock() pid_s := fmt.Sprint(pid) @@ -934,43 +861,43 @@ func (a *Aggregator) getSvcWithIP(addr string) (types.UID, bool) { return svcUid, ok } -func (a *Aggregator) setFromTo(skInfo *SockInfo, d *l7_req.L7Event, reqDto *datastore.Request, hostHeader string) error { +func (a *Aggregator) setFromTo(skInfo *SockInfo, d *l7_req.L7Event, event datastore.DirectionalEvent, hostHeader string) error { // find pod info podUid, ok := a.getPodWithIP(skInfo.Saddr) if !ok { return fmt.Errorf("error finding pod with sockets saddr") } - reqDto.FromUID = string(podUid) - reqDto.FromType = "pod" - reqDto.FromPort = skInfo.Sport - reqDto.ToPort = skInfo.Dport + event.SetFromUID(string(podUid)) + event.SetFromType(POD) + event.SetFromPort(skInfo.Sport) + event.SetToPort(skInfo.Dport) // find service info svcUid, ok := a.getSvcWithIP(skInfo.Daddr) if ok { - reqDto.ToUID = string(svcUid) - reqDto.ToType = "service" + event.SetToUID(string(svcUid)) + event.SetToType(SVC) } else { podUid, ok := a.getPodWithIP(skInfo.Daddr) if ok { - reqDto.ToUID = string(podUid) - reqDto.ToType = "pod" + event.SetToUID(string(podUid)) + event.SetToType(POD) } else { // 3rd party url if hostHeader != "" { - reqDto.ToUID = hostHeader - reqDto.ToType = "outbound" + event.SetToUID(hostHeader) + event.SetToType(OUTBOUND) } else { remoteDnsHost, err := getHostnameFromIP(skInfo.Daddr) if err == nil { // dns lookup successful - reqDto.ToUID = remoteDnsHost - reqDto.ToType = "outbound" + event.SetToUID(remoteDnsHost) + event.SetToType(OUTBOUND) } else { - reqDto.ToUID = skInfo.Daddr - reqDto.ToType = "outbound" + event.SetToUID(skInfo.Daddr) + event.SetToType(OUTBOUND) } } } @@ -1091,56 +1018,60 @@ func (a *Aggregator) processHttp2Event(d *l7_req.L7Event) { } func (a *Aggregator) processKafkaEvent(ctx context.Context, d *l7_req.L7Event) { - skInfo := a.findRelatedSocket(ctx, d) - if skInfo == nil { - log.Logger.Debug().Uint32("pid", d.Pid). - Uint64("fd", d.Fd).Uint64("writeTime", d.WriteTimeNs). - Str("protocol", d.Protocol).Any("payload", string(d.Payload[:d.PayloadSize])).Msg("socket not found for kafka event") - + kafkaMessages, err := a.decodeKafkaPayload(d) + if err != nil || len(kafkaMessages) == 0 { return } - kafkaMessages, err := a.decodeKafkaPayload(d) - if err != nil { + skInfo := a.findRelatedSocket(ctx, d) + if skInfo == nil { + log.Logger.Debug(). + Ctx(ctx). + Uint32("pid", d.Pid). + Uint64("fd", d.Fd). + Uint64("writeTime", d.WriteTimeNs). + Str("protocol", d.Protocol). + Any("payload", string(d.Payload[:d.PayloadSize])). + Msg("socket not found for kafka event") + return } - for _, msg := range kafkaMessages { - reqDto := &datastore.Request{ - StartTime: int64(convertKernelTimeToUserspaceTime(d.WriteTimeNs) / 1e6), - Latency: d.Duration, - FromIP: skInfo.Saddr, - FromType: "", - FromUID: "", - FromPort: 0, - ToIP: skInfo.Daddr, - ToType: "", - ToUID: "", - ToPort: 0, - Protocol: d.Protocol, - Tls: d.Tls, - Completed: true, - StatusCode: d.Status, - FailReason: "", - Method: msg.Type, - Path: msg.Value, - Tid: d.Tid, - Seq: d.Seq, + event := &datastore.KafkaEvent{ + StartTime: int64(convertKernelTimeToUserspaceTime(d.WriteTimeNs) / 1e6), + Latency: d.Duration, + FromIP: skInfo.Saddr, + FromType: "", + FromUID: "", + FromPort: 0, + ToIP: skInfo.Daddr, + ToType: "", + ToUID: "", + ToPort: 0, + Tls: d.Tls, + Topic: msg.TopicName, + Partition: uint32(msg.Partition), + Key: msg.Key, + Value: msg.Value, + Type: msg.Type, + Tid: d.Tid, + Seq: d.Seq, } - err := a.setFromTo(skInfo, d, reqDto, "") + err := a.setFromTo(skInfo, d, event, "") if err != nil { return } - if reqDto.Method == "CONSUME" { + if event.Type == "CONSUME" { // TODO: reverse the from and to // do we show arrows originating from outbound services ? } - err = a.ds.PersistRequest(reqDto) + log.Logger.Warn().Ctx(ctx).Any("kafkaEvent", event).Msg("persist kafka event") + err = a.ds.PersistKafkaEvent(event) if err != nil { - log.Logger.Error().Err(err).Msg("error persisting request") + log.Logger.Error().Err(err).Msg("error persisting kafka event") } } return @@ -1182,7 +1113,7 @@ func (a *Aggregator) processAmqpEvent(ctx context.Context, d *l7_req.L7Event) { // In Alaz context, From is always the one that makes the write // and To is the one that makes the read if d.Method == l7_req.DELIVER { - reverseFromTo(reqDto) + reqDto.ReverseDirection() } err = a.ds.PersistRequest(reqDto) @@ -1228,7 +1159,7 @@ func (a *Aggregator) processRedisEvent(ctx context.Context, d *l7_req.L7Event) { // In Alaz context, From is always the one that makes the write // and To is the one that makes the read if d.Method == l7_req.REDIS_PUSHED_EVENT { - reverseFromTo(reqDto) + reqDto.ReverseDirection() } err = a.ds.PersistRequest(reqDto) @@ -1237,11 +1168,50 @@ func (a *Aggregator) processRedisEvent(ctx context.Context, d *l7_req.L7Event) { } } -func reverseFromTo(req *datastore.Request) { - req.FromIP, req.ToIP = req.ToIP, req.FromIP - req.FromPort, req.ToPort = req.ToPort, req.FromPort - req.FromUID, req.ToUID = req.ToUID, req.FromUID - req.FromType, req.ToType = req.ToType, req.FromType +func (a *Aggregator) AdvertiseDebugData() { + http.HandleFunc("/pid-sock-map", + func(w http.ResponseWriter, r *http.Request) { + queryParam := r.URL.Query().Get("number") + if queryParam == "" { + http.Error(w, "Missing query parameter 'number'", http.StatusBadRequest) + return + } + number, err := strconv.ParseUint(queryParam, 10, 32) + if err != nil { + http.Error(w, "Invalid query parameter 'number'", http.StatusBadRequest) + return + } + pid := uint32(number) + + sockMap := a.clusterInfo.SocketMaps[pid] + if sockMap == nil { + http.Error(w, "Pid not found", http.StatusNotFound) + return + } else { + w.Header().Set("Content-Type", "application/json") + w.WriteHeader(http.StatusOK) + _ = json.NewEncoder(w).Encode(sockMap) + return + } + }, + ) + + // http.HandleFunc("/process-latency", + // func(w http.ResponseWriter, r *http.Request) { + // latency := a.totalLatency.Load() + // count := a.latencyCount.Load() + // if count == 0 { + // http.Error(w, "No data available", http.StatusNotFound) + // return + // } + // avgLatency := float64(latency) / float64(count) + // w.Header().Set("Content-Type", "application/json") + // w.WriteHeader(http.StatusOK) + // _ = json.NewEncoder(w).Encode(map[string]float64{ + // "average_latency_in_ns": avgLatency, + // }) + // return + // }) } func (a *Aggregator) processHttpEvent(ctx context.Context, d *l7_req.L7Event) { @@ -1361,7 +1331,7 @@ func (a *Aggregator) processL7(ctx context.Context, d *l7_req.L7Event) { case l7_req.L7_PROTOCOL_AMQP: a.processAmqpEvent(ctx, d) case l7_req.L7_PROTOCOL_KAFKA: - a.processKafkaEvent(ctx, d) + a.processKafkaEvent(a.ctxForKafka, d) } } @@ -1387,91 +1357,6 @@ func getHostnameFromIP(ipAddr string) (string, error) { } } -// get all tcp sockets for the pid -// iterate through all sockets -// create a new socket line for each socket -// add it to the socket map -func (a *Aggregator) getAlreadyExistingSockets(pid uint32) { - // no need for locking because this is called firstmost and no other goroutine is running - - socks := map[string]sock{} - sockMap := a.fetchSocketMap(pid) - - // Get the sockets for the process. - var err error - for _, f := range []string{"tcp", "tcp6"} { - sockPath := strings.Join([]string{"/proc", fmt.Sprint(pid), "net", f}, "/") - - ss, err := readSockets(sockPath) - if err != nil { - continue - } - - for _, s := range ss { - socks[s.Inode] = sock{TcpSocket: s} - } - } - - // Get the file descriptors for the process. - fdDir := strings.Join([]string{"/proc", fmt.Sprint(pid), "fd"}, "/") - fdEntries, err := os.ReadDir(fdDir) - if err != nil { - return - } - - fds := make([]Fd, 0, len(fdEntries)) - for _, entry := range fdEntries { - fd, err := strconv.ParseUint(entry.Name(), 10, 64) - if err != nil { - continue - } - dest, err := os.Readlink(path.Join(fdDir, entry.Name())) - if err != nil { - continue - } - var socketInode string - if strings.HasPrefix(dest, "socket:[") && strings.HasSuffix(dest, "]") { - socketInode = dest[len("socket:[") : len(dest)-1] - } - fds = append(fds, Fd{Fd: fd, Dest: dest, SocketInode: socketInode}) - } - - // Match the sockets to the file descriptors. - for _, fd := range fds { - if fd.SocketInode != "" { - // add to values - s := socks[fd.SocketInode].TcpSocket - sockInfo := &SockInfo{ - Pid: pid, - Fd: fd.Fd, - Saddr: s.SAddr.IP().String(), - Sport: s.SAddr.Port(), - Daddr: s.DAddr.IP().String(), - Dport: s.DAddr.Port(), - } - - if sockInfo.Saddr == "zero IP" || sockInfo.Daddr == "zero IP" || sockInfo.Sport == 0 || sockInfo.Dport == 0 { - continue - } - - skLine := NewSocketLine(pid, fd.Fd) - skLine.AddValue(0, sockInfo) - - if sockMap.mu == nil { - return - } - - sockMap.mu.Lock() - if sockMap.M == nil { - sockMap.M = make(map[uint64]*SocketLine) - } - sockMap.M[fd.Fd] = skLine - sockMap.mu.Unlock() - } - } - -} - func (a *Aggregator) fetchSkInfo(ctx context.Context, skLine *SocketLine, d *l7_req.L7Event) *SockInfo { rc := attemptLimit rt := retryInterval @@ -1483,7 +1368,7 @@ func (a *Aggregator) fetchSkInfo(ctx context.Context, skLine *SocketLine, d *l7_ if err == nil && skInfo != nil { break } - // log.Logger.Debug().Err(err).Uint32("pid", d.Pid).Uint64("fd", d.Fd).Uint64("writeTime", d.WriteTimeNs).Msg("retry to get skInfo...") + // log.Logger.Debug().Ctx(ctx).Err(err).Uint32("pid", d.Pid).Uint64("fd", d.Fd).Uint64("writeTime", d.WriteTimeNs).Msg("retry to get skInfo...") rc-- if rc == 0 { break @@ -1530,73 +1415,85 @@ func (a *Aggregator) fetchSocketMap(pid uint32) *SocketMap { } // This is a mitigation for the case a tcp event is missed -func (a *Aggregator) updateSocketMap(ctx context.Context) { - ticker := time.NewTicker(3 * time.Minute) - - f := func() { - a.liveProcessesMu.RLock() - defer a.liveProcessesMu.RUnlock() - for pid := range a.liveProcesses { - sockMap := a.clusterInfo.SocketMaps[pid] - if sockMap.mu == nil { - continue - } - - sockMap.mu.Lock() - for _, skLine := range sockMap.M { - skLine.getConnectionInfo() - } - sockMap.mu.Unlock() - } - } - - for { - select { - case <-ticker.C: - f() - case <-ctx.Done(): - return - } - } -} +// func (a *Aggregator) updateSocketMap(ctx context.Context) { +// ticker := time.NewTicker(3 * time.Minute) + +// f := func() { +// a.liveProcessesMu.RLock() +// defer a.liveProcessesMu.RUnlock() +// for pid := range a.liveProcesses { +// sockMap := a.clusterInfo.SocketMaps[pid] +// if sockMap.mu == nil { +// continue +// } + +// sockMap.mu.Lock() +// for _, skLine := range sockMap.M { +// skLine.getConnectionInfo() +// } +// sockMap.mu.Unlock() +// } +// } + +// for { +// select { +// case <-ticker.C: +// f() +// case <-ctx.Done(): +// return +// } +// } +// } + +// func (a *Aggregator) fetchSocketOnNotFound(ctx context.Context, d *l7_req.L7Event) bool { +// a.liveProcessesMu.Lock() + +// a.liveProcesses[d.Pid] = struct{}{} +// sockMap := a.clusterInfo.SocketMaps[d.Pid] +// // pid does not exists +// // acquire sockMap lock + +// // in case of reference to mu is nil, pid exec event did not come yet +// // create a new mutex for the pid +// // to avoid race around the mutex, we need to lock the liveProcessesMu +// if sockMap.mu == nil { +// log.Logger.Debug().Uint32("pid", d.Pid).Uint64("fd", d.Fd).Msg("fetchSocketOnNotFound: pid not found") + +// a.muIndex.Add(1) +// a.muArray[(a.muIndex.Load())%uint64(len(a.muArray))] = &sync.RWMutex{} +// a.clusterInfo.SocketMaps[d.Pid].mu = a.muArray[(a.muIndex.Load())%uint64(len(a.muArray))] +// } +// // a.liveProcessesMu.Unlock() + +// if a.clusterInfo.SocketMaps[pid].mu. + +// // go try reading from kernel files +// err := sockMap.M[d.Fd].getConnectionInfo() +// if err != nil { +// log.Logger.Debug().Uint32("pid", d.Pid).Uint64("fd", d.Fd).Err(err).Msg("fetchSocketOnNotFound: failed to get connection info") +// return false +// } else { +// log.Logger.Debug().Uint32("pid", d.Pid).Uint64("fd", d.Fd).Msg("fetchSocketOnNotFound: connection info found") +// return true +// } + +// } -func (a *Aggregator) fetchSocketOnNotFound(ctx context.Context, d *l7_req.L7Event) bool { - a.liveProcessesMu.Lock() - - a.liveProcesses[d.Pid] = struct{}{} +func (a *Aggregator) findRelatedSocket(ctx context.Context, d *l7_req.L7Event) *SockInfo { sockMap := a.clusterInfo.SocketMaps[d.Pid] - // pid does not exists // acquire sockMap lock - // in case of reference to mu is nil, pid exec event did not come yet - // create a new mutex for the pid - // to avoid race around the mutex, we need to lock the liveProcessesMu if sockMap.mu == nil { - log.Logger.Debug().Uint32("pid", d.Pid).Uint64("fd", d.Fd).Msg("fetchSocketOnNotFound: pid not found") - a.muIndex.Add(1) - a.muArray[(a.muIndex.Load())%uint64(len(a.muArray))] = &sync.RWMutex{} - a.clusterInfo.SocketMaps[d.Pid].mu = a.muArray[(a.muIndex.Load())%uint64(len(a.muArray))] - } - a.liveProcessesMu.Unlock() + // process exec event did not come for this pid ? + // are we sure that it will come eventually, if we are sure of that + // we can wait for that event to come and then re-process incoming l7 event later. - // go try reading from kernel files - err := sockMap.M[d.Fd].getConnectionInfo() - if err != nil { - log.Logger.Debug().Uint32("pid", d.Pid).Uint64("fd", d.Fd).Err(err).Msg("fetchSocketOnNotFound: failed to get connection info") - return false - } else { - log.Logger.Debug().Uint32("pid", d.Pid).Uint64("fd", d.Fd).Msg("fetchSocketOnNotFound: connection info found") - return true - } + // only one goroutine can create socket maps structure. + // we can create a channel for that. -} - -func (a *Aggregator) findRelatedSocket(ctx context.Context, d *l7_req.L7Event) *SockInfo { - sockMap := a.clusterInfo.SocketMaps[d.Pid] - // acquire sockMap lock + // TODO - if sockMap.mu == nil { return nil } @@ -1608,7 +1505,7 @@ func (a *Aggregator) findRelatedSocket(ctx context.Context, d *l7_req.L7Event) * skLine, ok := sockMap.M[d.Fd] if !ok { - log.Logger.Debug().Uint32("pid", d.Pid).Uint64("fd", d.Fd).Msg("create skLine...") + log.Logger.Debug().Ctx(ctx).Uint32("pid", d.Pid).Uint64("fd", d.Fd).Msg("create skLine...") // start new socket line, find already established connections skLine = NewSocketLine(d.Pid, d.Fd) sockMap.M[d.Fd] = skLine @@ -1620,12 +1517,12 @@ func (a *Aggregator) findRelatedSocket(ctx context.Context, d *l7_req.L7Event) * skInfo := a.fetchSkInfo(ctx, skLine, d) if skInfo == nil { - log.Logger.Debug().Uint32("pid", d.Pid). - Uint64("fd", d.Fd).Uint64("writeTime", d.WriteTimeNs). - Str("protocol", d.Protocol).Any("payload", string(d.Payload[:d.PayloadSize])).Msg("socket not found") + // log.Logger.Debug().Ctx(ctx).Uint32("pid", d.Pid). + // Uint64("fd", d.Fd).Uint64("writeTime", d.WriteTimeNs). + // Str("protocol", d.Protocol).Any("payload", string(d.Payload[:d.PayloadSize])).Msg("socket not found") // go check pid-fd for the socket - a.fetchSocketOnNotFound(ctx, d) + // a.fetchSocketOnNotFound(ctx, d) } return skInfo diff --git a/aggregator/sock_num_line.go b/aggregator/sock_num_line.go index 6e91250..d641f74 100644 --- a/aggregator/sock_num_line.go +++ b/aggregator/sock_num_line.go @@ -340,6 +340,9 @@ func parseTcpLine(line string) (localIP string, localPort int, remoteIP string, } func (nl *SocketLine) getConnectionInfo() error { + nl.mu.Lock() + defer nl.mu.Unlock() + inode, err := getInodeFromFD(fmt.Sprintf("%d", nl.pid), fmt.Sprintf("%d", nl.fd)) if err != nil { return err diff --git a/aggregator/socket.go b/aggregator/socket.go new file mode 100644 index 0000000..455d911 --- /dev/null +++ b/aggregator/socket.go @@ -0,0 +1,121 @@ +package aggregator + +import ( + "fmt" + "os" + "path" + "strconv" + "strings" + "sync" +) + +// We need to keep track of the following +// in order to build find relationships between +// connections and pods/services +type SockInfo struct { + Pid uint32 `json:"pid"` + Fd uint64 `json:"fd"` + Saddr string `json:"saddr"` + Sport uint16 `json:"sport"` + Daddr string `json:"daddr"` + Dport uint16 `json:"dport"` +} + +// type SocketMap +type SocketMap struct { + mu *sync.RWMutex + pid uint32 + M map[uint64]*SocketLine `json:"fdToSockLine"` // fd -> SockLine +} + +// get all tcp sockets for the pid +// iterate through all sockets +// create a new socket line for each socket +// add it to the socket map +func (sm *SocketMap) fetchExistingSockets() { + socks := map[string]sock{} + + // Get the sockets for the process. + var err error + for _, f := range []string{"tcp", "tcp6"} { + sockPath := strings.Join([]string{"/proc", fmt.Sprint(sm.pid), "net", f}, "/") + + ss, err := readSockets(sockPath) + if err != nil { + continue + } + + for _, s := range ss { + socks[s.Inode] = sock{TcpSocket: s} + } + } + + // Get the file descriptors for the process. + fdDir := strings.Join([]string{"/proc", fmt.Sprint(sm.pid), "fd"}, "/") + fdEntries, err := os.ReadDir(fdDir) + if err != nil { + return + } + + fds := make([]Fd, 0, len(fdEntries)) + for _, entry := range fdEntries { + fd, err := strconv.ParseUint(entry.Name(), 10, 64) + if err != nil { + continue + } + dest, err := os.Readlink(path.Join(fdDir, entry.Name())) + if err != nil { + continue + } + var socketInode string + if strings.HasPrefix(dest, "socket:[") && strings.HasSuffix(dest, "]") { + socketInode = dest[len("socket:[") : len(dest)-1] + } + fds = append(fds, Fd{Fd: fd, Dest: dest, SocketInode: socketInode}) + } + + // Match the sockets to the file descriptors. + for _, fd := range fds { + if fd.SocketInode != "" { + // add to values + s := socks[fd.SocketInode].TcpSocket + sockInfo := &SockInfo{ + Pid: sm.pid, + Fd: fd.Fd, + Saddr: s.SAddr.IP().String(), + Sport: s.SAddr.Port(), + Daddr: s.DAddr.IP().String(), + Dport: s.DAddr.Port(), + } + + if sockInfo.Saddr == "zero IP" || sockInfo.Daddr == "zero IP" || sockInfo.Sport == 0 || sockInfo.Dport == 0 { + continue + } + + skLine := NewSocketLine(sm.pid, fd.Fd) + skLine.AddValue(0, sockInfo) + + if sm.mu == nil { + return + } + + sm.mu.Lock() + if sm.M == nil { + sm.M = make(map[uint64]*SocketLine) + } + sm.M[fd.Fd] = skLine + sm.mu.Unlock() + } + } +} + +func (sm *SocketMap) retrieveSocket(fd uint64) { + sm.mu.Lock() + if sl, ok := sm.M[fd]; ok { + sl.getConnectionInfo() + } else { + sm.M[fd] = NewSocketLine(sm.pid, fd) + sl.getConnectionInfo() + } + sm.mu.Unlock() +} From 71da0e30ae1f8ca005bf956a5b191e435f51771f Mon Sep 17 00:00:00 2001 From: kenanfarukcakir Date: Mon, 1 Jul 2024 08:37:13 +0000 Subject: [PATCH 09/24] go mod --- go.mod | 18 +++++++---------- go.sum | 62 +++++++++------------------------------------------------- 2 files changed, 16 insertions(+), 64 deletions(-) diff --git a/go.mod b/go.mod index 279a36e..75e9600 100644 --- a/go.mod +++ b/go.mod @@ -7,16 +7,17 @@ require ( github.com/alecthomas/kingpin/v2 v2.4.0 github.com/cilium/ebpf v0.10.1-0.20230626090016-654491c8a500 github.com/cilium/fake v0.6.1 - github.com/cisco-open/libnasp/components/kafka-protocol-go/pkg v0.0.0-20240528033116-a905e3260e31 + github.com/eapache/go-xerial-snappy v0.0.0-20230111030713-bf00bc1b83b6 github.com/fsnotify/fsnotify v1.7.0 github.com/go-kit/log v0.2.1 github.com/golang/protobuf v1.5.3 github.com/hashicorp/go-retryablehttp v0.7.4 + github.com/klauspost/compress v1.16.5 + github.com/pierrec/lz4/v4 v4.1.18 github.com/prometheus/client_golang v1.19.0 github.com/prometheus/common v0.48.0 github.com/prometheus/node_exporter v1.6.1 - github.com/rs/zerolog v1.29.1 - github.com/segmentio/kafka-go v0.4.47 + github.com/rs/zerolog v1.33.0 github.com/stretchr/testify v1.8.4 golang.org/x/arch v0.5.0 golang.org/x/mod v0.12.0 @@ -29,19 +30,14 @@ require ( ) require ( - emperror.dev/errors v0.8.1 // indirect github.com/Microsoft/go-winio v0.6.0 // indirect github.com/blang/semver/v4 v4.0.0 // indirect github.com/cenkalti/backoff/v4 v4.2.1 // indirect - github.com/eapache/go-xerial-snappy v0.0.0-20230111030713-bf00bc1b83b6 // indirect github.com/felixge/httpsnoop v1.0.3 // indirect github.com/go-logr/stdr v1.2.2 // indirect github.com/golang/snappy v0.0.4 // indirect github.com/google/gnostic-models v0.6.8 // indirect github.com/grpc-ecosystem/grpc-gateway/v2 v2.16.0 // indirect - github.com/klauspost/compress v1.16.5 // indirect - github.com/pierrec/lz4/v4 v4.1.18 // indirect - github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.46.0 // indirect go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.45.0 // indirect @@ -80,7 +76,7 @@ require ( github.com/gogo/protobuf v1.3.2 github.com/google/go-cmp v0.6.0 // indirect github.com/google/gofuzz v1.2.0 // indirect - github.com/google/uuid v1.3.1 + github.com/google/uuid v1.3.1 // indirect github.com/hashicorp/go-cleanhttp v0.5.2 // indirect github.com/hashicorp/go-envparse v0.1.0 // indirect github.com/hashicorp/go-hclog v1.2.0 // indirect @@ -93,8 +89,8 @@ require ( github.com/json-iterator/go v1.1.12 // indirect github.com/lufia/iostat v1.2.1 // indirect github.com/mailru/easyjson v0.7.7 // indirect - github.com/mattn/go-colorable v0.1.12 // indirect - github.com/mattn/go-isatty v0.0.17 // indirect + github.com/mattn/go-colorable v0.1.13 // indirect + github.com/mattn/go-isatty v0.0.19 // indirect github.com/mattn/go-xmlrpc v0.0.3 // indirect github.com/mdlayher/ethtool v0.0.0-20221212131811-ba3b4bc2e02c // indirect github.com/mdlayher/genetlink v1.3.2 // indirect diff --git a/go.sum b/go.sum index b61c8d7..234e5b9 100644 --- a/go.sum +++ b/go.sum @@ -2,8 +2,6 @@ cloud.google.com/go/compute v1.23.0 h1:tP41Zoavr8ptEqaW6j+LQOnyBBhO7OkOMAGrgLopT cloud.google.com/go/compute v1.23.0/go.mod h1:4tCnrn48xsqlwSAiLf1HXMQk8CONslYbdiEZc9FEIbM= cloud.google.com/go/compute/metadata v0.2.3 h1:mg4jlk7mCAj6xXp9UJ4fjI9VUI5rubuGBW5aJ7UnBMY= cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA= -emperror.dev/errors v0.8.1 h1:UavXZ5cSX/4u9iyvH6aDcuGkVjeexUGJ7Ij7G4VfQT0= -emperror.dev/errors v0.8.1/go.mod h1:YcRvLPh626Ubn2xqtoprejnA5nFha+TJ+2vew48kWuE= github.com/Microsoft/go-winio v0.6.0 h1:slsWYD/zyx7lCXoZVlvQrj0hPTM1HI4+v1sIda2yDvg= github.com/Microsoft/go-winio v0.6.0/go.mod h1:cTAf44im0RAYeL23bpB+fzCyDH2MJiz2BO69KH/soAE= github.com/NVIDIA/go-nvml v0.12.0-2 h1:Sg239yy7jmopu/cuvYauoMj9fOpcGMngxVxxS1EBXeY= @@ -26,8 +24,6 @@ github.com/cilium/ebpf v0.10.1-0.20230626090016-654491c8a500 h1:eAn1/gEVvcamZLoF github.com/cilium/ebpf v0.10.1-0.20230626090016-654491c8a500/go.mod h1:WE7CZAnqOL2RouJ4f1uyNhqr2P4CCvXFIqdRDUgWsVs= github.com/cilium/fake v0.6.1 h1:cLkNx1nkF0b0pPW79JaQxaI5oG2/rBzRKpp0YUg1fTA= github.com/cilium/fake v0.6.1/go.mod h1:V9lCbbcsnSf3vB6sdOP7Q0bsUUJ/jyHPZxnFAw5nPUc= -github.com/cisco-open/libnasp/components/kafka-protocol-go/pkg v0.0.0-20240528033116-a905e3260e31 h1:hjREoktKeX82wJgux7OkwscmzU68IxYs1CHoFTkZYS0= -github.com/cisco-open/libnasp/components/kafka-protocol-go/pkg v0.0.0-20240528033116-a905e3260e31/go.mod h1:QA7VtLuomo9p1gzrLHZCfIGg0OrCoeoDitt+54QIPMQ= github.com/cncf/xds/go v0.0.0-20230607035331-e9ce68804cb4 h1:/inchEIKaYC1Akx+H+gqO04wryn5h75LSazbRlnya1k= github.com/cncf/xds/go v0.0.0-20230607035331-e9ce68804cb4/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/coreos/go-systemd/v22 v22.5.0 h1:RrqgGjYQKalulkV8NGVIfkXQf6YYmOyiJKk8iXXhfZs= @@ -130,7 +126,6 @@ github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnr github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/klauspost/compress v1.15.9/go.mod h1:PhcZ0MbTNciWF3rruxRgKxI5NkcHHrHUDtV4Yw2GlzU= github.com/klauspost/compress v1.16.5 h1:IFV2oUNUzZaz+XyusxpLzpzS8Pt5rh0Z16For/djlyI= github.com/klauspost/compress v1.16.5/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= @@ -145,13 +140,13 @@ github.com/lufia/iostat v1.2.1/go.mod h1:rEPNA0xXgjHQjuI5Cy05sLlS2oRcSlWHRLrvh/A github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0= github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= -github.com/mattn/go-colorable v0.1.12 h1:jF+Du6AlPIjs2BiUiQlKOX0rt3SujHxPnksPKZbaA40= -github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= +github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= +github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= github.com/mattn/go-isatty v0.0.10/go.mod h1:qgIWMr58cqv1PHHyhnkY9lrL7etaEgOFcMEpPG5Rm84= -github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= -github.com/mattn/go-isatty v0.0.17 h1:BTarxUcIeDqL27Mc+vyvdWYSL28zpIhv3RoTdsLMPng= -github.com/mattn/go-isatty v0.0.17/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= +github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= +github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA= +github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/mattn/go-xmlrpc v0.0.3 h1:Y6WEMLEsqs3RviBrAa1/7qmbGB7DVD3brZIbqMbQdGY= github.com/mattn/go-xmlrpc v0.0.3/go.mod h1:mqc2dz7tP5x5BKlCahN/n+hs7OSZKJkS9JsHNBRlrxA= github.com/mdlayher/ethtool v0.0.0-20221212131811-ba3b4bc2e02c h1:Y7LoKqIgD7vmqJ7+6ZVnADuwUO+m3tGXbf2lK0OvjIw= @@ -179,10 +174,8 @@ github.com/opencontainers/selinux v1.11.0 h1:+5Zbo97w3Lbmb3PeqQtpmTkMwsW5nRI3YaL github.com/opencontainers/selinux v1.11.0/go.mod h1:E5dMC3VPuVvVHDYmi78qvhJp8+M586T4DlDRYpFkyec= github.com/patrickmn/go-cache v2.1.0+incompatible h1:HRMgzkcYKYpi3C8ajMPV8OFXaaRUnok+kx1WdO15EQc= github.com/patrickmn/go-cache v2.1.0+incompatible/go.mod h1:3Qf8kWWT7OJRJbdiICTKqZju1ZixQ/KpMGzzAfe6+WQ= -github.com/pierrec/lz4/v4 v4.1.15/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= github.com/pierrec/lz4/v4 v4.1.18 h1:xaKrnTkyoqfh1YItXl56+6KJNVYWlEEPuAQW9xsplYQ= github.com/pierrec/lz4/v4 v4.1.18/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= -github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= @@ -200,13 +193,11 @@ github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo= github.com/rogpeppe/go-internal v1.11.0 h1:cWPaGQEPrBb5/AsnsZesgZZ9yb1OQ+GOISoDNXVBh4M= github.com/rogpeppe/go-internal v1.11.0/go.mod h1:ddIwULY96R17DhadqLgMfk9H9tvdUzkipdSkR5nkCZA= -github.com/rs/xid v1.4.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= -github.com/rs/zerolog v1.29.1 h1:cO+d60CHkknCbvzEWxP0S9K6KqyTjrCNUy1LdQLCGPc= -github.com/rs/zerolog v1.29.1/go.mod h1:Le6ESbR7hc+DP6Lt1THiV8CQSdkkNrd3R0XbEgp3ZBU= +github.com/rs/xid v1.5.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= +github.com/rs/zerolog v1.33.0 h1:1cU2KZkvPxNyfgEmhHAz/1A9Bz+llsdYzklWFzgp0r8= +github.com/rs/zerolog v1.33.0/go.mod h1:/7mN4D5sKwJLZQ2b/znpjC3/GQWY/xaDXUM0kKWRHss= github.com/safchain/ethtool v0.3.0 h1:gimQJpsI6sc1yIqP/y8GYgiXn/NjgvpM0RNoWLVVmP0= github.com/safchain/ethtool v0.3.0/go.mod h1:SA9BwrgyAqNo7M+uaL6IYbxpm5wk3L7Mm6ocLW+CJUs= -github.com/segmentio/kafka-go v0.4.47 h1:IqziR4pA3vrZq7YdRxaT3w1/5fvIH5qpCwstUanQQB0= -github.com/segmentio/kafka-go v0.4.47/go.mod h1:HjF6XbOKh0Pjlkr5GVZxt6CsjjwnmhVOfURM5KMd8qg= github.com/siebenmann/go-kstat v0.0.0-20210513183136-173c9b0a9973 h1:GfSdC6wKfTGcgCS7BtzF5694Amne1pGCSTY252WhlEY= github.com/siebenmann/go-kstat v0.0.0-20210513183136-173c9b0a9973/go.mod h1:G81aIFAMS9ECrwBYR9YxhlPjWgrItd+Kje78O6+uqm8= github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= @@ -222,14 +213,10 @@ github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= -github.com/xdg-go/pbkdf2 v1.0.0/go.mod h1:jrpuAogTd400dnrH08LKmI/xc1MbPOebTwRqcT5RDeI= -github.com/xdg-go/scram v1.1.2/go.mod h1:RT/sEzTbU5y00aCK8UOx6R7YryM0iF1N2MOmC3kKLN4= -github.com/xdg-go/stringprep v1.0.4/go.mod h1:mPGuuIYwz7CmR2bT9j4GbQqutWS1zV24gijq1dTyGkM= github.com/xhit/go-str2duration/v2 v2.1.0 h1:lxklc02Drh6ynqX+DdPyp5pCKLUQpRT8bp8Ydu2Bstc= github.com/xhit/go-str2duration/v2 v2.1.0/go.mod h1:ohY8p+0f07DiV6Em5LKB0s2YpLtXVyJfNt1+BlmyAsU= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= go.ddosify.com/ddosify v1.0.5 h1:2FPBr8hjGam7nIjCCGr11MwrX8U7+RvbAFDp6g5eR2I= go.ddosify.com/ddosify v1.0.5/go.mod h1:ciivfP/6RuLd01uc56pdUa2+SQalfKwEXsIhOu04rL4= go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.46.0 h1:PzIubN4/sjByhDRHLviCjJuweBXWFZWhghjg7cS28+M= @@ -266,16 +253,12 @@ golang.org/x/arch v0.5.0/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4= golang.org/x/crypto v0.18.0 h1:PGVlW0xEltQnzFZ55hkuX5+KLyrMYhHld1YHO4AKcdc= golang.org/x/crypto v0.18.0/go.mod h1:R0j02AL6hcrfOiy9T4ZYp/rcWeMxM3L6QYxlOuEG1mg= golang.org/x/exp v0.0.0-20230522175609-2e198f4a06a1 h1:k/i9J1pBpvlfR+9QsetwPyERsqu1GIbi967PQMq3Ivc= golang.org/x/exp v0.0.0-20230522175609-2e198f4a06a1/go.mod h1:V1LtkGg67GoY2N1AnLN78QLrzxkLyJw7RJb1gzOOz9w= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= -golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.12.0 h1:rmsUpXtvNzj340zd98LZ4KntptpfRHwpFOHG188oHXc= golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= @@ -283,11 +266,6 @@ golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= -golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= -golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE= golang.org/x/net v0.20.0 h1:aCL9BSgETF1k+blQaYUBx9hJ9LOGP3gAVemcZlf1Kpo= golang.org/x/net v0.20.0/go.mod h1:z8BVo6PvndSri0LbOE3hAn0apkU+1YvI6E70E9jsnvY= golang.org/x/oauth2 v0.16.0 h1:aDkGMBSYxElaoP81NpoUoz2oo2R2wHdZpGToUxfyQrQ= @@ -295,8 +273,6 @@ golang.org/x/oauth2 v0.16.0/go.mod h1:hqZ+0LWXsiVoZpeld6jVt06P3adbS2Uu911W1SsJv2 golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.3.0 h1:ftCYgMx6zT/asHUrPw8BLLscYtGznsLAnjq5RH9P66E= golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -304,36 +280,18 @@ golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5h golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191008105621-543471e840be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211031064116-611d5d643895/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.18.0 h1:DBdB3niSjOA/O0blCZBqDefyWNYveAYMNF1Wum0DYQ4= golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= -golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= -golang.org/x/term v0.13.0/go.mod h1:LTmsnFJwVN6bCy1rVCoS+qHT1HhALEFxKncY3WNNh4U= golang.org/x/term v0.16.0 h1:m+B6fahuftsE9qjo0VWp2FW0mB3MTJvR0BaMQrq0pmE= golang.org/x/term v0.16.0/go.mod h1:yn7UURbUtPyrVJPGPq404EukNFxcm/foM+bV/bfcDsY= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= -golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= -golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4= @@ -343,8 +301,6 @@ golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtn golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= -golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= -golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= golang.org/x/tools v0.12.0 h1:YW6HUoUmYBpwSgyaGaZq1fHjrBjX1rlpZ54T6mu2kss= golang.org/x/tools v0.12.0/go.mod h1:Sc0INKfu04TlqNoRA1hgpFZbhYXHPr4V5DzpSBTPqQM= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= From 119d24a7c46d48410b5dc37e0c6192643bfdb83f Mon Sep 17 00:00:00 2001 From: kenanfarukcakir Date: Mon, 1 Jul 2024 08:37:24 +0000 Subject: [PATCH 10/24] add log hook --- log/logger.go | 33 ++++++++++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/log/logger.go b/log/logger.go index 922d451..6aed763 100644 --- a/log/logger.go +++ b/log/logger.go @@ -18,6 +18,10 @@ var ( Logger zerolog.Logger ) +const ( + LOG_CONTEXT = "log-context" // for hook +) + func init() { // Get the desired log level from environment variables levelStr := os.Getenv("LOG_LEVEL") @@ -39,6 +43,33 @@ func init() { if os.Getenv("DISABLE_LOGS") == "true" { Logger = zerolog.New(NoopLogger{}) } else { - Logger = zerolog.New(os.Stdout).With().Timestamp().Logger() + hook := &ContextFilterHook{ + ContextKey: LOG_CONTEXT, + ContextValue: os.Getenv("LOG_CONTEXT_KEY"), + } + + Logger = zerolog.New(os.Stdout).With().Timestamp().Logger().Hook(hook) + } +} + +type ContextFilterHook struct { + ContextKey string + ContextValue string +} + +func (cfh *ContextFilterHook) Run(e *zerolog.Event, level zerolog.Level, message string) { + if os.Getenv("LOG_CONTEXT_KEY") == "" { + // if not specified, no filtering + return + } + val := e.GetCtx().Value(cfh.ContextKey) + if val != nil { + if val.(string) == cfh.ContextValue { + e.Str(cfh.ContextKey, cfh.ContextValue) + } else { + e.Discard() + } + } else { + e.Discard() } } From 6e8e51e0c4d5cca95b2bb3aae21fe054dc9ee1b1 Mon Sep 17 00:00:00 2001 From: kenanfarukcakir Date: Mon, 1 Jul 2024 08:37:52 +0000 Subject: [PATCH 11/24] persist kafka events --- config/db.go | 5 +- datastore/backend.go | 129 ++++++++++++++++++++++++++++++++++++----- datastore/datastore.go | 2 + datastore/dto.go | 101 ++++++++++++++++++++++++++++++++ datastore/payload.go | 25 ++++++++ 5 files changed, 244 insertions(+), 18 deletions(-) diff --git a/config/db.go b/config/db.go index db003c6..3475ff4 100644 --- a/config/db.go +++ b/config/db.go @@ -14,6 +14,7 @@ type BackendDSConfig struct { GpuMetricsExport bool MetricsExportInterval int // in seconds - ReqBufferSize int - ConnBufferSize int + ReqBufferSize int + ConnBufferSize int + KafkaEventBufferSize int } diff --git a/datastore/backend.go b/datastore/backend.go index 8bb503a..1e993ee 100644 --- a/datastore/backend.go +++ b/datastore/backend.go @@ -140,10 +140,13 @@ type BackendDS struct { c *http.Client batchSize uint64 - reqChanBuffer chan *ReqInfo - connChanBuffer chan *ConnInfo - reqInfoPool *poolutil.Pool[*ReqInfo] - aliveConnPool *poolutil.Pool[*ConnInfo] + reqChanBuffer chan *ReqInfo + connChanBuffer chan *ConnInfo + kafkaChanBuffer chan *KafkaEventInfo + + reqInfoPool *poolutil.Pool[*ReqInfo] + aliveConnPool *poolutil.Pool[*ConnInfo] + kafkaEventInfoPool *poolutil.Pool[*KafkaEventInfo] traceEventQueue *list.List traceEventMu sync.RWMutex @@ -169,16 +172,17 @@ type BackendDS struct { } const ( - podEndpoint = "/pod/" - svcEndpoint = "/svc/" - rsEndpoint = "/replicaset/" - depEndpoint = "/deployment/" - epEndpoint = "/endpoint/" - containerEndpoint = "/container/" - dsEndpoint = "/daemonset/" - ssEndpoint = "/statefulset/" - reqEndpoint = "/requests/" - connEndpoint = "/connections/" + podEndpoint = "/pod/" + svcEndpoint = "/svc/" + rsEndpoint = "/replicaset/" + depEndpoint = "/deployment/" + epEndpoint = "/endpoint/" + containerEndpoint = "/container/" + dsEndpoint = "/daemonset/" + ssEndpoint = "/statefulset/" + reqEndpoint = "/requests/" + connEndpoint = "/connections/" + kafkaEventEndpoint = "/events/kafka/" traceEventEndpoint = "/dist_tracing/traffic/" @@ -291,9 +295,11 @@ func NewBackendDS(parentCtx context.Context, conf config.BackendDSConfig) *Backe batchSize: bs, reqInfoPool: newReqInfoPool(func() *ReqInfo { return &ReqInfo{} }, func(r *ReqInfo) {}), aliveConnPool: newAliveConnPool(func() *ConnInfo { return &ConnInfo{} }, func(r *ConnInfo) {}), + kafkaEventInfoPool: newKafkaEventPool(func() *KafkaEventInfo { return &KafkaEventInfo{} }, func(r *KafkaEventInfo) {}), traceInfoPool: newTraceInfoPool(func() *TraceInfo { return &TraceInfo{} }, func(r *TraceInfo) {}), reqChanBuffer: make(chan *ReqInfo, conf.ReqBufferSize), connChanBuffer: make(chan *ConnInfo, conf.ConnBufferSize), + kafkaChanBuffer: make(chan *KafkaEventInfo, conf.ReqBufferSize), podEventChan: make(chan interface{}, 5*resourceChanSize), svcEventChan: make(chan interface{}, 2*resourceChanSize), rsEventChan: make(chan interface{}, 2*resourceChanSize), @@ -313,7 +319,8 @@ func NewBackendDS(parentCtx context.Context, conf config.BackendDSConfig) *Backe func (ds *BackendDS) Start() { go ds.sendReqsInBatch(ds.batchSize) - go ds.sendConnsInBatch(ds.batchSize) + go ds.sendConnsInBatch(ds.batchSize / 2) + go ds.sendKafkaEventsInBatch(ds.batchSize / 2) go ds.sendTraceEventsInBatch(10 * ds.batchSize) // events are resynced every 60 seconds on k8s informers @@ -458,6 +465,18 @@ func convertReqsToPayload(batch []*ReqInfo) RequestsPayload { } } +func convertKafkaEventsToPayload(batch []*KafkaEventInfo) KafkaEventInfoPayload { + return KafkaEventInfoPayload{ + Metadata: Metadata{ + MonitoringID: MonitoringID, + IdempotencyKey: string(uuid.NewUUID()), + NodeID: NodeID, + AlazVersion: tag, + }, + KafkaEvents: batch, + } +} + func convertConnsToPayload(batch []*ConnInfo) ConnInfoPayload { return ConnInfoPayload{ Metadata: Metadata{ @@ -528,7 +547,7 @@ func (b *BackendDS) sendToBackend(method string, payload interface{}, endpoint s return } - log.Logger.Debug().Str("endpoint", endpoint).Any("payload", payload).Msg("sending batch to backend") + // log.Logger.Debug().Str("endpoint", endpoint).Any("payload", payload).Msg("sending batch to backend") err = b.DoRequest(httpReq) if err != nil { log.Logger.Error().Msgf("backend persist error at ep %s : %v", endpoint, err) @@ -609,6 +628,47 @@ func (b *BackendDS) sendReqsInBatch(batchSize uint64) { } +func (b *BackendDS) sendKafkaEventsInBatch(batchSize uint64) { + t := time.NewTicker(5 * time.Second) + defer t.Stop() + + send := func() { + batch := make([]*KafkaEventInfo, 0, batchSize) + loop := true + + for i := 0; (i < int(batchSize)) && loop; i++ { + select { + case req := <-b.kafkaChanBuffer: + batch = append(batch, req) + case <-time.After(50 * time.Millisecond): + loop = false + } + } + + if len(batch) == 0 { + return + } + + kEventsPayload := convertKafkaEventsToPayload(batch) + go b.sendToBackend(http.MethodPost, kEventsPayload, kafkaEventEndpoint) + + for _, req := range batch { + b.kafkaEventInfoPool.Put(req) + } + } + + for { + select { + case <-b.ctx.Done(): + log.Logger.Info().Msg("stopping sending kafka events to backend") + return + case <-t.C: + send() + } + } + +} + func (b *BackendDS) sendConnsInBatch(batchSize uint64) { t := time.NewTicker(30 * time.Second) defer t.Stop() @@ -724,6 +784,14 @@ func newTraceInfoPool(factory func() *TraceInfo, close func(*TraceInfo)) *poolut } } +func newKafkaEventPool(factory func() *KafkaEventInfo, close func(*KafkaEventInfo)) *poolutil.Pool[*KafkaEventInfo] { + return &poolutil.Pool[*KafkaEventInfo]{ + Items: make(chan *KafkaEventInfo, 1000), + Factory: factory, + Close: close, + } +} + func (b *BackendDS) PersistAliveConnection(aliveConn *AliveConnection) error { // get a connInfo from the pool oc := b.aliveConnPool.Get() @@ -773,6 +841,35 @@ func (b *BackendDS) PersistRequest(request *Request) error { return nil } +func (b *BackendDS) PersistKafkaEvent(ke *KafkaEvent) error { + // get a reqInfo from the pool + kafkaInfo := b.kafkaEventInfoPool.Get() + + // overwrite the reqInfo, all fields must be set in order to avoid conflict + kafkaInfo[0] = ke.StartTime + kafkaInfo[1] = ke.Latency + kafkaInfo[2] = ke.FromIP + kafkaInfo[3] = ke.FromType + kafkaInfo[4] = ke.FromUID + kafkaInfo[5] = ke.FromPort + kafkaInfo[6] = ke.ToIP + kafkaInfo[7] = ke.ToType + kafkaInfo[8] = ke.ToUID + kafkaInfo[9] = ke.ToPort + kafkaInfo[10] = ke.Topic + kafkaInfo[11] = ke.Partition + kafkaInfo[12] = ke.Key + kafkaInfo[13] = ke.Value + kafkaInfo[14] = ke.Type + kafkaInfo[15] = ke.Tls + kafkaInfo[16] = ke.Seq + kafkaInfo[17] = ke.Tid + + b.kafkaChanBuffer <- kafkaInfo + + return nil +} + func (b *BackendDS) PersistTraceEvent(trace *l7_req.TraceEvent) error { if trace == nil { return fmt.Errorf("trace event is nil") diff --git a/datastore/datastore.go b/datastore/datastore.go index d43d77a..5de1829 100644 --- a/datastore/datastore.go +++ b/datastore/datastore.go @@ -16,6 +16,8 @@ type DataStore interface { PersistRequest(request *Request) error + PersistKafkaEvent(request *KafkaEvent) error + PersistTraceEvent(trace *l7_req.TraceEvent) error PersistAliveConnection(trace *AliveConnection) error diff --git a/datastore/dto.go b/datastore/dto.go index b6bff10..5c54b3b 100644 --- a/datastore/dto.go +++ b/datastore/dto.go @@ -103,6 +103,74 @@ type AliveConnection struct { ToPort uint16 } +type DirectionalEvent interface { + SetFromUID(string) + SetFromIP(string) + SetFromType(string) + SetFromPort(uint16) + + SetToUID(string) + SetToIP(string) + SetToType(string) + SetToPort(uint16) + + ReverseDirection() +} + +type KafkaEvent struct { + StartTime int64 + Latency uint64 // in ns + FromIP string + FromType string + FromUID string + FromPort uint16 + ToIP string + ToType string + ToUID string + ToPort uint16 + Topic string + Partition uint32 + Key string + Value string + Type string // PUBLISH or CONSUME + Tls bool + Tid uint32 + Seq uint32 +} + +func (ke *KafkaEvent) SetFromUID(uid string) { + ke.FromUID = uid +} +func (ke *KafkaEvent) SetFromIP(ip string) { + ke.FromIP = ip +} +func (ke *KafkaEvent) SetFromType(typ string) { + ke.FromType = typ +} +func (ke *KafkaEvent) SetFromPort(port uint16) { + ke.FromPort = port +} + +func (ke *KafkaEvent) SetToUID(uid string) { + ke.ToUID = uid +} +func (ke *KafkaEvent) SetToIP(ip string) { + ke.ToIP = ip +} +func (ke *KafkaEvent) SetToType(typ string) { + ke.ToType = typ +} +func (ke *KafkaEvent) SetToPort(port uint16) { + ke.ToPort = port +} + +func (req *KafkaEvent) ReverseDirection() { + req.FromIP, req.ToIP = req.ToIP, req.FromIP + req.FromPort, req.ToPort = req.ToPort, req.FromPort + req.FromUID, req.ToUID = req.ToUID, req.FromUID + req.FromType, req.ToType = req.ToType, req.FromType +} + type Request struct { StartTime int64 Latency uint64 // in ns @@ -125,6 +193,39 @@ type Request struct { Seq uint32 } +func (r *Request) SetFromUID(uid string) { + r.FromUID = uid +} +func (r *Request) SetFromIP(ip string) { + r.FromIP = ip +} +func (r *Request) SetFromType(typ string) { + r.FromType = typ +} +func (r *Request) SetFromPort(port uint16) { + r.FromPort = port +} + +func (r *Request) SetToUID(uid string) { + r.ToUID = uid +} +func (r *Request) SetToIP(ip string) { + r.ToIP = ip +} +func (r *Request) SetToType(typ string) { + r.ToType = typ +} +func (r *Request) SetToPort(port uint16) { + r.ToPort = port +} + +func (req *Request) ReverseDirection() { + req.FromIP, req.ToIP = req.ToIP, req.FromIP + req.FromPort, req.ToPort = req.ToPort, req.FromPort + req.FromUID, req.ToUID = req.ToUID, req.FromUID + req.FromType, req.ToType = req.ToType, req.FromType +} + type BackendResponse struct { Msg string `json:"msg"` Errors []struct { diff --git a/datastore/payload.go b/datastore/payload.go index e50cf5c..5388193 100644 --- a/datastore/payload.go +++ b/datastore/payload.go @@ -157,6 +157,31 @@ type TracePayload struct { Traces []*TraceInfo `json:"traffic"` } +// 0) StartTime +// 1) Latency +// 2) Source IP +// 3) Source Type +// 4) Source ID +// 5) Source Port +// 6) Destination IP +// 7) Destination Type +// 8) Destination ID +// 9) Destination Port +// 10) Topic +// 11) Partition +// 12) Key +// 13) Value +// 14) Type +// 15) Encrypted (bool) +// 16) Seq +// 17) Tid +type KafkaEventInfo [18]interface{} + +type KafkaEventInfoPayload struct { + Metadata Metadata `json:"metadata"` + KafkaEvents []*KafkaEventInfo `json:"kafka_events"` +} + func convertPodToPodEvent(pod Pod, eventType string) PodEvent { return PodEvent{ UID: pod.UID, From 2f23949e4a0ec3dad50640fc98144d15540bbdcf Mon Sep 17 00:00:00 2001 From: kenanfarukcakir Date: Tue, 2 Jul 2024 16:16:48 +0000 Subject: [PATCH 12/24] refactor socket map --- aggregator/cluster.go | 29 ++++- aggregator/data.go | 145 +++++++++-------------- aggregator/sock_num_line.go | 64 +++++++++-- aggregator/socket.go | 224 ++++++++++++++++++++++-------------- 4 files changed, 272 insertions(+), 190 deletions(-) diff --git a/aggregator/cluster.go b/aggregator/cluster.go index 1eb02dd..ac1e020 100644 --- a/aggregator/cluster.go +++ b/aggregator/cluster.go @@ -1,9 +1,12 @@ package aggregator import ( + "context" + "fmt" "sync" "sync/atomic" + "github.com/ddosify/alaz/log" "k8s.io/apimachinery/pkg/types" ) @@ -34,8 +37,8 @@ func newClusterInfo(liveProcCount int) *ClusterInfo { // initialize sockMaps for i := range sockMaps { sockMaps[i] = &SocketMap{ - M: nil, // initialized on demand later mu: nil, + M: nil, } } ci.SocketMaps = sockMaps @@ -71,6 +74,12 @@ func (ci *ClusterInfo) SignalSocketMapCreation(pid uint32) { // in order to prevent race. func (ci *ClusterInfo) handleSocketMapCreation() { for pid := range ci.signalChan { + ctxPid := context.WithValue(context.Background(), log.LOG_CONTEXT, fmt.Sprint(pid)) + log.Logger.Debug(). + Ctx(ctxPid). + Str("func", "handleSocketMapCreation"). + Uint32("pid", pid). + Msg("") if ci.SocketMaps[pid].mu == nil { ci.muIndex.Add(1) i := (ci.muIndex.Load()) % uint64(len(ci.muArray)) @@ -78,16 +87,24 @@ func (ci *ClusterInfo) handleSocketMapCreation() { ci.SocketMaps[pid].mu = ci.muArray[i] ci.SocketMaps[pid].pid = pid ci.SocketMaps[pid].M = make(map[uint64]*SocketLine) - ci.SocketMaps[pid].fetchExistingSockets() + ci.SocketMaps[pid].waitingFds = make(chan uint64, 1000) + ci.SocketMaps[pid].processedFds = make(map[uint64]struct{}) + ci.SocketMaps[pid].closeCh = make(chan struct{}, 1) + ci.SocketMaps[pid].ctx = ctxPid + go ci.SocketMaps[pid].ProcessSocketLineCreationRequests() } } } func (ci *ClusterInfo) clearProc(pid uint32) { - if ci.SocketMaps[pid].mu == nil { + sm := ci.SocketMaps[pid] + if sm.mu == nil { return } - ci.SocketMaps[pid].mu.Lock() - ci.SocketMaps[pid].M = nil - ci.SocketMaps[pid].mu.Unlock() + + // stop waiting for socketline creation requests + sm.mu.Lock() + sm.closeCh <- struct{}{} + sm.M = nil + sm.mu.Unlock() } diff --git a/aggregator/data.go b/aggregator/data.go index 1bf9bb7..e5db183 100644 --- a/aggregator/data.go +++ b/aggregator/data.go @@ -173,7 +173,7 @@ func NewAggregator(parentCtx context.Context, k8sChan <-chan interface{}, a.clusterInfo.SignalSocketMapCreation(pid) } - go a.clearSocketLines(ctx) + // go a.clearSocketLines(ctx) // TODO: open here // go a.updateSocketMap(ctx) return a } @@ -262,10 +262,12 @@ func (a *Aggregator) Run() { // TODO: determine the number of workers with benchmarking cpuCount := runtime.NumCPU() - numWorker := 5 * cpuCount - if numWorker < 50 { - numWorker = 50 // min number - } + // numWorker := 5 * cpuCount + // if numWorker < 50 { + // numWorker = 5 // min number + // } + + numWorker := cpuCount a.ctxForKafka = context.WithValue(a.ctx, log.LOG_CONTEXT, KAFKA) @@ -344,7 +346,8 @@ func (a *Aggregator) processEbpfTcp(ctx context.Context) { switch bpfEvent.Type() { case tcp_state.TCP_CONNECT_EVENT: d := data.(*tcp_state.TcpConnectEvent) // copy data's value - a.processTcpConnect(d) + ctxPid := context.WithValue(a.ctx, log.LOG_CONTEXT, fmt.Sprint(d.Pid)) + a.processTcpConnect(ctxPid, d) } } } @@ -364,7 +367,8 @@ func (a *Aggregator) processEbpf(ctx context.Context) { switch bpfEvent.Type() { case l7_req.L7_EVENT: d := data.(*l7_req.L7Event) // copy data's value - a.processL7(ctx, d) + ctxPid := context.WithValue(a.ctx, log.LOG_CONTEXT, fmt.Sprint(d.Pid)) + a.processL7(ctxPid, d) case l7_req.TRACE_EVENT: d := data.(*l7_req.TraceEvent) rateLimiter := a.getRateLimiterForPid(d.Pid) @@ -438,7 +442,7 @@ func (a *Aggregator) signalTlsAttachment(pid uint32) { a.tlsAttachSignalChan <- pid } -func (a *Aggregator) processTcpConnect(d *tcp_state.TcpConnectEvent) { +func (a *Aggregator) processTcpConnect(ctx context.Context, d *tcp_state.TcpConnectEvent) { go a.signalTlsAttachment(d.Pid) if d.Type_ == tcp_state.EVENT_TCP_ESTABLISHED { @@ -453,19 +457,26 @@ func (a *Aggregator) processTcpConnect(d *tcp_state.TcpConnectEvent) { sockMap = a.clusterInfo.SocketMaps[d.Pid] var skLine *SocketLine - if sockMap.mu == nil { + if sockMap.mu == nil || sockMap.M == nil { + log.Logger.Warn().Ctx(ctx). + Uint32("pid", d.Pid).Str("func", "processTcpConnect").Str("event", "ESTABLISHED").Msg("socket map not initialized") return } - sockMap.mu.Lock() // lock for reading - if sockMap.M == nil { - sockMap.M = make(map[uint64]*SocketLine) - } - + sockMap.mu.RLock() skLine, ok = sockMap.M[d.Fd] + sockMap.mu.RUnlock() if !ok { - skLine = NewSocketLine(d.Pid, d.Fd) - sockMap.M[d.Fd] = skLine + go sockMap.SignalSocketLine(ctx, d.Fd) // signal for creation + for { + sockMap.mu.RLock() + skLine, ok = sockMap.M[d.Fd] + sockMap.mu.RUnlock() + + if !ok { + time.Sleep(100 * time.Millisecond) + } + } } skLine.AddValue( @@ -480,8 +491,6 @@ func (a *Aggregator) processTcpConnect(d *tcp_state.TcpConnectEvent) { }, ) - sockMap.mu.Unlock() // unlock for writing - } else if d.Type_ == tcp_state.EVENT_TCP_CLOSED { var sockMap *SocketMap var ok bool @@ -495,20 +504,16 @@ func (a *Aggregator) processTcpConnect(d *tcp_state.TcpConnectEvent) { var skLine *SocketLine - if sockMap.mu == nil { + if sockMap.mu == nil || sockMap.M == nil { + log.Logger.Warn().Ctx(ctx). + Uint32("pid", d.Pid).Str("func", "processTcpConnect").Str("event", "CLOSED").Msg("socket map not initialized") return } - sockMap.mu.Lock() // lock for reading - if sockMap.M == nil { - sockMap.M = make(map[uint64]*SocketLine) - } skLine, ok = sockMap.M[d.Fd] if !ok { - sockMap.mu.Unlock() // unlock for reading return } - sockMap.mu.Unlock() // unlock for reading // If connection is established before, add the close event skLine.AddValue( @@ -1083,7 +1088,8 @@ func (a *Aggregator) processAmqpEvent(ctx context.Context, d *l7_req.L7Event) { if skInfo == nil { log.Logger.Debug().Uint32("pid", d.Pid). Uint64("fd", d.Fd).Uint64("writeTime", d.WriteTimeNs). - Str("protocol", d.Protocol).Any("payload", string(d.Payload[:d.PayloadSize])).Msg("socket not found for amqp event") + Str("protocol", d.Protocol).Any("payload", string(d.Payload[:d.PayloadSize])). + Msg("socket not found for amqp event") return } @@ -1127,7 +1133,9 @@ func (a *Aggregator) processRedisEvent(ctx context.Context, d *l7_req.L7Event) { skInfo := a.findRelatedSocket(ctx, d) if skInfo == nil { - log.Logger.Debug().Uint32("pid", d.Pid). + log.Logger.Debug(). + Ctx(ctx). + Uint32("pid", d.Pid). Uint64("fd", d.Fd).Uint64("writeTime", d.WriteTimeNs). Str("protocol", d.Protocol).Any("payload", string(d.Payload[:d.PayloadSize])).Msg("socket not found for redis event") return @@ -1164,7 +1172,8 @@ func (a *Aggregator) processRedisEvent(ctx context.Context, d *l7_req.L7Event) { err = a.ds.PersistRequest(reqDto) if err != nil { - log.Logger.Error().Err(err).Msg("error persisting request") + log.Logger.Error().Ctx(ctx). + Err(err).Msg("error persisting request") } } @@ -1331,7 +1340,7 @@ func (a *Aggregator) processL7(ctx context.Context, d *l7_req.L7Event) { case l7_req.L7_PROTOCOL_AMQP: a.processAmqpEvent(ctx, d) case l7_req.L7_PROTOCOL_KAFKA: - a.processKafkaEvent(a.ctxForKafka, d) + a.processKafkaEvent(ctx, d) } } @@ -1388,31 +1397,15 @@ func (a *Aggregator) fetchSkInfo(ctx context.Context, skLine *SocketLine, d *l7_ return skInfo } -func (a *Aggregator) removeFromClusterInfo(pid uint32) { - sockMap := a.clusterInfo.SocketMaps[pid] - if sockMap.mu == nil { - return - } - sockMap.mu.Lock() - sockMap.M = nil - sockMap.mu.Unlock() -} - -func (a *Aggregator) fetchSocketMap(pid uint32) *SocketMap { - sockMap := a.clusterInfo.SocketMaps[pid] - - if sockMap.mu == nil { - return nil - } - - sockMap.mu.Lock() - if sockMap.M == nil { - sockMap.M = make(map[uint64]*SocketLine) - } - sockMap.mu.Unlock() - - return sockMap -} +// func (a *Aggregator) removeFromClusterInfo(pid uint32) { +// sockMap := a.clusterInfo.SocketMaps[pid] +// if sockMap.mu == nil { +// return +// } +// sockMap.mu.Lock() +// sockMap.M = nil +// sockMap.mu.Unlock() +// } // This is a mitigation for the case a tcp event is missed // func (a *Aggregator) updateSocketMap(ctx context.Context) { @@ -1483,49 +1476,21 @@ func (a *Aggregator) findRelatedSocket(ctx context.Context, d *l7_req.L7Event) * sockMap := a.clusterInfo.SocketMaps[d.Pid] // acquire sockMap lock - if sockMap.mu == nil { - - // process exec event did not come for this pid ? - // are we sure that it will come eventually, if we are sure of that - // we can wait for that event to come and then re-process incoming l7 event later. - - // only one goroutine can create socket maps structure. - // we can create a channel for that. - - // TODO - + if sockMap.mu == nil || sockMap.M == nil { + log.Logger.Warn().Ctx(ctx). + Int("pid", int(d.Pid)).Str("func", "findRelatedSocket").Msg("socket map not initialized") return nil } - sockMap.mu.Lock() - - if sockMap.M == nil { - sockMap.M = make(map[uint64]*SocketLine) - } - skLine, ok := sockMap.M[d.Fd] if !ok { - log.Logger.Debug().Ctx(ctx).Uint32("pid", d.Pid).Uint64("fd", d.Fd).Msg("create skLine...") // start new socket line, find already established connections - skLine = NewSocketLine(d.Pid, d.Fd) - sockMap.M[d.Fd] = skLine - } - - // release sockMap lock - sockMap.mu.Unlock() - - skInfo := a.fetchSkInfo(ctx, skLine, d) - - if skInfo == nil { - // log.Logger.Debug().Ctx(ctx).Uint32("pid", d.Pid). - // Uint64("fd", d.Fd).Uint64("writeTime", d.WriteTimeNs). - // Str("protocol", d.Protocol).Any("payload", string(d.Payload[:d.PayloadSize])).Msg("socket not found") - - // go check pid-fd for the socket - // a.fetchSocketOnNotFound(ctx, d) + go sockMap.SignalSocketLine(ctx, d.Fd) + // log.Logger.Warn().Ctx(ctx).Uint32("pid", d.Pid).Uint64("fd", d.Fd).Str("func", "findRelatedSocket").Msg("signal socket line creation called") + return nil // TODO: a retry queue for this event ? } - return skInfo + return a.fetchSkInfo(ctx, skLine, d) } func (a *Aggregator) parseSqlCommand(d *l7_req.L7Event) (string, error) { @@ -1682,7 +1647,7 @@ func (a *Aggregator) clearSocketLines(ctx context.Context) { // send open connections to datastore a.sendOpenConnection(skLine) // clear socket history - skLine.DeleteUnused() + // skLine.DeleteUnused() } }() } diff --git a/aggregator/sock_num_line.go b/aggregator/sock_num_line.go index d641f74..6b6a6c9 100644 --- a/aggregator/sock_num_line.go +++ b/aggregator/sock_num_line.go @@ -3,6 +3,7 @@ package aggregator import ( "bufio" "bytes" + "context" "encoding/binary" "encoding/hex" "fmt" @@ -29,26 +30,58 @@ type SocketLine struct { mu sync.RWMutex pid uint32 fd uint64 - Values []TimestampedSocket + Values []*TimestampedSocket + + ctx context.Context } -func NewSocketLine(pid uint32, fd uint64) *SocketLine { +func NewSocketLine(ctx context.Context, pid uint32, fd uint64, fetch bool) *SocketLine { skLine := &SocketLine{ mu: sync.RWMutex{}, pid: pid, fd: fd, - Values: make([]TimestampedSocket, 0), + Values: make([]*TimestampedSocket, 0), + ctx: ctx, } + if fetch { + err := skLine.getConnectionInfo() // populate + if err != nil { + log.Logger.Error().Ctx(ctx).Err(err).Msg("getConnectionInfo failed") + } + } + log.Logger.Debug().Ctx(ctx).Msg("returning from NewSocketLine") return skLine } +// clears all socket history +func (nl *SocketLine) ClearAll() { + clear(nl.Values) // sets all values to zero values (nil in this case), we do this for garbage collection + nl.Values = nl.Values[:0] // change len +} + func (nl *SocketLine) AddValue(timestamp uint64, sockInfo *SockInfo) { + log.Logger.Debug().Ctx(nl.ctx). + Any("pid", sockInfo.Pid). + Any("fd", sockInfo.Fd). + Any("ts", timestamp). + Msg("AddValue-start") nl.mu.Lock() defer nl.mu.Unlock() + log.Logger.Debug().Ctx(nl.ctx). + Any("pid", sockInfo.Pid). + Any("fd", sockInfo.Fd). + Any("ts", timestamp). + Msg("AddValue-start1") + // ignore close events if sockInfo == nil { + log.Logger.Debug().Ctx(nl.ctx). + Any("pid", sockInfo.Pid). + Any("fd", sockInfo.Fd). + Any("ts", timestamp). + Msg("AddValue-1") return } @@ -56,11 +89,21 @@ func (nl *SocketLine) AddValue(timestamp uint64, sockInfo *SockInfo) { if len(nl.Values) > 0 { last := nl.Values[len(nl.Values)-1].SockInfo if last != nil && last.Saddr == sockInfo.Saddr && last.Sport == sockInfo.Sport && last.Daddr == sockInfo.Daddr && last.Dport == sockInfo.Dport { + log.Logger.Debug().Ctx(nl.ctx). + Any("pid", sockInfo.Pid). + Any("fd", sockInfo.Fd). + Any("ts", timestamp). + Msg("AddValue-2") return } } - nl.Values = insertIntoSortedSlice(nl.Values, TimestampedSocket{Timestamp: timestamp, SockInfo: sockInfo}) + log.Logger.Debug().Ctx(nl.ctx). + Any("pid", sockInfo.Pid). + Any("fd", sockInfo.Fd). + Any("ts", timestamp). + Msg("AddValue-end") + nl.Values = insertIntoSortedSlice(nl.Values, &TimestampedSocket{Timestamp: timestamp, SockInfo: sockInfo}) } func (nl *SocketLine) GetValue(timestamp uint64) (*SockInfo, error) { @@ -110,7 +153,7 @@ func (nl *SocketLine) DeleteUnused() { // if two open sockets are alined, delete the first one // in case first ones close event did not arrive - result := make([]TimestampedSocket, 0) + result := make([]*TimestampedSocket, 0) i := 0 for i < len(nl.Values)-1 { if nl.Values[i].SockInfo != nil && nl.Values[i+1].SockInfo != nil { @@ -251,13 +294,13 @@ const ( stateListen = "0A" ) -func insertIntoSortedSlice(sortedSlice []TimestampedSocket, newItem TimestampedSocket) []TimestampedSocket { +func insertIntoSortedSlice(sortedSlice []*TimestampedSocket, newItem *TimestampedSocket) []*TimestampedSocket { idx := sort.Search(len(sortedSlice), func(i int) bool { return sortedSlice[i].Timestamp >= newItem.Timestamp }) // Insert the new item at the correct position. - sortedSlice = append(sortedSlice, TimestampedSocket{}) + sortedSlice = append(sortedSlice, &TimestampedSocket{}) copy(sortedSlice[idx+1:], sortedSlice[idx:]) sortedSlice[idx] = newItem @@ -340,8 +383,8 @@ func parseTcpLine(line string) (localIP string, localPort int, remoteIP string, } func (nl *SocketLine) getConnectionInfo() error { - nl.mu.Lock() - defer nl.mu.Unlock() + // nl.mu.Lock() + // defer nl.mu.Unlock() inode, err := getInodeFromFD(fmt.Sprintf("%d", nl.pid), fmt.Sprintf("%d", nl.fd)) if err != nil { @@ -366,7 +409,8 @@ func (nl *SocketLine) getConnectionInfo() error { // add to socket line // convert to bpf time - log.Logger.Debug().Msgf("Adding socket line read from user space %v", skInfo) + log.Logger.Debug().Ctx(nl.ctx).Msgf("Adding socket line read from user space %v", skInfo) + nl.ClearAll() // clear all previous records nl.AddValue(convertUserTimeToKernelTime(uint64(time.Now().UnixNano())), skInfo) return nil } diff --git a/aggregator/socket.go b/aggregator/socket.go index 455d911..2491cb1 100644 --- a/aggregator/socket.go +++ b/aggregator/socket.go @@ -1,12 +1,10 @@ package aggregator import ( - "fmt" - "os" - "path" - "strconv" - "strings" + "context" "sync" + + "github.com/ddosify/alaz/log" ) // We need to keep track of the following @@ -23,99 +21,157 @@ type SockInfo struct { // type SocketMap type SocketMap struct { - mu *sync.RWMutex - pid uint32 - M map[uint64]*SocketLine `json:"fdToSockLine"` // fd -> SockLine + mu *sync.RWMutex + pid uint32 + M map[uint64]*SocketLine `json:"fdToSockLine"` // fd -> SockLine + waitingFds chan uint64 + + processedFds map[uint64]struct{} + closeCh chan struct{} + ctx context.Context +} + +// only one worker can create socket lines for a particular process(socketmap) +func (sm *SocketMap) ProcessSocketLineCreationRequests() { + for { + select { + case <-sm.closeCh: + return + case fd := <-sm.waitingFds: + log.Logger.Debug().Ctx(sm.ctx). + Msgf("pid=%d,fd=%d came for socket line creation", sm.pid, fd) + if _, ok := sm.M[fd]; !ok { + sm.createSocketLine(fd) + log.Logger.Info().Ctx(sm.ctx). + Uint32("pid", sm.pid). + Uint64("fd", fd). + Msgf("created socket line for fd:%d", fd) + } + } + } +} + +func (sm *SocketMap) SignalSocketLine(ctx context.Context, fd uint64) { + if _, ok := sm.processedFds[fd]; ok { + return + } + log.Logger.Debug().Ctx(ctx).Uint32("pid", sm.pid).Uint64("fd", fd).Msg("signaling socket creation..") + sm.processedFds[fd] = struct{}{} + sm.waitingFds <- fd +} + +func (sm *SocketMap) createSocketLine(fd uint64) { + // TODO: get fetch boolean + log.Logger.Debug().Ctx(sm.ctx). + Uint32("pid", sm.pid). + Uint64("fd", fd). + Msg("createSocketLine called..") + skLine := NewSocketLine(sm.ctx, sm.pid, fd, true) + log.Logger.Debug().Ctx(sm.ctx). + Uint32("pid", sm.pid). + Uint64("fd", fd). + Msg("createSocketLine acquiring lock..") + sm.mu.Lock() + log.Logger.Debug().Ctx(sm.ctx). + Uint32("pid", sm.pid). + Uint64("fd", fd). + Msg("createSocketLine inside lock..") + sm.M[fd] = skLine + sm.mu.Unlock() + log.Logger.Debug().Ctx(sm.ctx). + Uint32("pid", sm.pid). + Uint64("fd", fd). + Msg("createSocketLine ended..") } // get all tcp sockets for the pid // iterate through all sockets // create a new socket line for each socket // add it to the socket map -func (sm *SocketMap) fetchExistingSockets() { - socks := map[string]sock{} +// func (sm *SocketMap) fetchExistingSockets() { +// socks := map[string]sock{} - // Get the sockets for the process. - var err error - for _, f := range []string{"tcp", "tcp6"} { - sockPath := strings.Join([]string{"/proc", fmt.Sprint(sm.pid), "net", f}, "/") +// // Get the sockets for the process. +// var err error +// for _, f := range []string{"tcp", "tcp6"} { +// sockPath := strings.Join([]string{"/proc", fmt.Sprint(sm.pid), "net", f}, "/") - ss, err := readSockets(sockPath) - if err != nil { - continue - } +// ss, err := readSockets(sockPath) +// if err != nil { +// continue +// } - for _, s := range ss { - socks[s.Inode] = sock{TcpSocket: s} - } - } +// for _, s := range ss { +// socks[s.Inode] = sock{TcpSocket: s} +// } +// } - // Get the file descriptors for the process. - fdDir := strings.Join([]string{"/proc", fmt.Sprint(sm.pid), "fd"}, "/") - fdEntries, err := os.ReadDir(fdDir) - if err != nil { - return - } +// // Get the file descriptors for the process. +// fdDir := strings.Join([]string{"/proc", fmt.Sprint(sm.pid), "fd"}, "/") +// fdEntries, err := os.ReadDir(fdDir) +// if err != nil { +// return +// } - fds := make([]Fd, 0, len(fdEntries)) - for _, entry := range fdEntries { - fd, err := strconv.ParseUint(entry.Name(), 10, 64) - if err != nil { - continue - } - dest, err := os.Readlink(path.Join(fdDir, entry.Name())) - if err != nil { - continue - } - var socketInode string - if strings.HasPrefix(dest, "socket:[") && strings.HasSuffix(dest, "]") { - socketInode = dest[len("socket:[") : len(dest)-1] - } - fds = append(fds, Fd{Fd: fd, Dest: dest, SocketInode: socketInode}) - } +// fds := make([]Fd, 0, len(fdEntries)) +// for _, entry := range fdEntries { +// fd, err := strconv.ParseUint(entry.Name(), 10, 64) +// if err != nil { +// continue +// } +// dest, err := os.Readlink(path.Join(fdDir, entry.Name())) +// if err != nil { +// continue +// } +// var socketInode string +// if strings.HasPrefix(dest, "socket:[") && strings.HasSuffix(dest, "]") { +// socketInode = dest[len("socket:[") : len(dest)-1] +// } +// fds = append(fds, Fd{Fd: fd, Dest: dest, SocketInode: socketInode}) +// } - // Match the sockets to the file descriptors. - for _, fd := range fds { - if fd.SocketInode != "" { - // add to values - s := socks[fd.SocketInode].TcpSocket - sockInfo := &SockInfo{ - Pid: sm.pid, - Fd: fd.Fd, - Saddr: s.SAddr.IP().String(), - Sport: s.SAddr.Port(), - Daddr: s.DAddr.IP().String(), - Dport: s.DAddr.Port(), - } +// // Match the sockets to the file descriptors. +// for _, fd := range fds { +// if fd.SocketInode != "" { +// // add to values +// s := socks[fd.SocketInode].TcpSocket +// sockInfo := &SockInfo{ +// Pid: sm.pid, +// Fd: fd.Fd, +// Saddr: s.SAddr.IP().String(), +// Sport: s.SAddr.Port(), +// Daddr: s.DAddr.IP().String(), +// Dport: s.DAddr.Port(), +// } - if sockInfo.Saddr == "zero IP" || sockInfo.Daddr == "zero IP" || sockInfo.Sport == 0 || sockInfo.Dport == 0 { - continue - } +// if sockInfo.Saddr == "zero IP" || sockInfo.Daddr == "zero IP" || sockInfo.Sport == 0 || sockInfo.Dport == 0 { +// continue +// } - skLine := NewSocketLine(sm.pid, fd.Fd) - skLine.AddValue(0, sockInfo) +// skLine := NewSocketLine(sm.pid, fd.Fd) +// skLine.AddValue(0, sockInfo) - if sm.mu == nil { - return - } +// if sm.mu == nil { +// return +// } - sm.mu.Lock() - if sm.M == nil { - sm.M = make(map[uint64]*SocketLine) - } - sm.M[fd.Fd] = skLine - sm.mu.Unlock() - } - } -} +// sm.mu.Lock() +// if sm.M == nil { +// sm.M = make(map[uint64]*SocketLine) +// } +// sm.M[fd.Fd] = skLine +// sm.mu.Unlock() +// } +// } +// } -func (sm *SocketMap) retrieveSocket(fd uint64) { - sm.mu.Lock() - if sl, ok := sm.M[fd]; ok { - sl.getConnectionInfo() - } else { - sm.M[fd] = NewSocketLine(sm.pid, fd) - sl.getConnectionInfo() - } - sm.mu.Unlock() -} +// func (sm *SocketMap) retrieveSocket(fd uint64) { +// sm.mu.Lock() +// if sl, ok := sm.M[fd]; ok { +// sl.getConnectionInfo() +// } else { +// sm.M[fd] = NewSocketLine(sm.pid, fd) +// sl.getConnectionInfo() +// } +// sm.mu.Unlock() +// } From d74a5c5d1bb7ec95e0d927aab2940d96af821293 Mon Sep 17 00:00:00 2001 From: kenanfarukcakir Date: Tue, 2 Jul 2024 16:16:58 +0000 Subject: [PATCH 13/24] upgrade go version --- Dockerfile | 2 +- Dockerfile.default | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index 032e960..0970c7d 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM golang:1.22.1-bullseye as builder +FROM golang:1.22.4-bullseye AS builder WORKDIR /app COPY . ./ RUN apt update diff --git a/Dockerfile.default b/Dockerfile.default index 6e22ed9..947b8df 100644 --- a/Dockerfile.default +++ b/Dockerfile.default @@ -1,4 +1,4 @@ -FROM golang:1.22.1-bullseye as builder +FROM golang:1.22.4-bullseye AS builder WORKDIR /app COPY . ./ RUN apt update From bed2d6006fe3d6d33cfea305b39d9a9a01441675 Mon Sep 17 00:00:00 2001 From: kenanfarukcakir Date: Wed, 3 Jul 2024 14:54:07 +0000 Subject: [PATCH 14/24] refactor socket creation logic --- aggregator/cluster.go | 53 +++++----- aggregator/data.go | 187 +++++++++++++----------------------- aggregator/sock_num_line.go | 59 ++++++------ aggregator/socket.go | 137 ++++---------------------- datastore/backend.go | 4 +- 5 files changed, 145 insertions(+), 295 deletions(-) diff --git a/aggregator/cluster.go b/aggregator/cluster.go index ac1e020..32958eb 100644 --- a/aggregator/cluster.go +++ b/aggregator/cluster.go @@ -17,7 +17,8 @@ type ClusterInfo struct { // Pid -> SocketMap // pid -> fd -> {saddr, sport, daddr, dport} - SocketMaps []*SocketMap // index symbolizes pid + SocketMaps []*SocketMap // index symbolizes pid + socketMapsmu sync.Mutex // Below mutexes guard socketMaps, set to mu inside SocketMap struct // Used to find the correct mutex for the process, some pids can share the same mutex @@ -34,13 +35,6 @@ func newClusterInfo(liveProcCount int) *ClusterInfo { } ci.signalChan = make(chan uint32) sockMaps := make([]*SocketMap, maxPid+1) // index=pid - // initialize sockMaps - for i := range sockMaps { - sockMaps[i] = &SocketMap{ - mu: nil, - M: nil, - } - } ci.SocketMaps = sockMaps ci.muIndex = atomic.Uint64{} @@ -75,30 +69,34 @@ func (ci *ClusterInfo) SignalSocketMapCreation(pid uint32) { func (ci *ClusterInfo) handleSocketMapCreation() { for pid := range ci.signalChan { ctxPid := context.WithValue(context.Background(), log.LOG_CONTEXT, fmt.Sprint(pid)) - log.Logger.Debug(). - Ctx(ctxPid). - Str("func", "handleSocketMapCreation"). - Uint32("pid", pid). - Msg("") - if ci.SocketMaps[pid].mu == nil { - ci.muIndex.Add(1) - i := (ci.muIndex.Load()) % uint64(len(ci.muArray)) - ci.muArray[i] = &sync.RWMutex{} - ci.SocketMaps[pid].mu = ci.muArray[i] - ci.SocketMaps[pid].pid = pid - ci.SocketMaps[pid].M = make(map[uint64]*SocketLine) - ci.SocketMaps[pid].waitingFds = make(chan uint64, 1000) - ci.SocketMaps[pid].processedFds = make(map[uint64]struct{}) - ci.SocketMaps[pid].closeCh = make(chan struct{}, 1) - ci.SocketMaps[pid].ctx = ctxPid - go ci.SocketMaps[pid].ProcessSocketLineCreationRequests() + + if ci.SocketMaps[pid] != nil { + continue } + + sockMap := &SocketMap{ + mu: nil, // set below + pid: pid, + M: map[uint64]*SocketLine{}, + waitingFds: make(chan uint64, 1000), + processedFds: map[uint64]struct{}{}, + processedFdsmu: sync.RWMutex{}, + closeCh: make(chan struct{}, 1), + ctx: ctxPid, + } + + ci.muIndex.Add(1) + i := (ci.muIndex.Load()) % uint64(len(ci.muArray)) + ci.muArray[i] = &sync.RWMutex{} + sockMap.mu = ci.muArray[i] + ci.SocketMaps[pid] = sockMap + go sockMap.ProcessSocketLineCreationRequests() } } func (ci *ClusterInfo) clearProc(pid uint32) { sm := ci.SocketMaps[pid] - if sm.mu == nil { + if sm == nil { return } @@ -107,4 +105,7 @@ func (ci *ClusterInfo) clearProc(pid uint32) { sm.closeCh <- struct{}{} sm.M = nil sm.mu.Unlock() + + // reset + ci.SocketMaps[pid] = nil } diff --git a/aggregator/data.go b/aggregator/data.go index e5db183..3f23754 100644 --- a/aggregator/data.go +++ b/aggregator/data.go @@ -62,10 +62,10 @@ type Aggregator struct { ctxForKafka context.Context // listen to events from different sources - k8sChan <-chan interface{} - ebpfChan <-chan interface{} - ebpfProcChan <-chan interface{} - ebpfTcpChan <-chan interface{} + k8sChan chan interface{} + ebpfChan chan interface{} + ebpfProcChan chan interface{} + ebpfTcpChan chan interface{} tlsAttachSignalChan chan uint32 // store the service map @@ -136,7 +136,7 @@ func init() { } } -func NewAggregator(parentCtx context.Context, k8sChan <-chan interface{}, +func NewAggregator(parentCtx context.Context, k8sChan chan interface{}, events chan interface{}, procEvents chan interface{}, tcpEvents chan interface{}, @@ -455,28 +455,29 @@ func (a *Aggregator) processTcpConnect(ctx context.Context, d *tcp_state.TcpConn var ok bool sockMap = a.clusterInfo.SocketMaps[d.Pid] - var skLine *SocketLine - - if sockMap.mu == nil || sockMap.M == nil { + if sockMap == nil { + // signal socket map creation and requeue event log.Logger.Warn().Ctx(ctx). Uint32("pid", d.Pid).Str("func", "processTcpConnect").Str("event", "ESTABLISHED").Msg("socket map not initialized") + + go a.clusterInfo.SignalSocketMapCreation(d.Pid) + a.ebpfTcpChan <- d return } + var skLine *SocketLine + // if sockMap.mu == nil || sockMap.M == nil { + // return + // } + sockMap.mu.RLock() skLine, ok = sockMap.M[d.Fd] sockMap.mu.RUnlock() if !ok { go sockMap.SignalSocketLine(ctx, d.Fd) // signal for creation - for { - sockMap.mu.RLock() - skLine, ok = sockMap.M[d.Fd] - sockMap.mu.RUnlock() - - if !ok { - time.Sleep(100 * time.Millisecond) - } - } + // requeue connect event + a.ebpfTcpChan <- d + return } skLine.AddValue( @@ -490,59 +491,59 @@ func (a *Aggregator) processTcpConnect(ctx context.Context, d *tcp_state.TcpConn Dport: d.DPort, }, ) + } + // } else if d.Type_ == tcp_state.EVENT_TCP_CLOSED { + // var sockMap *SocketMap + // var ok bool - } else if d.Type_ == tcp_state.EVENT_TCP_CLOSED { - var sockMap *SocketMap - var ok bool - - // filter out localhost connections - if d.SAddr == "127.0.0.1" || d.DAddr == "127.0.0.1" { - return - } + // // filter out localhost connections + // if d.SAddr == "127.0.0.1" || d.DAddr == "127.0.0.1" { + // return + // } - sockMap = a.clusterInfo.SocketMaps[d.Pid] + // sockMap = a.clusterInfo.SocketMaps[d.Pid] - var skLine *SocketLine + // var skLine *SocketLine - if sockMap.mu == nil || sockMap.M == nil { - log.Logger.Warn().Ctx(ctx). - Uint32("pid", d.Pid).Str("func", "processTcpConnect").Str("event", "CLOSED").Msg("socket map not initialized") - return - } + // if sockMap.mu == nil || sockMap.M == nil { + // log.Logger.Warn().Ctx(ctx). + // Uint32("pid", d.Pid).Str("func", "processTcpConnect").Str("event", "CLOSED").Msg("socket map not initialized") + // return + // } - skLine, ok = sockMap.M[d.Fd] - if !ok { - return - } + // skLine, ok = sockMap.M[d.Fd] + // if !ok { + // return + // } - // If connection is established before, add the close event - skLine.AddValue( - d.Timestamp, // get connection close timestamp from ebpf - nil, // closed - ) + // // If connection is established before, add the close event + // skLine.AddValue( + // d.Timestamp, // get connection close timestamp from ebpf + // nil, // closed + // ) - connKey := a.getConnKey(d.Pid, d.Fd) + // connKey := a.getConnKey(d.Pid, d.Fd) - // remove h2Parser if exists - a.h2ParserMu.Lock() - h2Parser, ok := a.h2Parsers[connKey] - if ok { - h2Parser.clientHpackDecoder.Close() - h2Parser.serverHpackDecoder.Close() - } - delete(a.h2Parsers, connKey) - a.h2ParserMu.Unlock() - - // remove pgStmt if exists - a.pgStmtsMu.Lock() - for key, _ := range a.pgStmts { - if strings.HasPrefix(key, connKey) { - delete(a.pgStmts, key) - } - } - a.pgStmtsMu.Unlock() + // // remove h2Parser if exists + // a.h2ParserMu.Lock() + // h2Parser, ok := a.h2Parsers[connKey] + // if ok { + // h2Parser.clientHpackDecoder.Close() + // h2Parser.serverHpackDecoder.Close() + // } + // delete(a.h2Parsers, connKey) + // a.h2ParserMu.Unlock() + + // // remove pgStmt if exists + // a.pgStmtsMu.Lock() + // for key, _ := range a.pgStmts { + // if strings.HasPrefix(key, connKey) { + // delete(a.pgStmts, key) + // } + // } + // a.pgStmtsMu.Unlock() - } + // } } func parseHttpPayload(request string) (method string, path string, httpVersion string, hostHeader string) { @@ -1319,15 +1320,6 @@ func (a *Aggregator) processPostgresEvent(ctx context.Context, d *l7_req.L7Event } func (a *Aggregator) processL7(ctx context.Context, d *l7_req.L7Event) { - // // other protocols events come as whole, but http2 events come as frames - // // we need to aggregate frames to get the whole request - // defer func() { - // if r := recover(); r != nil { - // // TODO: we need to fix this properly - // log.Logger.Debug().Msgf("probably a http2 frame sent on a closed chan: %v", r) - // } - // }() - switch d.Protocol { case l7_req.L7_PROTOCOL_HTTP2: a.processHttp2Event(d) @@ -1397,16 +1389,6 @@ func (a *Aggregator) fetchSkInfo(ctx context.Context, skLine *SocketLine, d *l7_ return skInfo } -// func (a *Aggregator) removeFromClusterInfo(pid uint32) { -// sockMap := a.clusterInfo.SocketMaps[pid] -// if sockMap.mu == nil { -// return -// } -// sockMap.mu.Lock() -// sockMap.M = nil -// sockMap.mu.Unlock() -// } - // This is a mitigation for the case a tcp event is missed // func (a *Aggregator) updateSocketMap(ctx context.Context) { // ticker := time.NewTicker(3 * time.Minute) @@ -1438,56 +1420,23 @@ func (a *Aggregator) fetchSkInfo(ctx context.Context, skLine *SocketLine, d *l7_ // } // } -// func (a *Aggregator) fetchSocketOnNotFound(ctx context.Context, d *l7_req.L7Event) bool { -// a.liveProcessesMu.Lock() - -// a.liveProcesses[d.Pid] = struct{}{} -// sockMap := a.clusterInfo.SocketMaps[d.Pid] -// // pid does not exists -// // acquire sockMap lock - -// // in case of reference to mu is nil, pid exec event did not come yet -// // create a new mutex for the pid -// // to avoid race around the mutex, we need to lock the liveProcessesMu -// if sockMap.mu == nil { -// log.Logger.Debug().Uint32("pid", d.Pid).Uint64("fd", d.Fd).Msg("fetchSocketOnNotFound: pid not found") - -// a.muIndex.Add(1) -// a.muArray[(a.muIndex.Load())%uint64(len(a.muArray))] = &sync.RWMutex{} -// a.clusterInfo.SocketMaps[d.Pid].mu = a.muArray[(a.muIndex.Load())%uint64(len(a.muArray))] -// } -// // a.liveProcessesMu.Unlock() - -// if a.clusterInfo.SocketMaps[pid].mu. - -// // go try reading from kernel files -// err := sockMap.M[d.Fd].getConnectionInfo() -// if err != nil { -// log.Logger.Debug().Uint32("pid", d.Pid).Uint64("fd", d.Fd).Err(err).Msg("fetchSocketOnNotFound: failed to get connection info") -// return false -// } else { -// log.Logger.Debug().Uint32("pid", d.Pid).Uint64("fd", d.Fd).Msg("fetchSocketOnNotFound: connection info found") -// return true -// } - -// } - func (a *Aggregator) findRelatedSocket(ctx context.Context, d *l7_req.L7Event) *SockInfo { sockMap := a.clusterInfo.SocketMaps[d.Pid] // acquire sockMap lock - - if sockMap.mu == nil || sockMap.M == nil { + if sockMap == nil { + go a.clusterInfo.SignalSocketMapCreation(d.Pid) log.Logger.Warn().Ctx(ctx). Int("pid", int(d.Pid)).Str("func", "findRelatedSocket").Msg("socket map not initialized") return nil } + sockMap.mu.RLock() skLine, ok := sockMap.M[d.Fd] + sockMap.mu.RUnlock() if !ok { // start new socket line, find already established connections go sockMap.SignalSocketLine(ctx, d.Fd) - // log.Logger.Warn().Ctx(ctx).Uint32("pid", d.Pid).Uint64("fd", d.Fd).Str("func", "findRelatedSocket").Msg("signal socket line creation called") - return nil // TODO: a retry queue for this event ? + return nil } return a.fetchSkInfo(ctx, skLine, d) @@ -1635,6 +1584,7 @@ func (a *Aggregator) sendOpenConnection(sl *SocketLine) { } } +// TODO: connection send is made here, sendOpenConnection must be called, refactor this func and its calling place func (a *Aggregator) clearSocketLines(ctx context.Context) { ticker := time.NewTicker(120 * time.Second) skLineCh := make(chan *SocketLine, 1000) @@ -1655,6 +1605,7 @@ func (a *Aggregator) clearSocketLines(ctx context.Context) { for range ticker.C { for _, sockMap := range a.clusterInfo.SocketMaps { + // TODO: check here if sockMap.mu == nil { continue } diff --git a/aggregator/sock_num_line.go b/aggregator/sock_num_line.go index 6b6a6c9..8701b24 100644 --- a/aggregator/sock_num_line.go +++ b/aggregator/sock_num_line.go @@ -50,7 +50,6 @@ func NewSocketLine(ctx context.Context, pid uint32, fd uint64, fetch bool) *Sock log.Logger.Error().Ctx(ctx).Err(err).Msg("getConnectionInfo failed") } } - log.Logger.Debug().Ctx(ctx).Msg("returning from NewSocketLine") return skLine } @@ -61,48 +60,48 @@ func (nl *SocketLine) ClearAll() { } func (nl *SocketLine) AddValue(timestamp uint64, sockInfo *SockInfo) { - log.Logger.Debug().Ctx(nl.ctx). - Any("pid", sockInfo.Pid). - Any("fd", sockInfo.Fd). - Any("ts", timestamp). - Msg("AddValue-start") - nl.mu.Lock() - defer nl.mu.Unlock() - - log.Logger.Debug().Ctx(nl.ctx). - Any("pid", sockInfo.Pid). - Any("fd", sockInfo.Fd). - Any("ts", timestamp). - Msg("AddValue-start1") - // ignore close events if sockInfo == nil { - log.Logger.Debug().Ctx(nl.ctx). - Any("pid", sockInfo.Pid). - Any("fd", sockInfo.Fd). - Any("ts", timestamp). - Msg("AddValue-1") + // log.Logger.Debug().Ctx(nl.ctx). + // Any("pid", nl.pid). + // Any("fd", nl.fd). + // Any("ts", timestamp). + // Msg("AddValue-1") return } + // log.Logger.Debug().Ctx(nl.ctx). + // Any("pid", sockInfo.Pid). + // Any("fd", sockInfo.Fd). + // Any("ts", timestamp). + // Msg("AddValue-start") + nl.mu.Lock() + defer nl.mu.Unlock() + + // log.Logger.Debug().Ctx(nl.ctx). + // Any("pid", sockInfo.Pid). + // Any("fd", sockInfo.Fd). + // Any("ts", timestamp). + // Msg("AddValue-start1") + // if last element is equal to the current element, ignore if len(nl.Values) > 0 { last := nl.Values[len(nl.Values)-1].SockInfo if last != nil && last.Saddr == sockInfo.Saddr && last.Sport == sockInfo.Sport && last.Daddr == sockInfo.Daddr && last.Dport == sockInfo.Dport { - log.Logger.Debug().Ctx(nl.ctx). - Any("pid", sockInfo.Pid). - Any("fd", sockInfo.Fd). - Any("ts", timestamp). - Msg("AddValue-2") + // log.Logger.Debug().Ctx(nl.ctx). + // Any("pid", sockInfo.Pid). + // Any("fd", sockInfo.Fd). + // Any("ts", timestamp). + // Msg("AddValue-2") return } } - log.Logger.Debug().Ctx(nl.ctx). - Any("pid", sockInfo.Pid). - Any("fd", sockInfo.Fd). - Any("ts", timestamp). - Msg("AddValue-end") + // log.Logger.Debug().Ctx(nl.ctx). + // Any("pid", sockInfo.Pid). + // Any("fd", sockInfo.Fd). + // Any("ts", timestamp). + // Msg("AddValue-end") nl.Values = insertIntoSortedSlice(nl.Values, &TimestampedSocket{Timestamp: timestamp, SockInfo: sockInfo}) } diff --git a/aggregator/socket.go b/aggregator/socket.go index 2491cb1..b8e917f 100644 --- a/aggregator/socket.go +++ b/aggregator/socket.go @@ -26,9 +26,10 @@ type SocketMap struct { M map[uint64]*SocketLine `json:"fdToSockLine"` // fd -> SockLine waitingFds chan uint64 - processedFds map[uint64]struct{} - closeCh chan struct{} - ctx context.Context + processedFds map[uint64]struct{} + processedFdsmu sync.RWMutex + closeCh chan struct{} + ctx context.Context } // only one worker can create socket lines for a particular process(socketmap) @@ -38,11 +39,9 @@ func (sm *SocketMap) ProcessSocketLineCreationRequests() { case <-sm.closeCh: return case fd := <-sm.waitingFds: - log.Logger.Debug().Ctx(sm.ctx). - Msgf("pid=%d,fd=%d came for socket line creation", sm.pid, fd) if _, ok := sm.M[fd]; !ok { - sm.createSocketLine(fd) - log.Logger.Info().Ctx(sm.ctx). + sm.createSocketLine(fd, true) + log.Logger.Debug().Ctx(sm.ctx). Uint32("pid", sm.pid). Uint64("fd", fd). Msgf("created socket line for fd:%d", fd) @@ -52,126 +51,24 @@ func (sm *SocketMap) ProcessSocketLineCreationRequests() { } func (sm *SocketMap) SignalSocketLine(ctx context.Context, fd uint64) { + sm.processedFdsmu.RLock() if _, ok := sm.processedFds[fd]; ok { + sm.processedFdsmu.RUnlock() return + } else { + sm.processedFdsmu.RUnlock() + + sm.processedFdsmu.Lock() + sm.processedFds[fd] = struct{}{} + sm.processedFdsmu.Unlock() } - log.Logger.Debug().Ctx(ctx).Uint32("pid", sm.pid).Uint64("fd", fd).Msg("signaling socket creation..") - sm.processedFds[fd] = struct{}{} + sm.waitingFds <- fd } -func (sm *SocketMap) createSocketLine(fd uint64) { - // TODO: get fetch boolean - log.Logger.Debug().Ctx(sm.ctx). - Uint32("pid", sm.pid). - Uint64("fd", fd). - Msg("createSocketLine called..") - skLine := NewSocketLine(sm.ctx, sm.pid, fd, true) - log.Logger.Debug().Ctx(sm.ctx). - Uint32("pid", sm.pid). - Uint64("fd", fd). - Msg("createSocketLine acquiring lock..") +func (sm *SocketMap) createSocketLine(fd uint64, fetch bool) { + skLine := NewSocketLine(sm.ctx, sm.pid, fd, fetch) sm.mu.Lock() - log.Logger.Debug().Ctx(sm.ctx). - Uint32("pid", sm.pid). - Uint64("fd", fd). - Msg("createSocketLine inside lock..") sm.M[fd] = skLine sm.mu.Unlock() - log.Logger.Debug().Ctx(sm.ctx). - Uint32("pid", sm.pid). - Uint64("fd", fd). - Msg("createSocketLine ended..") } - -// get all tcp sockets for the pid -// iterate through all sockets -// create a new socket line for each socket -// add it to the socket map -// func (sm *SocketMap) fetchExistingSockets() { -// socks := map[string]sock{} - -// // Get the sockets for the process. -// var err error -// for _, f := range []string{"tcp", "tcp6"} { -// sockPath := strings.Join([]string{"/proc", fmt.Sprint(sm.pid), "net", f}, "/") - -// ss, err := readSockets(sockPath) -// if err != nil { -// continue -// } - -// for _, s := range ss { -// socks[s.Inode] = sock{TcpSocket: s} -// } -// } - -// // Get the file descriptors for the process. -// fdDir := strings.Join([]string{"/proc", fmt.Sprint(sm.pid), "fd"}, "/") -// fdEntries, err := os.ReadDir(fdDir) -// if err != nil { -// return -// } - -// fds := make([]Fd, 0, len(fdEntries)) -// for _, entry := range fdEntries { -// fd, err := strconv.ParseUint(entry.Name(), 10, 64) -// if err != nil { -// continue -// } -// dest, err := os.Readlink(path.Join(fdDir, entry.Name())) -// if err != nil { -// continue -// } -// var socketInode string -// if strings.HasPrefix(dest, "socket:[") && strings.HasSuffix(dest, "]") { -// socketInode = dest[len("socket:[") : len(dest)-1] -// } -// fds = append(fds, Fd{Fd: fd, Dest: dest, SocketInode: socketInode}) -// } - -// // Match the sockets to the file descriptors. -// for _, fd := range fds { -// if fd.SocketInode != "" { -// // add to values -// s := socks[fd.SocketInode].TcpSocket -// sockInfo := &SockInfo{ -// Pid: sm.pid, -// Fd: fd.Fd, -// Saddr: s.SAddr.IP().String(), -// Sport: s.SAddr.Port(), -// Daddr: s.DAddr.IP().String(), -// Dport: s.DAddr.Port(), -// } - -// if sockInfo.Saddr == "zero IP" || sockInfo.Daddr == "zero IP" || sockInfo.Sport == 0 || sockInfo.Dport == 0 { -// continue -// } - -// skLine := NewSocketLine(sm.pid, fd.Fd) -// skLine.AddValue(0, sockInfo) - -// if sm.mu == nil { -// return -// } - -// sm.mu.Lock() -// if sm.M == nil { -// sm.M = make(map[uint64]*SocketLine) -// } -// sm.M[fd.Fd] = skLine -// sm.mu.Unlock() -// } -// } -// } - -// func (sm *SocketMap) retrieveSocket(fd uint64) { -// sm.mu.Lock() -// if sl, ok := sm.M[fd]; ok { -// sl.getConnectionInfo() -// } else { -// sm.M[fd] = NewSocketLine(sm.pid, fd) -// sl.getConnectionInfo() -// } -// sm.mu.Unlock() -// } diff --git a/datastore/backend.go b/datastore/backend.go index 1e993ee..a6bf64a 100644 --- a/datastore/backend.go +++ b/datastore/backend.go @@ -547,7 +547,9 @@ func (b *BackendDS) sendToBackend(method string, payload interface{}, endpoint s return } - // log.Logger.Debug().Str("endpoint", endpoint).Any("payload", payload).Msg("sending batch to backend") + // if endpoint == reqEndpoint { + // log.Logger.Debug().Str("endpoint", endpoint).Any("payload", payload).Msg("sending batch to backend") + // } err = b.DoRequest(httpReq) if err != nil { log.Logger.Error().Msgf("backend persist error at ep %s : %v", endpoint, err) From 7de89e7edb09d9205f9e5df0aa39846e32aea3c0 Mon Sep 17 00:00:00 2001 From: kenanfarukcakir Date: Wed, 3 Jul 2024 14:56:07 +0000 Subject: [PATCH 15/24] increase chan sizes --- aggregator/sock_line_test.go | 9 +++++---- ebpf/collector.go | 4 ++-- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/aggregator/sock_line_test.go b/aggregator/sock_line_test.go index adbd53f..fce5289 100644 --- a/aggregator/sock_line_test.go +++ b/aggregator/sock_line_test.go @@ -1,6 +1,7 @@ package aggregator import ( + "context" "fmt" "sync" "testing" @@ -9,7 +10,7 @@ import ( func TestSocketLine(t *testing.T) { sockLine := &SocketLine{ - Values: []TimestampedSocket{}, + Values: []*TimestampedSocket{}, } tsList := []uint64{ @@ -349,7 +350,7 @@ func TestSocketLine(t *testing.T) { func TestXxx(t *testing.T) { assumedInterval := uint64(2 * time.Second) - nl := NewSocketLine(1, 0) + nl := NewSocketLine(context.Background(), 1, 0, false) wg := sync.WaitGroup{} wg.Add(1) @@ -440,7 +441,7 @@ func TestXxx(t *testing.T) { } func TestXxx2(t *testing.T) { - nl := NewSocketLine(1, 0) + nl := NewSocketLine(context.Background(), 1, 0, false) s1 := &SockInfo{ Pid: 0, @@ -472,7 +473,7 @@ func TestXxx2(t *testing.T) { } func TestAlreadyEstablishCanBeFound(t *testing.T) { - nl := NewSocketLine(1, 0) + nl := NewSocketLine(context.Background(), 1, 0, false) s1 := &SockInfo{ Pid: 0, diff --git a/ebpf/collector.go b/ebpf/collector.go index aea4ed9..97f8dbb 100644 --- a/ebpf/collector.go +++ b/ebpf/collector.go @@ -77,8 +77,8 @@ func NewEbpfCollector(parentCtx context.Context, ct *cri.CRITool) *EbpfCollector ctx: ctx, done: make(chan struct{}), ebpfEvents: make(chan interface{}, 100000), // interface is 16 bytes, 16 * 100000 = 8 Megabytes - ebpfProcEvents: make(chan interface{}, 2000), - ebpfTcpEvents: make(chan interface{}, 1000), + ebpfProcEvents: make(chan interface{}, 20000), + ebpfTcpEvents: make(chan interface{}, 100000), tlsPidMap: make(map[uint32]struct{}), sslWriteUprobes: make(map[uint32]link.Link), sslReadEnterUprobes: make(map[uint32]link.Link), From a327f442f24f04bd71763ca648ea98070395b72c Mon Sep 17 00:00:00 2001 From: kenanfarukcakir Date: Wed, 3 Jul 2024 15:49:09 +0000 Subject: [PATCH 16/24] put failed events back to queue --- aggregator/data.go | 112 ++++++++++++++---------------------- aggregator/sock_num_line.go | 30 +--------- ebpf/l7_req/l7.go | 55 ++++++++---------- 3 files changed, 72 insertions(+), 125 deletions(-) diff --git a/aggregator/data.go b/aggregator/data.go index 3f23754..edd714b 100644 --- a/aggregator/data.go +++ b/aggregator/data.go @@ -1031,6 +1031,13 @@ func (a *Aggregator) processKafkaEvent(ctx context.Context, d *l7_req.L7Event) { skInfo := a.findRelatedSocket(ctx, d) if skInfo == nil { + // requeue event if this is its first time + if !d.PutBack { + d.PutBack = true + a.ebpfChan <- d + return + } + log.Logger.Debug(). Ctx(ctx). Uint32("pid", d.Pid). @@ -1038,7 +1045,7 @@ func (a *Aggregator) processKafkaEvent(ctx context.Context, d *l7_req.L7Event) { Uint64("writeTime", d.WriteTimeNs). Str("protocol", d.Protocol). Any("payload", string(d.Payload[:d.PayloadSize])). - Msg("socket not found for kafka event") + Msg("discarding kafka event, socket not found") return } @@ -1087,10 +1094,16 @@ func (a *Aggregator) processKafkaEvent(ctx context.Context, d *l7_req.L7Event) { func (a *Aggregator) processAmqpEvent(ctx context.Context, d *l7_req.L7Event) { skInfo := a.findRelatedSocket(ctx, d) if skInfo == nil { + // requeue event if this is its first time + if !d.PutBack { + d.PutBack = true + a.ebpfChan <- d + return + } log.Logger.Debug().Uint32("pid", d.Pid). Uint64("fd", d.Fd).Uint64("writeTime", d.WriteTimeNs). Str("protocol", d.Protocol).Any("payload", string(d.Payload[:d.PayloadSize])). - Msg("socket not found for amqp event") + Msg("discarding amqp event, socket not found") return } @@ -1134,11 +1147,17 @@ func (a *Aggregator) processRedisEvent(ctx context.Context, d *l7_req.L7Event) { skInfo := a.findRelatedSocket(ctx, d) if skInfo == nil { + // requeue event if this is its first time + if !d.PutBack { + d.PutBack = true + a.ebpfChan <- d + return + } log.Logger.Debug(). Ctx(ctx). Uint32("pid", d.Pid). Uint64("fd", d.Fd).Uint64("writeTime", d.WriteTimeNs). - Str("protocol", d.Protocol).Any("payload", string(d.Payload[:d.PayloadSize])).Msg("socket not found for redis event") + Str("protocol", d.Protocol).Any("payload", string(d.Payload[:d.PayloadSize])).Msg("discarding redis event, socket not found") return } @@ -1234,9 +1253,15 @@ func (a *Aggregator) processHttpEvent(ctx context.Context, d *l7_req.L7Event) { skInfo := a.findRelatedSocket(ctx, d) if skInfo == nil { + // requeue event if this is its first time + if !d.PutBack { + d.PutBack = true + a.ebpfChan <- d + return + } log.Logger.Debug().Uint32("pid", d.Pid). Uint64("fd", d.Fd).Uint64("writeTime", d.WriteTimeNs). - Str("protocol", d.Protocol).Any("payload", string(d.Payload[:d.PayloadSize])).Msg("socket not found for http event") + Str("protocol", d.Protocol).Any("payload", string(d.Payload[:d.PayloadSize])).Msg("discarding http event, socket not found") return } @@ -1285,9 +1310,16 @@ func (a *Aggregator) processPostgresEvent(ctx context.Context, d *l7_req.L7Event skInfo := a.findRelatedSocket(ctx, d) if skInfo == nil { + // requeue event if this is its first time + if !d.PutBack { + d.PutBack = true + a.ebpfChan <- d + return + } + log.Logger.Debug().Uint32("pid", d.Pid). Uint64("fd", d.Fd).Uint64("writeTime", d.WriteTimeNs). - Str("protocol", d.Protocol).Any("payload", string(d.Payload[:d.PayloadSize])).Msg("socket not found for postgres event") + Str("protocol", d.Protocol).Any("payload", string(d.Payload[:d.PayloadSize])).Msg("discarding postgres event, socket not found") return } @@ -1358,68 +1390,6 @@ func getHostnameFromIP(ipAddr string) (string, error) { } } -func (a *Aggregator) fetchSkInfo(ctx context.Context, skLine *SocketLine, d *l7_req.L7Event) *SockInfo { - rc := attemptLimit - rt := retryInterval - var skInfo *SockInfo - var err error - - for { - skInfo, err = skLine.GetValue(d.WriteTimeNs) - if err == nil && skInfo != nil { - break - } - // log.Logger.Debug().Ctx(ctx).Err(err).Uint32("pid", d.Pid).Uint64("fd", d.Fd).Uint64("writeTime", d.WriteTimeNs).Msg("retry to get skInfo...") - rc-- - if rc == 0 { - break - } - time.Sleep(rt) - rt *= 2 // exponential backoff - - select { - case <-ctx.Done(): - log.Logger.Debug().Msg("processL7 exiting, stop retrying...") - return nil - default: - continue - } - } - - return skInfo -} - -// This is a mitigation for the case a tcp event is missed -// func (a *Aggregator) updateSocketMap(ctx context.Context) { -// ticker := time.NewTicker(3 * time.Minute) - -// f := func() { -// a.liveProcessesMu.RLock() -// defer a.liveProcessesMu.RUnlock() -// for pid := range a.liveProcesses { -// sockMap := a.clusterInfo.SocketMaps[pid] -// if sockMap.mu == nil { -// continue -// } - -// sockMap.mu.Lock() -// for _, skLine := range sockMap.M { -// skLine.getConnectionInfo() -// } -// sockMap.mu.Unlock() -// } -// } - -// for { -// select { -// case <-ticker.C: -// f() -// case <-ctx.Done(): -// return -// } -// } -// } - func (a *Aggregator) findRelatedSocket(ctx context.Context, d *l7_req.L7Event) *SockInfo { sockMap := a.clusterInfo.SocketMaps[d.Pid] // acquire sockMap lock @@ -1439,7 +1409,13 @@ func (a *Aggregator) findRelatedSocket(ctx context.Context, d *l7_req.L7Event) * return nil } - return a.fetchSkInfo(ctx, skLine, d) + skInfo, err := skLine.GetValue(d.WriteTimeNs) + if err != nil { + log.Logger.Warn().Ctx(ctx). + Int("pid", int(d.Pid)).Str("func", "findRelatedSocket").Err(err).Msg("could not find remote peer from given timestamp") + return nil + } + return skInfo } func (a *Aggregator) parseSqlCommand(d *l7_req.L7Event) (string, error) { diff --git a/aggregator/sock_num_line.go b/aggregator/sock_num_line.go index 8701b24..f8d2fcb 100644 --- a/aggregator/sock_num_line.go +++ b/aggregator/sock_num_line.go @@ -62,46 +62,20 @@ func (nl *SocketLine) ClearAll() { func (nl *SocketLine) AddValue(timestamp uint64, sockInfo *SockInfo) { // ignore close events if sockInfo == nil { - // log.Logger.Debug().Ctx(nl.ctx). - // Any("pid", nl.pid). - // Any("fd", nl.fd). - // Any("ts", timestamp). - // Msg("AddValue-1") return } - // log.Logger.Debug().Ctx(nl.ctx). - // Any("pid", sockInfo.Pid). - // Any("fd", sockInfo.Fd). - // Any("ts", timestamp). - // Msg("AddValue-start") nl.mu.Lock() defer nl.mu.Unlock() - // log.Logger.Debug().Ctx(nl.ctx). - // Any("pid", sockInfo.Pid). - // Any("fd", sockInfo.Fd). - // Any("ts", timestamp). - // Msg("AddValue-start1") - // if last element is equal to the current element, ignore if len(nl.Values) > 0 { last := nl.Values[len(nl.Values)-1].SockInfo if last != nil && last.Saddr == sockInfo.Saddr && last.Sport == sockInfo.Sport && last.Daddr == sockInfo.Daddr && last.Dport == sockInfo.Dport { - // log.Logger.Debug().Ctx(nl.ctx). - // Any("pid", sockInfo.Pid). - // Any("fd", sockInfo.Fd). - // Any("ts", timestamp). - // Msg("AddValue-2") return } } - // log.Logger.Debug().Ctx(nl.ctx). - // Any("pid", sockInfo.Pid). - // Any("fd", sockInfo.Fd). - // Any("ts", timestamp). - // Msg("AddValue-end") nl.Values = insertIntoSortedSlice(nl.Values, &TimestampedSocket{Timestamp: timestamp, SockInfo: sockInfo}) } @@ -385,6 +359,8 @@ func (nl *SocketLine) getConnectionInfo() error { // nl.mu.Lock() // defer nl.mu.Unlock() + now := time.Now() + inode, err := getInodeFromFD(fmt.Sprintf("%d", nl.pid), fmt.Sprintf("%d", nl.fd)) if err != nil { return err @@ -410,6 +386,6 @@ func (nl *SocketLine) getConnectionInfo() error { // convert to bpf time log.Logger.Debug().Ctx(nl.ctx).Msgf("Adding socket line read from user space %v", skInfo) nl.ClearAll() // clear all previous records - nl.AddValue(convertUserTimeToKernelTime(uint64(time.Now().UnixNano())), skInfo) + nl.AddValue(convertUserTimeToKernelTime(uint64(now.UnixNano())), skInfo) return nil } diff --git a/ebpf/l7_req/l7.go b/ebpf/l7_req/l7.go index 3d7873d..a66d447 100644 --- a/ebpf/l7_req/l7.go +++ b/ebpf/l7_req/l7.go @@ -358,6 +358,10 @@ type L7Event struct { Tid uint32 Seq uint32 // tcp seq num KafkaApiVersion int16 + + // This bool is actually related to aggregator logic. Means this events processing somehow failed and put back into channel for retry. + // Maybe we can wrap L7Event and add this field on top. + PutBack bool } const L7_EVENT = "l7_event" @@ -674,21 +678,21 @@ func (l7p *L7Prog) Consume(ctx context.Context, ch chan interface{}) { KafkaApiVersion: l7Event.KafkaApiVersion, } - if userspacel7Event.Protocol == L7_PROTOCOL_KAFKA { - // log all information - log.Logger.Warn(). - Uint32("pid", userspacel7Event.Pid). - Uint32("status", userspacel7Event.Status). - Uint64("duration", userspacel7Event.Duration). - Str("protocol", userspacel7Event.Protocol). - Str("method", userspacel7Event.Method). - Uint64("write-time-ns", userspacel7Event.WriteTimeNs). - Uint32("tid", userspacel7Event.Tid). - Uint32("seq", userspacel7Event.Seq). - Str("payload", string(userspacel7Event.Payload[:userspacel7Event.PayloadSize])). - Msg("kafka event") - // return - } + // if userspacel7Event.Protocol == L7_PROTOCOL_KAFKA { + // // log all information + // log.Logger.Warn(). + // Uint32("pid", userspacel7Event.Pid). + // Uint32("status", userspacel7Event.Status). + // Uint64("duration", userspacel7Event.Duration). + // Str("protocol", userspacel7Event.Protocol). + // Str("method", userspacel7Event.Method). + // Uint64("write-time-ns", userspacel7Event.WriteTimeNs). + // Uint32("tid", userspacel7Event.Tid). + // Uint32("seq", userspacel7Event.Seq). + // Str("payload", string(userspacel7Event.Payload[:userspacel7Event.PayloadSize])). + // Msg("kafka event") + // // return + // } go func(l7Event *L7Event) { select { @@ -696,21 +700,12 @@ func (l7p *L7Prog) Consume(ctx context.Context, ch chan interface{}) { default: droppedCount++ if droppedCount%100 == 0 { - if l7Event.Protocol == L7_PROTOCOL_KAFKA { - log.Logger.Warn(). - Str("protocol", l7Event.Protocol). - Str("method", l7Event.Method). - Uint32("pid", l7Event.Pid). - Uint32("status", l7Event.Status). - Msg("channel full, dropping kafka event") - } else { - log.Logger.Debug(). - Str("protocol", l7Event.Protocol). - Str("method", l7Event.Method). - Uint32("pid", l7Event.Pid). - Uint32("status", l7Event.Status). - Msg("channel full, dropping l7 event") - } + log.Logger.Debug(). + Str("protocol", l7Event.Protocol). + Str("method", l7Event.Method). + Uint32("pid", l7Event.Pid). + Uint32("status", l7Event.Status). + Msg("channel full, dropping l7 event") } } From c55307d474c8eb65d0b08333a442e07b069856ed Mon Sep 17 00:00:00 2001 From: kenanfarukcakir Date: Wed, 3 Jul 2024 16:05:52 +0000 Subject: [PATCH 17/24] send connections to backend --- aggregator/data.go | 105 ++++++++++++++++++------------------ aggregator/sock_num_line.go | 10 ++-- main.go | 3 ++ 3 files changed, 59 insertions(+), 59 deletions(-) diff --git a/aggregator/data.go b/aggregator/data.go index edd714b..a9dd600 100644 --- a/aggregator/data.go +++ b/aggregator/data.go @@ -173,7 +173,7 @@ func NewAggregator(parentCtx context.Context, k8sChan chan interface{}, a.clusterInfo.SignalSocketMapCreation(pid) } - // go a.clearSocketLines(ctx) // TODO: open here + go a.clearSocketLines(ctx) // go a.updateSocketMap(ctx) return a } @@ -466,9 +466,6 @@ func (a *Aggregator) processTcpConnect(ctx context.Context, d *tcp_state.TcpConn } var skLine *SocketLine - // if sockMap.mu == nil || sockMap.M == nil { - // return - // } sockMap.mu.RLock() skLine, ok = sockMap.M[d.Fd] @@ -491,59 +488,60 @@ func (a *Aggregator) processTcpConnect(ctx context.Context, d *tcp_state.TcpConn Dport: d.DPort, }, ) - } - // } else if d.Type_ == tcp_state.EVENT_TCP_CLOSED { - // var sockMap *SocketMap - // var ok bool + } else if d.Type_ == tcp_state.EVENT_TCP_CLOSED { + var sockMap *SocketMap + var ok bool - // // filter out localhost connections - // if d.SAddr == "127.0.0.1" || d.DAddr == "127.0.0.1" { - // return - // } + // filter out localhost connections + if d.SAddr == "127.0.0.1" || d.DAddr == "127.0.0.1" { + return + } - // sockMap = a.clusterInfo.SocketMaps[d.Pid] + sockMap = a.clusterInfo.SocketMaps[d.Pid] + if sockMap == nil { + // signal socket map creation and requeue event + log.Logger.Warn().Ctx(ctx). + Uint32("pid", d.Pid).Str("func", "processTcpConnect").Str("event", "ESTABLISHED").Msg("socket map not initialized") - // var skLine *SocketLine + go a.clusterInfo.SignalSocketMapCreation(d.Pid) + a.ebpfTcpChan <- d + return + } - // if sockMap.mu == nil || sockMap.M == nil { - // log.Logger.Warn().Ctx(ctx). - // Uint32("pid", d.Pid).Str("func", "processTcpConnect").Str("event", "CLOSED").Msg("socket map not initialized") - // return - // } + var skLine *SocketLine + skLine, ok = sockMap.M[d.Fd] + if !ok { + return + } - // skLine, ok = sockMap.M[d.Fd] - // if !ok { - // return - // } - - // // If connection is established before, add the close event - // skLine.AddValue( - // d.Timestamp, // get connection close timestamp from ebpf - // nil, // closed - // ) - - // connKey := a.getConnKey(d.Pid, d.Fd) - - // // remove h2Parser if exists - // a.h2ParserMu.Lock() - // h2Parser, ok := a.h2Parsers[connKey] - // if ok { - // h2Parser.clientHpackDecoder.Close() - // h2Parser.serverHpackDecoder.Close() - // } - // delete(a.h2Parsers, connKey) - // a.h2ParserMu.Unlock() - - // // remove pgStmt if exists - // a.pgStmtsMu.Lock() - // for key, _ := range a.pgStmts { - // if strings.HasPrefix(key, connKey) { - // delete(a.pgStmts, key) - // } - // } - // a.pgStmtsMu.Unlock() + // If connection is established before, add the close event + skLine.AddValue( + d.Timestamp, // get connection close timestamp from ebpf + nil, // closed + ) - // } + connKey := a.getConnKey(d.Pid, d.Fd) + + // remove h2Parser if exists + a.h2ParserMu.Lock() + h2Parser, ok := a.h2Parsers[connKey] + if ok { + h2Parser.clientHpackDecoder.Close() + h2Parser.serverHpackDecoder.Close() + } + delete(a.h2Parsers, connKey) + a.h2ParserMu.Unlock() + + // remove pgStmt if exists + a.pgStmtsMu.Lock() + for key, _ := range a.pgStmts { + if strings.HasPrefix(key, connKey) { + delete(a.pgStmts, key) + } + } + a.pgStmtsMu.Unlock() + + } } func parseHttpPayload(request string) (method string, path string, httpVersion string, hostHeader string) { @@ -1573,7 +1571,7 @@ func (a *Aggregator) clearSocketLines(ctx context.Context) { // send open connections to datastore a.sendOpenConnection(skLine) // clear socket history - // skLine.DeleteUnused() + skLine.DeleteUnused() } }() } @@ -1581,8 +1579,7 @@ func (a *Aggregator) clearSocketLines(ctx context.Context) { for range ticker.C { for _, sockMap := range a.clusterInfo.SocketMaps { - // TODO: check here - if sockMap.mu == nil { + if sockMap == nil { continue } sockMap.mu.Lock() diff --git a/aggregator/sock_num_line.go b/aggregator/sock_num_line.go index f8d2fcb..3866e87 100644 --- a/aggregator/sock_num_line.go +++ b/aggregator/sock_num_line.go @@ -60,10 +60,10 @@ func (nl *SocketLine) ClearAll() { } func (nl *SocketLine) AddValue(timestamp uint64, sockInfo *SockInfo) { - // ignore close events - if sockInfo == nil { - return - } + // // ignore close events + // if sockInfo == nil { + // return + // } nl.mu.Lock() defer nl.mu.Unlock() @@ -71,7 +71,7 @@ func (nl *SocketLine) AddValue(timestamp uint64, sockInfo *SockInfo) { // if last element is equal to the current element, ignore if len(nl.Values) > 0 { last := nl.Values[len(nl.Values)-1].SockInfo - if last != nil && last.Saddr == sockInfo.Saddr && last.Sport == sockInfo.Sport && last.Daddr == sockInfo.Daddr && last.Dport == sockInfo.Dport { + if last != nil && sockInfo != nil && last.Saddr == sockInfo.Saddr && last.Sport == sockInfo.Sport && last.Daddr == sockInfo.Daddr && last.Dport == sockInfo.Dport { return } } diff --git a/main.go b/main.go index 622ffd6..24a5633 100644 --- a/main.go +++ b/main.go @@ -88,6 +88,7 @@ func main() { MetricsExportInterval: 10, ReqBufferSize: 40000, // TODO: get from a conf file ConnBufferSize: 1000, // TODO: get from a conf file + KafkaEventBufferSize: 2000, }) var ct *cri.CRITool @@ -104,6 +105,8 @@ func main() { a := aggregator.NewAggregator(ctx, kubeEvents, ec.EbpfEvents(), ec.EbpfProcEvents(), ec.EbpfTcpEvents(), ec.TlsAttachQueue(), dsBackend) a.Run() + a.AdvertiseDebugData() + ec.Init() go ec.ListenEvents() } From 48026dd90c3efdd84e8cf10e5d3bfa130c706045 Mon Sep 17 00:00:00 2001 From: kenanfarukcakir Date: Thu, 4 Jul 2024 12:53:32 +0000 Subject: [PATCH 18/24] only create socketmaps for container procs --- aggregator/data.go | 3 --- datastore/backend.go | 1 + ebpf/c/proc.c | 2 +- ebpf/collector.go | 2 ++ 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/aggregator/data.go b/aggregator/data.go index a9dd600..64194b0 100644 --- a/aggregator/data.go +++ b/aggregator/data.go @@ -169,9 +169,6 @@ func NewAggregator(parentCtx context.Context, k8sChan chan interface{}, a.liveProcessesMu.RUnlock() a.clusterInfo = newClusterInfo(liveProcCount) - for pid := range a.liveProcesses { - a.clusterInfo.SignalSocketMapCreation(pid) - } go a.clearSocketLines(ctx) // go a.updateSocketMap(ctx) diff --git a/datastore/backend.go b/datastore/backend.go index a6bf64a..a68a40d 100644 --- a/datastore/backend.go +++ b/datastore/backend.go @@ -651,6 +651,7 @@ func (b *BackendDS) sendKafkaEventsInBatch(batchSize uint64) { return } + log.Logger.Debug().Any("batch", batch).Msg("sending batch of kafka events") kEventsPayload := convertKafkaEventsToPayload(batch) go b.sendToBackend(http.MethodPost, kEventsPayload, kafkaEventEndpoint) diff --git a/ebpf/c/proc.c b/ebpf/c/proc.c index c2eff87..b8ff805 100644 --- a/ebpf/c/proc.c +++ b/ebpf/c/proc.c @@ -29,7 +29,7 @@ int sched_process_exec(struct trace_event_raw_sched_process_exec* ctx) pid = id >> 32; tid = (__u32)id; - /* ignore thread exits */ + /* ignore thread exec */ if (pid != tid) return 0; diff --git a/ebpf/collector.go b/ebpf/collector.go index 97f8dbb..388c58e 100644 --- a/ebpf/collector.go +++ b/ebpf/collector.go @@ -142,6 +142,8 @@ func (e *EbpfCollector) Init() { return } + log.Logger.Debug().Int("len", len(currentPids)).Msg("len of current container pids") + // find new pids newPids := make([]uint32, 0) for pid, _ := range currentPids { From d370692780ce4585e530155f9c4dc14ac997bac1 Mon Sep 17 00:00:00 2001 From: kenanfarukcakir Date: Fri, 5 Jul 2024 12:18:07 +0000 Subject: [PATCH 19/24] get container pids from cri --- aggregator/cluster.go | 4 +- aggregator/data.go | 175 +++++++++++++++++++++--------------------- ebpf/collector.go | 17 +++- 3 files changed, 106 insertions(+), 90 deletions(-) diff --git a/aggregator/cluster.go b/aggregator/cluster.go index 32958eb..4fe843b 100644 --- a/aggregator/cluster.go +++ b/aggregator/cluster.go @@ -68,12 +68,12 @@ func (ci *ClusterInfo) SignalSocketMapCreation(pid uint32) { // in order to prevent race. func (ci *ClusterInfo) handleSocketMapCreation() { for pid := range ci.signalChan { - ctxPid := context.WithValue(context.Background(), log.LOG_CONTEXT, fmt.Sprint(pid)) - if ci.SocketMaps[pid] != nil { continue } + ctxPid := context.WithValue(context.Background(), log.LOG_CONTEXT, fmt.Sprint(pid)) + sockMap := &SocketMap{ mu: nil, // set below pid: pid, diff --git a/aggregator/data.go b/aggregator/data.go index 64194b0..993787a 100644 --- a/aggregator/data.go +++ b/aggregator/data.go @@ -23,13 +23,13 @@ import ( "strconv" "strings" "sync" - "syscall" "golang.org/x/time/rate" "time" "github.com/ddosify/alaz/aggregator/kafka" + "github.com/ddosify/alaz/cri" "github.com/ddosify/alaz/datastore" "github.com/ddosify/alaz/ebpf" "github.com/ddosify/alaz/ebpf/l7_req" @@ -58,8 +58,7 @@ const ( type Aggregator struct { ctx context.Context - - ctxForKafka context.Context + ct *cri.CRITool // listen to events from different sources k8sChan chan interface{} @@ -136,7 +135,7 @@ func init() { } } -func NewAggregator(parentCtx context.Context, k8sChan chan interface{}, +func NewAggregator(parentCtx context.Context, ct *cri.CRITool, k8sChan chan interface{}, events chan interface{}, procEvents chan interface{}, tcpEvents chan interface{}, @@ -147,6 +146,7 @@ func NewAggregator(parentCtx context.Context, k8sChan chan interface{}, a := &Aggregator{ ctx: ctx, + ct: ct, k8sChan: k8sChan, ebpfChan: events, ebpfProcChan: procEvents, @@ -162,7 +162,11 @@ func NewAggregator(parentCtx context.Context, k8sChan chan interface{}, pgStmts: make(map[string]string), } - a.getLiveProcesses() + var err error + a.liveProcesses, err = ct.GetPidsRunningOnContainers() + if err != nil { + log.Logger.Fatal().Err(err).Msg("could not get running containers") + } a.liveProcessesMu.RLock() liveProcCount := len(a.liveProcesses) @@ -202,59 +206,59 @@ func (a *Aggregator) getLiveProcesses() { } func (a *Aggregator) Run() { - go func() { - // every 2 minutes, check alive processes, and clear the ones left behind - // since we process events concurrently, some short-lived processes exit event can come before exec events - // this causes zombie http2 workers - - t := time.NewTicker(2 * time.Minute) - defer t.Stop() - - for range t.C { - a.liveProcessesMu.Lock() - - for pid, _ := range a.liveProcesses { - // https://man7.org/linux/man-pages/man2/kill.2.html - // If sig is 0, then no signal is sent, but existence and permission - // checks are still performed; this can be used to check for the - // existence of a process ID or process group ID that the caller is - // permitted to signal. - - err := syscall.Kill(int(pid), 0) - if err != nil { - // pid does not exist - delete(a.liveProcesses, pid) - a.clusterInfo.clearProc(pid) - - a.h2ParserMu.Lock() - for key, parser := range a.h2Parsers { - // h2Parsers map[string]*http2Parser // pid-fd -> http2Parser - if strings.HasPrefix(key, fmt.Sprint(pid)) { - parser.clientHpackDecoder.Close() - parser.serverHpackDecoder.Close() - - delete(a.h2Parsers, key) - } - } - a.h2ParserMu.Unlock() - - a.rateLimitMu.Lock() - delete(a.rateLimiters, pid) - a.rateLimitMu.Unlock() - - a.pgStmtsMu.Lock() - for key, _ := range a.pgStmts { - if strings.HasPrefix(key, fmt.Sprint(pid)) { - delete(a.pgStmts, key) - } - } - a.pgStmtsMu.Unlock() - } - } + // go func() { + // // every 2 minutes, check alive processes, and clear the ones left behind + // // since we process events concurrently, some short-lived processes exit event can come before exec events + // // this causes zombie http2 workers + + // t := time.NewTicker(2 * time.Minute) + // defer t.Stop() + + // for range t.C { + // a.liveProcessesMu.Lock() + + // for pid, _ := range a.liveProcesses { + // // https://man7.org/linux/man-pages/man2/kill.2.html + // // If sig is 0, then no signal is sent, but existence and permission + // // checks are still performed; this can be used to check for the + // // existence of a process ID or process group ID that the caller is + // // permitted to signal. + + // err := syscall.Kill(int(pid), 0) + // if err != nil { + // // pid does not exist + // delete(a.liveProcesses, pid) + // a.clusterInfo.clearProc(pid) + + // a.h2ParserMu.Lock() + // for key, parser := range a.h2Parsers { + // // h2Parsers map[string]*http2Parser // pid-fd -> http2Parser + // if strings.HasPrefix(key, fmt.Sprint(pid)) { + // parser.clientHpackDecoder.Close() + // parser.serverHpackDecoder.Close() + + // delete(a.h2Parsers, key) + // } + // } + // a.h2ParserMu.Unlock() + + // a.rateLimitMu.Lock() + // delete(a.rateLimiters, pid) + // a.rateLimitMu.Unlock() + + // a.pgStmtsMu.Lock() + // for key, _ := range a.pgStmts { + // if strings.HasPrefix(key, fmt.Sprint(pid)) { + // delete(a.pgStmts, key) + // } + // } + // a.pgStmtsMu.Unlock() + // } + // } - a.liveProcessesMu.Unlock() - } - }() + // a.liveProcessesMu.Unlock() + // } + // }() go a.processk8s() // TODO: determine the number of workers with benchmarking @@ -266,8 +270,6 @@ func (a *Aggregator) Run() { numWorker := cpuCount - a.ctxForKafka = context.WithValue(a.ctx, log.LOG_CONTEXT, KAFKA) - for i := 0; i < numWorker; i++ { go a.processEbpf(a.ctx) go a.processEbpfTcp(a.ctx) @@ -396,7 +398,6 @@ func (a *Aggregator) getRateLimiterForPid(pid uint32) *rate.Limiter { func (a *Aggregator) processExec(d *proc.ProcEvent) { // a.liveProcessesMu.Lock() // defer a.liveProcessesMu.Unlock() - // a.liveProcesses[d.Pid] = struct{}{} a.clusterInfo.SignalSocketMapCreation(d.Pid) @@ -617,8 +618,8 @@ func (a *Aggregator) processHttp2Frames() { return } - skInfo := a.findRelatedSocket(a.ctx, d) - if skInfo == nil { + skInfo, err := a.findRelatedSocket(a.ctx, d) + if skInfo == nil || err != nil { return } @@ -642,7 +643,7 @@ func (a *Aggregator) processHttp2Frames() { } // toUID is set to :authority header in client frame - err := a.setFromTo(skInfo, d, req, req.ToUID) + err = a.setFromTo(skInfo, d, req, req.ToUID) if err != nil { return } @@ -1024,8 +1025,8 @@ func (a *Aggregator) processKafkaEvent(ctx context.Context, d *l7_req.L7Event) { return } - skInfo := a.findRelatedSocket(ctx, d) - if skInfo == nil { + skInfo, err := a.findRelatedSocket(ctx, d) + if skInfo == nil || err != nil { // requeue event if this is its first time if !d.PutBack { d.PutBack = true @@ -1035,6 +1036,7 @@ func (a *Aggregator) processKafkaEvent(ctx context.Context, d *l7_req.L7Event) { log.Logger.Debug(). Ctx(ctx). + Err(err). Uint32("pid", d.Pid). Uint64("fd", d.Fd). Uint64("writeTime", d.WriteTimeNs). @@ -1087,15 +1089,15 @@ func (a *Aggregator) processKafkaEvent(ctx context.Context, d *l7_req.L7Event) { } func (a *Aggregator) processAmqpEvent(ctx context.Context, d *l7_req.L7Event) { - skInfo := a.findRelatedSocket(ctx, d) - if skInfo == nil { + skInfo, err := a.findRelatedSocket(ctx, d) + if skInfo == nil || err != nil { // requeue event if this is its first time if !d.PutBack { d.PutBack = true a.ebpfChan <- d return } - log.Logger.Debug().Uint32("pid", d.Pid). + log.Logger.Debug().Uint32("pid", d.Pid).Err(err). Uint64("fd", d.Fd).Uint64("writeTime", d.WriteTimeNs). Str("protocol", d.Protocol).Any("payload", string(d.Payload[:d.PayloadSize])). Msg("discarding amqp event, socket not found") @@ -1118,7 +1120,7 @@ func (a *Aggregator) processAmqpEvent(ctx context.Context, d *l7_req.L7Event) { Seq: d.Seq, } - err := a.setFromTo(skInfo, d, reqDto, "") + err = a.setFromTo(skInfo, d, reqDto, "") if err != nil { return } @@ -1140,8 +1142,8 @@ func (a *Aggregator) processAmqpEvent(ctx context.Context, d *l7_req.L7Event) { func (a *Aggregator) processRedisEvent(ctx context.Context, d *l7_req.L7Event) { query := string(d.Payload[0:d.PayloadSize]) - skInfo := a.findRelatedSocket(ctx, d) - if skInfo == nil { + skInfo, err := a.findRelatedSocket(ctx, d) + if skInfo == nil || err != nil { // requeue event if this is its first time if !d.PutBack { d.PutBack = true @@ -1150,6 +1152,7 @@ func (a *Aggregator) processRedisEvent(ctx context.Context, d *l7_req.L7Event) { } log.Logger.Debug(). Ctx(ctx). + Err(err). Uint32("pid", d.Pid). Uint64("fd", d.Fd).Uint64("writeTime", d.WriteTimeNs). Str("protocol", d.Protocol).Any("payload", string(d.Payload[:d.PayloadSize])).Msg("discarding redis event, socket not found") @@ -1172,7 +1175,7 @@ func (a *Aggregator) processRedisEvent(ctx context.Context, d *l7_req.L7Event) { Seq: d.Seq, } - err := a.setFromTo(skInfo, d, reqDto, "") + err = a.setFromTo(skInfo, d, reqDto, "") if err != nil { return } @@ -1246,8 +1249,8 @@ func (a *Aggregator) processHttpEvent(ctx context.Context, d *l7_req.L7Event) { _, path, _, reqHostHeader = parseHttpPayload(string(d.Payload[0:d.PayloadSize])) } - skInfo := a.findRelatedSocket(ctx, d) - if skInfo == nil { + skInfo, err := a.findRelatedSocket(ctx, d) + if skInfo == nil || err != nil { // requeue event if this is its first time if !d.PutBack { d.PutBack = true @@ -1255,8 +1258,11 @@ func (a *Aggregator) processHttpEvent(ctx context.Context, d *l7_req.L7Event) { return } log.Logger.Debug().Uint32("pid", d.Pid). + Err(err). Uint64("fd", d.Fd).Uint64("writeTime", d.WriteTimeNs). - Str("protocol", d.Protocol).Any("payload", string(d.Payload[:d.PayloadSize])).Msg("discarding http event, socket not found") + Str("protocol", d.Protocol). + Any("payload", string(d.Payload[:d.PayloadSize])). + Msg("discarding http event, socket not found") return } @@ -1276,7 +1282,7 @@ func (a *Aggregator) processHttpEvent(ctx context.Context, d *l7_req.L7Event) { Seq: d.Seq, } - err := a.setFromTo(skInfo, d, reqDto, reqHostHeader) + err = a.setFromTo(skInfo, d, reqDto, reqHostHeader) if err != nil { return } @@ -1303,7 +1309,7 @@ func (a *Aggregator) processPostgresEvent(ctx context.Context, d *l7_req.L7Event return } - skInfo := a.findRelatedSocket(ctx, d) + skInfo, err := a.findRelatedSocket(ctx, d) if skInfo == nil { // requeue event if this is its first time if !d.PutBack { @@ -1313,6 +1319,7 @@ func (a *Aggregator) processPostgresEvent(ctx context.Context, d *l7_req.L7Event } log.Logger.Debug().Uint32("pid", d.Pid). + Err(err). Uint64("fd", d.Fd).Uint64("writeTime", d.WriteTimeNs). Str("protocol", d.Protocol).Any("payload", string(d.Payload[:d.PayloadSize])).Msg("discarding postgres event, socket not found") @@ -1385,14 +1392,12 @@ func getHostnameFromIP(ipAddr string) (string, error) { } } -func (a *Aggregator) findRelatedSocket(ctx context.Context, d *l7_req.L7Event) *SockInfo { +func (a *Aggregator) findRelatedSocket(ctx context.Context, d *l7_req.L7Event) (*SockInfo, error) { sockMap := a.clusterInfo.SocketMaps[d.Pid] // acquire sockMap lock if sockMap == nil { go a.clusterInfo.SignalSocketMapCreation(d.Pid) - log.Logger.Warn().Ctx(ctx). - Int("pid", int(d.Pid)).Str("func", "findRelatedSocket").Msg("socket map not initialized") - return nil + return nil, fmt.Errorf("socket map not initialized for pid=%d, fd=%d", d.Pid, d.Fd) } sockMap.mu.RLock() @@ -1401,16 +1406,14 @@ func (a *Aggregator) findRelatedSocket(ctx context.Context, d *l7_req.L7Event) * if !ok { // start new socket line, find already established connections go sockMap.SignalSocketLine(ctx, d.Fd) - return nil + return nil, fmt.Errorf("socket line not initialized for fd=%d, pid=%d", d.Fd, d.Pid) } skInfo, err := skLine.GetValue(d.WriteTimeNs) if err != nil { - log.Logger.Warn().Ctx(ctx). - Int("pid", int(d.Pid)).Str("func", "findRelatedSocket").Err(err).Msg("could not find remote peer from given timestamp") - return nil + return nil, fmt.Errorf("could not find remote peer from given timestamp, err=%v, fd=%d, pid=%d", err, d.Fd, d.Pid) } - return skInfo + return skInfo, nil } func (a *Aggregator) parseSqlCommand(d *l7_req.L7Event) (string, error) { diff --git a/ebpf/collector.go b/ebpf/collector.go index 388c58e..5daab8b 100644 --- a/ebpf/collector.go +++ b/ebpf/collector.go @@ -76,7 +76,7 @@ func NewEbpfCollector(parentCtx context.Context, ct *cri.CRITool) *EbpfCollector return &EbpfCollector{ ctx: ctx, done: make(chan struct{}), - ebpfEvents: make(chan interface{}, 100000), // interface is 16 bytes, 16 * 100000 = 8 Megabytes + ebpfEvents: make(chan interface{}, 200000), // interface is 16 bytes, 16 * 200000 = 32 Megabytes ebpfProcEvents: make(chan interface{}, 20000), ebpfTcpEvents: make(chan interface{}, 100000), tlsPidMap: make(map[uint32]struct{}), @@ -168,7 +168,6 @@ func (e *EbpfCollector) Init() { } // update oldstate - for k := range oldState { delete(oldState, k) } @@ -177,6 +176,20 @@ func (e *EbpfCollector) Init() { oldState[pid] = struct{}{} } + // send events to aggregator + for _, pid := range newPids { + e.ebpfProcEvents <- &proc.ProcEvent{ + Pid: pid, + Type_: proc.EVENT_PROC_EXEC, + } + } + for _, pid := range removedPids { + e.ebpfProcEvents <- &proc.ProcEvent{ + Pid: pid, + Type_: proc.EVENT_PROC_EXIT, + } + } + err = tcpProg.PopulateContainerPidsMap(newPids, removedPids) if err != nil { log.Logger.Error().Err(err).Msg("failed populating container pids map") From f14004946553c63995c66d70751329242616aa74 Mon Sep 17 00:00:00 2001 From: kenanfarukcakir Date: Fri, 5 Jul 2024 12:18:54 +0000 Subject: [PATCH 20/24] refactor sock finding logic --- aggregator/sock_num_line.go | 54 ++++++++++++++++++++++++++++++++----- main.go | 2 +- 2 files changed, 49 insertions(+), 7 deletions(-) diff --git a/aggregator/sock_num_line.go b/aggregator/sock_num_line.go index 3866e87..fdb58e8 100644 --- a/aggregator/sock_num_line.go +++ b/aggregator/sock_num_line.go @@ -94,10 +94,26 @@ func (nl *SocketLine) GetValue(timestamp uint64) (*SockInfo, error) { if index == len(nl.Values) { // The timestamp is after the last entry, so return the last value nl.Values[index-1].LastMatch = uint64(time.Now().UnixNano()) + if nl.Values[len(nl.Values)-1].SockInfo == nil { + if index-2 >= 0 && index-2 < len(nl.Values) && nl.Values[index-2].SockInfo != nil && + (timestamp-nl.Values[index-2].Timestamp) < uint64(1*time.Minute.Nanoseconds()) { // processing latency matters + return nl.Values[index-2].SockInfo, nil + } + return nil, fmt.Errorf("closed socket on last entry") + } return nl.Values[len(nl.Values)-1].SockInfo, nil } if index == 0 { + // In case of tcp established event read from user-space on event of socket not found, + // timestamp is set from userspace. + // and timestamps belonging to requests waiting to be processed becomes smaller. + // on that case, select first socket open, avoiding data loss. + + if nl.Values[0].SockInfo != nil { + return nl.Values[0].SockInfo, nil + } + // The timestamp is before or equal to the first entry, so return an error return nil, fmt.Errorf("no smaller value found") } @@ -105,14 +121,43 @@ func (nl *SocketLine) GetValue(timestamp uint64) (*SockInfo, error) { si := nl.Values[index-1].SockInfo if si == nil { - // The timestamp is exactly on a socket close + // The timestamp is matched on a socket close + // Check closest open sockets and if daddr+dport's are same, send one of them. + + prev := index - 2 + var prevSock *TimestampedSocket + if prev >= 0 && prev < len(nl.Values) { + prevSock = nl.Values[prev] + } + + after := index + var afterSock *TimestampedSocket + if after >= 0 && after < len(nl.Values) { + afterSock = nl.Values[after] + } + + if prevSock != nil && prevSock.SockInfo != nil && + afterSock != nil && afterSock.SockInfo != nil { + if prevSock.SockInfo.Daddr == afterSock.SockInfo.Daddr && + prevSock.SockInfo.Dport == afterSock.SockInfo.Dport { + // pick the closest one. + if timestamp-prevSock.Timestamp < afterSock.Timestamp-timestamp { + return prevSock.SockInfo, nil + } else { + return afterSock.SockInfo, nil + } + } + } + return nil, fmt.Errorf("closed socket") } - // Return the value associated with the closest previous timestamp + // if daddr+dport is consistently same, we can assume remote peer in case of closed socket match. + // TODO. + // Return the value associated with the closest previous timestamp nl.Values[index-1].LastMatch = uint64(time.Now().UnixNano()) - return nl.Values[index-1].SockInfo, nil + return si, nil } func (nl *SocketLine) DeleteUnused() { @@ -356,9 +401,6 @@ func parseTcpLine(line string) (localIP string, localPort int, remoteIP string, } func (nl *SocketLine) getConnectionInfo() error { - // nl.mu.Lock() - // defer nl.mu.Unlock() - now := time.Now() inode, err := getInodeFromFD(fmt.Sprintf("%d", nl.pid), fmt.Sprintf("%d", nl.fd)) diff --git a/main.go b/main.go index 24a5633..61358d1 100644 --- a/main.go +++ b/main.go @@ -102,7 +102,7 @@ func main() { if tracingEnabled { ec = ebpf.NewEbpfCollector(ctx, ct) - a := aggregator.NewAggregator(ctx, kubeEvents, ec.EbpfEvents(), ec.EbpfProcEvents(), ec.EbpfTcpEvents(), ec.TlsAttachQueue(), dsBackend) + a := aggregator.NewAggregator(ctx, ct, kubeEvents, ec.EbpfEvents(), ec.EbpfProcEvents(), ec.EbpfTcpEvents(), ec.TlsAttachQueue(), dsBackend) a.Run() a.AdvertiseDebugData() From ebf8de16f039e9819c24e361a4e98835b39f8588 Mon Sep 17 00:00:00 2001 From: kenanfarukcakir Date: Fri, 5 Jul 2024 13:07:02 +0000 Subject: [PATCH 21/24] send egress traffic for parsed requests --- aggregator/data.go | 64 +++------------------------------------------ ebpf/c/bpf_bpfeb.o | Bin 360888 -> 360408 bytes ebpf/c/bpf_bpfel.o | Bin 361760 -> 361256 bytes ebpf/c/l7.c | 15 ++++++----- ebpf/l7_req/l7.go | 53 ++++++++++++++++++------------------- 5 files changed, 37 insertions(+), 95 deletions(-) diff --git a/aggregator/data.go b/aggregator/data.go index 993787a..a7ba120 100644 --- a/aggregator/data.go +++ b/aggregator/data.go @@ -206,76 +206,20 @@ func (a *Aggregator) getLiveProcesses() { } func (a *Aggregator) Run() { - // go func() { - // // every 2 minutes, check alive processes, and clear the ones left behind - // // since we process events concurrently, some short-lived processes exit event can come before exec events - // // this causes zombie http2 workers - - // t := time.NewTicker(2 * time.Minute) - // defer t.Stop() - - // for range t.C { - // a.liveProcessesMu.Lock() - - // for pid, _ := range a.liveProcesses { - // // https://man7.org/linux/man-pages/man2/kill.2.html - // // If sig is 0, then no signal is sent, but existence and permission - // // checks are still performed; this can be used to check for the - // // existence of a process ID or process group ID that the caller is - // // permitted to signal. - - // err := syscall.Kill(int(pid), 0) - // if err != nil { - // // pid does not exist - // delete(a.liveProcesses, pid) - // a.clusterInfo.clearProc(pid) - - // a.h2ParserMu.Lock() - // for key, parser := range a.h2Parsers { - // // h2Parsers map[string]*http2Parser // pid-fd -> http2Parser - // if strings.HasPrefix(key, fmt.Sprint(pid)) { - // parser.clientHpackDecoder.Close() - // parser.serverHpackDecoder.Close() - - // delete(a.h2Parsers, key) - // } - // } - // a.h2ParserMu.Unlock() - - // a.rateLimitMu.Lock() - // delete(a.rateLimiters, pid) - // a.rateLimitMu.Unlock() - - // a.pgStmtsMu.Lock() - // for key, _ := range a.pgStmts { - // if strings.HasPrefix(key, fmt.Sprint(pid)) { - // delete(a.pgStmts, key) - // } - // } - // a.pgStmtsMu.Unlock() - // } - // } - - // a.liveProcessesMu.Unlock() - // } - // }() go a.processk8s() - // TODO: determine the number of workers with benchmarking cpuCount := runtime.NumCPU() - // numWorker := 5 * cpuCount - // if numWorker < 50 { - // numWorker = 5 // min number - // } - numWorker := cpuCount for i := 0; i < numWorker; i++ { - go a.processEbpf(a.ctx) go a.processEbpfTcp(a.ctx) go a.processEbpfProc(a.ctx) } + for i := 0; i < 4*cpuCount; i++ { + go a.processEbpf(a.ctx) + } + for i := 0; i < 2*cpuCount; i++ { go a.processHttp2Frames() } diff --git a/ebpf/c/bpf_bpfeb.o b/ebpf/c/bpf_bpfeb.o index 85f154c3bcd5126124b13ff9c77fb5c36ab4dfd3..e9eb9ae5206092a68b6ee2cef8fc015fee87a44f 100644 GIT binary patch literal 360408 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 literal 360888 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¾ORSW4-!ke_^+etlghebU-*#Yzlu8Z$4gX<#i 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

xUN_vpYX=M0VVRy-rTb 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πnqn(C>$5+ac*$Hogrc6iKtBTSU^L9P{ge%YQcA za*mi@HBx9{;aphNh`go#^;LVJ-go{^JJafyc%#*$`d;?KlI~tbrRMuj>Q2+8^W(~) zJ>-vETKkL54mdRxd6j!BrC%r(hjOVu2}-^{7BF=2xpVmA6YY7wp}?uZz0_S`M6jPQ z5-93;gwKD_8*a)wdA@B|&DAs21g<_VD_=X$7pLAuUf8%Ffq5OiOK~dZF5Dl9c}>1cF$(h<=A72t`DUwQcHh~u=fk>lha>Wx9s6Ah z_x+ake3ycA-(>UARwg~}yBJ00yA&DpchFm`)w$(*bh+NO<2-d(ExQ7wxaB+1wrBRs zSL?5TKFPIf?Vp^StGzD9zboIM_l)Tg{O!E2xF03;VKZU2y_1gS&L8<+;&tuD#pA-S z57_z@Pk(RZtM2UiBO@hrZKpb`sO4+xv$RXf;}^An1ADbFY3o4%snU% z`#p;q$wwave=gMcw-IxF7hBJ&w3hGqn@LragoL$D0vKBrwvX+l3eOJ~Q{@@$M3uU!Q*}UwXEB zOzky2D&dMV>y7{B@}u`#%1?b@pz#++A4iG?l=c?)@kXnMYA7Go&no|1IaL~e)kP(_R5f?J5j|COT&cE$IP!@U^)Kyd%;>42V@h{0X7p6i(fCJC6&;EH(YD?d z^(!4_+@q(84l6a^k85n;{voBOnEU9dqJv6nj2S&ubO7O_r;7G7;pgPOkI9#=XQ_hs z%hUCnS}^%~z1lmmo$4#6?=(C!uA(2V7*}uVWAgHr`wMlytX>&t{JDNYzYDdyxQhg0 zi%mJvU$or*PBQ+h11B!F?br1u$1gVJly?2ezZRQvO1u8#*u|!t(yl*=EZ$k-ji+6I zauohue{ux=DW|~Ui|dVh*Pk4^xZ0R0r@+CB6UOZNlLIlk{$&5fRp!3yPxf7G$}w%v zQI7=nCOr3@r9DZHT}O!o_Au$mL?sZp+&D2&)5El@M2-F4T%x8sX4@VUH5*~x5N-gi z9!b=!hq)YfgLd4Vs42s|E(}3CPEXXVjkyc77#2b4xaCUJnBk^yiK-XjV)!@w3;qfJfWN~<@HhA?{006De}X^4AK>@! zJNPa927V2{f?vWf;6nI0{0x2yKY<^^kKl)J0sH{I58s3D!gt`?@GUqWz6sxeufx~i ztMC>0GMoorf-k}s;Pdb~_$+(|J`Lx>r{I(D3HUgC3_c3yK)Yg}sCfkQ!|);aAbbGc z4`)N|A+-Md8{P-+h4;X_;azYhyc6C5Z-=+RTj4Em2AmG3!Kv_OI0ZJrMwo_^;Z5*H zcmup1UI!<^YvDEUYIqgA5?%o>hnK;L@KSgQyck{tFN7Ds3GjS)9vlzPh3CMt;aTuZ zI1Y}5XTa0pX>bfo!3LOwqv0qx5}pc2zyur)<8T-p3QvLca0sk}gJCTk1Z&_xSPcij z7>vRycrvVnC&3fp3GjG$9Q+sT508b%zz94V9tDqtN5FpYaCjIz6dnQ(h6lj|;Q?@e zxF6gX?gRIRd%-Yq%AxfLp>X zU~jlN+zf6CH-WuiPuK%)47P~t3tS7X2|L3z zU?;dbTn%=FrLY4mf$d=swu8m62nL`Bm&i!p^#Aa0_!s;W{sDi7i{NkYSNIG38U6%+ zgg?OV;dk&`_znCTeg(gTU%-X%bNCtj6n+9fh9AKX;R5&pd>_6C^~p}<@(z3(z6IyQ zH{l!bb@&>56}|#rhV$S{@J09nd>%drpM}rBr=dQnX*!>RPr@hQzI`YvCYR z0|&xtH~_|A6js5LVI@2Xo(NBX$HU{`zhHlOEIbBA;L-3XcqBXm_JfDR!{DLt5O^>= z2p$LzfcwM!;J$DlxHsGj?g{(CJ>c%}pKv$$54bDb1@?hE!=2!ca0j?O+zxIFw}D&3 ztzZS*5^e!|!_DDla8tMm>;-$m9&lsW9fsjXa6`BOTpz9n%V9Uz6_&wuVF<1R*M?o- zT5wI+8Lk04!PVhvup=ym9bgG;4}-8BEQUoe06n-wX0A;C5C4XL!9U?2@OQWf{sw=A zzrdg2Pw+?h1NpI1}Cp?|`?%+u*J67B~Y=htuFxcr%;= zn_weM!^!X_cq6<4UJtK>li;=R8hACl3SJ4XfS1F|;6!*SyaZkhFM=1s3*ZEJK0FVO zhv&j`;MwpjcqSYN$HFt<>F_i-2Bu&GOv2G{6dVapg(F}B4u^3#3=V~-zG6uiSPt?JUkBm3-*V{!ed|r9u1FzN5UguKX^Di3?2#( zfd|8b;DPV}xIf$v?hE&Ud&9lpp0F?61MUw033r44fV;w7U>~?M+zIXocYxc&?cla> z8@M&x3Rb`^;TEtr+#GHOH-($PUa%+Z0XK%-VHj=%H-sC&_2GK39Cm|UVHsQ(hTuAI zZP*2_1=oa~;To_LTpg|kJHk@f0hYk_FbLbhVps$N(1T_fP4u@}HWHf81PK39wJ!V< z{sDi7i{NkYSNIG38U6%+gg?OV;dk&`_znCTeg(gTU%-X%bNCtj6n+9fh9AKX;R5&p zd>_6C--YkMx8YlGK713t0bhr&!B^oc@MSm;z64){FTm&FbMRUC415~Sg-^jJ;S=z2 z_!xW?&Vd>D2z(em1RsPC!298BI1Bz8-Usi6_rSa1U2rD66W#%Dhqu97;Vp0moDQeK zsqkhv1vbG(n1++#P4Gr|1H2wy2PeU6;WhATconq!R}wW>V7?q)1}DNx;U(~5coDo1 zUH~V+^Wk}LJUkbk1J8zM!874FI2N7(Plu<$F)#%iU=ogoqu@w*DjWe5a5#*^VQ?rs z1=hnMunrD}wQvxufdgSR8~|f53ajABuo9jGPlPAHw<*o@^b|1C5oz2%QiB@AyY}(!2aQRgKdadmDtX8SqB!S6ByKmNgm)GqZsj$OL zyZ=ket;X)-j%{ko&Aq>DXMt>5^{=i9>AoOmld)=Wne&5k?;$VzUEOPb6SWQ1vGQw- zUmaZzuTB^xJaE96VeY$wYM%%XGL0#0-bX$!>wd`2mDL*W$m&x@xc7@qIJN$B((Ha6 zwI5hjYm{vDfbb}{KQ1fx^6O2wRY~$|)x7MRq<%Hp9O~?o)-Mgue`)S?CQnswD`w)o3T!7O)mKVE(~T0g?#M8ngdg5G1l3rzizAf$eDSEJZpXv0q%quIai z>b*%v%-U->>QM8k{@r`e^`+yC|IX)Hce)RHv8K-#p4%^|^)=H>c7s zs41*pNz@eDuNB&_?rjPn1++#P4Gr|1H2yI3U7fk;B+_*PK7ta zDexY6H@pkZgm=O_;O+1>_#k`$-VbNPS@7TRK6o#D96kmgg>zsAJ^~+x55ec)v+x=C zG@J{cf=|LH;H&Tz_%fUaUxF{f7vS^o9r!kU3(kjc!Z+aS@HO}`{0M#s7r+nT`|v&Z zF8m693BP~~;pgx(_$mAZ{se!7Kfv$dcko;I4g4DZ3IBkmyOegi2=j07SNIG385TOP zSLnQAq4S!B&Z`zWuUqK6a-s9uh0d$*9ngv({XcB&y#B%XTh(=iqwv3~>l(-7|2Wv% zb(I+YqOb~{3|F+SQ-{03uokZDx>5r7!(nUJwNm(NfJrzSj)Eg${<_*(*xLz*M9nzN zW8oRFrFFdvxIY2fiHbzcd6>t;bKyDgYYP$Pr)bQ6Yy2|3Va#PgD=4s z;S2D2_zrv4KNzl2}Fh46Fu8T=G}0)K)( z!XM!G@H_Y|{04pv|Ac?Q-{B(o8~hdi0)K{u?&~RZUs0j^nhM=lRp`F1Lid#wy05L! zeRX>m(f`BN?&~`kf2+E$@F@JR>b}O~@xQA3Dr5Lx)qS0H_#X^gyRS5Xzu~a8`&v`@ zYk;lYS9=!z&V=LOSh%8ny%*qa0z4m{2gk#6;W_YZcsaZbPK1}jOW?)uB6uOZ4o-sC z!fW8w@G5vEyaG1CMwo_^;Z5*Hcmup1-U@GlGvIVM4NiqO!zu6{csINY&V+ZuJK*i` zHuxZX0NxL0L!J3H{Xe`9-U}axkHJUb9GHQRz=z>O@HzM_dIs6QM z3O|8A!5`rd@O$_j{1$!#zlMLpKj80h5&RAQ3V(q=!$RNdDfGRfLf>mD^u4M=-|H&$ zy|O~zYb*4pK{KtNLEyQTSig_ZpAK|Ej)M8N>gozSmiY|G}`e@0BL- zHypP1z19@|8enVRt33;UXTouCEL_ohy%*qa0z4m{2gk#6;W_YZcsaZbPK1}jOW?)u zB6uOZ4o-sC!fW8w@G5vEyaG1CMwo_^;Z5*Hcmup1-U@GlGvIVM4NiqO!zu6{csINY z&V+ZuJK*i`HuxZX0NxL0!&&g(@IH7id>lRoABA&Z20j8Gh7ZB#;Ir@<_%xggpMp=q zC*Z5_75Flo2Va6O!WZE4@E!Ozd<)KpZ^Ad=>+m)BG5iRA2p7N);QR1B_%8ekehI&T z3*qPRGx#a|1pWkngg?OV;dk&`_znCT{t5qpzr#iFH~1_31^x^RJ=deqb43b0*QC&M zRSG-TC04?Bz#6p|mHibms#@Opg{!*XC+J;d!q?e69k|8THAb^vLicZ_u3BI$QX}oU zSL$55el|*M!}1$zZ`aE*RmPdw*D^@{%`{<_+MxSr^l4#$Se+xk6?)(2zMYzV?%h5X zzx$QWpL&u@zlWwPWg1^M`3-u9n*}PDPq!~8Io0m3a{D!sXLS(Qy3ft-uQN|Ml0Xed z)2aUDC%2z2swQi%bo=LOC))FT>dJOdZxa9N3U5=9Lr0}})1-FpuC~H$Elb3Ho3EBE zi3Eb2H`m9cTh9m7m2!<=8DX*5`2eet_%?z~IQug0^|avx#i&HoNv zZXa3CU!)qCePq?*w9dDWY>aFmQ{Tg6gW1yi$SSm|cwyOS=KoH`e_|h5{=PAlt6rYKK6p{+dJU)K(2VR0q&x8Iif1+CI; z=R$Wf5_9J@x19@ZD^RNKTxcVR6^*O>?X0u+IB8<+quvON z3mdaL$FuERXnhiJ&l7FuLbsg@E!DwmI~Ur%FV^CFD{bdOx19?u?IaRtI~Q8@MccX1 zOLTflMgaC5jB+!SsCd%>Qt2izET zhhex8+z@U6*N5xDa@Y-ag=KJE7=r7-wP6>y7F-i{hHJo1aCNvE>EAv_wN6#g1u5{`zW;7E8X903z>IE=$#a40+l*25vN4i1L3a1gA417S5B0Anx;tKiA7 z5}pK4geSn`;c@U^us=K&9s?urXm}Jn5*`8j!NcKU@KAUNJQyAX4}=H6{o#IaU$_t4 z8}0@7gni*2aCi7mxEuTj+!gKu`@o&yPH;!K1Kb{N2e*aWz^&m{umWxgw}8Fj=5RBp zJ3+Mn+64B3Jz)>HG3*Y*a3i=O+yJf**MsG-8|(_p;JPpb*MV!pE^sZlChQE?fSus# za5dNwmckBDSKc)L?O_nMgT=522B6udr2W6yu_4d@@Nf7REcE@gLf@Y&^!>d;-ybaW z{l!AxpDgtK%|hQFeUN&vs_(Dfga1{1fA&`Vuj>1|P55twt$ly^I{Zz7t$ly_a{OHe zTl@a>1^Al)Tl@a@S@=5>j)P<28Sr#?8XN;tumL9FXgCUvgr~w0Fad|dI2;Ct!c$;9 z90Kd$U|0(W!5TOaR>J`>2JHsJL`@aulVK%137!Z~fXBn*;J;vhcq}{yM&Qx#D0n11 z0``N4!^7aA@DO+~JO~~L4}kl_{ouZEAGkN%3+@T~!ad;b@Skuu_z$=%+y(Z5JHwse zj&KLKJ=_j%3%7w=!>wQi+!Ag9d&AA)W>9y4n*Ja5f<0jmxH0Sw!*C07257&d` zup8_O%iy{&1lNIU!!B?wxF+lj*MObi>TosK5thOZPiF%iD zz+(6}{0kO(eodk0=M;K=&&TBBBlsa)09SN=P@(4+6?%SBq31U}PCg%lkHR@{MdwF7 zh`Uuizv>?Ruj=_(x8i?Q&+lr&e^kfx!E50)@M?G!v^z`N&V{xc z*%LJh3C~N7g{w! zqGsuSrR`kkLdP|Qj;jhC*A+UhEOcC(G968#rU545XgCUvgr`C`u09L%nQ$B&3(tV3 z!_%O7MO5nZ1(+wm^Wk}LJUkbk1J8z+!^_}AcqzODUJNgS7sBh{syQcMF^Wr^9J*D!ds^f%m|>;azYhyc6C5Z-=+R2jK(oemEP>g8zp1!F%E3@Gd=fqZUxly0m*G745_}Q90H25Nz_;OBa6Wt!z5!o{ zufdPuNAN?q0Db`9hws66;aBiW_yt@DKZl>ePvIx**TU=wVFX*e0)1aE{l!0X|y@D?}&PKVRrRCqI-0`Gx$!@J;2 zcqhCA-VSer55foF{ctwanJaDI|AzO$d*S2oG59E)12gau_%M73J_nzL&%meQT=*1x z5fd=b6?pNH?jx8YlGK713t0bhr&!H?lb@I$x&egNNx@4t z1zZR}ho8Yu;V1AX_#^xQehne0#S)u#d3f)(?cM<(RZ0)|jgYmbj`wEZ3|Elh5JRbk6y00>Z|5e@BS%?3@ zu(kV26ZjhrTf46{g}(;a+I_WW;qOd14vvLqz|-Mra16WvPJrjb^Wb=RE<6XG4KIh6 z!HMuvcnQ21UIZ_M*TG5fT6hh-8eRpjgjc{O*a*{bGQ0`i2ycMb!&~7ka0Z+Xr@^W4 zW;g}j1Mh}+!I|(*cn7>4-Uc6p55W83Y&Z-48{P-+g^$C>;G=L3%)m$B!|);a9DEi& z1D}R-;ZyKQ_yl|vz5-u{^WaPHMfd`I9=-$LhHt_7@J;vzd>y_9KZYN{58(p%0em06 z2j7KX!7t$#a3TC0eg;275ZM?-o^C)u(j{?9gM$KeXsB+{IBYJjmP7ERo|#W27VA$ICN)z}S4qN+PYYKl2u(j{io`t_N;W#)Jo&isXr@=As0yqJl56^?+ z;kob}cs9HoUIr(^OW`H(Vt5g}5MBo-!E50)@M?G!yb@jkn_weM!^!X_cq6<4UJq}D zx4;>2I-CZl!kgg~cn`cA-UVmEJK-Jhc6b|n5Iz9!hqK`<_-}Y0yca$WAA^s=IWPks zfe*un;B)X<_zZj+&V^6GC*c$DRrm^g8P0<*!585R@Ok(Sd>g(6=fgMQ8}N1b8vGc3 z1V4le;0N%1_#S*0eg(gTU%-X%bNCtj6n+AKf!5_$~YfehvSGf56}2BKRBp z75)N$hHd9U+y2j<51gp!-p-oCa3i=O+yJg`*mf@T(&tF8^!daCRLXL0alugc5-(ww((tLXfLOWTNMtcQv!4)=vNG zQ*>CU@@g-?avHc@bM48-oQw@KoK<4rB^rh; z(f?GAl_M*+)&DEEt=u+MJ}7G+t*$hiQ-;@$s7{sJ^WD{bA~B>=-Jd#a_|R0jJr6#U zRvRfFx!;HL>%(H!^3a%b^>;mUPP>-N7}=sySH8Z9PtAI6d91u^HhzgFAzr-^;fjh> z`I=e#5#mtos|JMSobwJ@``FM^hp7F4@F|im&)6p#HZ+Vij5hSQ*U`VCVX|jbbf9AW|gW-xi@LvGWngiQu(bi{xeMmUWq6#&2P}N z`(RR&7MglhmEOjLpDO>}m^EKP`E_!0=}1ia)wt909WhkP`{%4VQGLpQSo!zHZ0c3z zsNou`RJY1h`NFJyWg=rX64ZXs{5_>}KHOqg%vkZM?vm4}Is zdZh99kYANU2Vv(m<&RvM>6Rs8IaA_s=}~>A?(FE^)|tQR+-h%QQ{RK${x)3k zZ}fASO^++5)cASX`}$9+%YWsZ%GKu5+UZ}FgJ#_6)kw)4F^Sn%U+0NGe}B|m zzozvjEdDe+J3e|<{*!RD5amjYUQ3&SS2x;PB-2)pr6@0dx->nh^4TUIP7kEYDfhJ1 ztE0qGSlq>&yCypx2^Bvnw&K6zJgYCupEgXUZNH-WBrNxxf9VIzeSdw)*H@ZweNNG< zK3HiOPdAwK#T%2B=(9+%)jXM=#+essSM2R8|Ehn9+RLnC?L+O3@s5^%<5N<`f26p? z>!h9Bo&bzSchE9cseSc$fBH>_u>|Dkr0jPp**YMHBDj zF~nP%=dZ-uQ{3g^4I1|u&4gT$V6nHiP}5=b8vReGWH;{sv5((;nh7^`+#DmC# z%Z%+7yimy|CSCEHPba;zNpB~Uzg&2$<&{IJcbJB=ul$iK5-hQ1O`I{?_>(u2f1kWm zRLN;Jo>0lUlv^hoelO!)!duOjM>hSXdGasu4iu*uUwm3m{PAh}G{4%?a`AOA^(Rt1 z&Bj|a)zh9g61drxw+hLao3iDrs?hHKQFoJ#yc7L%`c~_6qN{7qw!LZp*ir0_{*(%$ zdO<5nlJxLN?|!{r6&q2j_9Lq+Wqg^_>$O9w2dI5`#L%!`uaA-kBDJp$53F)}-Sta}Nz+Yz zb^V}w4vSBJ$k@jw{blIS|6ePm_qWw3rH%D9{%6@@^59nb-QTqVbZ`$4j}dGSPZnwa|Q5SE&aQyvc)FXN)AJ-bi~`C}xdM=R2;H zU%j+Ehsg7v{x9A1QqM&L!?mWL4xe(Wl-pPnrn=9SPxRDm`8at^SXKGIV!{u4YZ}I` z))d+F8o6J+z?hxflWE)ErOM_R`=Ixd@#oq{bK^TFN3HTI2Qz-R&DpC;+wp@u&lo)z z3VdMb>RpU+xxZdDHxAHnMMT+tKh)t36OJ1XkCK~Vxu0yb@x(S;M@-UgM{BBtj0ZHF zp!{lnG(2hV@>l9#2PB>+S4)eNIpde>mEX zH6B-f%KDO^@mJMEy|c~O)7^<-xgRUH_VLC=rhY_x_YMNr*hPER(qeBcB%1deNHx_*Sm{_ zTtROOL%qM6{Fl4GxpB~3_{LpczoP#2st?%bl{n7{k)m?1x7fS!T8+rDkC=6Lic(j} zwo!jQY{y$&w2rrnac{?G@g_UoixkJaPGX-M-&L9ZF5Wl>`NqAT#-AMrMT&-cI~%hd zXGDtXjsJM#8Mv>*ztu01qFS%sxF5&;8j+o*`%Gij?+&U`3L5RH<%#S74x# zW6*2YqWnxbKWAbYwB4S)h^O50$puA<9Q+yST|3O>*UF?OP(Cp%#-69d2(DmPmUe)Vq>I?!%hJ85s@ZKOUFwX^wZbnT>wcH`Q~^-HwfnDQ0o%J&vizD`f%x1Z+p%a(a6sxhr$Uv=gUywce=S)AA1sM?t68PVC-QY}KF5kNWE?=DE1b^(SkqGp`o? zqPxztC+t78K}W$`w!LgVKJ+oSLT;fjCqrc6|zQ$4u6}ki z^9#B9S!U)fa`iK0Bp=U?57wsNbmN1yxbMaXo$dTm+Kmr7nR$#j`ZFTqful`&-1xxG zYvslVCEnKNz8fD%jWT98J}CCKGG;eE2$+64==BoYrOV&RN83}re5ys8N%fHREL$J^ z`lheAA0>4`s)dZ(Y`by(o6~Quo{5)iJX$Ox?`Zrwa;+;1n*fvPr;WQJ>UH3ey{d7;cZ=Q3-h00MCrIVY#-m8kuwHpmp+}q?z_?yXHO&8BK z-K>0!9OaIiXLk2vWj&4iOqKeQXHM(f8q_SstL5M<{PP&i@7wtFZ*{NnRg0%O-+a~5 z-}Ao4gsJ5s(^wT6zWtteZXIIj?|J9ut8|^-xX+uf@~uORa?c@EahpFkKb1_XPpc1= z?zz<8Kdjt5m6dzY`|2+jo{BC;J<#$p~VB6nnIp}@|*UnYmx%K3cvJYZdwj5+1 zgjtuat{Ncg$%C@?OYeg?+1UHrZ(l8M$$VJSk-1#{$ffDh6lcFPU7EiiqNfQ*(`WZX zgmdvNwI8Bu)_&>z5O#h_^Rx8+fDXoeV(=!0vBC2U{pG9A1uN1AkrI6xk@Wk<2`7s` z|N2u0F$cX*jJxLcL+E{#OCNEe^3aBslSi3pSDKEc_d_i3=QpZ>+x-ypv-V5p*XGZa zdu;Fmqo4fwT_6WPtvJ8c8r5?1t8xo^PZ@W4;f+1qsxz-@Y9Eu%WZKSGx&0|_p55)E zNKLTmObxbrsz$nru!KAprW)+LqQ+Al8)*j9!-v+3{`x*EhXnK7Qe9;|a$(l~Ke>-$ zl%z@173=uC3EwZ*=S3cQaxmpANtWlA$K4=KSCyUJA7Pulmzg1! za_Ko$y3Z~%(VDd$sr#1qNlZ8C%Z~T)mpOlF|5^{@^6TPHHs$$CTld-@jivr-yv|>; zX{?DSRNUV<)Nu65ji`K)^QWDVzdttZ)z|)Qdp}KF+4z^2zEsV8<1SURz%W~nR$?DVYtv=hl)iB#Ir>|yOd)B-B?O*k( zzke|C)Bon{h5YA9*MC=c_@}A&Dz`C`vbypqCO$P+4<9}z<{Lj{*Xb%M!v6KX;nHDi zrV?hI?o#7l;}6S%pW4^Tf}eXHR{Pw#(FoZ;XxnpaFwe1#>cj5SSh;bKKE*BFZ)kn= z_mgAAyo@}g(uBpImXC@o=uz*GU#vzf<}e*>RetOSXB&)LyoE%KH4% z#=qKEkGAXWvdvT4tJOzpzw|y&tDpSk{7EzI%gH%nT9=f!uU#)}!M*m^u6}05YYJul zk@48d_?M)5)iSRt!7mAUc0X*;v*WdpXZORV2A`ajmxk~5Q&lxuxyO2=Z_91{PIVk) z+$Xh@QTM&Ay^eP^zQo{r&HWg9)1S^ME#y=EH76I<-+A@Mv_F+g(0kLwlbUpZp&KW- zdGb_wUwgk}e|ujektoa&4E_Eu2wwDlJX>}%cm%D<(2n((YT_adb>13|MYB=L;2@h8(({>f=J zUvA!`iv5soUL-!z29zl4Zal^(+I%J4JPPB)6!R>}Mq4lP&#$hUX!p^$d5ZW%yWb{J z=H@x9yxshXlZVb@={%I%x3BV2g{$pC<&IPCjPg_s>e5&3U2NKs zzdkRo-TK`%SH3~d&NpiPljuyEH3t=CN0@{JJv(3T>RoK`Fk9~!|1~!+=+do%ap|sa zf4A{hmA3xfI#i5#h79^wmtQn~w=ObD%waJnn`}F(*lvai$CR7cCwl*A({q&=ubI22hgiVgclahg;kBn zTio|md!gQU@t<~PCoxHW8?7Ez`9Cb_?p0K3*3Z?Qrc3u9D2Mh?*HWLQaEn=s(yM!>jo@ws`=_(Z#|6AD}y+)LdBE(mJR8wrFvYRyyk>Obh69~3O3 z2b+_VPBpl8o|Tg(TCV!QMuu_fpY9jX_~PlfDOcSuaHKI0$J~wefCT0;FKq6Qz#L*d z;8e_ObAKe}wO9`rg}F2H|D!Rx^#QkE!S1Wftw)ry9^lr?N>~rD^LLRzko5q!9#L%8 z1CldrKa`wm^`@++8TmCQFKwUs@^b#FWp{>D19|SgMqDjjFSTC#pKn|})gH^qz1myb z_;=;*+DXv+*mMAXJI1g^#nay#IjcLn?l4+H z*ZOq2VLWZ?yGvIjum$Dy3+1ype!k-(;yf8%~H>dzv~Jt!}`&Y<%geIzCw2Pici z+X(BsY-r-Imio7g{1;E#bycl@TN$%mcW&ALy7&*_-#(v3WWP$-`2X9ar)B>-3YPJh z>{l`IH!imBC4DBnFt^`GwXwJ_DzWaHY#&i0Vm9ufKF6B;?H~cjrRH6Q^*dZ^$~)-Y zZRQ`VuCnX@uDsklb941mW6m#Mr}yiN>;PQDksq(B(Y8z7e-IY4)0Z3M?aNIz_A~j7 zb+P)gc4AnYf#{#O8QJ9O!zCu&F8rXk$hdRwvBuZxuHHmn{U$r;t-eyT|9M3vT`_!9 zwQg3g>;3%v)dy_2arAbiXd|m<8m*qvezEy-DmU>|7j>gt(PKqr>`Ot96@}QBf*vbc zn|&?lv7)u?ew{}2SW##EqsNLm;U7I#w3^+o!+Qo1={L-NokrIErQVz(DT_Cv$BKe> zzfN{PS~20feKr9TzLUEvkDzygDG#0h4Ccwx^|M+)`TDHd8{AIynA3~?arRo`z9L>} z>Sg};t-1QB?w2jEV~u~;ujsn{?&2;IIC^n!q3d5-ZjXl>|J8xR7F&Jb`kzAwosazw3YY!oTZ(`Yx8oR0+@ZKf5okHfFb9 zW4FZ#V|M+|u9#i_(`Rv&x$pX)ofhkmHlB9t;X4qXTMyrk^o&JcZe!Au86ckIa^p+a zJ`>R%roAPic7ISJ+8wiPuZbw<9z;3!Aj-K1QLA4P(e-d&4!c1+eosWpFs}aMys zk14_>rlU(l7sJ2dU+_=(2jtw1DCcfOf5V=0H=>-o5#`*CDCd4eIrk&VxgSx^{fKhz zN0f6vqMZ8?<=l@b=Z-`#BiGEJ}oI4Wz6f@_JL^<~)`Vsb=dlFrMnR8E~ zoO=@G+>_|L+3COuO(Z?`93g>q*; z!Uy2}a5mH)UhC7p;eGI4cn`cA-UVmEJK-Jhc6b}S72X18!0B)roC^@Dx}Nhrl{G7}ml;um%o< z)o=ie!6>YPC&Nm35qjxC`t9cZNH`9pMged$=9k7H$K#hFif3 zxFy^I_J*6o&ETeR6W9y(ggxNKusaOHjo^lG1Gqk150=Ajuq!Ns>%tIR2d)jfz_s9- zurpi(c7m(J)nG?h3Om3O*d7L9J6H^hU;uh>iFweH{vZAg|AL&m8T|t@=Wa$9Vg3zr z?q-y8H=~@p8Rgv1DCd4gIrlTlxt~$a{fu(%XOwe4qn!I0<=oLI=Z;1>cQnemqtVZa zpL0i}oI4uj+|elKo<=$MG|IWB(FOS9+|wxMo<=$MG|IWBQO;eBzK#30;C%QdF=wsY}6wZNmMqw2^8CJrR;EC`Acsx7~{tNbp z$HHS^1Rf2Kf=9w5U_W>`JPaNR4}k~6gW!Si0JuNg5AF;1fqTQf;GVEA+ym|o{|R@4 z|A4!~U0@%$Gu#R82zP+n!|mX;X51-C-DR z1UG~m!1dvJupD-SU11qq7lzmx20Ox1*a4Qn_Am(B!D3hh z1JHv@0`~cBG5j0;1^Mnq^bgE@cO$w8^KX#vZbbR+MwIVvMEUMV^hezB-H#~W{fP42 zk0{^$i1OW!DBt~v^4*ar-yMna-H|BY9f^KUxO{gc`v2Jb62Q8uYVDJxp)EtHK%n4s zE6|Cyvz_T0bZHvqIf_)B0)ApAzmC zx|1)^|BL>F@B!h+g&z}sRCvFTE37vE7k)^1pYVgi4+!5cyjS=>;d_Pe5x!gaF5x?c z_XzJ6-X*+Kc!%(I;ZETW;dbFR;X8zH7rsq+oA9l|TZL~CZWZ1le6#RP!kdL}6uv=t zlki62>xHiqzE*gH@HN8gg|8M~C%jg8jqp{%tA(!=UM0LzxJCF1;md_r2saA{g`0!} z!i~ZW!u7&+!hT^<*e6^o>=pJ1*9g0XUBcDERl-hThcFhl3k$+FVP4oOY!R*$HVa=S zyj*yh@KWJRg_j6d2rm|1By18c7cLVn6<#P@B3vw7BwQ%GKzP3JCBg;5^MvOL&k@cS z&J&(3JWDuN*eHCl@J!(u!qbH>5}qbJRX9g@itvTPlZ7VMaI$cc@L1t7!lQ*R5Ka{4gwGc~PxxHnbA-cg8wLHGZ65*cb0MI8 zb_CSDo2|Ncv-M9D_b`84_($O%g#RV{z3@MUzZ3q4@G;?Ug})L0yYSb-UkU$B_)FoV z!haS1Lilsx&xAh}{zUj=;a=g7gg+GiK=^&3?p3 z@T0=}g&z@qSok5~eZmh4KOlU+@Lu8jgzpu;NBC~xyM*r)-XpwQc$e@_;T^);g*$~i zgxiJNgzpf(UHCTPZNj$-Zxy~pxK((I@Xf+E32zp@QTPVoO~M<6uNS^f_*&r&!q*6| z7rt6}o$y-WHNsa3uNJ;ic$M%<;TGX5gfACfA>1q+6mAj@2sa8h2-geO3HyabVV`iV zuvge4TqEojb_rJtR|z|X9l}`HE-VP!gn41Butm61*eraR@N(g0!b^oO6<#7-A-q_4 zk+4a)T)0fQRCu9qiEy!Sk#M2#0^#|>mk1XK&l8?2JV!WRI8S)C@GRk6VWaTH!ZU?u z2u~NjNO+p?RN)-qDZ&>DPZpjeJW+UpaJF!k@Oa@&;SAw);c>!g!l}Y3!pXu(!efQU z7=EM%dLFgVqdz2P^uSK(LC>CG^xz?544;3PK{R-lGaoq7nGbAV@dRzy%Q8g!4tf+2 zVR8qZtqov$hH#S6+u=_83^(je^dtv%NdMFgUy^XVeu~#S&QEsV6&GWD=N-EQdj05X zdeQmV=@&CyiP9;|&=OpW>n7^P!H!j;56!nw5$?)INf8kGb&-jX+n+o~h++G|XZ^FO5 zZF6sUzGE@hVT~A{)8qTF>ntuNJNq5I)61cG_B(o~FGTa~cl1uLI4OstZnJP(23-9g zaNP^^Ih~&6t{pCiT=io86We^Yt^Og3$bVPUv|p>$<6S%D4}7{G{=)CasCQZ#4(m$} zUf7QI!>>Nt`6qz22Lyrh7bcQ~`5RsM+l@3iVeMkH^qmoorN@cKO#5Is{#=FbG1pi) z1F8=PAFl8aIX(l-oIB_BWD#`rb~k3Th3EDE$X~|SR68*0AfVSL^ZN3s{kl>6!=5zL z?e)2L9Ss5xcN>3%^c-8aW)yo2>Sxkjj}!ONg!(ADZCrE+-QsC%UhZC+My;~+G`QtR zoX1xa9SE!Xs9@%dkNHVxG9AzARZjnw`g-`E(SP*%yT*q%n)8Ie-TS@A%BxfQyG=Fk z`V-H=v3TIYx3Bcv4atvZsb3i8yAiKvmX}=4$F9DvR(su7IbDp^&&BHJV)b+J6w6pK zRzDZ3pNo%``7uKEv$6WwSp96Qel}J=8>^p<)z8N2XJhsAvHJN~{d_z};j5pI)z8Q3 z=VMp!#rSNwJ4-lM*eHClP~(hPW7TzVi zQ+S8)cHsww9}vD@c(3q%!uJZ_BYd~;)cMEq3 zKPmi#@B!hMgkKbXLHLmHLE-0xpA&vo_;umegkKfz5q?GZW#PXF9~OR3_+8<5gpUZn zE&P`7o5F7he=7Wm@W;Zv!XF8LDExu&`@&xd|4sNy;iJNT75+l_bK%c~|0(>P@IQo) z34bg6jqu-vzZU*Q_-EmtgpUjVDEx!)zl6URYMn9GI%BML#@L1jXx~rB-QR@&E&Quc z>zuLHIb*GJ##-l$wayu9oio-tXRLM3SnI5@)>&h%v&LFyjkV4iYn?ULI%}+T)>!Mj zvDSHGt@FliWLS)ks9{2jvDSHGt@FlO=Z&?_9BZ99);e>XlRvF9$69BOway%CojKMz zcdT{pSnJ%e*12P?bH`fejVY{#(Y!eoRZo#1#yNPBo?v;6uaE-8A*d-hkZW0a%Hwrfh*9+GP z`-QI*UM0LzxJCF1;md_r2saB~BfMVtYT;d_Pe5x!gaapA{=9~Is&{D|#V z_<-NHAbd#ppz!m;&j~*({JQXK!mkSV2)`oyvhZJo4-3C1{I2jj!bgPP7Jf_k zP2o3$KNbE&_+#N-;g5tr6#hW?ec`W!|0evU@KNEv3V$K|x$tMg{}ldC_#eW@gufO3 zM)>c-Ukm>t{Il>+!pDVw6#hZ@U&7xDrDqgN&nT9jQ7k>9_zAiDoAAGde-%p4DVCm7 zEIp@KdQP$QoMP!Y#nN+%rRNk&&nlLlRV+QLSbA2m^sHj(S;f+`ilt{2OV2Boo>weA zuUL9svGlxR>3PM{^NOYC6-&=7mY!KGJ+nAh>&6YzGmE8X7E8}8mY!KGJ-1kTZn5;- zV(GcX(sPTY=N3!PEtZ~JEIqqedUmn&>|*KJ#nQ8jrDqpQ&n}jpT`WDnSbBc3^!#G! z`NgLwAJX%SrRNt*&o4e(_Gby_3LAyeGmNEY7)#GEmY!jJzTCY;xIlQG@Lb_J!ui5^ z!ezpx!V85jP`F7rAlxY2AY3n8C+ru#Qh1f{O5qma zD}*l>ULo8pe2wsW;j4w$39l7iBYc(cYT+A&ZxG%jyixdi;p>F272Y6xtMFFgTZCJM zw+P=Xe3S5I;ZETW;dbFR;X8zH7rsq+oA6!2cM9(j-YvXKc&G3V;qAf?3O^uxzwln+ z`-JZmzDM|O;m3s^6Mj^9zwjf%4+}peyifQU;irY467Cl65`I$n3E>06FA2XW{DSZy z;e*1@3qL3Ptnll?uL-{@+#~#o@XNw~5k4&Zp76WE?+70eep~o0;Wvff5dKv76XB1A zdxbv|{!sV>;rE5V68@X;m%>Md|0?{2@aMvx3I9|0JK=u_9~1so_#5HB3x6&Ai}26F zKM5Zf{!#b`;eQE#FVuHNvA#2k^_@|y?~LLnMVtr>8>pQbp-N~?&-x=4Gnc40x-CM*j3glmPp!XDuoVYjeLI4ImC91w04ZV;{)t`qhPUn#sw zc%^WQ@D;+B3$GAv7QRM!z3|n->x9<|uMxgVc(w42!Z!$S65c3$z3_Fy*9vbCzEyau z@GZiv!drxI7QRV%vv8+yhj6=aoA4dNw+r7UyiNEn;X8%*2=5l&CA?F3hwygc2ZbLH zzF&B+@O{Gf3g07qxA5b_j|o32ykGbc;fIAE65c2LjPTRKPYHJmcL_f!{DklU;g^J8 z6n;VYknlm_=Y^jWepdK(;n##;748v!MfhdmzX%@|eoy#a;dg|O2)`}-mhhXxZwP-X z{E6_#!o9*D34bX3f$;mnUkU$B_)FoV!haS1Lilsx&xHRe{GISWgpUb-EBuY{--W*x z{zdp_;h%($3;!tmgYdtEzZdG9kyz)9#5!jr);S~b6LR-A;eQMND%3eAvCcV(b6mSm&(7I%g%;IWMu!d5Lw- zORRHVVx996>ztQZ=e)!^=OxxTGqKK@i6@S7{b5e1b7o?lGZX8anb@5(v#)wu1KZED z4V4KtdSXoOnE-A=J;QCbz^GIYs6KN0qFl|R*ZkqmA9qv7;Wzl^y=E}D-tBu0UgP%9 zHo!E8Uw%KgU$(2ooSD8$2VQsW6pi?)U&Gl#8;lt44B7|o$&k>!*Jlack2rtygs1f0 z)B0$JZBY4hfbv&4{S2S);vo~wU+H;GUf<7VJ4h(g&-BtC{tvI;r*lia9$)88u0E_j z;v@zG{g#6W(PZ#vesL=a(Nwda&d)p4^22iwUk-bwhYiQ) zuh{1T*fp8HQBFEnbk`0?k4Ah?<$O=_!Qy+8^^X3J#4kOU{BKl~3hr^)>gqG{mA%L1 z#>6~(kIU1me^#n*M*i}7@_J`u&3{kffh;?p0Dff z=@{r-Y4kw8*U;Z%R@~&yF(ZGP*EgT&&wZQ#8u!gmY?&V7lf7?-^_DTF^|th$ndeyj zWc==)nF(oq&D=9HJ~7YUGczVJ&)&NdnR#*3^9=nxfnj^zi1x#Lh7Z$ABY*Ey)9BS^ z9oEB@@E7VoQoz(lUp03FJDtAsuI)yee5XC-VIzzfJ_T9Ij|P)ZOh@*fnY4ZO=Qgy$ zi|(08^+U7yb^4*{JFQHM-BNSs%X3iod;5FUV)$pjmZW2ta0}53tiIPr=els=A6YHGM@IKaFu#2Mk@v_j zfw<4lVrKk9r7yWJ?3TTj&Sac7!h2-uqeGH-7=Y({C4RDgl$F!nt{yaud5*>J`L*kn zMpi5r9}e^7%bWhjgD&;gd5;S}lxN;Q>!Z|C4lxVy*Uo8A$K=#4)1GOyRJ~Ad4F>U?uEF~ z!l(P5?pznmPqF(VQu*AIiwovH*N%IxQu!R{>G%8l?uwhXS$O$P;_D9jL_0)bkgwI! z?d3?*=-uW%?2q=qU)Ud2>epCra_~vM?uTD}^S#v@S*oaq+jak!$}3D4 zSb=fH{gw|e2mCz|xPQgWH^5O2?(*K9?hkLM`y5Q+e}8}fn7gmh-*-rPl7qeX@9#ql z>r1J;viU_lL&f(p_05L<{BD1b`&!AfraC8i(tFwKqWSQ_`46Iwb{%HkqlQrzxpSs( z*SV{8qwSpOUB^26ruzD5G2J(Kx-MFVSBArOwX4yYH{iak<#=VhOK6_>ufrV|&OPPl zE;c?q4Umg;zjm9>cdc{xlcxSgM{{AH##?Xhcg?47#8Y1voeg9FLn3HG}Rpt&4c?i{ISN5H2l%g1+-7XuXpwcpAX|>dKn*$2JUj>FQz1-!xg{WclBum%YJKQ<8gD<_`6d#-F4zm2E;T=#?4r8N53}-(6 z;AyHK?Pw;>Xczy$9m;>eFS2UjE*DS3=)+ZR2f6T%HSY+|oe!V#XKV@oN85SzyMp*w zPr~?^KIWG#Esf9J+uT%lmy5UdPCEy`spbw>-eeM?9@G`CondI z=K%4#b)y-l$efiN?(=ipdQmtott9t+Kfv!}_`C`~CbfW%P$2G1PHyfjT4V3;Dnfoc zxk@?JkBKh*%*eI3g>s#8o92}7pHC$cccUj4OUM2UKruTETw|Kek`=z4p zAsf(rD}Mg9_U;EvF6M9jt6`Y`k=^6v7B=dmM)U8#d&*zSlso>|`jf^@gV$>P>Ds-t zj`n3-!v2Ki+XjE+yRAQQFo}otheZl|;wj}ObU z%ilk{c{BQ*wBK#dby`22TeA-3w#E2D_i6dGu1m_tb!$=n`X|f(uUYu@(RjoBEiQdb zukl^uKhO7pmnH+4W`H`WocX^G= z!+KR|9Kdjy1mEvBjQN&@5)gnBT}$q5Wz+z;NpE^YQ@goz~Id z7{};vyg>6^SMjgQ7vpb;9(3`xnDOxSrF*iwN7tLbmYu41t{F$) zhiMM}{r$#kcRX(Oqp7wwS^;zNmDo^c#-kc)>!Pzj@0y4|cp7T|8eIr%s{NCVD}1_r z{(b#oI{$+Fh3WM5jO9l@vSbUX4t<6!F2bwI{`Dtu)5;KMg}8u$5l z7(Sow8aH2At9e3G?NPd4!JUI2L;lQxy9b5bJ)1>;N4tSTq4qG{ui(aKYj^6r{JOlY z5U1n27TuGuS^Qla9fNSz?(p{<^hBo^t@HA0yLAtO&daY|E&oowG}U%S-R55R$JfT- z9mBiI!sq%jg;KpqPnNIq=jD(upJQvkRJy()g0;awcXz%aD>a(cJZaA!SQ9gzenIucmG6kkHE9!-`^u}u>6ZJ zH3zx-C$@_(H3vlORM&2Id}*o~>+YY}?(Vs2su}I>pV)r2D;M0ObC9`zmFPMPpY;Vp zv?#q_{ufSeY=>h!?2mkXtHiJF(K&OM^67aQKE?2F^-M@PVfE|~N*CVGGQrie?fyQ7 z!%O&hSP35wDdFSz5u_}EZ$xP@OIy~g-T zdBFbtVjvBUt$WuK>|&Z~-}!{`Ke-R&?k6}-Oxwx+YB#=}j8VJs?PNa}ukM3wsvYI> zwZpfQTD2SBPHuaG?Z(O%n3nH5t$e+lC~ZHLY^^ z`1F_Zt(yxGc-C%r{&>vtHqUra$!Uk{S2q(mlEzRNB8#&gVc= z&J#<^DSwocZ@V0u?fZG=JVs=6zd<Gk|@;WgA89eo+$_qqJS-RJ5cjJNL z1h+18F$#eeO*PL-#s_sU^W~ka*J!;eU6*nE^XFkB^x1ft{`#O8MNm-T5Owc-}yLl(PVQy<5G> z@g*!*%CE2-A6Gdto;3U;ESyg9wF&(lFFIrT(PjVB`B)zvkjOpe$IGD^6VI}AhxzmE ziW186!ROPLb2r8VeA4>)Y#S%0_47#Gv*+vQ5xQs3*Utvy{MuxEaH#rCKR$St?A0IC z9ISiW{P@7%tLMiD2iUsC+GKp-*0s{{!D!vv=En!9QI>u`KB&{ZY<_%DWBoMN=`Ej? z_`~*8%AW$H8L9`?_g#Gm>^3|^9Ymhzvig8X;&mGYMT z=?u5rk9zGIN*I1U?8AKc_7cj^0$Ll>@8j|9zdkzB>Q773epvgX;2a=#A70qrcO#tA z_RV_4{P^|ehSB3J+(f?UTo1<2k!yPXhg-+>_sb^o$FbSk8PikLeXd@=g6kNJuXwG_ z2|B{{yM8{(e)<^L+dLPHARj3xJ>SB5Uqka9T92B@P~o1P1)k!y{ytjSAL;mGe1t#0 z&g{qM$$3F7&i}sZ2{Bz+eT|?0w=cH>>{bWsRat$FttS6jE?IqzbRQynUQoIol07fT zwL69r>_cqu^N^OcPM^oGPYn#XeENFj=cQqN8QD6O<9mJdEBi2=;gQpM)dTXy#_7rW z$X<&$*+mj}WUra~aQ(Ul>3aMI_jmQupEpxn z<=Qp*QdrYppy$5k^(XrK4`~j)2iu1(w6tL#x+5)*VplWWufv7kgGa42^RT@(vRxvx zIk*Y$zhesheeQ*^|6u)xRnN0@=2z`;>D__E;NdWj^8n^Ie8@K%`S#y58k_c{gK@!1 z_zU-&D3I!-pP4&<&RED7+LJGhaKZ4=+yZ_aL2FA#R{vqIrI+c0zDFy(NdMuH#5}A2 z;PU6oIls#7$A|Uz5gY_He15G;44Gf@tv>oZlT>z({bDD+qLw@7SURyEX7V#>XWM=K zb#f@t8(6j1-1+<5A4K<%L->Q69y4>MyMPPq8D}3ZwujzD!iS>PwNYKM|M+NP{&eb1 zY(Ts@{PO!hY~hD|eOToO>*VqEs3H2anUQ9@AKc&VuaG_(KgtJ+=tLjFHS=iKJut+> zbE|k?wm-Lx^@#4P>qXpc=}X4r*)Q16o%p)2DFDRGD#O z7@m*chwJNkQ{58FkZ%{MoZ4;eXK>T~hJN4B@9z(4e=BVNl&fL?VDY=@Z>fB=^X?ci z(?fpw{<<*c46FAnx6LqLebnt1Kj}hW-{yQUUP|`m>>S0d=8p2Q4;?nVV%)@ixpcgg z!v-JCJF&s%=f8BH?i2N+KX>gpze@Ag9rWS)$&rnFIBP?GO6p_SPg0JQ_CKtDIrt+# z$g=uK^-lcD$1uc0dy}6UA3c?J#dfkU?aIr)upJI;cjK>p85cjQe6Y&;{XLd1+p%vS zVY~40(%#qKmOEWJ`Fh*1pKBk!z5DgTuzptJJHtcN$vC88?Au*^-{JZvzt6G(j&g99 z@6N{9qvl!7CxqkPtRC>n#Cl-v*3c^u^y-S zcY43fugm`pCHcS3Xr`+_*J_dXSpJ93r{51Q-ugP1-&^;T<#%M`{$-Z0`sl~zfACf} z4sF>!%hA#+XTIv0FYzgj|9`vQ@5@j!Xy@0var@vVH=ZXyD5pI?NFR+K%b5}(8Ry;& z0?+?kz29>zeZD+Xz2C>(JO%lwgNsUX+pkYDzsx_!*@ftEYwz{Zi$FPkplOtkYt_Gb zd0INIt+!rsc>l?I!Yz9l-9G8RxOV-FUhch;Uo1zjkLAnr8NJ-nb&}nzW|{thayA_Q zv0aq*Gv(vIue)%_bUfvHxmq{SIzt#91yZV)>)NRww^!H8b>o9nFZU6xSGaWwzmCg! zY!2aX5c=;v!tq*ZyJvsLaSESj^m0e4m+RJxo_@Vt7w*%qm+Qu@PoG|{@?WNx>*9I( z^>Wkr7NMT9zOw11ddz=syn-k*FGtC*`EA9%ST2|MT^7T{=^}TqlqGIO0K#BRKxS z>j?C6vvSbugQR-7&Yt`93@;p)RN6=X$LZy|bop_VpD!_;Pfjmaa$Wn|<$Af^emK3{ z5`L0tc>eF|{d}t^ zq5f44CagCc=lXua&o>8lxc2#fM=v+aw|&>kb^a^qt@(CIKKpq^s+a5d{P)+(P18rw zIe40zhxz_7?7#p2*2{fV>nUzOBl#{&`i03lr@m|R`;g)O)k9oI+6gA%VR=?uM`B^( zVR>?0mEpoE*5>zBFV~erS}zzH_D&PMLIiv|!_AqwZ_lY-Zd$I~5e>`najhpZ#58=T z7&g3K?mvf*<$Ae(e07%PKg^$RS6rGa?eBa!Kckncb&Qhnz`pC{ruB^VJS+!a&rnm7 zdY1B^u1BJmn}%Nx_hI;z<`e%syussFsv`sKk)kZ+}{ZFbZ7tb^mM1&zBkk7^b@8S&GcpU6LN`pRzG1v zVxHAc7;omqRWl9$o_f0D(fx;fLV0x*TeE9i?*Z&?5d#@+!=b!&`^>n?Q+HL(ss;BGw-+P^T1wCEL)o>nZ z{CGxB*S>=Z^)xE!ijzb&k^eBvVS#wLCuE-@=GYL zGV{%q8kbQ{(S0xNAJb%zdX|KWUfh5R#$>i%5~@#ohz)E#c&alOgp z<8~Jj0#3Rx={BK2U$295P1&f1Dz`@puts*md=5eDULpBiP0^0y7P$h z*Z%G-S{VbuIq0pZ{YOm28hc(AN%?v!>vu4fUQI90% z>3pK69p@<}=J>2HPxpml5#I?sWaiHaFvtKss7~s zX5Mm_%U53CSLAQKuPmPXhK%PYmV&`eZay)%{}kun*B_lPJ}CXL{8o3~+Ul*&!RoE< zTsEeg^=@$gocSkRX`DB>YL*NCE;zt58jH1$A$|Tk9Lhz8T>X2j$IQR)SG~W1J6*Wm zKjZiPF~b|!S>kUy4Dqo3`E@qB^Zxv~sSS0e!k(Nz?DbZ6wU~F?S3s5C2fbDQz4#;x zfc1`#k1xqrkUsLKG+zUEx%@PYR==Tec9~{-<@ES)*noUK8Nap15`UfdxbVYv@BN2- zO3!I^?yH{Ds`a62;rVp?bougXs{4%b$Jcv*ZXn&UzU9Zb^8~%Vd_!HkxewzhEnmtR zA71y^%gnt$S7XHIdtx3-mZ#@?E_3G*?CbfS2#4k2&zEede~CM+N+e=f$4Zxt@rpp8nA8`8154o;}wy319w` z@arreOecq!>A9ZAxN|-4)VUGH4Rqq8E67h5pIwhnJoYn`+nH&>WvZuMNNZL-*f8 za~$uvKKyPd`F?OD=XxSNe2PcC*V4E48doj@_qhJupI;x26DW79jT8L$KTTs?!1d8y z3!i+TTnW!twEnrn*$-}g#M}*T++(-_e{=Zd$2@GbKR2HBp#vu2JdgW_EPt@w`Vsq% z_Db`X?6-&Rz5ET`4{UFA<-~Q0svUx;&n7PYOW@^A^$p@wjS+n&p zW~F!pdt;2F_#qFT(sJKrCrP;c(0xPnTo><1`DryC@gY(U=@>uxxvLX@@YF|#I({H< zvT9(5+V`;M201yx@R&niF3;>w`u)i)fA)QU()q8Xe_?Wv@)&$C=RZda+@E~Hl`Gs) zzL%dHl!lM0k(n?0ai4ET#OnK#Za&ts{V|KLp~f}vi*Dg7~WD<)Tb#BlE zH{l88;4!c_IROSx{;{I_ac9VPw?FCIjmx;7zZN(8bAx1Gwm<322Xr4weu6t!=gG*+ zIY=MVW$jyXuQ2wQ{bW;;Xmcvplg)B>yQ{cUT*AjKPWleG@7-$yuS+9o_retN`dam;I!7bvPe*VrMaBM*)a=L4F*O6yPGmw)ov`)`WwG=D93f8YGk+{%0Z6$yPb%*ZFko9tuVW8UnX znQaJn?sa@rHeP5KUWGb?Z1xAgy-W)@)4wq{3y-Oz&$P>`*J>t4~OlM<>L9mdQ-OVa<>aV z%#ZgU@~3HxKOe=pAK2meHInmD!ti|jK3%??n(AI=eDdp)1Ff!~^!qJ?)9$tM8PvR` zWxK0)e!k-MTL!Pc(cBHRF!hi-M{PCQ*Uv=m?C;!#^N1T+A9tEJ)B9t(%j6&%0Um}& z{-)=Q&5PjN&9^$+aDK{l7BBtd*c5lZS#fjh^$lr`W6uf{8?FvZ(vpq z_T(G;kNW6&`0L~Y`B>U-`1E_d7=O=Y@_qV~=tr1Nwy!qC$8-#Lz7g|L=Dr0U@jTi6 zon2eZd#2xHm8v8UeEhU$dfAR!?snzdFy>Y(SI?)sKOb)g9O2=4bCt@0;h>5o^|oQ` zO{yQRUX;ztUhT$z`KSFH7I!YSUnd@xpEomCs4w-|d0Bnr&R-v@pJwNp?Uy%V-{P^P z{p?G>O#ZQ-OXY}@L!lgDe_1LwJl`8IBjq#Dxx~G~^Ib%mhaQ?(d{IkESG|r<07+mG#&)}_2KFzr4Yz7|jD9UvBlyuOAKGdcW1*!CQA5w&?z{ zUo1E0XpUuRtViEy@zWf1FU@nU>#&cUj<323Z8@5^_w->LwIy)x&Zooibe(>Dwe~F& z=`^yAqKX~{BW5Q5KeKx)oWkh{e9>AGCs(x>nOg$=!xL28=n^t z)jxe*=O%w1wBy6TR&pop54}7L>&HmsU(XzMw? zv_T*-%zg;0P%fqCgKviXxiOJ5)y@ac&eu}8l%20_baKHp1MGWkGkWbCCNc@p;IwT0 z$m^WWkUvApjYLkl`#Qq%+spF2-J-F1+sNvLyZ6iAbKuLjspdG{N8s;6nri#8UT>hO zX0m91-@&oEA7QiQx2fi6-ACZ|(_`>s4wCkuko9vG=% zbHCHww-BT9ntLJlaV>u*Apkt2PXl(Jbe7R&_c!a_dA2*I$jj5g!}rQP0>Hy|$Pn`- z?g!tzm)6nXHIF!4zsE3{*X*Z#&K5Jab;J(5mewDZOB>9Y4x3L0?wNwnJ?mGg`w`1` zMuMk&pR?WMRJDAT^5y^k{4TWoP6ppOKA(*8C2J0zNbUeo+i}(f&P8x7Dz8N4wW+B&F9Bh4dUzT(Pr^`4yo11!8H7k%p1o}mAxNIv9fY>Avpo|ew@9X~ zDnvYan7457WMbnLPA=xZ(87Xuyj@>r>3yAOhXuFg*7Wq}Hneu~gk6hibG4983@v;p zv-!nh5Yk8jD)qzU=9sS{k2zK%_@$srTwf;4vZ{k6dTKd4Zm3|=66XSb#X=WTsepyK zF!%kq=f{9j?hO$d9a-gJIGjCit`G)_-Php?g=Kh}Mb;Uwov9~2(P=%eIJGO}b?8Dyis~Xd_ zp(NQe!TnyvMO*jaCRR5GCU8uVOGw+2v+)hh(dF6N6kp{IulCex7)*k}C4SuKj3!ZS z@SbsF3v6(JFh}KpT-sq=d^j4d$FC8;$$H-cJOMvWJ$K`GCVqIvaiz!m!)q<)O?o&) z^G_|ua|`i<;i&PzCj1V@kIxGHo`qi{eoiwt8bdd&_~EHx9vbmmhaa9Xhv1K!5oUQ( zDK9?Fjqr0Fe!MSr3w}4?cMyKN@p}V)c*Y%yKVe=pyrf-*cPs}!FdT)VHQu=uaK}5o zH{wU$@qG(^+wj9Pj!SJmjwhSm4_Z*sxUkIjB`pug|FeU%;I)=zpr`ivc=@s;#^iu* zMJVEpdbT(1tfJZ%=mn7B(RE}do=SOSIXoA?M*LU~tZ!TJV_8kaZ#RBF#t+Z9qw&Y{ z3$L}4XzHF!eEWG*xS4|Y$MCB~^sGC+e$fee#=Pb5;}fRuSZ8GQBupR6aSMJ-AJeiM zzsK>zGj1yW`1I{d8Ax?=+;M^bFfGH?Ctt63!~bC}0pmDV@oB+p?JWFx4h+y{M?H%7 zDR}o~JQMF6R_E}0q23#j0ne+IU}z)E*+#eEeZJmzyKJXRJtydV!Yb_a}z zx71A7f?vqn#RwnIIB#YY@^dm?R=^Ij$=aPyEA8_zXWnx7ah}U`H{$2ZdkfxI$;~#r z^9lJ~t?W;NyDj+nwCu+F8ia#q+zau?z3!VVxJv%#1pe__`y%|g1$K~qqqyGJ1lr5U zZ7}zF^7-BZ`}e|}`QC=#hva5A-amh*-Sce;-aX$|=2E_G!TY5MlYF}l@19rN@a}oF8}A)(GaqjD;(Y_&$+u`? z6um<4Ay-e=CvSV^i~5r*&xtR$dGW z>2Q&laa7B`eLF1RV95U6*P)fpAHx}y!#mq4dCQ0CehGe!_+5wJ1^8{jk9`I6wi~~9 zD?f|y?(-9dRjoZ&;>|9F#q#uF;k9-d{(KE~_-}dg?GDCC+iWC(CycvVK9<7W7W~3| z{6KLphj|$H#i0MQO59Jt+{*$u<5PQyL;lT_QBLMz`g}a(?M3)C;>SLY`P+gY`Hw!s z_&mx&i^jbawD$+25s!NglYfruynnpb`ZiWAT`z;9M*OO!>v;;d8E$;IPd2RM6jnfJ+bespUN90eGlKoU`yA#`zZlYEb)Xz{`R#+wp#gTr>f%$FET|p!PMvJLUWSXmH4v zwY`J!P8q_dAMc*8Y?F;N#KSiEI$$Gy^vm$J;5Uf(*8_Ls_j0`71Z2Qh(KFuArjju5 zT6-h@-018m!u?bG2LFcO--!1&1#W)#0>?Xs^%uO8*L>=aPWkRkqS`m(<*qqt9!63( z9)kN@;BPm6597VGZhQ~se2}fA{l5wHSK$_B2W~Z6`&0W?!2THEA+4ht@jjCHkAr*i ze>Z-!@b2R$&-vbnNKS(JZFt{;_fzF&H{SKseqS#zO44{M%+7*am>u{w?-H!shW7>x z=2@2~;5}@!C&ApepHuL@9rj!BdlBC8jM;%dbKScyTT4Y4?>pe;e7Iq}JL$_kwRZwP z+_-P?(rXy@9iYF3Fc|h-v~*AHJAn)5KDDs#K^WZ#gJHi*0Rw8^i$6buxo;PxWm*gS zM*P_B*haSCHVP2X5=ma&f*7?|N!KfR{!T#J<#{Jly+w)PeVXtw&+H-jDdZ z5e9kjL7yt{;=_19_ME52=MN!_vk?Zv{zwq^$MD{F$x{paqX^?>gu$>s9)$f#ydU~f zTkjfmH{PF(ca{~O=j*)@??>x>3*IN|eK+2Z^X?JwOz$4=v%Pz~pX}Y^{Z#KBmE&~p z9`7&q?(u$>caQh^-aQ)SdEPzV&-d=}zR0`B`$gV8WW*)jJ>I>X-h%hbynDPid-wIo z3?3vABM77uVSNJF3VWCxxQm8(O6@PX%-Mg+S(n*=`EqCfnJV^IG&}pxRk1&ErL%vq ziv8zh|Ai{{2edl>UkdEO)+B$Qk^R3^vHxxC{C}m2{fVoc{a0lV0Oz37gdf;z%siu? zCegUB;}7`fpZ)1ZkNNo~2>Qw4cdq<=3-5eZf^JaL-QO9RyTgKa%4|NwqwLLv^&Gv^ z{FuOeTJSzSa5FP7KQVYeC3rtIaDP@{es1u-IC#G>c&9w%lf&;)zTnB>hpJ)^)49^U znmLNdo*e$RgAX<0!?&HWxmgpKe?#W1$m?N_XEgt84&I|q_-JmPyL9Q?OPZH0c$oe|5ec9gD+&aL`%;x?WdXvS~ z&7Eu7v0d2~!3@E!d*MmZx;4elcn!84yL#5d_J!am`wMHl6#|}Eppa{Vknqu)B&RVZ+rqwf#-^ zYTKs)U9{aHB)}oIbX(#=)P;@6E@x7VqxN-c^37{nppwAF08*k11o!y1zHN~jd-_pOX7`3hIYw7Ro zS;JKK_vCxJ?Dz!i-u1S$wIMvtHZv3E7bESMI%5&G z<51s7A+V1@r+>F{Vs?5!@B~`_|?AbCv?t?Y@=`Xp&{A z%%QRt5zgQh^w-&*o5B!LM*RG%rESV2+E351z4x?FAu)A&j;YC=o|`q*<#Fg3cwjH& z0qSF4)YH}Gc(bOk!MzlFS&Q22Z+lC3XV*YfG^cI$*WR1gzc4bAFU`$uE&VM%Vo0BX zsJ*KtrUFF)Vxk{uUxx^-#m_qJ6lLnHCFeAsy?E*T=B4xJ&hwe_ZDwk2;u*OGOO`BM zynJ!<^0SwuoCfP1i^<&lI#k>>{fUqxt7n~d0%Gvlg5!!2d3*D4B0Tu)SM%WQ&BJWv z!H1GN!$pIXHlKaL;$`!5lO_crrk2YtS=792{-Wi~k1K#`@i|+oIwp~+p8~h|bLN@3 z6Hj2(@Re^`dz-I!6wO^dJ*(G2ly()mr%cLr0@HJoI@>HvSFt9-CzFy?PjwQxPDJJE z9~{nfQRAlA1VRX!0>G|!)4WFqS}xgsLTwP zDDQk-FRGMxp6PUu1;-lZWx5sa+(nmIp4e0>l}O0+vYbw1R(-S?)>V!+mUEa5-PyCNgbS+J=2;<*c!&xW>B#b#k`#+*#8SRIEiq$FJ`pVDl( zDjeqCXEReXJ(IJ+RjXJi+vW2YRcq^(DQ2gd_aP;P3)_2VH_fUA`JNOtM_;Cam4lU9 zYhh;C6D99#x3IE6as+4Km}2!|)@di18x#HruAm#Z;HcKmwf~#b% z&Nnx=uIudT?_AT|UFgpD4osO;m}xx;SkAu86YAayGp)awY5`U9Yu4Vch{}G~&B;x} zC>H7UMW1Qz*|8`>EKu%QyezZ*QTmT|I2iy8hmE{Zr8WPR~KkIe~?tB|@}7(Qo4CekuIzT6c@BxR;$nrrH>synX^&&q!p~_-2M_yUQ z(89(-9s_A8owY^m&p3Z*7G1$*IFO`*>G2iZa3D!NK#e5JT}-LK@yaQiX5%~5J_wWH z#y@oA8g_Q9fSC@e{uCQbOij9S)NDG&XbbkN--rQ~Y*V4H2d=?3nkb!K+)Sgq@nxTB zL(Hxk2B%LbcLrny;l$v?!qnWLg;|(!rsNR@d1p7zUojtlE<&4eQNr3~0)L&!5Djlq z8ZQRM6kR1PFl~U-tOb^i!b{5r8j+ZTbw?GpJ1(FKkF>Zu`@`Z^0YUb& zfCf3oP#e2QifVt zg#Pv!x!KOp7J;w^5+pDq+RGA{WS5NA#!Ru7}11JHqBJ{?JmYH#i?rX zkjnYW1_LYA7j~WTy!mG}ojX0{$8>XtXl$-*1vx!iWNbynsV`!XxroAh=FHs)``&@`8|onr!Psy#rEq5a`==8D~-0$H_g5)!hoxi-PF>iNXJ~fA}WN) zR_!?!Em|DyZ7qF$Edyw8*|{0Lpasz#psk;O5Rw`ApkN%e^!Idk=5cVG6(yEuVA#^y z<@OBPvHH%8bhb}P;yEL?sOf?W0;#Q>Fk~$L@UL^?S{%K*4g|&}4S02-Z%v^Kt5NWj zG%ylu`^wjGcxzs>u3ME%sp-p|&W?j_v7Feso~uH(+Boa9SrOgv2`$R_O!texbV*KAqT}t?|kt2TWOtAe8tsD zrAj_s&CgB4GQP^WY|SxsR;}}c=dk-5emF4f$8{1D2zbVsCQkjf3=)}H2Fan9ha3E{ z&+}AFn&_C76)^T~;M3Nh&t7~%bJL>p7cIVck>kC%A--d$B1aDT<cVE+}=c zG?W#j(y+YL{mH)IhfmvirGAG=TN&S!wt1y|z;;(s*L@8wW8yHCX;Eq76j_LM{PK3#nKb*l>FDB| zf&%6Z!Kh}~B%*k-AHpLgeq1fp3aVw~dwM(Z1wUVNIkUGi%MPrXo4wEJuJ?y?rG+CT z`rzh?lltnvQ!S8O^%cz$1(5Q|JQgY~__PvnWz!}qNmZlCM$`>f>2l2gY|SKVq4UpO zI)B+RR~h$xwlW0)amJ#YTMMc(2QJB%DYlGg>6G<^kMFjye%#VmEHvl4I&CMur`S*Z z85^Wi!eIW$88K?NH5>d%#$8iU9vuJl%8$lC9JR0u;4lY+m)U->VdmU@v10|CDnw@+ zBJFJNEc7KJAvFqzMN@2bY?{dgrzjB)iAqAn@_!N>-m8Rj-0Z1kA*GSC!Yx_6Y&i?G zc_9jQ?zvFkn!j}6f<<$en|=U7rlXU5{*1Od($U|urfUjg_F^eFWtfncEm*kZg89uC zHqBppi4Ty)REcTDfi?Lge6v!)+9ZxRT7h? zAjuX-2iUlnJZ&=fm0K@GXLWjR@~o6PGdKCvWUOlGxl|q3WqqzkyHo>%%hn|B(%?_J z{ERauA0vnAT~86IPBjVV6gMzHIM$0_I>*u7B2RT>LF8-=l8fw<$x&17$}T22Z7<(m z+(Klo15(6KG)fq(SwROF<;0xJa5<02ve{x1*g=xnFcyLxMk5EmIc@i7@wX#%%&{=5Z} ztJU~Yq3*a`m&Tt)|MzE7k7vTuz@(%FoC)rtnQ+p_25~ybQ$_mr;M<1=ZWY_d$zl6Y zgYfOcw+A1N+C$Pl)F6EO@C~Bi2dS3U60zKo2#F2|2?!@IesdAazGJ5K7_OUjBGefL zQq&n7cM>a@mu|iebr`c$`JvPU)B_P0Ab?ZbqpIcz()BY^vPQ z;{rhOwBscOT5#w|M`319U(D@eQz4z%(cj&5w5Lo36w3~71v0`wvw&2Pd2n~X&d`j*(TU`RoMl}vv2rG{#IchIq=(gCbQNMjfUvstblFRXeawp+R46TK*P}aaOpD{!y znG)-dvhIf(76y|{7uOJ#&kruMk71W2HcrcB*R4*~LSJQL> zGVH7pQ0kCxtejjB&g>g!l(R7t=tP-Hi<#3nufJ*4efA4;c@!~IT)pC$3s-fxVH;K( zvzj422-HG^mn<(-570TW5Kj#xNIJ>E47abPwY9Uqdu?;?x>kJI&|$M1w=Y&wZdU54 zd`Xv)=PtZ(Nw&Q9sjSR##c~>P89n*(@hjCQ1OtDQC#UC5^%B#1?XuOovK6mkR+Y+D zyfi4uxiLx_z6K{4|8pplnrp0H=3ZlzvZYH6R?1etG-xR^*Wjf*UmDgQUz#8eX(4JR zpHODuWYFZ9WfscwEI%NsAoVdpjQcxSX;o#N0a^|nCzD9HnaU0RIo8t@yCAP1I^6)k zgz20d>a`n8REWiQRK9OH(S&aidtH%l@FiUvDr2Fg8()%GdpbF2PxMf=ag^?{xG*xg zNkR_#ti;TOxkgmQ-a@_;x}MIGM?K~?bgpUZ*^qOB30tMTSOO{8!*e^gSSfRAwbfUJ zypsz1Tg)OKHicB%&6(LskCUU6#zV?wF6AU6lvIM8w|w~$DPRO)V$lbDvaP19ctI#8 zFSt-wZsQJuq@bk;Ew0N`nJn_*65*d8g{%w2vA2emTlPcDQvV37{8v!0bfNe6^rJj1 z^VStb-Z7EY4!M=yh%ICJh2GM2SU2#`=4E8dwmw2~)`ebe@z%S{?#5MFN%M69Rf?V2 zFq(%xXrc`e!tJ@xa){+qsYr>JJv?nxCvlb>))*}9`k*T>@m@T4=_2gJ`w!<5Wg4tU zV_v{IWZ>DR(VD^>PDf^av>v*(>mi&<)ne8UqxNh$TpyV}Uslm&eWF&uFS?|1YPz!} z?m~?iKgsCqS)api7V2hZEhSqCC(%hVVE%D6FLhOw4XKla35n5=EJ$313@ED%bTtAU zEaX5voa&wBt=R_O)56g-sxW0|nF>behMJ^_#;$csp{*afvFiGuGAhHN<4jOebO`O! z51W*3h$hW`u%h6;5CuI?bu*&de3kJ)}48V-|1nd zSdLkBcABQ?dy0L1c|XtoCGEM>B&Wt{?`5(T?8x@d453nw4)bI#6NVdZn_8AJ_Q<3n z&}8w`Mh=;S@Xp9BoWK0M#n|gyj_rws_U#HkWNco%6klmBT9j^G1alquS6}3N`O+~2 zTm&P5WD1&_;SagCitSZ)Fx0Twstre~4j7m-_1`xCfTC(rv$9qhK6^hlSPeF8D|ybi z$%K*&c{GBM>c;>gTsjNTpY%$#GM)Iu%WY}^L2*=0w?$$)h@gB;*S0JWmkDnPDzLNJm$&kBun{VUFmdbwxx)^IV!qXe z!Dq#VGcq*G8>z!P&X|-9ltCURNZnLvckc&rC~`<#4S{&PrRHGagB+b1pM2k0lv4 z3ns8iyI``XSDqSB{;`}=VQW;?3?=T9ym*r#v*8_Oa^PeK1~7K+3>p>t$I9QGxQ0?% z;}~iHTD`Ii-v0hrL8u)*^`#sT-M+*V~QlE z`6;nWeE1=xx`WU|XjSIk3U1$roKMrZ5?LK$ln&b=#*VNZV%$i-C98ur1H&COtmQM# zMCA#l3$TL^U#@4Ik!aU*QIqo#v|#KydacVPOXr`nV1<+~HQnP*`Scu4m|BsAR&0yZPq{k^eT5fCKH79MD=3A`?zf*C24zOiVKE!eo4v*! zv@-jkQh=_e*o&EWSngD1^@|vkBUrpSu4GTyQbxOU2i0~-=4W)Vm;yQqTbnYdk8CRJ zs8&*k%dY08tIdUR>zh$e3EM+PN=?X<*ubGJHi<$_s^gQqxgfDs z73dv-s-Uxm?Ww>Gs0wbdB^9^8F*|fw0iBS~A)7t%{+QYrA0}QAHhx6{jSEVEV!Im)4;~!R3sc>2Wke8K(LC z`Ij_9EX`{=dp_xshQJ`e2H$%nYbK^#*1QBGS9!3q4LZ(Kd=E*BDXqRDo#}S{JUI<@ z!&j`ZL@E@BMR4gqLP62CRxkA%m_?;{w)QPsJgx0Y=dxNn8STe!kS#TAC~6!*b`giusv6V3|ay3^7Pv=Vl+S=)-N z+oo$Pw70D5!Y33wQ!?^wAi|*=3REA?=O*Q5Z9GR$Ha+ldL&G4^em3kQffL`da?9o~ zy=eZ@=5vRx1XMo^+Fi-+xqdMO39@ zU!TS7;&iZ3%={0(^URQkZIN*F)LP?E@>Lm0TBEiGTsL{n{N-n#*Nm?kmMmVhtfX;P z<^ZZewhhx+NlQvuGrg>3b0`@OElWflL)#arfT-MXBdeSm4pjmhmvUr*$4H^;KK1e$ z(4C$-ZT75L(2|4!hEv`|2D6<(HqUG`sxWAdGiH~FVP*meD`mMGS)9Fi;ljC#=D7g( zY05E_YIHsekb8~B7P@Ct-Vp}M!e0&Z&uWIYScF;YS|d&H%4tZ-MBMq>x_E( zI^$-Tb>aYIoL1b6i&E{bR3|ZY1*^NX_4sAWF7Ow(x~p03lS=BhG-0@P*8C~F2sQKw z6>>Wjmp7!k_i5C~Yv+eq%sLNt(11K!4N8{Ys$CqbJ~&%DlR2DS7CL2;yPY-F*|5u6 z(UZblGJ|pgvmINhV{PXX*HOtsD}zH@%4hQ#>q1Tzw1;0?cOGmBHu1GNxBLQplQ?(T z`L0J{`*a=LMI7}by-Sv(gFkm!^U|}qzay3;al=6pR&W@x{|p$`;UcncT|;$6%zwqD zG8-j4t)0+_lfecm33p;tE*4J=$}24_@8Rz#4o^e{XWGJwpGlxutgoEDj3?hvhiS7Y zz=(yIZ4M)Akv_3WSHXL@%bDr!+D;ol8AHv%-;t>n{!@?~PK=XF)t|^)Wf@sTu9S$C z(h_$Z3pnXYy*eYqk`K5!jeVJ~2;~yn(wt52$O_&w6vy``SC+d9tgky#0q;}93 z`D~mRh<5jJJRLC<99l+$X;Zz^69T8238C+zvUqx|9EymUaw3!NwKYrCVFm17xW=I# zWyp#(bPQ^%+Wti3*b?Bi5}Biz(#=u7BQn&nRR|=V5>?RbM;Ph+U0Z;f+-Iz;r3Jfv zp&K``_gTYd3C;MD9*2dQ7PGYvW1XGgMseY4_LG?DW1uUpmrOKWQY);UauY6{VcOWl z`k2y_S4!92lHygN4yW7#HfyS#a@+JgD;|DACSRzL;LbyH65XnTqR5qB5`@ zLQKco= zku+dY@-?u55#*`LI54;Qm|p=8r5F~vO2ydfnY;-H!JNBz>Efp43l_}}leV;Jc1IOB9zhp9Bpq=+(bpZng5or1-o{9t*s>c&9nsgI7M@ZrXsQvCtr5nzd7 z;$5Q>}6!n;0n3s-6_MAxq*K|#XUxeY!-Pp1yDdjuAS-x^3I2%_EhU@E+`BvsXT5s#}z82nAgw2>VS?#%P8nrp|jvo!I5$ax22~_qeOZDE0wO|P6 z*|`D)R4*eFGe%_dhA4P?;KyC;(J}5ZfxI@;!e_c{Hi9(@p4i;x7WDe z&0}h!Is4Z{%W-Qd?>4^>x5L89o;Ljb)d4BJ2J~-nxwE(L1$`?nKJ_%OJiQqgK6`oq z^r5&Y-P2cq{vs}x_4HMse=;Yf-vWBsX(|17&@Xj&c;gM}#qSr5sXgydzG7}lzZ>)+ zxFFVte=q1Q?*3@JMbUluUFhz7Hu`@2z0=*(Z1e;8TXc628@(HUd)%GFMt>TAzvu24 zHu|&pd%e3;*yzvW?{O>B_#XoO?STFw=!v*s)~D}b(BBK_FN5B%BemZHdV#z17jIGY zHT=fo$1++@13c^S{tEnf>Gl}WJ3u$!V%wbPFM^(li+NdIbnl;yqH9Ot(%M`U-B?23 zEgE1C^F#mNrhAmzBPI0S68dq`2jafxaZ8XsWSss+E_B<~7Lf9Yq818OHS+G2A0X_EjQ8Y#LPST@lqVq&Q z4Eo^1YN92ge+YW~_?oCgv=6^m^zUFldO}UKRrI7WQFQn*HPJTF^FSXur6#&NpvQr} zSM;T@KV*7Mbbmk}1o|P-KE6God*OccteR*7>Lv5@9?+9kBK@Mh`z50P0Q)0RxjIB! z{`+g9UeTwF#a-Ih)kGUbp9^~2)iu#|qJ4NbioOK)^*1AZqK#kY)kJ$l8^7k&M0-p8 zKPuYzbwN$E0`-#VXZ;@(HK^Wz6|u(M-g9%|81gsV1LlBk-rlAM?~L7`^Rdc z$3%Y)^qAk*M30O98tA&HHkyNa!t{FgjRAcC{GTU!9QvTTzk>gwnZA0YZ>#8+!2Vz~ z&U-~)1A6pHh?TfA9sh5k#HQmd+)$(Mr)>u%FUa8*LSBa=8Qf zDxr6a2H5iu{xbZx!~cmJYZJLlx(@W?vbTJ1skJ^FRmUEmuW>hL^F0={&!?Ow`8*7L ze%&^dA1vs9F6rI1HWuJL=zKnjmoJc5fwC7pejMsquj|8Te=_KC{g9)wUjX`mjgX_F zUj};Y)lt+ax{vgYk@1iI{evhhzN=w>B;+!pF#3yhzZG&*^dq1TdUq6EC;E?|54_v; zdkk+ZDnmWw^d8w8zaDU7nj>MxhwkoYrFpm{Uq4Ip#e9tYHRP+@TRtB}*#`7j&_17* zZ@6!i{SyeE@^^`7fIU8+Cy$5yfsj`)WqOQHkdN1icCOQWb<#cL@!hg#dJaJR_XhsQ z!~gvOO?mrBK#v6tFBYGb!yL3{(E#^A1Tj5U4yQvNi?(uT#Mo0b`95w*O*BjN+mOD4 zmSY?m*dGXcc(L%TTvpUXTSQyAtgNxI7Vogpl8V*V9y-dgWd(tlky%qEz-mP5rx^WQG z>-{50v%e8;o{M_ANA%Z0vmWjh{bSOohY*eCe)?f3r@y*!4Z}Z+G!hFDY4&SDA9Ntf zN%X5oj{$!~zlAjF@e0xOKNbF02K0fTA>u5&_rU%+9P9 zyTtwdfqgyf9};~E<{tIWLH&TtB7dwNJzQgRk{5sne0~Erf5b2P>^Q4Oq)$6Mik3b! z&gzk;&jX#4d)l84n)QbEZv=hB15VD9{siblcRRUEdh`(}_s`Z^d-C)FpdXX}6JUQB z6OA;{p7a5rk#(ct%$^CNFM$2CzJY#6^mU-eK2mG#=goLGxjPH#fj#Lv@OvQw?=1;$ zqwL3`fgB7zJz8S_Sc!dvBr-hjevIff@IU4l)ML@tf<7FH%Za`R^!$@tJ)wX9tO)E6 zfqjSQ$Kn3KIj&yNeGbBS!Ue7#g#Ne5y|-t*2;H+@kbWurAGjRjG0{H$M@7E__QzfZ zxq*5@_nyv)_U@;M{t?_iw+-z=^btp49@qu`mbl+2`XbmL-d_{lSVG?mn&oZn_^%kh zi1zVu{7d^+!T<9xg4!#359qO|)Q^ka3;Kuy>uh`*$_0*R>EGLL0Zn@^7q*G^a^YUN z_whe2dgimi|LJwn7z`p9-cryCJ|=xR>CG4i$o|KquSUJZ_>%TlJP-5@7{81D zCFo;r2H!=${rRxJ4da+G&i&FH=-ZKA(B$X0Kp%BOU9?TK&)>bG|3rIC9(D(GJ?KY7 z&!33=gZXY=zb|Lc8IQh z0o!|hv_ybe(9=j~hiVgZt+| zxZW$;#$%V&Mh}VJ2Kxj1(Lag)0O{V^Xs>7+CwHO068%}&AG8tk3ei9Nf9$;tn5|b? z-~GV($e#1L&sWam^X$V(ICIDenFEO#HNXS{Od!Arfovd_Z3#NI0Vfi1tf_8Gs-wpD znrQ4h&}c^uIMo0ng_nU++}gAb8tfEOoK`Hm8g)vejx@@ELEiuW-v9sJYwjuby59G? z`f>F|%`(A53~PE`t96zrTooLl0qmD)#$z#CxuUd>QR|;&pKg@)saIF?fma?7t?a zd~zmEh%qDen}#AH14)1N;EOT44BS?`oJwkUvV^iT4wKntT-TP23b;cpB|H`sRZj zBwiK28vchLg?_EzQ{WcH>-7HzkPm$h?Owshz$@aHKMVTVJ5V0cR?z+Z;Qdn=mlk{+ zJO%E@_t70y8(gN}y!cD-KeSX;oy05RXI+J&-@#iR?fHKhcxV;rmAE1PJCF~rBY(s{ z3%>jb%ss?TuV#|B#3#?<{T|2ri{B1D{3Pb(;`=GzKz=0mZShATzi<=%VUo{-nI4~q z{Hof{YDs+k)#wlR?W~pyJ`L^^dWO!%Q1^*&`e-QunOhR8J_WNy${}trB zZbkjUv+3SEF8*uW+l%~~5FdUv+++OL5<9%9B%ev#7QX`i_f4a|6}$&LFaA!*58sXX ze8EHD<;1JvkHGz&doiCEf0FT=MfpQN$@lS96I(uQmwh^Afs03;6-`C-s6G;NgPzfg9qtF}xele-v{1A4~FP;4E9JF6M- zJIGTzt6A~=i+>M%Vg~JL!TZ6h;!CebQ*qDEYF+#i@Uvzyf4H>w zetzGE_-?v?XlFGg{tWogBH|~00(|1(oz2ZPl|s9^5-2rNELdxC%*WFj1 z_c-GB2<#OFQ}4ugqTG5Xs9O3=z0-u)@tG7`?=&Tjas3*`wP4O`tan0H3AWy8N$wHN zxG;1Nx%EgRm`X4{zM#6=BA-Z%sZGeOcbXDg?}VvL$gOu;5Ig+ELQcKYve-GW6Z`q&V(Xcv63-;}ZL#%Em@38dtan;T?pMXuJFO?Kqv|oe zt#@MARHpxk*m|c4G227xozOIe`!1Mzr!{a{Z`YH2Lvq*K`mUaP*IVm}oIcZ#Gd|Wk z&5EseniE^^G%vQ^X+dng(~{VFr{#jFcj^>Oz0<1LdZ!JsYZxR8-Tp_34X+iAg zFN>{r>WZy*+7w%FG%LN3^-gmIQ|~knF3abl!HMbJ(Rew zhdR)EpS~VS+}A^iqraMk9!lKTLxGt-eLWO-iylhs^s-*2uZNP{ye{tRp$_)Kvw!Mo z7=B+5mAE19>!HMbJygM=hbr8M9;)EbLy7x(C~;p8RdDE`3JyI~!J&sr+yzswVLcQF zNaVgAO5E2&C2orQdZ>a!4<+vFp$ZN?l-PQx<$|e)8acF8k1{5<9;yjue65FSC!Q5s z4`n?PnR=+&;hul%q3Q)w4>b*D`LZ5rR&tkzIdMGyK05r)Fj#p#@~9V zX2H}$EsL#(S{L8{tezffqhRWxCXW{Jg&xX!9qaL|x3L~-5$>s{GE+}OwjOF-Y&{h9 zER>sTNE@>CP$OdNp+?0{FY00F-tq~t^-z;y>!F%r>!GNpp?|xd5?c>7ljPLXF#oKF znipFSwNNniP>Tgq549||9%=<#>Y>)ee!s5RdZ*3AjSGAJt%n*BTMtD&O{wRZNb+Xl zme_iz>4K?;nh{$MHCr(CP}KYId6biv#MVPm&qKNOOkJ_xmwKI2zL}VMol+0gD42Sv zX|eTCGh&BNy$dB-iPk3hoatxY&}#r`QH><4@Er=-_Lre zak1k^y$!Fs!)uIcq zT9n*+s3o!WP^)0(m#;Ok^-!B)>!B*?VXTK57F!Qxy^i%zqmo+>H6gYhYEo=HR7-3< zl=VW^LrqI=J=AQ$)I%+bt%vG}t%q6{`+cofvL0$2dK{*Q^-z;y>ycK))( zxSTI+CjVHBv1NSU5PN(-CieJ!Tv3-vAyJTW>UJIojLv>y^&0SF+y8dL!$Z%uCQCv0hnk)Dfc?#YH_7 z<<=W@#nu~bimf-Al3pmn>%u+=rhm)Zl6xM#Aa*@NRSoxge6=aI-st>#C5)TU_FHe% zxS+?@8=YUT)GI&M8~u-3uf+CwC)(rl>y>(Xo4%e1dMerx`g$U9Ur!|N>xsmDJ(0Mt zCldGdMEjGTNZi*GiTipYabHgaX8Y9F6M?triNtP?I%4aEx{1%PSL*34`g$Vik@|X~ z#OK#5_0r3FqVwyOk{(EUCD*^E*m|OtxUcsSTTe7Cww`DvxwqcSdZM``p9iyju%3u| zFtYVT%LSibuY~=CNE_-YtS7P_%zC0K>4|DtFO+x;TF(GEOgVWkcmj_h`?6js)(c&+yT5)Z#?@F1F_YZ4#a~1GPT#t_S`feL z2G|ptyJLT489r3N@w_R@Z{OYDR~PF)?%dtqR~PF&rgz7_Rr)8_!PV1x{>gj6HSxO< z-oZf%oo?eRq7`)#L~9{*pfry#FD*zZkC( z7uQeG{c9kGi(@6;oB--3^U>*D_a`H_{~ zv5$}L$p^s=$v419A4T~nxDMueExNBgA2zjBl#hasfG5SHkYDuJ?rOT=XM<=&hc z7JOvq1=VUHe+J}S4@UVvf&7yC1=V`NF9dTvnB_y@y7XLpU%ub4_zUnqG<-qq8>D;7 z$0d*QeCY*MQ`{Iwc^J8%Y86}uPl;bh`PmC%-yy>z*TK}|k?#NxU3)>Ct3hV{--Y`B zN4WpOs(11Jo*VJ|mefv6o^K~A)uZ$61lBp6ZzulGY9~dzZuo&&CFJb+;0s*7WuGqtO~uOj9-ckYVwIr{q|FsK}dd$RXMw8RdN z^90JhFM{KGvafEEZzSFndtXHD={^767f}~`U&OfB;ZGED?u%%Oy)R-~?0pfl$^TrE zbDYlj+x?>0`y!AeTi%c3Y`XWphzjG_lCkw5*!v(jt}fH3k>sOd?~|BL?m14Tf7`d` z5-)%`K7Rd+uywDyE6%GUx4{Q-sNk~XKMOvvwkyu7qx@sw{g3Uc)+D$8P4Q!p*Kznn zL-y)e*Zu^`i};y0VV(JtyQ)QSxejGH$vcwUKHe4EKJI-NKIdl)`xeS|<>TW1x)ib3 zolJ_oP6bsU{L?+p^+A#EGtc#z7W-VES+UF4Tp{PVJ_}->>$9BPcM3Vr^;s4BT%S6o z@=Wi$Zo<4~;b1ieF3ZEX_@6<3u)=vbiJ@8u_cxxx-1Tv+BNWGageRX~VQRl6yjgMB zD>3QAR6XQjuf+K+m?{T{z49pb#fZaRiAiBs9QI1=n^_l!y>fU*oS(<||1sjb|56kd z*z3u$t{w84_^%;9e8r9mQ^An;^eQ-CMI83ZaqJ&|@z!?v7s1@L?{!1bE`KPs%gd=< z{&;GaA4%;p%eh_t7PN!kh_M7LKuh3Aip z;VmwXS1JEFJa6a$=pn`b61@N63u0d|<-bSya4pU)B!?b-q}JDS|5v&{TZ{9YDJSm* zFDX2`x88dv3=YRfYgI>b@*ePtIQsALT4lYs{dXll0rwZml>6fNn0yEPAH2O5=Ni&}eGi!D2f-8K zzXYFnYADWsrhoDwa8vTjZ^n5n)tgZR>@;NNFd?fLx*!zSyf1rOd_X)9|B72`uvtaHEno8Ujd;Q0(*y}%*#7+;+ z4;a4XD~UJ2O#heMg8W!Ue(dh8|FHjtIM(Ccjrn-u332S(L}ljufa^zmwF>zVW|O%=ma8&Pc)Bhcj9*_u-6*z0ZdG%uD~xB%e+^4`zIR81dn`x7=rLJ_bgU z8T{`le-d?e&w!7DN5o&Hd>_hp!AHTUa^e5vDm0%RfzWa0Fm4aUc zUN87n;F|V{{}94|<&$Vnz}&a^dGIrakzPqYCVA|`ycGJI#M9#1s}SF_=&uUC5cKR*9Bp1&Zz5&kdRM0-^5A@GX$UdWHG?WxuZJ_OzX_xA}ujPkK>>w3nK#N%S` zdu-a(F3-&*pH9qu?2PY+nO+YfJ-|#4UrUn5ddx-S zXW~`yZ^QqdM{#~o!54zL{+HoXeg<4SFyL#!JfD#An~~>37`!wJz7Wjw2q`~|3HJWS zd*>0FkAsH~_Tu}WAwSW=c;T8J@B0?m!KW}@5Pt*sIjB6N;&*^AzZ>I)LVhLW;{{&? zo)G^b+`ssqp=zq&{oq;gHLr$VpgmO07kmi3D1Hh0zh})3RZC*0@3J`dnLRjEb;PmH z43&9B%zbIc9~!Dw3qAr~6LTNi@ZwO_E%+#SUEDC(sy5o|Z@h1F zSnT*U#NM|#mbe9G`SZTLX|eb1&4O8;VjtcH#>e8=hxbISS`hy#;?sB%$y?sN~ra1QP)zDa;>%}+nyFOIa z3qApE6uciiF0Q=>>3bC8$%5ZbfVzV+w!>Z5sB{9}mU&?v?m zi6_L5LH>f9pr0&w0^BN?@~MLP-HF-6bK=vt;(50|y;>-E7`!Te4dpoBb*cAG^C&EsOsI{Oo&BUd3l#i}7~5R;?ED zlaQ|!d*83~G>`dJ z!F6y${HL$QeCnZEH6lLpI<&bM42_Ck0ls7z40mP!um~>o?Mq_o+n2?69Yy=S59g+NHb+PsDBVxNBE#%a{kBhB; zp9AxK@5J9rcJ8ef#P7l1ll8sTqWDq#z4_?gYN_Bu;5G5Zx1oI=-dnAU{rnB_OCZ1Y z?A~g#;AetsxF6#={2jq~v0gCGpC2yx5^$s7v*1xM*t$-ULGcp7}*b_|a2m+^`5a%*o@7ykzS z9=~I6H7C9h#@3fiA^d`00A2)_?c1{C_TQ1*?ORvu_H9G#_H7K$Da-G;*yVRZ?D9J) zcKL0JU4C1I|F9nw9QGrz%kQk%={;A-!+s=o`CU%#JB2*#M`D-X+8egkSAH9=)XO~z zu6EWdv?P%)p_i-G`{)0KUanrR8j^=zZeP7Zw;AsLhv?<-{Bh~A@YuM{>*ad=*m=F& zdA;0uz1(@d+^yk4$1UZtMyyj~7^aOu6y>*b)A zJ+GHLua~>F*FI2hcU~_CJCF2g)@z*C%k|0!^>pX;a_9AO3x(c|-)sH&Gk~0hjUP`ZcoS$Ne2;{HEpqMudN~vA@4B+vi1c z{TiR|?~Hi;S?r&A1m~)2{S=ws85t8l2h8u=P87`Vj5Ni5|CZR_8JQ8s`ouMSZwk!y z@cz!og4p|MI&$yuxE_q|y`N?b>z^2ZU*q6X&h=R(H^tshGbQ$Z8m`}>d+(>26FdC* zLeBj(T)##4-cQp3GyQ!|DA#Y1tzTaiyPxTbt#98b+*6;<^T@T>&%wyq~Bm zwtPLwHxpO8d;Z^W5tg3ZigV$`_CG52{v+=XF;6A;(_-&OYKy(!XgRs(`Y*=c>)O{6 zZ-QAqeZFQ5>#@r6S{M6#%@MKB*YtWYpP$L~T+C0Oui24%%U2|K`?W51`>-kZPM;bK zA!U5V5|4}hot6o)ztb`)_W7JJ5l48jJ{R8$o)P=IEi~csdE9@`?*+r;+h=~a1t!`) z^SdoD$p-toEh}Qje*;W=VXTL{1#Q08e}%mbV_QshLf-#wOTqEo7IFW(E#m%nTg3ie z@Tl}mK7Z4CC!fFBmE7NL;d(8`&);p~dMfg(8@=zg)UdvZ>G4@GzuPh__WN=D6y;y0 ze0^s%RxrQYGAVxXN%Vhc47i?(?q5&F_k!Evx03N)mN~J%+cICs`Q4U9v7g@&`@1dZ zVk3Nix23{*CqB>LUE%sFvd`c2`YJNN+p-9GS$>z3|BmD?zg=;^{K~!KH;MI9e4ejW zvBwYV;t%8b{LTxG=-l%BF);mGJ}$YR-xB-z(_*)mGh(-wZE?SS6x)7^Ev)f;x2GL2 z+YevZY8CA7v~&|=i$KV4JcY83^&&J}(torESPufz;g;}*#XgU7OziVGC&fOGvnBR< zoKs?-$2l#I{cSVYPbYpH@!|J_`Mp=hC-%2NJ}35hoJ->9|7Y=iT(QsNtR3p*hx3o$ z`QUn8e?OSt`6$=#j*ERBXDjiP*xzm8cR))2{0<1&-))&sydeIiD|_D$UKGdr-^VZx zE|}kK=@jny-IkSt`Q4VT*xzlb4)>n#@3ssV%-eL;f8sXhE_}(p<-)(82Z{qXr0`vR9 zBL(xjE&krEzdN!BIoH4XyDcknAMv>Z-{(!dDfV|;s-wN<`MWJV-;vMvcUySAqnY1r z>4MAlVpDS0zY1*u-N*Akjx{Wa`P~xAy?&M7B{6gTYDet#tNbnq#V60=eIG|T6#G2RMe+TVZ(x0Ta=$G8DCGQp@Jf=ef|(vZ zk8@q@^EfvO=6Rf(1@pTtwc)MlISl6h1Mlw{5&Ql8oe%HtnULH(E%ttl8L{_U_`4ns zZ$8Nv6R(K9A7iax?#JMFKFa+V8wGPeMul;(F)=(3+8#8t73n*h37Mt?QIv#{PTBP)(hr$TQ&%M9fQWrNz@v4j1FD>?W zTgJuq-xT}1EpuR|hu8lui2eTj4hiL6|JzB-?~G9H^^_Z8ucxeGY)84Ty4dmtnD6iJ zwv3DY-IWQkzuVFj`@1dt?g;(+yDhWH|AN@xZQ*xBxL(=&ht|c8--g)xN%%cjy7zt( zen*7-KK$c;5`IU-%>5*_%X;ka_`O%ky`N+x@tFARwHS}0Kba_)`$hO&5BjH^`$d{! z?-!Xa6E`@1bG zVt=<~RqXG!tQXAhw$x7a;_L6WG{n92{rJAI*zemE`@1a*;?G=<_g%#IiN*eI%V?t) zeys0a!u+OSez#>3T+SC-lH323DV5kt!vwRxNbaT4QiTmjywjQ%1|6|_@J?7m5y(FR$*IFST zf_y{#g*T#InAzXoXZyYIfBc^PmGzR2UsHNU%Uj?wer>ViHz)4LPyQVrs2byaL$7%s z;wz4Gffn{xmGp)mLVPa7Botfm!oB4qVxLbzJtXrh^qx332whQd=sBSzTPS!hcuDN| zEQ@_^(5iSAC5j(!CV#l{zxMzIV3ub&b#Ex%mcQ1V$ z-@2G`#i8qpa>MqTo9^w@e)>M1GrH6gZMw3T=U%=+eYlxD>~hiOjibC?#yAA1qzl{klqdeGAUs@Uf+ zSW@7N^Pkh!(x{=>Luyl zSS>|tD z>~okJiK!>0`_NN84n2i9`hzF24@2zuHpM=NX-4dGn5buEcs_?|LF{vw7R5e?X-OP< zs^J~6PnZ6E4%12@-wXMw*yk{9h@<^RXR#^vIZVHceg*1|xR`E#3a)M)*e?(LE%fuv zdey*f%3lD!2+B1~TY}#VJ`UyDxcJAw7vEm*j}yGlU`leI|FJ2?pWdZ@*yn!?izD9C z7xd4svva6m;`xm4Zp3#|Z25HJS+UOpnG^dwkOi^N16daPe2$LT=Ygyg%=182ll!jN z=Ygyj%=17t#lM8~I&dv2o%;PKS1?x8#eV*<*yn?cihVu^rmT@3J|ARG?DSX=`+SgP zFz0vPhp;BL{$O2f{~KcK3u@^1>EG;eh|dR^gq-EY=Yvd%eLl!c!8{+NE&jv=#uhja zWVT?Q58`pnry=M0AoG%wc|M58HGc`_`5=pulX*Uf$2phZ+&dp+S#qBbvLdFO=Yx3M zL+1G)Ym)nXkZ!>|A7owZ^FcNW=J_BM#vx1(pAS+inCF8u3g-DBW8xRStam=hxY*}| zOcc!XK_J|6^Aq==u-2Wg9aKFG4z=Yy<@V?NZvc_w0) z7mmaDzCZbLq#w=)sbO3}_Ei`Ad=QSSIA8YseiF>`WqlOKQDp0*ro|4A3aa753 zV(X(guA)@>;pI-q#^eC zAR}U*4>Fo~4(#xFKFGY-=Yx10MCSP*E0R0C*1;?f*5`2CL$*GrE`A^GQJ*thF!ebc zx6r*Wj$6pq=Wtw7@+6q{%$L0a?eU}d-lI64_gGbNTtW9|q0gbdX0c%EdzK2OzGqo% zea~tkr~kDi-$=|RgYo%c#E0jDj1+F;r$FZTH$3kCChkVUc22U!yPe30dWkD@VJ5j(!C;$Oq~bAJcvBmPVB3L2wxz5dJg z1)is|r9TtfzA&1&31)ey1v9<-`xwNbFUI*Ii(;QIvQ#k77x8%;K3~M= zZTNhVRk;s+^JcB;ihaJwx;XNq!g(TMpD$7&u8g107paMTzQ}OFJYQs_V4g2BA@=zq zKJSCf^F@5VN90EX<6pUV`I!~_e34agjJIyU`6yza4>JASUVKCUjPpch3g-DDZ7}EQ z)?@NK4!)oL&r5DS>$147ClFgtP)9#V|Gq}Rtk1s2#6Dl7m3T_*^F?L~=J_JC1@nB7 zxq^AV$Wr2E@#$O9-rS1w%L?ZCBAepZP>%Bxc>V_COXhhBGhmi)+r!#o+q>q(e!ux7 zryYdp;qyh-#6Dl7EB5&!Ea!CZ^F=DO17z=Gs1?lfMTW&bU!)=S`644?pD!{h_W2@X z1@nB7ak0-AnJAd&i?E(BK0aThDL(Q#wAqWbswMXMA}!pfd&=vOPmBHjGvZs`g!F%; zR{4C6JI29};(Q^=oxVJOgXPtF&aT*cC!WVa`CUiRUhTtpMr?Zr&*LcdQq^rewjPS- zb5KsE9;z<39%@AF_>2~E>Y;cZ2mM1rkBqnSrz-dk~Oi< zCs{9;=aURKd;TxReV$J;Dt3Iw#6F*7ykPEwm;}f868?EUNwZ*{Ptq!w=aWno%=1ZR zz>GiNgXfdXg3J1}Ai2*cSrR*boy03*pHH%$%Ap3lguGr_3tQXAlNjAaEFSn0Af5ZOkZ|KS0K8}jrK8}msKF*3=e&@t4zw=_3 z-vzPD@1po!EZ;jZo+|uPkGfni%Wp^Q^1CK>dUp#s%kPHR<+ld=7vJAkT}(O4Z$s?z z+XORxef=2fb-54XXTe-lhiO^3Bku-dm=XM+z(*e2U$w>f6W1*M&v3(j___Vnf;jAl z7z8hg!#?=<{)&3SGT%m|SF;>NHRR5>NwM>-C3e2G~&y&=pbc_>GGlze%y9KktJW zmL4kXfsbGvUcuZ4F)Dt}@!md&@q)PzVp8n)Z;HJSVp<$}S||}`!PHNOeQ@;Yp{FC; zK4`t0!|TYs?R}%t8(B_082wvLy;sT9dy#D)q@Igx`ylmPWZMU4#SVY2kkdZ6Ahvyw zdN1aW>v2cydb}cbJzW#KUauGKS#LKAX1(1MyWUbS#^?DO7E{i8J0fB8L$u|;jif!*}?CynU z|J0i?eB1k|H!Hc7+)s&Z@1tIg?rrZ|O75vQqulns)x_45ML&V>YEVyBwu3dX_d!r^ zM!EMvjETD!BM$h^#v+*M>3(N9$vcv}edvnaK5WRn(}xXi86TJ$w(ywP`ygOy2)Xw` zOo+V?VoL0N5YuAsgJ_Gr4`Q}p?t_>snEN0W#NG$d5j+0tV2(??4+2xO;ON(H#aKt| zeGr&Bg`CWN5KXc7LClN24`Nm9eGt~Gc^`!JXx;|_)lY=)eGrq-J28IV2hkC~y3yMQ zfx%>?=V!s(2Vp&w->)J0mnlc%Fj_G8K}?8Wd=h;iDt}Y_dNTGw%!uDg#y*ExvG+kx zFU9<)ockaa#D4y=*!v*5V()|46nh`UEc8qa&-)`w9|TOd!QKZkBlbQB4B7hfy)%P-5#9%}D0%e%vzV8Qy$=G$ zv&c{9Ujt0Lg7-m;ik)8G7ZG-jWz0(?H@C!L=YSD*Ci!m{@*&9Q63>f&>B`bj#yxz0?}I4!MQ|U)8suer zu_5;^Pu>?{J$)T*8N)M=h^?oeD46>omc`x&QSOVNp1yHmFFfyqm=xdtETq>I%5TBk z2eAw;_A zC(riwLClN255oH*?x%dCsuq*`CGkfg=RSx|lCOZ79^MDh6?-4VdcoWWu~9JhLGZ(k zWqQ`Z)Z=*_LqqKM^S%hLTNszzJSDc>+4~}Fcb-k*d0&L(3zC~VV%wcp3+6ru?~C}( zXZP&R>yndccji2V?_;iA)MMM7y)WXEaKCF7=dMfc_Z=5oKACtL%=Xy(Aj*9a+y}8D zx%WYMUxdTwz6hqj_d#?E=01oGvG*}}UxfET)G!XF|K@0KA4Eg!eGp?}`=1nhAH*z} z>0>*^yx8$u5Zg|%oS5VAQt#`15!U-w80%5)t0uO5m}6DM|NG9N>1<%#x7hn2yf4E0 zASNaEK8Pu?_d&Fi|9P?ZL9BpjNAWs|uGsNg7x(Sv7#Guh-)=5`AMSYnd|Ysi-@1t`xr(Vz3^W&hVjl4<~Id%AH)Q>9IrPexBr&p z99?D6_lt*UBQy^Hz$eDLlE(msg!v=8Ej1O4@l zKL+euOnR<- zX}Nd&+TwovfLRBm0fip7Rj)^o0j{XX47PCX~}kc^-8oHgj(ST9|#>SEU`s3Jn{dNU$+ zJsT_B$2#wVsW+SuTW^RYkMJD7sX|UY=Zx5TPU{`*eo=DAcS-E{E{h%Cj@a>CE!;D{ zYXvjDU9sc4DfaWL-M#oz&iK~FjxY6;Oiy3qV5YbAqD`^o)>~RWo!nb*X}#z|^1mpy zUetO^b2qtP7h5m7DYjme>-oy^OT8u8deO56S@tW|OIl97B;{_O7R7F#mc?$LR>6FJ{~GG~cX_Lc zUEZ+dBf@uiqn?t_b9oyn+_Sum7R>TCCU$w76#MzqYcf2Sw<)p9TRXX*1()$(6T5%g z1ef`XCCzr>Q^lvPdp)ZKi(9(A8(1>kGI7R-{SRr9|4RL!{ny0yKMXF@qX}mE_WL!l z-)APtXA`sEr+@c*%gI0cb;{k(ttZ}0?yJ=AvEQbD_j?m!$8S>Xes3!AEI8^DhNMHV z2hNM_pZzrDwg)bYZ4YEWO}XuX( zGyQzEP|wJJ*6Q`gGvW_Fqh}A~I`i`RD@nd8xu3rw_VX*)-{{}%XHD$(vo7wpcVg=o zY>#yNI0-r17hg@W?SHg4Qf_XGZ#>nr2hNFY4_pvCyhX9?fh%I$1G{3|12@FB2io3f zdtg=X#mDwQ+Z$~U94_Rv2R6jE2ab!Qe?{kRd!+4wP^E0izh!V~4_p!Z{Z_@c|7|4R z6x$wHm;KHDhsBiB9ypTN_D9O&FPQc~ zpR;xs+ zq`k0gFJ>iod6*O1{2G_W&sihW9%%cb?SVD4J*B;`E_Qk~ zl6*vLd*Gk`4Y9);N%FD8O|k8PQw7r=XnW&#KD%cRY)ek2 zJ<#?>^Md5I2QG>~3HP)I+TQ5+ttI(-V%ir=dtkj_+5=l++XJV>4xjc!roZihv?rQr z51bX-o;N49J#ay6d*HIz_Q2KTe_d>QAnk|DFWUo0#f~5CiIm$ONPA+*GvfX}5V7rj zU(dd1`4ZgoeZTKq&mPEeKH2ubHL>l1v^P?2dtimJB-!>r+ZXMBRC3z`Tj0_jI3xD^ zw#BvwE{JUpTol_LxKuFhf%CEtI=lt3?SIROSHx$p?b!p@3Z^}tfpjZGW`? zn(TL$+x}>tklgmbme}!~N^+mGX7{s@GresOoR@ps0~f@$2X^G%;jf5o4_p`99%y@` z?SZr}@_Dug*2T65HpI3Ej)`p#92eUjX#1n>fwn)|9@vt5+XHQXB-0)^FS+f3OJdst z*TjC`b+PS%qsbm<`=RZ59m#DETq&6Lz%IBPuWv|h|C^F~yguCMx%YT|RP6EknAqd> zak0nilVXq8n_`dGPyTI;Nvht(d>RAq#-J3#kI1(Vz69%79!>VZTle+tf$xO-BhA70 z8WdF3k^isLd*thjuw5ff6^SNk{qpOH?bGpoloh}Pv>$5xHc%N^DUa-Bd ze_jcq5!YHFAA)>C9QMF__ia5F4U0}Ep1w8TnqY<>_CUy~_hY^~er>ViHz)4LPyQVr zsPZDb&>PMpzT&X=En$)>yAA+7zY`OJ>wg*zL$N1SEh^{Eu_P~XL&!3BS{#-Qb z5m|oOj?g}{A+~*{w!0^Hd8Hna?rooGh;5%4OYW^#v|iMDMTa*H_tXnm-cC%tBjwhM zE{W}*dPd5v7wsnANbWbqwg=WO==rx^lzK^q=W9Z2y=W^j^^&Y_wg=9NZ4aCi+a9@xCY~P=yh}&^>@PED^c z|8&Kn{<@_&r;W-!jT^{&!8LJ|(`ye^!(xZm5Z{3CE{8I3Ow4)Q&<%&GNwMSWaZlJs zpbVUn{Kps{C<~{>VNbc`Q2)DC?}5B=>!FI{BG$XU{ZVZD!&JQ08QYnXy;c|Y1q`F`%#RujV{6XpMt$iD+Elt1xbgAYxi z{E1(D67oAy-gfoeU;pjUUCyAqfoU)D)ey)0{1(hN#I|ouif!L&7EJpV?V}9O_N`U1 z?OPnDP;UEHOKkgAM{N5R`+d5%eT)4#+4e2k1Ie#$^!B^izV})1#rGYmMr*zIoxuBE zGJB|+5WgLK@maKY1@8jWzQ^_?>{p{`-^5NI+WRc8LC$qMWM3WeuOR&Tt%t+jM|s$< znov%|o=5%~8r0eUy{O!7Jc$KI(Nd_TQD<^O_3%4BdNPGc5Le zl>Mg1kq0o291(jy%6^n`&qv3^o{zF$wSTS~nkbm#Quecydt5ptcKS>ga;{Tri#;x7 zzf1qV7797{{j;B?-248!;4=N|ut%2d!?4))tkJ|{;utsF1pAQK_N}Ja@xf6J5x(tP zZL#fJ3u4>1XkTS~Y~NZE+rCA6E9JItt%z;kS}o+XZ>@=K-`W&Me>9867*kP(XZseW z{#*2M(_+8RjM(}(Ol`xx^>GVg>*E#+raq4QFMr}W4h{M_vGsA>e@VHyBep(mwP5Pw zxF3`5DW^V;_Exg>Ynz3f>+^BM!4~;&Vl0IYx%F#Jv13g8EyK5bI&mA!@)i2HI@$xt zt&f`*TOUVzZ&@BY;?T!Efc9A&`nY+t&*IR>J$$ID!yZcip^sZc`z#K9+=mXu{!+?A zAGd_|P4dvk!B{sY4t?Cm(cXzeAGd<>f;jYXj~uFK|7Ca&qrExtD8>f`?+4F`Lmvm@ zAMLwzANsh@9jcZJc^&dqvD26KUb+wc+>?i@k$R6mb3OW}O~h9m`n9JH#doXdKJ;@i zCUztzzZ6XSE9-yM&u&$9lmB(e-5%C3hcN4FRkA7!WJ$vFvUmr=n4veIX_*w38KY0l9;X+Psh+hNw zmA4;>c>vqV80SKn$9VwRd4c0MA-Tu7t;C!Musp`RZVKg59P_^EBmMK5??L_!&!T)vz5qUW?~(rgijRR0 zz{t;e1H=0?<@X%v@3$cD2QNwfICvP1$+CFI-+})Jj#Qn3_kmZ$4aoP;AL*ahOdbKR z74p5{b+O;4(m4Hh@{_1{zCemf}cw}WE0gR^3{gY#mygA0X!wu6fWbKJNjc00Ht zcKP5ug7I@Z*cH1S+)VDP-97h|vmLC9-40HInZ9iQcI`uX0+;orEw+AXF7doL#*NT7 zEsCvgvcA*t=e&mDTi?_bTi;Y&(34x=WPPXgO?AnwZyFX`-_#IW-!xjtsc#w+d;NJ+ z9OK539aT&0_2)PLT`V_O2z8r>t+G`!J&*fky> z^dscG;91G_sJ=ca^er2Mek9`gAw_kq{s zKI-Yn(W+bU2-y7&<$J-KlKXims_{Nw!1JFudbHoKeAAuicdk9!*Dp)( zOS~>Vi}5$d*KEh>pUm-jg?7u#@p(<`@p+?=(?5zQf0KJp~Whvejg;1%(^!I$7LhSh=(fV(NYb@4LXUyhGh*3|BX{%z;6 zsxFRtfAm=Y+cjh(E~ZO&*JWi0;XUz-y9!27Kx5$NJ~;laGPdC4UNhW$Rd9 ze?`6=Z2i^sZ^NAbP6Uj0p5c>^gV~RncY#O5ksfy+i|@2k9^W09ITrdX^7q33k@m4_ zT<*!o!7cIozz6R|`WL(pJR^Pz@(bsXp5mC#%p*O;-}+scPd$kEpq=OQ{vYtG77(9; zUjiNnvtRRk#{H80Hzjw!&3>xvw`q4{ee`^k{S^7K>(CxNgnkvw=Rfax7?<3R`XF}s zToJzp^2=Lj|HKc{{T)ZE4e@?7) z^ar)x^FIaN{|Mes{QKZbR*qIn;_JQ}Ya$=T^9p_ucokfhhi>w}F1gD?ZD?zG7zXqG zeYL>UkG|{`XwM%-|00h5H@6o@&*Oa0rhQUf45-0V1Botwy!7uD*f+6e^xNRTQDK^ zcMGNp=64IIUt{?GZUOacW`4I|v0#3;V5MMww_pRz_whJfFu8J>zy;aSuoETuAr~7oaYSJ3O)jYniK7$v>hLnH1cwYQ} zi>D9><$o7-f*0o)Wa`X${U+jp<{`p)C;mEIhVu`>4u@mLA1!zWW4!yomtyTIuNWiZ zuQ|qmV29Vl`}_ph@ob<>K2W&-{jpv=_}nrcYbhQzJhzO;YKjM@E%6-3V^ZvRaE@Na zqlU6v#^W{L^uI=W9DZRh9up}&IMy%oWf@$i2X#1QzECH__jP*2Sp9Fx7nBdChx5Jt z;{P?`@%A_L;=!@|JB#>ptX-zZFzQK}9-UoV)1!v>E7OBxDYDDQg4pGhy6duheAn&0 zcxzV<8<{da#!@`y#f}H}Zk6eARjU^dKKGr7kJE7^rAI5pgU>0`qn+ZxcB;&m;glX6 zQX^q}peOb@QTWxo8+E+4b}ChImu%c(jmDW%+>U>s~u5cuv>n_wxq6HHmUpUf;2ggtHm&{POx)>{;S{ zwm;?dIgAbCKFU#fy*2vH9WfU!@Bb@y{s@QZTwZ^H_lf%{oOO&7d7tIDyfCcBwIk-D z<^6Xke9lSB>psPk<-fdsP0wXLD6e1tQ#%(lBv zi7y8`DpdY-T_52Lh3+ni5Sw_pEw}eVmk4cL)!uR!xK9{j>^$4_yuaz~3DlV5aMvV!V4W)*h6i+ali&#Ex;)BtTl=l~-{2h$F*ya6ijrTejI+ybPk0?G|yHQ?0ALR}4N#*$? zQT`8BTq{vtuO22Hj5Rdn{eKnZ?O>c~RNjA!!XHWH?Zr_<5PrJ2iDqC(p*!&yk~FO4imx~2Pjq8uKK zZvz&=SI$g;XJU_7P^HDGGzLEdFi#1eHr4LrK;jg$K z@je*eWEwx@pVxn9AX3_#24cuJ}WJyyf}{ z)eER`wp`Cp{hf$*cOd#h?44se&n5Rir}8$I+)pX~+#_3FZ;SUwJxcd~P2n#``5O4Z zvKd?l<80W$-KzRQJ$ECy|E$VSmF|B{<&AqT%WF*aqMh!)E%;!3OQCfCg9^XbpARG* zg_$1k8m81QT&wUG()}Nda*H)e>Hf##J+U?^@@EjEcSk+K8mM&t9=WG3xV-*h zlxO5iisyGnzG7`ty1!H5%%*nlU6HRy=hXh6jC4W%ru!e&`%<@CUY}4tQpa0fzaI4y z`IXAg?Bv9iSE^#~kNS>yMms%tv$0^Lf9fwTQ@V|$a9*za z%c^xUUMJw(2z@P8}PvU`=g5IaB}~Tb$=$^ zKco7^GYiV=rxgBNl#7AnQz}0Tsh$6Gx1Y)VU#k3Y4}E!Y4?4>&&(jbgrEA0$D-U~ElRpS6O8wb^caNyPvkz&J3bWk z8u3Z)KNa=s$hLmuq{7Mbj<)h8&pUQRy+FF9ba-0i$B}LQ$VJM>Jn!Hc8L+lidEQae zbMw68qbfgn-tjw8&hfsfzj#^X2i5|mcH?Cc?<3ph9S=l3!WzEh{ttCO&pSS?c;

z(^O9KyyF6;1BR4auKSg4dEW6;%C9`{cy-i6q;m>qS^1df9WWn7I_G)E&nupJ-tiOB zzM-6_s{K7mw>P4P+{Dk6}=N-NG$J)fyzx=w&VV-yV9mPM- zJMLAz$n%biRDbil})XJnwi!q44v(>l`;$Wz9-^&d|N!<68Um`TRh(u@jSjQo)<*DM)>KupO1JR-xklYi0ARI6VFsg z5YIc})M4=QR<}i@r`g(;x)#{LL6Q zUJ`3)f&J^gsBf2S(>H!c)Qd}E?`hvLe!Mfv;db}G5%IjFYNY=3d!wJYB-U`1;qdp4 zDjJC`x0fTHmu-vZ--~!&wk@8wMLaLt7SFdwJh!|5NW}B9ZSj0t#PhPR6Hgo%ldf0A zb5F$D&{Fh7ln1y^_2qCB@e{Guv~+(>l#>&&=Cr*3r6><4Vr^-8|L3DWI#G?La2{*ZdV@;wT#xh^`1pAA7bhy(p~~y5p1YFVPep#6h_ft8_c(3=7vht~ zEpLdTc_P+ymG0jk<>o|uv!}d&Ci3M(mF*hm^xW7CUwHWEO3zxz2Lc>xiVNwG?w^YO z0`a+R;FiBGSNNk*js~*NMt_I=O84KQ_-{OC;FiDEqKKcUHq-q-igxKl#l5KI^@$iK zoTz3;%ez(eX5Hu7u=4st<;zUOYasd2=&uoea=$aWgcB9NC0<@PD;?&N`#7 zO6}nr7605G{&tkxliS+E-;45ga$9@&A>~VM58t5sxjp<{9-TQ*db8ZhG)%)i5@XwXMxjnoq+C$X4)LtzpKDj;o8HJzQ!+)aib9?x` za-ZA7Z&1GH_V91%xw$>usdAXx!>gSysXhFt%3*E~zeo4~+wI}0K}FQBdX%eEu@|Tm z{z#P1Q?Vzby#J}l-&0jRwGZP_PEKtb-yV(pJykVRJ8-eWk3~Mk13FPYPgSeYehdU3 zi1K$T_6Q8_!j2s6_Nl6q!vAp0S5H-0Kl3Mw&twY!Ey1T^PeK{~Kh=A2JzshKY2@#z zIK#iZ|N2OO#50xWKZyLr{nY;aQ>A~_3%w!I_f)J2FT;O@(xI8!haXYCWc$mKs}9o8{B`J;?FaM%WGdu z`B3kY`=8NsJ2Ac(`1oGci&RmA}|#x8>Ruq@t*%J`DnlaXkT2R?p7?eka)=iL$SQ`J(s|5&6u`ipd*XJ$lwPvK7}{6E30m#>p-#)dW0)0 zu7@wLJEETAew3GiKK`~OPapNRT22y=e@e?aMz?f#6xj_ULvBKmbQ((QCLndV2Ii~KshZGQAu@m{C<-xccz z80maEzWLd|haZ0&@jhKGr10Mn<>d6Xam9-jek19BJ|67|!cY0~#i*yJt5$OV=}7m} zv6r)q&#p)xyl={v_eA+X_$i%#Kg#{-*uz(bb9Dt+qd{;L#zEY#p82*vYDg3?Bo+JE}{x~)b7t;T>LD>BDh{{7FrQ2oU|8&(!@p-q>xtY@K z->UrAQ~G>cwDYI8jc@-#=`fMX)s4#cJpZ~=={f(pt?_?`(k;(}HlkjguBNZs>i*aC z+~#w(-an$}PN(~?mHXB7+}$oGDg7VPb7#~2-a04L>lB~fzO~a;^Nm~Mb3)~IB!%-8 zG=;vrW(Q*2u3jvA4bS^vm&HXR2PmJ&=sWbI)wEo9vD8*qLqX z^A9QfyuaYR(QcfnR#G|nnJC|9w#{p9j&}P@wVc|?ACG!*CiXrKVu^2&Dn1h_{F{Q$ zRNd6R_115lsTR_B`*Ts=&ct5jGW^M?cZg@I7oUu9aX+PMrvn%FW&P^HJ9!`L+)48{g=dhB7al+GaU8e zOw~#EA5i*Zsn3?{9g%-$wzW%_Mf-DR+k9$M=RD87 zQSlj0<>ZfJ9CfDZ>8l2>@HM?xZ@s|a{%7^vwe-G^EB<->{8Ldr&QzPp{T<4eJU)MV zj4x5|BA*A({V6>+ucLdl>P08Y%fS6zivLUs=QgzudA-E*Tz+EwG6?7WO3$Tq|L-Xu zyXpRqDjn8Rd{$Jy)}ww5!e3YTdA-~pDZf^7_^OZf2yYP1F_qh1IU3x5x58;A_ctp3 zc|NsE^((J?e1Y;SuS56^rGK7Zzf0wII^=`+JV)`*>lXe%8z$xTfvEo| zSCP*H$)Bh_;Wtal>qBavM^iXIp!Rk#-Ty$OJNk=s|5MR#q8&@&KVRVwr}@zp3V%G^ z{{e+F*C=Dz`@N&OYTM1eIl-1CcLR#n}^syH)kL?&o!J59qnQ zbs_^FmqdDA6=!@5?&3T_rB7ZTPB%NMt4pWx`xTKsS64G>Uh~V5k5_M7XLxbc>#M6) za{u|L=T~oAAAVc3*H>4~l+MqL@_O|)JJBbio*?{qk3n>QJksIns<)qMaQ~+xov+?D z4tZmw&((3J^T2gg{iUAUP5t<1BK?sLDZjoU>igAkmS`EyVTHev`u)Eh^&0U^;a{ip zY$x}>tMr^o?|WyohgWa2YrIqO?6sGJ81>fgULD^qAKa~~e;Mr<(lgR;Ah|!@^XfR` zWN;Ve#i);0$63hb{cGhuuSfm1cu(YG8b7=!#tF#xi0>ezXGXokd&P4G_wU#J#pJ%H z-?_S4O7~AiJAU;xy(^AQ#fAJz;{={P%KLd8;}uHh*_2;zR(zJy{r5!vU0vmV|4zAY zM!Dd#de`^rxzq92cdP1mRnBw&(wk4B9wqlzD<5kq{HN==d0g?=%E!s*HwMrBO_l$= z?z*Svy1K%#zFV%IJ{094g>z8#vA2G6;AKZd!?oo8^J+h*(*2hxo%6WjKdL=!r~dkg!kJ6sgddG|2kk&|f0fEP zzZq9vH>&)MC-)DjJ)B7QUlHX7^*!DHs>%buX;xkv%6ER-ti15~3S20Mjq+~q_m1kC zZ8!gQyw^3`^s8@*e7RJvBAo`3AB_I%+_v)Ydl5gRLvp__+A*Ya>eoIU`Fn2L{*HGk z-4;{&oDTozw&@|itbD0Q{TRgav&zT35Aia^Gw*kMBZUAJvr z@n@r6T(_?6k`e-Zzb&W}WWxvuK1BN#m4 zYtauO9iqGs?k`9B;=R)SdlgPz&v1>x84md%oIg|g)Z_gI_a~eVsa}5|#t+wRv&;0_ zDWpTH?^h|D=}7NE_@9q@j`UB@y*Sz#l!sI=-Yoas6#gG8-#3!`|EhA*NcH8bF)q2T z8cXTGnC&Re{cublLOvaa#FzEWzm8jns_T8bYUtM{${+8W{dYIY2k$rK&i7v=_cOX5 zuaDm>$8Hc29>hA@?K6{atcDq5FQXAJ%>A0UXXZDIDt)eE-|zz5zKehjSx-A4X34n$kG& zJ#crp*w^XzdVRcaRI>200_MeT^Kh|W#`phzgcF@=xbyu>BY&gv#eLh!->Z0zDV~jx zqTi2j27_L^|IZPhff8)^4LuLP9qv!cH{MtG_n>|q#(E@QYmMHoClSTN#kzuVwFh5{ z@K4)$HTA~c&ktifaJaA&tty;fi2GOd-H$39?h`xA`LeF5M(@Wn;{G+hUHQ46Ksp>Q z#*Jf|M;^y}vEFqc=hcY+V>|}t{cgJdpTLKUes)pqi~i2*r?@Zc zQ1y*^8c!_hT{YzsANybNyOnsp;3x5$`N)gz$?nh1t9TAC@?Svi{=+<{{>1EkBKGfd zsmOl`|BLF+&7Fe31o^zugL1}g41al<*LoPt_iH3>7W@>$EBLG6QqJ(*E;{@O7=Fm~ z?|M$A|FI%G`d>@DM2EQI57Lh9yZO)Ieii@BPlJ58kTX2jN8a86dAmqob}L>-PC3IH zSCdTM3Hexz`v%XitGrXr=h?1BW_Vt|N8SalsUVRf{R`d=IgU||i*i11IL5ub=Uo7{ zoq=+4r6z@31CMCFO&%hv2_Z8+lkuY$9-lu_yg$>UxBhSNe!cTrdd&1#PU*3f(qp1X z4?fT99r;+M&s_1okscZ+P#)<~Fw>*0rk8T2hwUUpMlwn#tvUn-dSGjnd>pXIszoB=bv zR|;l&PrP;@XLwTu)BnWl26E=d%xwdv`-Ot}{7%92-%*Dh#R6P={lI_Zcfkz5+Y|Te z-}&?#q*v6JBE9}w={FV$-77zIKT?z@atr@>(HZM!y{JFzpKUL6etDk?na}HJK2DDO zF8W)BKVS5(%+GO6G;tLkK9V>#c?_>I%E7+i}Ygo_r6|-=k?EIrq@z2o?&`4 zi}4KK-|LzjzNgk?zJEMefB5{-cu?;)pI^qGJY2+|@6UNKFM4D8jp83Kb2;9p|9a8> z(*5e_z&+)2Mf<_@oR`Wmq6O|2%=e!u+7J5oI!U^x|FS({`m7Y~1>J8H%=pxc@=yPD z%|reCX2E>^h~}4+GyF3BnBR>eeaKDx<3;yO?^==HtRJ0%>E8Mwy65wjQ~g*@^~3sK z$7d|n51&^?Im<_H-Tojx%c*{>r1~+L>c@PlA3kr2;j?@+Q~hW)AizaA->(%v20WS4 zYY}dE(HYaLOdsaoZ0PX@{=F}j?wMZJ2a=gT6RCc53TF5l1+#wq_u9M36u$-OsrfwS zXEWvJLcxrm?HP2>@;90Cb0oEQs|7RtyzhaQf=68R&-QIJ z<>yK<|6+b_6zw1D$7Yegj8EBKkpEX}@5=E!)2FPTmmL=5a->l`u{NVFOrRpQIyws#uBJ=rGF+Mv1{_o9y zd+QK-;nRPoD6fqFSW!M1|EYo*|2aI87oSggFQUCaeExVue8B6t$BVa_p5=U$e&1`B7dTNEST{r^N-K3iu_}EWq-)<%K1OTvt5qyV|pzW`9~ft z@{iAJ7R={)-37CW`lt`7{*kFq>+PrQWh3=lj}~(3)7A>6eyq2?w&$Md?{yjskNT*m z3is4U)rKL!MLFYpv|zq(qhRKLZ~sQmeYAgtocVE6!EE0q3ugOud%>(v-jB!UGd=Du z%2!OV~Q3XcA~V75<7V*HHy&|6R2i|`}Tq>l$SdTz8QQ^!MB0$D|i9?V8QPP zKV0y?0rQ!>7~ju=R}1FPZsLu^j1w>Cr{}NcMv{*v9#8D?h5fgZd^&ME@m%7C#7l`g ziB}VM6K^DD9o_Q&i5rPW6OSkMc%}dTNj{ypop>(sLgJ;woy4n&yNNdvN5+@=&xjY? zNIaT&Jn>}WR^sWz?Zk757ZNWe?j&AK+)ccZxYB%yw^=nje=;|cd^GWR;>pCV#M6n} ziRTh8Bwk9~NxYi4n|LE}rSX8@x1P9>cr@{NV(%Aqc&#L#PTWpBmv|xZQsPeH)x_Pz z8;L88e;nW8g4v&qB=-1??kS&0a?eLB_xR2{libfHo=?1(cscP(;CI?Cizss?C)n1dp=43lw1E|UQF(n6R#v*OT3DbZ8llJ* zswdN#+h*vUnQ-rINugpW1p>4XV1V!*$^hX-3^KqL5hGUE0!omA5qXI^=oYF*L=9TN zXJuubbM9}>?eK^D^Eo%qcfDlgSy{>6XWxC!(Vv^r&!?(BM|}y`uzA19jMt&QhevpV z&FgWqzr*$Qxv>L#Z~#Ye45x4omv9ZYa0d@(tX?mgp9@g=D9@<3*Y6ii{RP;Ceb{`z zV)~n(H!x1nK7$Lmf*W`X@8AL6!!vBYKQ_l}{=e1Oy;~+t9>(V98jM5KZ{P&Z-~z7T z2HwIuc!2lt44eN?H~Bd0`#;L+`wI^aVDo;FX&<9Lg>$%sYq*6wxQ9o0g3agf%<&$s z-%lGmum=Zl1jld+=Wq$va0_>E50CH!o1eci`5vzC7Z{t*7aE)Q7mUsScNj*(cGma%jLrLh#sTUhIEGU=hfBDITeyRJc!Vc-c@cN!e43xPGWj{{ z`E50CH!Tg%TkoSxr9*!uXWp+@&xa1|!2uk>F`U9VT*5Wn!X4bhBRs+8gX|~y zpLu_O$shLM06zQw52}BR`V>C<{|%~riTWCD;STQM5uV`Xo4_;I`=R=#@QfYUgU#nf z&HP2Ek74tBRZROF^(9=xE!@F9Ji-%f{@#f>p2PL?1jY{R!2xVOk6`-8s88V>F5wz( z;STQM5uRZ4d1rIHhwJ~h8#}Q1|9Dd$pgw|QIE8b#glo8kJGh5Oc!I5aZeQ=_@6ee1 z9MpSo07q~Pr*ICJa1FO`2lwy@Pq6tsx5@WV-Gt;}?7$uzz!4n7DV)P4T*EEg!96^} z6Kp=eZt^``KTl$8eqWEV`8<(vfc6m_!zrA@C0xTT+`&CO!V_$*pO-QD9K!ndP@Jv@ z5B28vuB!g(|C`O{tBjK~?NxmS7jOkP@D|>|1H6Z4*mmTgg zZ{P&Z-~z7T2HwIuc!2lt4BH=!{9zaN;Sk=y37o+NT)_>zg?I1(@8KD?{{r%dUD$_1 zcmpSJ1{ZJzH}DqT!2`U9XW0G_B4~OsuPT&kK;0kWwExdyVcn{C8?IM5Jg?%`L zH*f-HZ~<3v18?CSJivQ+hV2hU{;&)Ca0qYU1kT_BuHXjV!aI0?_wWqcABOy47xv*0 z-oOc*!3A8w4ZMYS@Br`O8MZ$h`NJ;k!y&wZ6F7qlxPlva3-90o-orC&-;4ZV7xv*0 z-oOc*!3A8w4ZMYS@Br`O8MZ$H`NJ;k!y&wZ6F7qlxPlva3-90o-orC&--rBR7xv*0 z-oOc*!3A8w4ZMYS@Br`O8Ma@H{9zaN;Sk=y37o+NZ2nH$U2<5*^3|Yz3-90o-orC& zd&nPlVIMYsH^Ch52K5P?!3A8w4ZMYS@Br`O8Mcp*KkULj9Kz=BQJDEiP;Y)-+te4R zuiysW!u=V)RZNan!2uk> zF`U9VT*5Wn!X4bhBRs+KE54S8IUk3x1AA})M{o?Ma1NJn4YzOy_wWc$u=#~pC;9ug z&xZqhZ~#Ye45x4omv9ZYa0mDB2v4y26>KN@KY;vU4-Vi6j^Px};S#Rl7Vh949^nZ# zzXJ0l|Bpoeum=Zl1jld+=Wq$va0_>E50CH!TQ9ji-$U4eJve|PIEGU=hfBDITeyRJ zc!Vd|`~dFB`G4^C`EXzl4&Vrm;S|o{60YGE?%*CC;R&`r>h^pOVF&i$0FK}oPT?Fb z;Tmq?4({O*o?z>vkw5If9vr|C9K$J`!zEn9E!@F9Ji-%feGKx49oT~dID%t1g>$%s zYq*6wxQ9o0f~^4g!w&4h0UW_GoWeO=!ZqB&9o)ksJi*q-TFc|){s%j-2M2Hj$8ZYg za0%CN3wLl2kMIOrFGc>a1AA})M{o?Ma1NJn4YzOy_wWc$u=R1sA9i354&Vrm;S|o{ z60YGE?%*CC;rWc8mDKIOc$&ZR1=xjsID|KF0%vdmS8xMw;T=4{dw7QJmmz=Hg?%`L zH*f-HZ~<3v18?CSJivQ+hV73>{;&)Ca0qYU1kT_BuHXjV!aI0?_wWqce+l`+F6_f0 zynz!qgA2HV8+Z%v-~rylGi-;q=kJ{HZ%LI02XF+(a0=&e3D$%sYq*6wxQ9o0f~`+P z{;&gkZ~#Ye45x4omv9ZYa0mDB2v4y21zUH?H2juY{}0_h9}eun;Tiw7blt!SoWTWL z!415Hcklr3;Tg6+=`>$;{1;#s_TdoTzzLke1zf=myoGo00Po=$w*Lz9hh5l*LwExx za0VA}1vl^(-oXRBhiBOStH>XAVIL0R4V=IkT)-9Fz*~3+5AYtIVLL+punYTe2yfu@ zjDJ^#%Ha~O;TG=T9vfkw5If z9vr|C9K$J`!zEn9E!@F9Ji-%feG2l29oT~dID%t1g>$%sYq*6wxQ9o0f~}V$f7pRN zIDjKKhEq6)OSpzxxPyCmgeTbgROAmkum=Zl1jld+=Wq$va0_>E50CH!+kgEufAtFr zFTgJB!{+ZlsMm|C{|5C5oWTWL!415Hcklr3;Tg6+4f(?^?870vffLyLK6^7?1?nrf zfw%Au9^gGZ!}bRG!!GQ@A-sVTID-qgf*W`X@8AL6!!vCD-iSFL7yicW^Wnli9Ksto zfit*(E4YET@D3i}Jv_tqr{A8h`MZ5)K3vrMa0r{fuVDHosL$X6uHXjV!aI0?_wWqc zpMm^g^Y+w(ny9oT~dID%t1g>$%sYq*6wxQ9o0f~~)W{9y<7-~f)` z7*63FF5wz(;STQM5uV`XL-H~OC+q+C_W5vN4-Vi6j^Px};S#Rl7Vh949^nbL;@k5* zgdNy}12}?XIE8b#glo8kJGh5Oc!I5mt>tlY{$U69-~f)`7*63FF5wz(;STQM5uRY{ zmB=4pF#xP)uCg*&*1M|gs*YsepVU=I%92#(E50CH!TaO`s*nvGbfFn4DQ#gl9xQ1J}gL`;{C)oN-1AA})M{o?Ma1NJn4YzOy_wWc$u=xX7cgZv? z-~V5~eLfu6g9A8%V>pF#xP)uCg*&*1M|gs*$8XQ~5O!b>4&Vrm;S|o{60YGE?%*CC z;R&{$K>n};dvE|pa15t#4wrBZw{Qpd@CZ+^^(69#9oRo(_4nCAcmpSJ1{ZJzH}DqT z!2`U9XV^|p^H=#?fL+*!LwExxa0VA}1vl^(-oXRBhiBOSEaVTnun&ju22S7%F5n7o z;4Qp^2Y3(9uzdsh!!GQ@A-sVTID-qgf*W`X@8AL6!!vB(MEDkw5IhJ{-auIDs>`fGfCx zx9|=g;5|IU_Un*8?7}`A!W%e&Gq`{&xPiCu4j$k=Jj3>9BY)V1eK>?SZ~|v=0atJX zZ{Zz0zB4~OsuPT&kK;0kWw zExdyVcn{C8{RZR@yRZ+3@CHuc3@+dbZs0Avg9msI&#?Wskw5IhJ{-auIDs>`fGfCx zx9|=g;5|IU_U9pg*oA#Kgg0;kXK(>ma074Q9X!B$c!ur2gZyC^_TdoTzzLke1zf=m zyoGo00Po=$wsYhUyRZ+3@CHuc3@+dbZs0Avg9msI&#?XZ*78vAe=hHTz%J~=A-sVT zID-qgf*W`X@8AL6!!vBZ5&6R|?870vffG1`3%G(CcnkMueDmGp_ZPwwY<F`U9VT*5Wn!X4bhBRs*@7b1Vy zfju~YBRGarIEPEPhFiFUdw7H=*!m*m4?D022XF+(a0=&e3DpF#xP)uCg*&*1M|gs*w;+Gmfju~Y zBRGarIEPEPhFiFUdw7H=*!pth4?D022XF+(a0=&e3D{=1AA})M{o?Ma1NJn4YzOy_wWc$u=SP5A9i354&Vrm z;S|o{60YGE?%*CC;R&|B3i-nh?7;yX!7-e|Ib6au+`=8)!y`Pw)>k8c*nvGbfFn4D zQ#gl9xQ1J}gL`;{C)j!l`NIzE!2uk>F`U9VT*5Wn!X4bhBRs*@*C2n`fju~YBRGar zIEPEPhFiFUdw7H=*!o)J4?D022XF+(a0=&e3D7jOkP@D|>|1H6Z4*#0Ku54*4rhwuhY;0!L{3U1&nyn_dL56`gu&Bz~i zVIL0R4V=IkT)-9Fz*~3+5AYtIVf$NE50CH!Ti$%sYq*6wxQ9o0g01gB{;&gkZ~#Ye45x4omv9ZYa0mDB2v4x}oyZ?{U=I%92#(pF#xP)uCg*&*1M|gs*???Wy1AA})M{o?Ma1NJn z4YzOy_wWc$u=V$lKkUFB9KaDA!zrA@C0xTT+`&CO!V_$@$RBoK4-Vi6j^Px};S#Rl z7Vh949^nbLegOHy4(!1J9KkW1!Z}>RHQd4-+`}V0!PehL{;&gkZ~#Ye45x4omv9ZY za0mDB2v4x}gUBCtU=I%92#(pSk@k%Vf&fW{8jr4unYTe2yfs7 z&fo&B;0E5pJ9vQi@C@5Og#2L__TdoTzzLke1zf=myoGo00Po=$wtpD;!!GQ@A-sVT zID-qgf*W`X@8AL6!!vCE2=a$r*oQ-S11E3>7jOkP@D|>|1H6Z4*xn+4*oA#Kgg0;k zXK(>ma074Q9X!B$c!uqNfc#+>_TdoTzzLke1zf=myoGo00Po=$wtp1)!!GQ@A-sVT zID-qgf*W`X@8AL6!!vCEL*x&;un&ju22S7%F5n7o;4Qp^2Y3(9u>E7mA9i6M4&e=) zz!_Y?72LpEcn1&g9-d+QA0dC(g?%`LH*f-HZ~<3v18?CSJivQ+hV36m{;&)Ca0qYU z1kT_BuHXjV!aI0?_wWqc{}}nhF6_f0ynz!qgA2HV8+Z%v-~rylGi-OrA9i6M4&e=) zz!_Y?72LpEcn1&g9-d+QpIFP|F7>ba{s(qp9}eLSoWL1ez!luUTX+W#@E)FF`zMe; z?7}`A!W%e&Gq`{&xPiCu4j$k=Jj3=sMgFi0`)~+v-~`U#0RHQd4-+`}V0!Pd_pf7pRNIDjKKhEq6)OSpzxxPyCm zgeTbgS>z8pum=Zl1jld+=Wq$va0_>E50CH!TmJ(2!w&4h0UW_GoWeO=!ZqB&9o)ks zJi*q#MEfG{c3=+<;0TW46wcuiuHhE$;2s{~ z3ATFV4?D022XF+(a0=&eb;h42&&LhCg?I1(@8KD?fBrOoHQoi-g?%`LH*f-HZ~<3v z18?CSJivQ+hV6fa{9zaN;Sk=y37o+NT)_>zg?I1(@8KD?e*yW!F6_f0ynz!qgA2HV z8+Z%v-~rylGi<*d`NJ;k!y&wZ6F7qlxPlva3-90o-orC&|042-UD$_1cmpSJ1{ZJz zH}DqT!2`U9XW0HFB4~OsuPT&kK;0kWwExdyVcn{C8{jZTf?7}`A!W%e&Gq`{& zxPiCu4j$k=Jj3>Y{9zaN;Sk=y37o+NT)_>zg?I1(@8KD?{|)koUD$_1cmpSJ1{ZJz zH}DqT!2`U9XW0H_B4~OsuPT&kK;0kWwExdyVcn{C8{cn*!?7}`A!W%e&Gq`{& zxPiCu4j$k=Jj3>{Ab;3}eK>?SZ~|v=0atJXZ{Zz0zF`U9VT*5Wn!X4bhBRs*@e?VM*KiAWa1W301Y5s}{9y<7-~f)`7*63FF5wz(;STQM5uRY{w~#;V zz#bgH5gfxQoWmtt!!6vwJv_n_Y`p{d!w&4h0UW_GoWeO=!p#|fzdS#0;T=4{dw7QJ z|8knY+W!UEg?%`LH*f-HZ~<3v18?CSJivQ+hVB1~{9zaN;Sk=y37o+NT)_>zg?I1( z@8KD?{~Pj$UD$_1cmpSJ1{ZJzH}DqT!2`U9XV{*QKkULj9Kstofit*(E4YET@D3i} zJv_tqe@FhX3;S>gZ{P&Z-~z7T2HwIuc!2lt4BNkr{9zaN;Sk=y37o+NT)_>zg?I1( z@8KD?{|EAiUD$_1cmpSJ1{ZJzH}DqT!2`U9XW0H7B4~OsuPT&kK;0kWwExdyV zcn{C8{XdaE?7}`A!W%e&Gq`{&xPiCu4j$k=Jj3??LjJG|`)~+v-~`U#0$%s zYq*6wxQ9o0g026H{9y<7-~f)`7*63FF5wz(;STQM5uRY{oyZ?{U=I%92#(?SZ~|v=0atJXZ{Zz0zma074Q9X!B$c!uqFNB*!2`)~+v-~`U#0ma074Q9X!B$c!up4B7fM0eK>?SZ~|v=0atJXZ{Zz0zgZ{P&Z-~z7T2HwIuc!2lt4BPLC{9zaN;Sk=y37o+NT)_>zg?I1(@8KD?-wXM} zF6_f0{OB30J>P=g1V05o4L<|_>>0nm?EhEbcfjw2?|#u~zN-H{@V)SZ@XOEmSo%K- z--6!+KLtMxKLfuF{*^O+tBn5+_?__Gcc12~+TR1;3qJ@y1V4Jl>aC<(@SEVL;HTkd z;J3kVhu?9=>ZSZU;k)1aG+$MJ4}35DAp8*g3i#F;-<18o34RKG8h!?T8~k?oS@@l2 ztp48W-GAgXU*&t?d*KJ+hu~Mh*WovvvHJaIPr*;a&%kek-wr{~w3%J!AEL{e$pB@GIc!@EhPa!`}qI z^Mzk<@TP+=JSYyn4Wb$Xb!&T;P+nm`!D?bgFkp-e(=VFFFN?*gYP}~vV$)@_=$CRR12QH=cat+D&~7%idlqC9k~p;#WU;eCztn<42x+;)&xM*B*X!ImmZ? zbSewg{@NqY9r3nwmo!XE8R+3hZawz8Ysc5G%1EE}+G{s&-L!5!lA3)TUwhrPC)T3t zkKMd=?Fmz&j@`u4d2M&!;}54dt;e2t^^GMjy;&yPS_fLD`lcmEaO>g6o{%X`AA9ts zb$TEw-NYiV)w$wyvuEC+Oa>)PX~Wwe|rDOF>hW__GolcLk4 zv`u1KNNee#PWuu(?;5*#?TJTkJ^8NB;&O8SFb&n|zH#l5*S+e-laK!)c6rC9=Pbro zJ$d6b)_vEnzwYtlhaY|P#?8lG{jLW%xqjYtvn93V{5_|goTeAcQn+=zoT8g5xb^U@ zYu54c^~WB$_QcI=)~g;pe&y@cN;$su>c<{^&JJ!{;CgBve$={o^SaEDnkT`#JUz>? zoiux`bkf)1r+mso=l4Em+OB2S9!Fvv z^nv3C)W+AFt9o;^ZtvH;cxf$Ow-+z2Hru1Mowt^ot?Yc+`;qKu3Dll+AYF9Tm1AEA zm)Ahr=#q;^Yv3Or>5}_RaP+|O)uoreZtq{WGLo*4&L_cedq3?Hb8$Pg^R+~Fxkj?1HIf~z&8{3@Tz2HG zTba@$eVEd331qT#fh4*F7p3P4StipyqLnWY0R1VNIETd`0h5tz#WYE;^E_Sc_zDI#NB?=*scslb&lN zJ#{2K*COeuBh_<_t{h)F8A(U}@x`U&>bjNlstaU^EERG_*FaX~+Vn{8M8?uhBt0F- zD$&736Uf-QMAqjL$dT$mj!y@&$}f6Los6vmxpGV-?RD9*1ea!VGM6PNcc*20W!+w0 zw{mKia!+ri;{!{9OoR?(?dk$qPP(aDPCAmqS}WC|o7$_UQU|i9wL}hYjnq2Qt<*X) z9gpr`B59@rb(!f%23m_wBeh~q_MszLCQHfv>sD5kE;zcp25PY^O_n9HL~0eB6zNF% zU0RBy-x|nhCq*WbbD>+wxzK@}3cV}2JL!^>;IgT@WCB?%y0P3>mOvJbE--<*r|I3u zLFz#A*MTe_-B^~7E-`^hZ7Gpuq??#Pt)8{99I1|EQF}`(wTyIgb)Q?JWNu6$W<7_bfA*c(bePob=9RcQ1h;fmL<4U%D&ekwFGs0 z+4)-b!10x(NZPM~tU=RA2Qr)vq`wZX9$(f?BAX^r8;rOs$cc{nLIY&Ahe!m1U1tkC&}n;EHnN)mu+* zWfu?VcJdUeYvjhZ1afR^m8`g>L{^+`YXVt%OM$F7U10+Cl)9A2!LC(utS61u=<4xR z-AGoN?k|njNG3u@vgUN1JUQw>t{mM>R^bw;Su|}-B&Td`rPkh3tJaliuLBuG2Qm$p z^&akD139m{L{eD;c`;}9vo==C(CkqMvd5FUOG}mX*MYi1bR@^C16fUaR1?UpMR$_L zv;?wpbPKs5t&z0Rk;+G%Q`z0JRoN`3TrPzrP%qqwpOWe*Zu zHajYc9T zd-2y@T1xcWJp%RJ`}*FP`kwqw<;#0N(p*-oOy82U*~*j2VtF!Iwlb?~D~m*X-O3Zn zQoU~F>R(!2T#HxAnOIt_TUqVe>sF@Xfu%sEUI(%ubRbL6U#jGSSexjrTo`&ECxJZw z>k@hXUjmt`HBis?OOd?XUAD63brV_hOQ6pF8mR@Y%jCST&145_nY_MPDrKRYjyjMR zJi5RHa@I}Lqm#C4B#D|{rcSN=lVNovPiE^_M>N?%Af#S|m$xDUlJ@KwhZo5_!U30=aAJ0u#twE(Oc}mJ=`eE+vwH zu90kYpsvVe$;i6aB_@z3@3q7P>bAVJksG`2WCB?x7j==kAeTCIK`w#143|KCN2H_W zg4BCZcY4#_)6HZT%Rx)VYAY{r7Oq>>_c@o}(Xr%y_7cTgBE(={Em&FoD0&9tSDlx51Bu^Jhkz6UuR<0D& zLD4omM0Fq2dP{axZcWaowK6l=x$%ps^Cs5`kXqmqE(fwX!T;^fhCgRb)Z)C zQX*5M1N90f~8h_mZbw-B_MFmq2dXrr>C8qZW&rVYOD4nKpr1DNBI~mR9 z(@6HPmdPGW`zvd6y;V=YYou1@$#^HVmvxa;u956YN0QH_rBY^C2QqmVb#ryfma`y> zNe6PT)Q#0UL`#*rGwMiM>qrhp2Wo*Wb&|~5NS*topEOzmX=A#tfgI#gqQ1-1RVGm9 zMVF`xVTsgpzb;ZMUq`a*HIiMek?cZ8>gK2;>FSxi9j%cZsE$;#HBy6m^5LWZ50B53 zAAETCbN2HCpZdb3^us>j_DcQfgwwK5mQa-)oE9xn02`{GvpD;BN(O&d{cZbfYs&(y zQu@EAGzo5RW_g|-sb9-gy~@+{KU~Yzk3XL`ez-PVKQ6hpKJ9M`)UQuCZ+z=WkMFDv z1KFw><@i4%W#^3_sh!Fr)SHukO@CAHQxcpvzO#;R@(iTid&rmRZ^}Pj4)eV6t9ATQ z`kZ~3{-*4u(*L~iy>s$c?M#0&{u`z2yz#U5(j%0r^322ZH$|T(!Fl6H>-fRiP;Fl% zU#7nq|9$ST{_MMT#|vuFoOzi3rszd?Sbya@ezZ0WWc%LoW%`@(uis&O=Y4d?QhiAC z%)|6IMadn;AI479%4e9)8~?&5>JgqV|F=m0^TxL>KX?2;cFy=OyTkl9i5`C^^=BXE z_)Xcz-eLX^ujujXwP7IJKOtYHzsX4By&Ef#t-6#s{x9BP{Y`Jw9WQ*k-kN_+f8(FO z!}^=n@dGuv@(AQhJ(ZjOCjTFm<3Dfy?O&C~@_4@Se^~mTH~-!PI{&ldf1vD-2LCX$sNX@KTUTG)RV@Uhv{#M zuHIq%`Xze&dTkiU_Jifi^f%+bSemJk`1;9zM30|*hE$$;nEs~d!=?Xu`3Dc`@uM^O ze~5H4{muA4DL2LQ#;<=|ckCTAlHQvBrt~MI|9Rt=AEn1XJO3XlolJi-{;%C({PfrL z_}=r(|1aNR{O+Um`1N|AfowlqzBv9T$xZRx{C`uApE%O#%)|6IMV}!3&&xmlnCIrN zo@-5ilmBCP7~g)8Tv+mWzV&zQ4&#@>bMt@kIphC`q#t>V>I1(&b-$|GOkH$NwHF zJ1>9N)8nV>>#%h&0lWgw>_$l(c@=&b5dven}RRA zM<4%1Q?PCiU#dHP2X?G-RS&cMQK?rknpr>eGTmRjW=J&g_QA_q{w>t zFX)WEZ~gqcDpL=Rzmc-@#y@*Nuw-+w=R iQlbMM>kS!(bHB9w4Shzv^>wuB_uJCYjDKO>@Bah9uOJEl diff --git a/ebpf/c/l7.c b/ebpf/c/l7.c index b6b3cf5..873c8f6 100644 --- a/ebpf/c/l7.c +++ b/ebpf/c/l7.c @@ -184,9 +184,6 @@ int process_enter_of_syscalls_write_sendto(void* ctx, __u64 fd, __u8 is_tls, cha return 0; // not a container process, ignore } #endif - - __u32 tid = id & 0xFFFFFFFF; - __u32 seq = process_for_dist_trace_write(ctx,fd); int zero = 0; struct l7_request *req = bpf_map_lookup_elem(&l7_request_heap, &zero); @@ -321,6 +318,9 @@ int process_enter_of_syscalls_write_sendto(void* ctx, __u64 fd, __u8 is_tls, cha req->payload_read_complete = 1; } + __u32 tid = id & 0xFFFFFFFF; + __u32 seq = process_for_dist_trace_write(ctx,fd); + // for distributed tracing req->seq = seq; req->tid = tid; @@ -1109,10 +1109,7 @@ int process_enter_of_go_conn_write(void *ctx, __u32 pid, __u32 fd, char *buf_ptr req->payload_read_complete = 0; req->write_time_ns = timestamp; req->request_type = 0; - req->seq = process_for_dist_trace_write(ctx,fd); - - __u32 tid = bpf_get_current_pid_tgid() & 0xFFFFFFFF; - req->tid = tid; + if(buf_ptr){ @@ -1170,6 +1167,10 @@ int process_enter_of_go_conn_write(void *ctx, __u32 pid, __u32 fd, char *buf_ptr req->payload_read_complete = 1; } + req->seq = process_for_dist_trace_write(ctx,fd); + __u32 tid = bpf_get_current_pid_tgid() & 0xFFFFFFFF; + req->tid = tid; + long res = bpf_map_update_elem(&go_active_l7_requests, &k, req, BPF_ANY); if(res < 0) { diff --git a/ebpf/l7_req/l7.go b/ebpf/l7_req/l7.go index a66d447..42b83c7 100644 --- a/ebpf/l7_req/l7.go +++ b/ebpf/l7_req/l7.go @@ -612,6 +612,12 @@ func (l7p *L7Prog) Consume(ctx context.Context, ch chan interface{}) { go func() { var record perf.Record droppedCount := 0 + go func() { + t := time.NewTicker(1 * time.Minute) + for range t.C { + log.Logger.Debug().Int("count", droppedCount).Msg("dropped l7 events") + } + }() read := func() { err := l7p.l7Events.ReadInto(&record) if err != nil { @@ -678,36 +684,11 @@ func (l7p *L7Prog) Consume(ctx context.Context, ch chan interface{}) { KafkaApiVersion: l7Event.KafkaApiVersion, } - // if userspacel7Event.Protocol == L7_PROTOCOL_KAFKA { - // // log all information - // log.Logger.Warn(). - // Uint32("pid", userspacel7Event.Pid). - // Uint32("status", userspacel7Event.Status). - // Uint64("duration", userspacel7Event.Duration). - // Str("protocol", userspacel7Event.Protocol). - // Str("method", userspacel7Event.Method). - // Uint64("write-time-ns", userspacel7Event.WriteTimeNs). - // Uint32("tid", userspacel7Event.Tid). - // Uint32("seq", userspacel7Event.Seq). - // Str("payload", string(userspacel7Event.Payload[:userspacel7Event.PayloadSize])). - // Msg("kafka event") - // // return - // } - go func(l7Event *L7Event) { select { case ch <- l7Event: default: droppedCount++ - if droppedCount%100 == 0 { - log.Logger.Debug(). - Str("protocol", l7Event.Protocol). - Str("method", l7Event.Method). - Uint32("pid", l7Event.Pid). - Uint32("status", l7Event.Status). - Msg("channel full, dropping l7 event") - - } } }(userspacel7Event) } @@ -723,10 +704,19 @@ func (l7p *L7Prog) Consume(ctx context.Context, ch chan interface{}) { go func() { var record perf.Record + droppedCount := 0 + + go func() { + t := time.NewTicker(1 * time.Minute) + for range t.C { + log.Logger.Debug().Int("count", droppedCount).Msg("dropped trace events") + } + }() + read := func() { err := l7p.traffic.ReadInto(&record) if err != nil { - log.Logger.Warn().Err(err).Msg("error reading from dist trace calls") + log.Logger.Warn().Err(err).Msg("error reading from dist-trace calls") } if record.LostSamples != 0 { @@ -740,14 +730,21 @@ func (l7p *L7Prog) Consume(ctx context.Context, ch chan interface{}) { bpfTraceEvent := (*bpfTraceEvent)(unsafe.Pointer(&record.RawSample[0])) - traceEvent := TraceEvent{ + traceEvent := &TraceEvent{ Pid: bpfTraceEvent.Pid, Tid: bpfTraceEvent.Tid, Tx: time.Now().UnixMilli(), Type_: bpfTraceEvent.Type_, Seq: bpfTraceEvent.Seq, } - ch <- &traceEvent + + go func(traceEvent *TraceEvent) { + select { + case ch <- traceEvent: + default: + droppedCount++ + } + }(traceEvent) } for { From 969ea5d4c3e2969b9d67d063196e889db0e05c6e Mon Sep 17 00:00:00 2001 From: kenanfarukcakir Date: Fri, 5 Jul 2024 14:02:42 +0000 Subject: [PATCH 22/24] add periodic check for short lived procs --- aggregator/data.go | 58 ++++++++++++++++++++++------------------------ 1 file changed, 28 insertions(+), 30 deletions(-) diff --git a/aggregator/data.go b/aggregator/data.go index a7ba120..91f408f 100644 --- a/aggregator/data.go +++ b/aggregator/data.go @@ -17,12 +17,12 @@ import ( "net" "net/http" "os" - "os/exec" "regexp" "runtime" "strconv" "strings" "sync" + "syscall" "golang.org/x/time/rate" @@ -179,33 +179,35 @@ func NewAggregator(parentCtx context.Context, ct *cri.CRITool, k8sChan chan inte return a } -func (a *Aggregator) getLiveProcesses() { - // get all alive processes, populate liveProcesses - cmd := exec.Command("ps", "-e", "-o", "pid=") - output, err := cmd.Output() - if err != nil { - log.Logger.Fatal().Err(err).Msg("error getting all alive processes") - } +func (a *Aggregator) Run() { + go func() { + // every 2 minutes, check alive processes, and clear the ones left behind + // since we process events concurrently, some short-lived processes exit event can come before exec events + // this causes zombie http2 workers + + t := time.NewTicker(2 * time.Minute) + defer t.Stop() + + for range t.C { + a.liveProcessesMu.Lock() + + for pid, _ := range a.liveProcesses { + // https://man7.org/linux/man-pages/man2/kill.2.html + // If sig is 0, then no signal is sent, but existence and permission + // checks are still performed; this can be used to check for the + // existence of a process ID or process group ID that the caller is + // permitted to signal. - lines := strings.Split(string(output), "\n") - for _, line := range lines { - line = strings.TrimSpace(line) - if line != "" { - fields := strings.Fields(line) - if len(fields) > 0 { - pid := fields[0] - pidInt, err := strconv.Atoi(pid) + err := syscall.Kill(int(pid), 0) if err != nil { - log.Logger.Error().Err(err).Msgf("error converting pid to int %s", pid) - continue + delete(a.liveProcesses, pid) + a.processExit(pid) } - a.liveProcesses[uint32(pidInt)] = struct{}{} } - } - } -} -func (a *Aggregator) Run() { + a.liveProcessesMu.Unlock() + } + }() go a.processk8s() cpuCount := runtime.NumCPU() @@ -340,18 +342,14 @@ func (a *Aggregator) getRateLimiterForPid(pid uint32) *rate.Limiter { } func (a *Aggregator) processExec(d *proc.ProcEvent) { - // a.liveProcessesMu.Lock() - // defer a.liveProcessesMu.Unlock() - // a.liveProcesses[d.Pid] = struct{}{} + a.liveProcessesMu.Lock() + a.liveProcesses[d.Pid] = struct{}{} + a.liveProcessesMu.Unlock() a.clusterInfo.SignalSocketMapCreation(d.Pid) } func (a *Aggregator) processExit(pid uint32) { - // a.liveProcessesMu.Lock() - // delete(a.liveProcesses, pid) - // a.liveProcessesMu.Unlock() - a.clusterInfo.clearProc(pid) a.h2ParserMu.Lock() From ed117e55e4a5064763bd9da35e8e4a219a59d68d Mon Sep 17 00:00:00 2001 From: kenanfarukcakir Date: Mon, 8 Jul 2024 11:14:16 +0000 Subject: [PATCH 23/24] update debian version --- Dockerfile.default | 2 +- aggregator/cluster.go | 1 - aggregator/data.go | 13 ++++++++++++- aggregator/sock_num_line.go | 3 --- aggregator/socket.go | 1 + ebpf/collector.go | 2 +- 6 files changed, 15 insertions(+), 7 deletions(-) diff --git a/Dockerfile.default b/Dockerfile.default index 947b8df..3e53d97 100644 --- a/Dockerfile.default +++ b/Dockerfile.default @@ -8,7 +8,7 @@ ENV GOCACHE=/root/.cache/go-build RUN go mod tidy -v RUN --mount=type=cache,target="/root/.cache/go-build" GOOS=linux go build -ldflags="-X 'github.com/ddosify/alaz/datastore.tag=$VERSION'" -o alaz -FROM debian:12.5-slim +FROM debian:12.6-slim RUN apt-get update && apt-get install -y procps ca-certificates && rm -rf /var/lib/apt/lists/* COPY --chown=0:0 --from=builder /app/alaz ./bin/ diff --git a/aggregator/cluster.go b/aggregator/cluster.go index 4fe843b..beeb38c 100644 --- a/aggregator/cluster.go +++ b/aggregator/cluster.go @@ -103,7 +103,6 @@ func (ci *ClusterInfo) clearProc(pid uint32) { // stop waiting for socketline creation requests sm.mu.Lock() sm.closeCh <- struct{}{} - sm.M = nil sm.mu.Unlock() // reset diff --git a/aggregator/data.go b/aggregator/data.go index 91f408f..99391f5 100644 --- a/aggregator/data.go +++ b/aggregator/data.go @@ -175,7 +175,18 @@ func NewAggregator(parentCtx context.Context, ct *cri.CRITool, k8sChan chan inte a.clusterInfo = newClusterInfo(liveProcCount) go a.clearSocketLines(ctx) - // go a.updateSocketMap(ctx) + + go func() { + t := time.NewTicker(2 * time.Minute) + + for range t.C { + log.Logger.Debug(). + Int("ebpfChan-lag", len(a.ebpfChan)). + Int("ebpfTcpChan-lag", len(a.ebpfTcpChan)). + Msg("lag of channels") + } + }() + return a } diff --git a/aggregator/sock_num_line.go b/aggregator/sock_num_line.go index fdb58e8..4459b9d 100644 --- a/aggregator/sock_num_line.go +++ b/aggregator/sock_num_line.go @@ -152,9 +152,6 @@ func (nl *SocketLine) GetValue(timestamp uint64) (*SockInfo, error) { return nil, fmt.Errorf("closed socket") } - // if daddr+dport is consistently same, we can assume remote peer in case of closed socket match. - // TODO. - // Return the value associated with the closest previous timestamp nl.Values[index-1].LastMatch = uint64(time.Now().UnixNano()) return si, nil diff --git a/aggregator/socket.go b/aggregator/socket.go index b8e917f..da86682 100644 --- a/aggregator/socket.go +++ b/aggregator/socket.go @@ -37,6 +37,7 @@ func (sm *SocketMap) ProcessSocketLineCreationRequests() { for { select { case <-sm.closeCh: + sm.M = nil return case fd := <-sm.waitingFds: if _, ok := sm.M[fd]; !ok { diff --git a/ebpf/collector.go b/ebpf/collector.go index 5daab8b..9f9dc36 100644 --- a/ebpf/collector.go +++ b/ebpf/collector.go @@ -76,7 +76,7 @@ func NewEbpfCollector(parentCtx context.Context, ct *cri.CRITool) *EbpfCollector return &EbpfCollector{ ctx: ctx, done: make(chan struct{}), - ebpfEvents: make(chan interface{}, 200000), // interface is 16 bytes, 16 * 200000 = 32 Megabytes + ebpfEvents: make(chan interface{}, 200000), // interface is 16 bytes, 16 * 200000 ebpfProcEvents: make(chan interface{}, 20000), ebpfTcpEvents: make(chan interface{}, 100000), tlsPidMap: make(map[uint32]struct{}), From 291079b5dc8449dee014f98452095e42f7044076 Mon Sep 17 00:00:00 2001 From: kenanfarukcakir Date: Tue, 9 Jul 2024 07:07:05 +0000 Subject: [PATCH 24/24] pg query len check --- aggregator/data.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/aggregator/data.go b/aggregator/data.go index 99391f5..e85aa09 100644 --- a/aggregator/data.go +++ b/aggregator/data.go @@ -1375,6 +1375,10 @@ func (a *Aggregator) parseSqlCommand(d *l7_req.L7Event) (string, error) { if d.Method == l7_req.SIMPLE_QUERY { // Q, 4 bytes of length, sql command + if len(r) < 5 { + return "", fmt.Errorf("too short for a sql query") + } + // skip Q, (simple query) r = r[1:]

r>(GVqteT*BVRX(Pa6*iU#rF2$&se|t?J%y zkDi7uA&?c@ZKusmme>%0{x1|G#yS3 z^z(iL+#90yYv3pacRA;d_gXfL_%v+ce`j}ZmfbVx?&%YGlEQcA-`(TqmzPp`CGDw< z59H~nODnp2Fx@$^J(OonBTVvaIar+qO(RDHbMY$v5p=L+AG2>5d6u1{d>7A=9Z|36 zC~rB0{_5(2h2p-!nMVXm@G5kqUTtYK`v%} zC`}`F3Fg3kOnK*iUv3!i;Ke~kf^?LsL7B4(0Cw_PmKS{6D zv^YGwZ@6j1y%uimJ$kNtQ_bC$-@+t3O*NaN{FN@2Y2AqZM&);5nRUEGp5uQ|;63W@ z{wHbgWxTBN69q)%f)td}`#0UaP`NQSKa#u6=0O}?@h3At#m&|qoN~B?26_ev*XCuW z98G&E(54`X$ny zNd7j%pYUDhcce3kN6L?6iQoP>d7N;cQRj*Mj$$*|Jjb*6F5$`i&fD;lNAk1X-J808 zJ=&eP-EB#=X*-?jT!nnwpnMVcasFgiMfqdRT9CWu#q$5FO201HQ!#g|#ZTg^d}sg9 z@jbo|^=WnJ&J}m{qf-CQ@lp6IbhZD^ag@8)822lw9Biohp`t5yIrhu_a#g7xAauc^ zXguC9>YGZ(-Se{sA5-{V++^Y8CRl@*TPv|b{bheZ=+xmS=@ELU@A!*$eUvfU?=Oh` zmP_TYrAyp51W#JH8MPj|oLp}1L~cqHBz!3+#rrLub-~A!UTHt#Nd%UHJC#?!j=c`T zU&LoXLCf>=EbnkyCI?+Vv!i~Le2%`?L!OC+Pp8uT&K>nN>MygI<<6>c@IBb3;NRWL z+q3C;Emuvowb6a>%kaHngzD{&Y^WU(oFw6m#UDHkwa*7<0-G?swFv0sw@be(UlPy1 zA$@*4T{)Bd6Fy4L=7S%rT$TKk@?3iFa$RsJY%RZcNqo0)QYHH8uIhc}HeTuBIH9Tb z0K1oDlbsVELjKG|I8PE~b!r;S9S2#%o3Gu6_d;0ztYEGl_Q*B$&q5gUAd2I;Z3B5}-|72cS zgi@VKPsv~N=j4#fpF?U|aC3>)A#gldj$Hm|K9us0{ke|%*NZpo^R#h#6YlAlq-J-{ z{;TyK9M=zSs@dPtHNgIC&3=}y=sx%cltwO!S51CqZ;1_KRW1Cv%3$zJ_yx(xs`j&&r81b47mH?M<{(MkLaQW@xACjH@PtY z$9SYY8jN2Z^(l21^XYX7K85hF<%}qDLd)4+B3)1~YQ|VO8*uj(>|4UeeM-(^A{NB?*p2@VlPi={i!5pc7;19|C~IF<@T$Uj%z=i+;#mJ$^R5wtRXtNcfnX| z_c8-kzQtc7+&xKmaeJ}{Y%yoK$@nJPUeXdCQoCz#8ZbA;*8lu=xl(^u;tkSh7eN3| zPmQ&s4K+V_LB>VG55bsEZ&E%L*8NTM%jb*8dl$b_zI4=+{($+DdqgB$+&6>22#4~; z&6hj>Qf}}+(cZawC+&yhdq;hXkcrw4k>e?tMUD%W=7YPheaqhXh)2Sal!w3+a1C+F zLFd5~$FH#NubOT@eiHTmV{KgL+CQH!fA#nh$Jg=0=rzsf5H#huU{9Wlz=ODE7uuc{CpMpjjdy>Z6PoJw-($95#aOrgU?C#%-%jc`L9~hU<{dq5( zE1&!EUN~1i8bsR!k+;&`O|j{GlxwRfKK(j;_w(7+7hitnQQIW`E*w|? z>w?#6`N>4}M@oO-ougy-x%u^dE9jKgZz)HT9yg!dP`{VbjpPf@#gOnv;uoKvVe_=^ z9HB`57@M`8Nqh>tZ`A2e$UKFFSGbbr?Cd9{8sU5M2?xWh<5)04_$Y$X@y##yHDbSs z^G#!gD%?wBfv0e#yC;?3_c#71AK}lz4=}Z=GR{8)syC?7R{;|5PkmI$gPP<4(W43~wIF z_+A(MPB(T7J>hhYlI?I!>@m5E0^xPmck0F*TR>4XJ1}C_oi3R=;uAHVh_CrU1!F1@>pkX zjq{_>o)-73a1nL?0n63iudj_#FOk?3+-!NPxHP#SF?9Eg=STmG^&3{aPUD$d@wCNv zlSWJR%cP$#>GdDsn^?K}-&Ak?KEGeE9RB?EBoRn;!B3S;ar2@wzQ}jsOCwweeN;D( zAN$E?jYm?yVVlyC_(7i|3oq1fcqXz>>Ni;WTt4Sk*m}EPexJcXN<*hti$r4nvNXNI zx4Pgn5~Z^H)fbxh3NrW1)OcdOOXX)&&jwuiH8~XN1+3Vn?%X}&PojB9fqwtG=hR-} zoyW!M5@s(hT!&so#D@astx;UDzW8ip|8nX@tUgLFxN^{Q~n3pQFc>qlVy< zYA0r?_x(HD`iYni!cXLbi0DY)!K!(%<$hS=sYho>^yRkPXl5x#;=a1x!+jdRsDDp? zTdq#}m++;Dap4y?m-rhn_c9LLfbdtfy$B1N>;~(Rxekmh070@PnGyD<*F=S@3(T$FuFuvg7SPYI+9PWd`S3vN_X}O7t6jdM3FVTnh+tNdjD=%v&v zsV6&9ublkz>tS)g`d>TJFMgKkkRt2W?<9Yv9#^VYE?oKU%5UZ#%O_WE8+Nk#A#~(% z^MQW(ti*SrCth5?tYP%Kth{fs_Q|cItbwDH&~3B%zMLHs8su2-gialPF8sp&QtKg) zM@uVJ);|cg+@#i;9tpo8c#DNQTz=kc{!7=n>VhkjPPu+>VD#ITtH*Nv-fsOaKb4Ec^itM(2BGvYe%0C4B0}FRt(V2l%YxSS;J3zTd3= zg^#A^8`ob1Q-D|W1E);!>u*xe*UE*YBiS!pt8@$NZc)sw8)fnI>h~zbqqJT|<%9EC zP4#UOg+%>c27h(Ir_{buzgOr=J(~s>LQl$ZoPN{mmGoNruPaIaRce-a^`){Jc$cPs z@N~NM-oou~w)EcqbXj_b*Y97V>8cBUr2hMFw|;15V49h!H!kU_lXQ_!arpn~dcAK% z&Y+%OWBvC2b=IF3eu$iQ{1Ed&_(?vCM2Pyi_rZYYf3IHe$r?YGpRr!AjoSz7*Sh&h zNw1_|`q}wlU#;(T!Er_x{6N(x@7J<@bMmybUt6cGr15hw|IvKHt=lxb9qD&ky?#aS z_7Tc2$w#Mes#lEkl>ga!w^rX|o=Mh+be$6w zN92NZ7>k>&eu~_c`sCJOhSs~a{@N>gw_qBca=lyQ>nnP<#-IN?dbgJE{rf$w34i(Y zZmk~w^Yv~mod5lLw-(P>@7Cmz>qk7veuT(5ybeR}HYo?4K1i&0Yu{y^Ug-J#l1l67 z|2n-}i)poj6Vcdztc|l=`{%dM|9|V)pEk(@C0sKYgxV$<$kEd*<@_6}?-|Q*46##`Npp-ltz_yzuYSyJfwos(1Ue%AZ*8_IZ;>)W>mr zdHM8ijc=}g3w_hOb@fJa1@g(wUq^bk{9dMaYxZt@^nXY1*7*3Z*SocFcUzv$Q zJha}ejsKlKW?_ZxbCL2Q`UOtEUe+%>J>2R4K0VyYx~?tpGyQ`JYL@sV^$${!eNz8m zOk|(bKiE_43oE87{xkJ(_eA?Um>#ZtFVjabwWT0G`k$qTYx2wQ?>zf&(ZjX!*nfcO zf4F&crGqgztO{Wa%!u#7qK3$Ykwax`wDuvB3J!!r1Ikx zJzU+-{-3Ld`?SjO|2#chYoGr0dbq>n=P>nfrF~U>K#qrsxkVzb664L~?3an068GKm z9r8?`4;cg%Tu504FXTWzSy=*3H7gN)OZ#%6U=2Hv3q3b^qKe1{E?Ebv|+h?l3{uL&lWBtg-)IM{sr7Oq%6S>q?`Gr+AOib^axM*B%SK;^q>6 z1LDitaW~HFO@#`&x^CMy-Po+(VJBxSyaB-FRMVoY7V8OZ<#(lrArR z!k^M~74Nn5G}Lqd2I*{3&GpLhade~txpYdo*ZNrEukC)L@7H_h-{(_&&Z@budd@26 zhpN$Y@pkcY`PDSyQ^qHb8{N5o;!et2Zj_w|==9+mMzpAVKb+Eh5IN)Wvt#u6>fW83 zG3@g>5g%cBd_LzAJ8xh|&*uak$q#ovWJBF)N~h}ioNzDY&7FtYP&dcIz1!wHn%w!E zDLBH@gnj?BfbKlcCP=@fVs6AAJWZfB8z}q`zHC_}wjzIyvGWx+^85vNF6Vgr-h_>k zbMd-``Pzhvtmkr`;=c1-&9j}E=W-&PI`M~kFHb}LR<9<0h~zsRQ@ezI4~{2YtxA9Exg+6 zcn;^amamez^1bHjC?6&2Th3H#*k57iaNcGKlKL*?Hadrs`=^ToCikU1uA~;U8_V)!v`vZq_ zE+^t6PvL-fYy5hyuzV@rZ|%D~f8OsWh}^B#PjLHtn(R10)U9nwU-%$$#XlcW+visM z-hbOO>aKt7(~4{GH-%qr)ECt3&V85i&yz89oWq^S_wsXr zV)`f=iSeTA_qlo`Sbcrc#$%a*=QO;A8mr)EOXLv6hMMwofd(6&IQdrGG|kHS<}pTh z)agpl-P_d9bET!+={Z4TQu;kNll5tW8l!Sq7-Ji2b7QPt%J@>ESXj$*fyUT?$CrZ# zok-_8S#tyfGl*3K+Qo76AD}O#t+J#cND*2g$ zKjD}3FF%BzJpR6M$#P$AYkL}QgDvFsm26LWPDa$84&&U3itVX1R(PcSMK&hdU)QcR z!(QSm?eDP52jzcV(4h6m?cWwUb@;jdmCJ|10r9@tJlY=rzMM2BK3qNtKQS$m1_?bE z!9N!U{U!~yy^zlJb3Ucgyp-dE)L4m6H-56NFEywscocu7zCCU69#Et5XDj<7(qfkT zdsrRf{6F9<<Ise3`=fZdKa{1IW;*H8DH$Pd-T0801TlyzGqWRO$aZ6^v%AFgp zIQ^FXYi>|?#f-!ra)w zxhZnaisg$dzl8&?Gk$EkO|gHH)z24yo}4w5KA*M;-|mu>KpulX%Pa8>%u3DVr#${Jq|L^5LXT{Ey9`<>TH%qEeUh0zLvbw;|PamwEmc}*NF0aM9#dDf&sc$>d zE(`ypor~p&$su2kNP8)C{m1dW0V7g*ifxM&UH-ZCk63O!t??@l??;S^#Po3AC7-%?<)24L<01$F!|GeyUC|1H_jIFLGfynyMBA(`eQO;@a4ah zYnT52JLBMsg-wa^qvMb8qm(~!KVm=iH`F-T`L8q%z6<#-@=S`Rl&d8FCAVc9%yYir zuF^PI&i|`}J3oIPBi+jJzd*~Ijtk+h|MthU{Py3zRWZZ+$D(`3E|FMByKUe7aw_3e zE$3FegNB{%SGqg8&ga_krqNb$>wn$6C{-TY4qj77|#>+()e;HKb zap`k>FHE%YbB^ay^<=C)E$ly5-S@EHQrJJG=1j)c6Lb69IIt(f`?L4AaWbaMHJ@BR zTE;^M!>5EN8N4N@WTN~oFrK-h$@Su8mac{ocCL`rN9iXPH?dxi{ekkK=f;#0YO49( zb~s7ozbjYb&y_1TPRiG>vHXXpR!l_u=f;IyZOuY-Jtm}GKTYx%)6FTd$Fwx&qi@jg z#UAEvu}@`JVI4W{U$y6(Q)1uJ)r)@A2G6~nKZoPz+Fbvt=j~&~X;8e+sPdu<|EGqA=0Y@5*1Hjq^M_Pc53~DRQ2t&C0neCuQYK_<#tw^5*hi;$`zZt{h1! z;EwYU#R1yyOM3y(DHN?-yYgNfU_VzP?>%Mn;9mbAF|Wh$^7UiEUF)CcLFeB-uXCe2 z@7efJyv-69mq#l{e)$-V{A=2&UkMG?KbQ8Vw46!)rQlQYPqMTw_?zl6`Ep+T`E*^q zm-{?izPtP0Tsn&PSpMbqH+kcyr&_;7S|Z@PbvOhj#`S>xk^^7mg5J*C^ z4+6`VOY!;N>mh$`h~!MQ^S_hhwOB4C$7^d%E?70dy4OZE_uMpAq7d{?N|uit&*Aj> zGpO8%ovViH3#v&0b5TG!H=1U+LJ^npVMIO*vrO^dEB3L49q>Z?(p52E~-M{qy(T~RcN$Q{XNXh<9jW032|H|ZazP8@nZ?^js zLKI$gPn30BP2Uk9fJe;70y~a4NzG;VFZ14bsdo}1Cr|tL-A4ByfJf?~P|TIM@4sc6 zd=C1rc*bz`(~8l!W+$$5X4G2e5nJ(ET7D#7nqe>T(DAhAUSi<8m-1EWe%SI|0>M+h z&e@`Js#-cr`SSmNdgp6;$AjBFFLPGVNG(kp?-RF629#`??%C=&FSIKHL!Ag79OD^qv!P%Xdv5N8Lp7Ir8%o?V9aIw49eYFrs+^aVSJ5ToXoh$ zh+`=&bU0^Krad)(-qOQPS#(Cw-W8_%y3(r(`QAczCYNV{ot!$PfdA5l-TCVp)wK~x zvT=<49+1gydvKGgje!NEPmzj@x+JIl8?i@|r*l*CN_TkGrac*Tu_(IZ_n z_tZ*%Za#jn9Jwd33BNt?lV=%zufnepKhw+&Mv0p&et2pm4UPD%!Vk}=z3|6Igh`%M zN{fqgBm7*2pWJu40l(|;+YP_1_}zpbp56DxA3rVZUdp!w?<61Of#pbKt@6%hz>RnE z-iV*@PTn`*w-G-)yUSFY3**Jc_x(yL*xk>w9f`~1^#5uvE_kh#Jm6FNdc1te45Ly& zn-L1+#ynk{wogIrfqVfZcyyI86HlcyN z&*FUo-d!F~#rt&FrSLn7?~O=+pVoF5kD}{WQL-Fu->_nina&APw4g z2Mmk1qM5J(KcBY?K_AcV&Q488&yjdphHsEfTJKz3<$DhHlC~6nGR~EFH{$2=djsBA z(9K4?%j5IATHYT4cN_3?aoLLZPSC-#`%(B~uRA6SE~WpOo`1a79)~}-;v3>VQs(=b zV3u^qv(fA|O)lLVVE=B|OS(7W_W`=uiuaG>UCOyc@JYT)nfnrc$HRJ0;5YFTIi3Rk z06*p5*dRdDrG6XnE~}&AjQ+tYgE0Mp_F7v6K=iW-(Xdw2jRx~TS5C$@5(DvDtf#sy>r{`qaNxX%h zjrd)K-)Z=5z)xhoq-`sH>zJN1@b1#%)2dbJ6-; zy45HKJbu{K(jnzy1Acxw9%R^yVeis`*IKE&pQsY{7h&(@6P(FYd$ytc)%qc15vL%9 zpFDp2TsXqprT8`CCvDVO_-(*X_z#({eEzBsf~=CXJAabLV_+89I8;0HWBNbW^N-hB zSC^{AOZst*_*IM7Z%Fq7xN-4%v9$g|T4|3KXzHd>Su@@h_PYRKw`&IPBM=b!ej}xf zifVo{P@Y5ao(DGKcR1dK><0Xf_f}Xp;=P^kTk*aM?<>R}fv?BA{2v9g4sn3kBWlv`6Oc#Uwc*7+tDSsI@cdqMwqdvH zO8Z>){UKzGeDC0QKy5evyc(H<0JP4Yh<8`k=Hgx2s7CxGt@6GcKY9GHyI^jDTcO>f zU-eIIA7DI)3GEc#ecGqNeiiH*@pH7d;+;<-y}}oH{4fhJF9ZzQ}ovPC#5Zr zN9yGDz()MUuh83o-#j>aGjJ<@XW;z?pb%app7BM<%?MmFMoIN`U!z2wJM{5tXO!k0Xd z_eKQL3;TEAeFNUt(9Kr7^QrwVUtkr*@$InN0JpH)^$zC}th^KNOOCa&jjT=7;a=Fg z`m_q~8}WSuenq_F88v`E7u&m=$Iw{#;l2xQu7(>4ca!+Cr}l2(AK$QJ;fhzE_FXXV z(`dBsk&pJ&-VeOC@ukte4>TSG4T<*yc;{35FkTLvRlQ8r;(H^0QV*rhY`||Y`QxYO zA-J6d+7jlw@y@6Ay?D83&W@F%0l0VN=pMZ9XgTuZ^$5a$5HuuS?{l$2+4%t8b8}xB zpC1K{OF%F{ewcHQ_oJQrkywLv?(y#A_6EG4;N0WA(YdcfV(=h}y9r8v@^Rp7e23kx9~VnJ zrQeS|*S>GnujSw0bDn+wWR>rm&bRMRRQY})I?fXQXR3VvHNQVq<@>a>`Tv~v9c+!# z_bk7Eq00At^5&m&gqnWe|FTy5{xtmqz&W&2_<_C3%xsU?1iOC~e~=dU>@05hsGqOH zAbwK#wbRcx@Gj4rU`83$s=KpUsk?o=_c44IJixPmjc0$bXFth%pX|Ar>eRzZQI`As@c!*}v7Z z{~GP3Aiu--sC|k7?>%Vi>AnzpkcE}$w$2tTKQ;%j1KCwa9TBYREVPB4 zSVnB`>J0Ude3)@~{6V6CkOB=PD0JmkraLm->ArkNchHyX*2SfKu8(VbkpunK-d5<# zce+m?JTs=7Yt8h^K|Xz%woa^;B1%|5HK)2>X|K8*>X{3=+JgufVu>~r=7V-DEVi3X zAq-kpb>`BY8K_ugdc*1R=WzKmLmkNSY9NcU45|;T=vx~U@;zX7h{dTwI&YvZOYC$t zH*m{Rwvd+YYwO6TI}1UfFVnZG5Hzpq&GfZ(bxN%Jx^i9ZdK>~)+0xk&-dlI%of->uH?-0qhbygTDyAtqR1Gh;x*vFEhuYQ$#wPi=G!%1 zY0dls@;G*Eo+WeheQC+<^3_FI2rTsgD}gM zdSC&^J*-9MAZA+n3i1M0=YzgptoC(xp@beLUkpwoY$_-kuPO%RI6580fRX`V1nzE4g`?d@urAcl#PQxcoh@u_JOEscYRAjj#V zcB6Fl23_sV#+%Ok8ha^pODSpAzb%=Lw)SFBP^ZoMSKrgCj|$W%FX?o1rZ3|HhAb%t zE$x|5)En}s^nHl?Dg>zYciOQ>Gf^ikIypUi;o`aJ#dBxPafxy@U}9?Q38{ID7A;=5 zbYXhw>_suB!Fpq{FgLdfg|xFT5?R9PX~!Op5L~k0xMD!=yLy-b4=(xDJh<=bVLH>` zsH9G?U=Y*v>@yZFnVT9n&Z8KATyoBW^pd#?mP&do1FD5*U$y9{d=>2xxW%6nPfX1? zT#AM(e3M$5UAYrM+uqf+auoz)d%k1BxTHv*oEq2GtTe4)jfGE%N>n^4@>6XH%E})c zPPL%%*FtTZ+9FYrV2?{3c37$f+8(Lqd?DA{*4>8%d#zyDc`S6L=t`uT5gjPB3>7Ko zd{sA!lyjbFLXZSwjihC=X6~#7=V+Rws#MAmpXp^Oog_(h!6sN&Iar^2ZN@tZ*A)-H zB+Om1bk<2{%v*Bm+&Shj1r-~~!zm}Wkd-Nyty4~n*jt5ZgGQ$;Sp`1_@zrG_!uA4! zb$N^&Gb-kR&;CLQ|0TaGGUDWU3({xLnzwX1bdf4n3#~KiWMakQICLgO@nZgzCd-Pj zpL&Sz$}a@S{|kydxW}C;SX{Zg{FQ4gQp#Pq&n6%qMBp~H&EprAoZ~3X(-b_?NmHg^w=a+`cepk&*O+ud( z@pW0BsP4(0B`D@a?rFG^fn(uSm@j_2^Sv!>VY^oKb+781faZ5{3UbZ_5*oIq#fu^4 z)3X;f38kpD&Pzfr#Fi3t8dc{{G_BAXPV`Ku19(`uE9sGx*_QQ3b}*eTl@)p@Wnm@z zCXSB@Nl~H2aoN+->6&QBt=V)J;`zx6Dn}La?B=a{|==O!epra zk2tc5o$M=M+=8M%K|2!@qoy1sTO6aeh3`_n5dsR?x_oaJT!U?5!+1JzGfCu)%lkwf zlH{^t$Y2QhE`&5AObm|APfYbI&HR)TDUZ;}o1LD!Y%czsg*szF; zpsMpsh7c>&=C#In&fJrlPMI9@W3swKFgjM&jGUazGO0y{iN^`aR3O58>eRy^#hRfc zd>F!*+8W3g%0i8^O(vx#Rqa!Vt15!9-3dY=s^T5eb9!F_n zb!?wat2-tvw<>sa^VNWnwJq zx#?6B=04Dk(b>Vy-T)gfWD9^yu9P_Q#a4Ou&PYj-Yd_lc7Lo+23a_LylU&xqvggAl zg5Aw(TTHCZXnl}Q+B8-YB#3XCEancR+EGUgW6GyTUKFQci#)`--slToxhmAg%Y1E0nNxJI?9j;2>CYDx3aV(Qpf}{}W z9K7^J3mQgCbEda9Q$&4Bj?KgiYLK`CH229LP*Mv=3f4iUudAaihhyC|D=|F-%S^W2 zRsdQsmo5ouYnc#*b3$rC(-~)YQky9e%9#9-zvjehoOrhe1lA=LcxAq~GvAKcD0qr0 zm>8t)GhK(`E#0}QgN2N-=}jFk4TreJbYk0TnHAF6#%ae+3&f2){)aODSeU+(WC)2b z{kj~Hm)X&vs~a=)I%6I+SCT$;fw*9*J}pi(2K=MWwF51M0~3_&9VK(jzD<^IUQ~pH z%`9V1St4DQ68clV#XJ{($hJg)C#04voPBzF$x_U%&X@TKqj!R%>}9HWmj_$aN=p{Q zE39NJng8*eerggX^O@UaGmo*eYE2+K`;B14W$nmNoF_U3LvDbhumIsHC#q0&OD%|G zVlpI!wjOTqN4L;1n>gIjPnyA4i-Av_g`U0ejC9k2(-$l}dx7zu+#uhvUXcw9h)8Me>yt$X$%`u0Xu>$S#zw<@OB-ez*apT{s7ss*n5bkY zrYxe`1=9|gH4NG(i@lvU4L!vZQsYkuR>n8RZB8j4u;>+)byq^mm^egXT2LA} z23BTIMwBs#j3^8DsNomNvVzVymsO0YP*yHL^GeggIG539oXgV4I4>z>bOk<_6$r+8 zacLYF=W3Z+#T1;*IICS*(XUC0l$&PQfoI+JvUVnG&kmG4- z>n5X#Go=HJ9=u-7kWobTBsZ%gCa!l)bqP_m$aQtMVVAwUrc(M{^DNo1N~fLA$=3SA zIpZQdB=I3jC?@sUe#e>}sp|8ZB}yITLwZbCD*3n&$^51cSE8aOHfvEfq)3DFq4KT*GHBJxA}Ki%}hK9KZUqzRC24mvN>U1vk>WerBR z{+mKXTQdS}YiY~(Mj|1$^1DS7v}-v@WrC?o_+6qBs#pYw$l<*TokOQjETa?$E(LDU z!X-;3L(}t-sk2UjO4i)P^XDy?wN$kPKv^6e;nJsOEhDXcU7hU{BxEO+QWJ)tyky?| zMQ6-SpV>5b@i~s5WK$)k6^fm?D1Bn6mOz&aQ;v*NDjC+BZ*D78$*m|krP(-WK4zo% zWUE9bjzN?x=^bGCV*I4>vbvl-4~^CFsqxcd(}}6^$3%Tqjn8>(xX$mj7VSKC49@S2 z+{NUNxZs2n#ve?FY+aA0k&S9Z=VI2h}sa8l4H_#|yFh>QgV3dhDOK>@lgk{soB(Ot_k_=@b*r8@5L(OQn z#SA8>5lj%{5j27c3EyA>eJA4pW{7<^y@45GY@<<_A!ZlmbmXI$L-)NjlGEc@x^N`Z z!fO2OT=<(BqUlPBp{re_)P_p z_pMX4#js}9M5tMLQq(LCJwghYlWwjIwN6cHKC;1fl#(A4G?Smud7LJ^ozOZp)7>T- zk0~%*tzsMS{OBX3s>-sSOaK&)J&aNygM&$0^HaNeLs>*twa}@peI4xwIa8Ws;~6NK zjnQUR`yHhTu|`B#Bu|C8984^%7D>YtmrdwY?yQmpM%7xHh!B$R-q9stDzr%yy*`;y zIepg2r_XY%cQmS2Uv+()ipoq!kDD#g9#V1!NBTUv0)Zu!uC$y~G(j9pmeQgsYw|JG z*NT&0da=;2DlvfsZ*#{iLF~j=ASMok*r78jl9SI$uB<4Eg;!{fP93WAIDqLWFkV@d z0^y9(KQ44Y0~w;fuQk)@MLY^gnSj%xka^Xkjqe)kqYt%sNFXJg5GScMt!=qh2~{}M zp21iuTkOlHx?19pHF?4@siM+*aD#N4!BHC&7Jm6>qAx!~sWNrdM=+kqssDjgEfg zK{eE3J;3-otELeY+DWCG*rB{h;gp)1Sf@=WL!-~#hCHR#und@-zN8lS=|`n<$YP0c z^@5`=tmw!Bsb6gL(-i6*pcH~$G?1@O(3~j6V>}5G4<|5|?9F7eZG9a*>F!lo>DhfiY|TnTwM7wL^KOjw|NVu=D7}=Z~8cKHTeKt2{YAb&Qjk+CG-ela=u;GGqHP6X3uUydAitvKCCoC z(s_ia8Gm@$2a`eLrmp;*}0DutFs)-2dwM#D9@nJ5eDGqt5Dv_oD& zbeil`VLCH~a&66ag-~2W<=U1RDtrrARSH~%FKOCP81tD9?9$Nsbfj0G#6#7}QM#I8 zG!m(aD0^*IWT(QMeV0OaKGz1_O8Y1WAEwr{bvAdcNts~6(quO#8{)o-#0-vQO9bYm zOpUer{EKr^VI@fj$s<)E)-E$Uol`M6D$;mRxh#_=Q4b|v@;P99hBra#0u;^~^=i|k&Si4ltIC{} zD+?%6(wGgQ>E}obY6rnz2=hMJVu=4G; zokhwknE9P7WkBXrJ+`s8Mw&zEq^u5BLzi_mgj1;+%IYE1j5UR;1J$2PDweE{)EHz3 z6;(V{SGB~QuYuw!cw5)%6n@iCHWRZJ$wD|zoJ3QspI$r?o+JVMx2SNq|Stnkr-U4)&uDGQsZOKazQlHZ#~5q3SggyOUBMl?4g4OwlL{I9O-CPmkgN~q}ijuWJ) zQs94&Hxk8dDMvpk7jKw{h_$yUgs3}h4+#0O3=1SCN{fZW$SJukn94UjW4Hn9PCUV_ zsYs$EACv0iVjIWrCARhD?Ys!exaE$c99ze&m&#VKBiTL+g-R_t?4z-aPuE|d)Fh+t zk%)z-GvbDg(q;DOosgP8cj>7Mv8uQf3jy?4X(WHo4%B3Dt2q%>gSgetWVPFlb#tq@a)YHhLYW7kfBnFMXc)18cT^v87u5mh2Tr9oC@~cr}LZka+fr zbuvXiII)A6Skz^yyhHaSax#svabLw~bxVm@BHTxqyl*=Ca-ZB7Y?x{o5;o@u9*a-D4B2T*Fw>MV##sz0$cCW~5vxzo z4@4NJQ|B%4v<;*n?%?)8Pu-wmm1lwHg#oLOU4i6hqNefVP_>QDN^6{152x0d%S6qS zob;=OM6gP|kZ4b?JTwsbC;1c$TQyZpP~<*Ji?bOt8O~861tvStfzeZ2P^qMSth~>| zDoSaI6RLhExk7<+)MXk6V^b9qAQS8QAQCeU=e|Sd*xyx>tSr?8$)GV|ebG@ouECHU zMYeDz@nz)-Bs=BNZlWfn4M*6xPIqNnr<{v;8-v)>j=XC(+m;t!mVPWMU(~O$7YkRS zhvFCMyd0j0cife5)}T`|+XNe=0%gFPn}Xety;$)#oIW(%4c@=hKB0}CIOS$ZgU5s| zq8O*A?^3&bz|i1=esD4x=9R?BbdB7v}8?LV8b(Re2gdFjdeF!}65p2Br#buq5TVfl1vko>-RhK8jY0{}pRf{#O_i^o9TO z_@w}igi{2=862HZw6u+>Wo5w6w4^>ta(=5KwQ{{ObR?=MzDU6-3BVhENc@H0NP}y7 zq6rVx!AdVex0A(QGsbK6j&{wPe3+1RrQk$cvUA2s$XHh@e0Emgrse#Uq<-t{UkDay>OtE1d51456Rc9|&{(N2H5Q!kpKJWly(^ z@0`fzxM`2t08bUpb6KTv_e71px)GeUyq^EkHomIISj4vBkTqOZCbw_NJzlz4C5uit z=|rZdMC(MTyu?K;FCrpmk`b2zVr^mR>Q@Q7rB3Q}s;#j#=UXzX+Og9>j#CUA8wBCd z+VSdr@zl7~w6!PmNyZ1hwO{8&+6`r0AaLSpR%*%I#b?c3oIZK+tod`3glv8m@@0s0 z3Dsl|Ju#fEz5rH!F`L&*FX>N>)0J(vZ%qu|($0h(Qq5K^CFvF706e@`p>rs5TKm#d z4lmamhBqflsP`&15XRDoc#4ivHf*E}d($zFjK^wQ6B$iEHZmSMJ`lbN0m$!2n?*LK ztm?>@iEe4Wo#YdL$l*%$HmTAAM=!d{!tcMTx+193j;l+eH+`IxU6Ou&)Oz6c=e@aL zp*&=bgrk>M8!O3IW*ga+!E3#LGkcH*Sz)22a@4;Eb$=uH{rm=kQ(HsyC*zCwT4XV+=QY6W_`CfW)N9y`79)FJxM2Gl*+Eqxj(6HC~e@8i}cL3278JbWC1aq=Q)=Go;rlI32@v!A@SIZT-`BEu>ze)Xf|$>X=Pr$F864_t zvs9naMmd^u9eVoLJm@T8DwZ{iJd=yfnuNb{_tTB4q{&iNwt>Jc$VEht-wi zm+<5Y`w->ciJ4@P8eXY(k&VQyTs~aROuJw>E<|MvRR{k>rYilHQ2R_2I$>NH181FN zWR<#EQZ-9++&JcO(sI2zBmJEBxH(DM16L5rrJlw)8Q4=!PY(2ZJV9HJy=6NxwU;is*gjt+wL5;XHn z@_F*yC1Zvs9&NX=I1(y23rZ{|O>|BV_ndMx0r{`D$Xg?fMLA@VB+5jlxaSI-Xo!-q zy~t>oQhCsVHFyZDt6b$m;F$T2alp1H8m1 zt!d?hKy_n7K$kRVpQo`k8K*C)vZ~e(Wt|?3CE~(L_KO%3qO(Y@mkib{sukwhWUVD0 zrD^-FZA|G=7Ns*ZQT8%ZhtgpHn>qO#b6ZwJDxW4HOh^`!guGOiIei5=b*U0@*Tso0 zS!dx9+Cr`T42eMoVsdzyEW7I27jACL>v###q-4>xEt?>iTsFVua}SY^WMwR_D~U?) z>mZUccID(rl9MHpymIj5RaHqee1YjAQI*t?!g3fC1`~_UdzI=Z>`K-l>~sQ#*X|9! zatb$CEnmE15$9tQ6;lbjDk%wD|I(|YkTDgH@*>>NwHD90#`q@In9{JRuzraeC9)(_U2P&5%~ zzZq3C&xP~UHOxAm|Cd;*0!knhZ5Z<|;30Bc;r&2UiL<$l{H^RFBojG=poK035ZW399Ntr{n7H4KcfdCpWq4?{CuG9CpC>~Sehs1ZmPBRU!UU$3zdrKO_A zMzU%rdKtoB*U69_gQC?SGCd*1tO$6rOqe0h4tFu6gJBXaDra5?19qi_x}-^xKoeO| zb(bJqRV(!*5*72xYj+?}S~uv?tExln^V`9qN_l8HL{``(NXoS#R}h6UL$B5(=W1Wp zl>`yXZmKkpn7e0?0$6=rv-%Q)kbMzFPm9E0oBCXI9l}GjWM(h11S;FHP`$O1QZR_~ zy!z_+G(-YL#%OBsLjT)yed8(>b&jLo;fe52i`jJF_oCw{ltJ;!R^jK2pr#_sQh`JX8wZXlz$glbM$;HHye`4;&uK|~Trf9wm=Bc>6w3}vtK5Ow;+&_(9 zeah|{_s#e5yE?|7r)a(#m#fy##J%Mu=4~bB=V|^9-0!{!@dKlUzL-bDobt@_{ZyLk z>)?Jp;#*?gP~!e7nrDjp4MA`p&22D`y)FnID{;S-<_GY7*UN)o8_i#Xc`q>Z*%JQ& zE~u6Gx@Q#4zZUm52SJMF@jD?scLc#SnvaBepGSgVCe4dr-sMr;?@Dt9=3O5{dOh>b zFfS|dzntdl;lAz(+HKLqohd)5T4G&}lI?u6b}e6Jr<6G*ue^B-Z} z_u!gfBh7n_3WB{S)CBi==G|d_gyxC(zSrcM;4#m<8_ZA9?81|BEA&r<`}%1$!5EY) zG55nfZaLylvva?Q<|pude-y4(nl=4>H9tEtqAyOVsX?g({Cy-7H%qx`?q`;X$hgs1UU-S*`B(^SPeS=Xp*}7GK}*Ki}`} z%eh~ZN#6H$?sH%FIp;p-+}Cy8=RR=nw)pll^Y_+}{50e{?}vWkD6g??X+<36b=$Vo z68rcyag^8jZD|7SiutqsR?&W^#21i%brJfAe+qo!0hDhhzY_9-o0;o zv_s}U3GS(FPaBfI7rbp~dyH)uu3}@l&tN}qS~QQ)EBdX`?a}8_9{m=0Q1a+EZrh$} z8TW#R#rPH52>$2s?4$e6Z%^pzfo?P*f{JjjRc+@9vdY~Q=5a9ssA#rPH5GX7`& zcjNfy&TQ}W%j6#LhU9VG_3bf+qv^!v>pF1%=IibS`#P1hbDe+0eCJVr5b*du%mI3u z+hZ=kZ$)#v4}bg&VFGn8{xo>cbbAb=yypP!t9#IoN`3^qcLx2a_&RX!y(x`~N68J0 zv10s+4X23neFNl|qF=@-g6Eii4*jP1ec=5M;T!Ja-vsYlXpei;=l8)o(NC{P9_95& zdrosH_HkpnA7P_;thlZxyVu3*=zR+PtJ24HuAy!-?gbBvR|-; zvlzeH8@eE#FY4iD^vB|;hf&Nu#Vq#&1mYRj!<@!9xs}JF#bX`9V?p^Gb+rI)I zdANJsPl3mlP|r$FegSw6{L+53AGW(zdmco6eLS)Z`RkG97~1KI_&s2@!pVrP*37lk}D`5@m*xJ;|Vd3zXr!oX1ouKE-vzW zE96J3xLz@eEw&=O~36xv?KEvxTf@!-wbBEq5PY`M;>bT^W=Ae`=KQ3o&0;? z>ciXPelqU`uS=eeV7%rq}=H!u7XE1-U}WVzaQx`iT;$H<{bwB!9 z@pm4F`~l2kD(&=F*T4@#Uogw_{ou>q)|2MNzP?5A$0=Xkk(wFr1h0xOJ%Q^-<+Q|S z$UAUxnD;aPTgXrBNLBGSgRjEF$Y3U~Kt3e)`A5a?MEYuVXPOd!3S1f3nd;&{1s^%O zGgUE9=lO2F5U3`t74CfBjCLM8WleYefKY8 z+$?xXeE1~W|MoN^j{Ez<_B1PYc{IeQk^U$;*F|y6$L`pkmc{o#zV9B4PvRdTPosYk z$9(K=j8{G$^8GXDZ^TRFx1saIn9A#!1Mh{rBK~dg!F#u-A#sdPvly?$eOF;zM&~^X zX8lcppIh%q3*Zmp@87~tFXmB8VqafV{AtRU(4QB)Ccgd@>ICJ9$xGzt<11pydm$ez zxF-I7$e;7XwlpOEHSpd~qQB3$7tDH~zD(bX^kW(G_(}09m4es7Q^@Nc{II{P;5mZ)<7CXk2F33q4?y37C&ZtJd=TUHOvWd{4e_zl zIQ}+_zZqWwUKGCw^8I6&_hx(qJX}rbLy-LzeoowraZdb2<~NJ}6-<3YzdP}qR&Yan zUx)72Uk!(;_n1s@ku;; zh+SS2g?v){*GPYO73B@4{>QGvd=}psNo;*q#XV=xpIpH6X~8wpnp?mP$mT@nb&mGiq*PvhruWB?@6uV_zm%AAwM{e`60#|;KZ^O3*vF5Ge;D%pLp#zm_`l%q-^UO8k6E$xYlvfh`vB&j;+Wq) zi2Gms1s=bI{wCuqz>9b;VgBBh#4mm>%HulRPX)Kc-v;>s^#AJ_*T5SY?*k`1cQF5l znBUEKeiHlm!9qS#@TBi#-1N9jPMTaRd6pu^p)*7Z?P+R9YGk}0yeNJRz#vs;%9-6KY-^8@!P>K$HQVP03UDX333uya=2g z?%HvF3|z$|t0wt_;L%6Ab{y=Ejfe4g%6lOnD|lS|CCI;e`2bDck)HfY@KnYx1y74@ zCz=)8PE>`?JfH1EwTx*e8WJb;H?$MMG!p5_v=fbqt7j=k2x=;Z|we zJ+O~MCa0YU zmmKMBCt4NT4g^z4$bI}qA+Pkbyvtrwc8e-dt=*MJw+ll7Iwi7LiZ6{jFn0BIO#}s>^L^ZMPM79HwX(zHB$abQ6rMI1keo*FbJJIm&Hrr0r5Zg|)Dz=@-b|Kq| zmMZPzudcQ2L>pk1*ZaY=6IEn)@%7oR^Kr^ixi!hjv=iBmV>{8f`CPCL=O*ympo+fLLH+fKA0ww-5oPy2doCu(F&JJB3CA6FJ6_wkF8yM3;R z-9Fcq{vB7g?LfnOH|IABW_empJ5oMQ(T+rReltq%>mA?MKECZwIFKg6Oz&}wb{n$C zv1zf#G1_q`_c&G;dmN)(hx&P|?cdy=*{)){(WvC+NpZ(+B#!>$Lfh_=+o2kgckD*u zIrcZS8;Lu1BXP%WB<|RaeEdnwb7x>T5_jxI$aj<7NZhd-i92>9amQ{1X8CmNM&M0$ zBeBcRc9f3YNOJR^|4sN!4jEHSFngCN@+l}f4&x&m~vfYPFyHQ1U8QYDj8Pjew4QBhY-Dp;Fw}*z< zcB6%Yn_}CIS{c)BG>&_p`rB?akumK?OJduN*2K0Ot!GTT(fB~7?;|~F3Y^=G>SEiC z77AVz+itWbww;J}mE3MrLD`UPHyRS#ZZs@*dC|_o^p=l_Z8xG_h2?F#5$z~s+l}fO z({41IG3`dQt1!LoMho~mw;S26VttyD+itX4aJpo(-H84L=4ZQ6P3-)J3i(LEqhi~Q z#xthfXhLke(NxB?6U`Ld5Zi7vC$`({3~)w%w>Mw%v$!8Xj-E5$!Z&+l`vV@vCCnjc9kt?M5}R^`jkza@&n) zhsk+LY`YQdGL+kHM7s>x8|^Z=d>%}FZ8xG_hHSeJ?J{KBjaJ3B8?B3NH>$wSk{@3a z+io;2JB;l{Q)25kEw^qhso_m>zSN(r;S2h#oRhiPdf|QcB65z^`)I9m($LYv+XLj8_h~?yHP`IyU`+; z_2F$vY`f8_*mk3q*mk20vF%2-!`N=bdSU*y8x4tVHyRe(ZZs;k-N<$v+l|I0x7}ze zW7>^o#kL#Gi)}Yr7W;Z_2eRF$2D=OOwcTh~Y`f2*`0Y2g?M6!(({8j3=KMG2qb!*0-yRZszCA4Ve0xOf`S!bR!q@{F2RB~Ve*mY|ZamQ6 zf?xSW*N#LU1J{(Ed^31hY&*}m*mj;(vF$u-8DESCYRAL#xqx<{i}64gDYDl$?gJsN7!}59lMUWW7iRP>^eT) zb{%oYu9Mk)F2)00j0bAU&O|%U#dx5L@jwmOkvPA$UFTvvP}`1hF&?NLPeeNu+lTEs z!*~{;o#kRY5FQk<(e6Y$hV42Rb^fu(192^h7q)Mm=vO`rPEU31 zI?sS_Mi4dJPazMx&5m6iyH40?5G(+gL}tz#ruYN`X$NVNBQ|(o%hTl zzT%Euo%hTlo&v!P8%j^EGPnV@FXl(y3$BP)k>6!^?&`dUM&1LiN$&iI#D5L>scBrl z_$4>P*LKgYcn^*Fe>?d;T)*UR1@FHf*Dr=zvDL-zg8Yg(T)+5nrhfp}U!-SzQeGab z1-A-LhzDZ&r;y*thjG0b9|l*&gI|p}KD_iZm~kJtCVn>L16YhAyB{1o*gUkYwYUI!23CH`gcZ-M)t-j!A|`IV5bivJMu%hT?(mhlV08yWY4tB7af z`FOp&zCrQO3(#IGyW>5&T+Vnaaz<47vRq(&l-MpjkVn3n#=wd$sU*5%j;vZK( zf&2f%=oendt^phSh0l!QkAb3}z)M#b=M(Mnx!6x!>?i)w%_ngGb4|Kevy;Hae&V~p zX{g&zJPhu?t}o$nKIHM7G2EAG;>RIBb$wswxr3d~z|DP~=MKw9l>P|hhe!K5&mETg zxnmgeOK$5+lSTe@@p;Jm$98s}8$zG+J3G$}@tgzao1YuvIS1_L1Y{FibzA#-;yGtx zXXm|zc+R#HuA55`ySib znO8pnKCrwq)^DSH1HAvyooTf=enWidRy>EUVtoL-cfj-!H~s|Li}+5+k36|EEr9d5 zk)=Z3l-zM6EwST9{9c3Cy%~Z3nE5%5g#Ko-<4ABz1UpUyO+MIhC6iftu5&Y$G1s}7 z7JHqWS+VP5H~Ik|KdPTS`~+Xv5NOW z#o=Gv*OS(K{7JMIG-f<%hW@8+10U@{0ArhDy#dJa=os>wAwP6gPZ|P5c{c^zu89xwLG?RA4L_RH;dez9N1xPpH5|LA`CzKi{G*)MaA=4WHB#*O{nFM-no z-F|tU{p5W2x%$M5(Kjx1`{nNjU-n?P9}YYI`0mbp_}!5AW5MfH<~_{FvOmWqvyZ9hsiz--+{&ig8$MwrhU|^4@!4hm?HVOK7*=9qSqL_{+h)l}fDR zM-DssV5MW{KF9P&E3v*Y<>bBKMdj!8OX3$oexz1O&5ZYem&GxD4_6ZB&-wXU;@9E$ z%dW2^&X*~V@q47wv5SYD_U1~*Ztd%x+}=+A^Ekfmd?oDG^w)j}9P7nEPWJj8obQso zEsFgf#&W@HVCoZog~uu#JMw>J{wtNl`7Pz2=lNHA({RRn!6V{lAg?~rn=l24^yGcu zF>w_Rn`2M*#(KxhkK6~Iko@`TWkWg&*SPJ!wMn?*LyiwkOtK=JiEf`S_k#f0^v9q4XIZG zXEI~H*E3ykUF`RI_`JaU{NB!@*!uDLAeS!}yas0Z-HY<*UqJosYQNXx7jN^GdlNp}^Gk%!qEuRH5 z{~tj5fn~Jkj1Phrz@7JMAHsW_V!tQaDwyjDGQHmu9o*Mtz9-7}!1MP+xxSy7?}=`J zS^s_ys{{gfgFt5)W-y^3y^j|=I7F-wqXB@xhG1PCy zmw@Loz6Q+o{FoopUk_duA43`UVluLl@g?9j@&2#JeCSE6N0jjqFxSJQzE47ae7rZU zKD*7k@qm5lL~m+|&w-zVn_*4-7Vs5!_Qv~)Jf8AXkZ)w^FXhd1ww+%K@)zCRn`#;F z2ak%M^$I-aPhvExcy!g<_BVz?~FL!^STf71#!IRg`0C$%=f~M+>iM}#{J+q zG2bH_oa;^V84rLL#IJ;Y0}uA5Me*Cfmn`(AWiZDN$JecjtzSz#I*j@5L%9D69>jjO zC%-p0B=&oAV_=qVya(5+qzQ4n2lqrJO^QDReQHlu(p1L%;AwGO-&!Tr#eazON1m#r z*-SnF`J6b)^XW>O7e{%b^Ia6jdvniJ(vmpdo5La-O>xwB>P;&d9|yNG-Vfdo_k07& zcSmokpe%U3spR z6Og|E>&*>jJO&=hnDXI_`CWzaf+xgRz7prdIu=tI4}#~!FQ**qm(FK=7(94=yS@88 z-i^IgV$;FdVzlx8bwE#oS9UHrKV zXs`F<`A>Y{cGy!nxw)Zzy<_0Z7r^+<>-RPTW_z>!ye_u=d{%6Gc|+{?Fz3X!ug_=4 z)1JPNG41J#V%yV~#nxvflhdBw65F1>QKV1b*w&wN+S99I+tVk&obTL)%es|%j-Qj{@~r1FMxS}uzj*U&P(2e{Blfo7RA1vX2HwizeM_-X>VF9 zyg6F^=M(| zYW{z0=fe3%Wf$^wU$k?z$B~P6u8VfAi*~MycCL$duJ%0XqMZxRfv{6uv~#uRxwd;< zv~#t~(J7wueO2cTW-qMhrao$I2VYqOo?qMfU4XZk|FTP(( z9s?hFa9_NaoZBa1f{o)X9|2Qt`{ab!_DR~cD7SrbR>$9m{BL?>UngEm>UH9^DDQ=Q zN$LL!xw$XCyGs53g!(l z{@|SCUVqT>Qt^Jr!|=B#{)f!<2OTdJ?|UpE-b38e+2!}oNWr6Gf2U(i?C*4pi~U^>xG*EXh(E>mUEzWZ_IEqrQViyMpZvaSBV&HI zgDyqt6YqtB=~5*7yB*77>%R`B|1H+LIp2<#B8UG9KFgZolRDq+$T+^+A?|#)L)`gp zhq&|I4#gY!yB%|4f48G0_IEob;1Z)g{%*&z`085wyB!t8=fw4a`P~l2_vH04B>p(% ztN4CY#{6!FzcX>^35QuN3rK= z4YB*vCOGd;mc{-~N2}mzw}) z#LN}U?^aOmc+ByP8IQ^DMo{kWb}VPicual=f^vViV?yljc1&i>?{@Gz4Y|JjE(6QU z<+m>OcRL1g?{(r==P>?>{oM|(mq$6j+tIg#=c0@m&&=;OQ10(`@Vg9Tf0v^!c6l`l z`JC9_?N|g;|6|u7hHwMl`xJY9$CZrv-Hz3a`Q45+vCp>wW;~+b7pV-k+48E`?~4o- zJT7*8|Ag4_{nKLSH&e*{od>61klgY8TyKy1ks065?>vwl-@lSEl5qM@#(1 zv+eJ_u8aNMj>={2{QTXHn%KvWh(C+t`MuX^Ft5+?r**OQ<98@1A05V{5#mp|zF*G# z&IH-J_^_8BYRsBdws`svENVNcO;np3;5yv%{oRfsv9EVT?C*Be#RqT1{Wk~w#Qttawbst>?U3_(uY(!$yB)*ee11PF zxsM-{-1F-xvFF!yvFF#bV$ZJ|V$ZMV#hza;h&{g^e@#mD)ZSQ+cY$}Ub>GjA_eP)U zzK{Pfv8m%PeJ$*cL;E{+M5qzlY9{Z6d|e!N$LscY-rJnO@kfUD zC)*LN--PUfmQR9Nuhy?Fwtfw9M?W2JePHT~>kT{PDD)LSehbEl3wWrLo$uYy=aTdL zJMVE?J|wxYycbE{3tqHb3N4Af4$X=}0k} z+D_>E3XkHOo?C~+zHdgvzR$+8^tAJ#NIS>V&Nm^poo`xf{bn*b?UJ)%+a>3V^h;vv z+Z4MWSQcB~6|wbgW$CH!TE^6OU2J_TyV}=deXC;1sc%heeMgG)<6xG*?U-N5u4uXK ziso4zZ#(9q*!tM+Xgg+0a`SqTo_0s-V>>48j%3?0X;&nB8xz}(Ia%-wnD?94^_dlW zT_3(DNx9ecnHPIqAKESR<5$FoZiTIG73)Tcy{=D1c0RA`gI67*y}5s~-OzH{4fFnK zN$mcKc0M8n-ROc;Z?6VpVQ;jtxfu`i9NnmV28}>w<`9!KDB~}#a`EER2=2~G~Tlj`}`AP zuj?}-_PRc_i}L(l*Jobrb$u4ZUe^b&;zoMfjkvDQlGy9|;MK{Fd@tlHVz2A7E{^^i zgT;o}>-s!`apfGkMQ*J3Pk>XUn$Qe_{}SB4ubOJ&+8ubGW}w>fKi&pDa{@-o&Wb>rFJoF0Xm<&qE)sH?aif^PJ=GSH-p;tciX6y4d!E3dVgN zZ}vRI>rIS9&ieFv6I0^P^Zcv5oppuDTyLT-x!0SR&6w*=G{jzSVlHE@H-SguIG@*> zSjd>`O)QGN-o%pF>rE_Ya;`VAk}=ntSQUG{iB`s3Z(>dC^(NLc=6Vwe^AMJY*PEzh z%=IQXPqLirO$>{@-o%L5>rISi%=IS5#9nV=T>SV;+v`nCWOA-IF)8+X6Vn-Uy@?sI z*PB=nd%X$H!>DgO51|uW5xc#tioM>%Mj=m_XYhEhH!%d}^QxckN5O1gwnvSLZC{!c z`+QS{obxIk@AP%C?NN=4X^)x{+a9%$G3`;DcQHSIZ-nzIvh7hAs)KEBN||O>kb6b3+{Vd_08A7soGTa;`VAQt&F6=l6OOYm$4t ziOTNw`L>@&o!t+Aiuek075=$`JuhN@TyLTdIrH~=6P_oLx!#25K`t-OgV-KA_8f7? zo+JJO(u6$+T`1F&Y0shmlk9CnZ2Jx8HI$njm6JuhpH!+p*z|*)6vDcee$e8O*EQ`I~ z#9GFT!{o1| z{Ts6x)4##>By#@-Od}npe`5;F_GWwBjM(k7UdZVm&ePK$%>2FHL=(*G^VX6)^j$#x z6`bJjrISg%=IS5#E!$Kf0_A(e+!eHDY4g^n9i8%O^m}oOMSiG z#02cvWUn{j^&Y(5gx7oUdJ{8B@AW3U-UFHIO?bTruQ%cK8^~O5VnxS4>lLs`<7QsV znCne&LQ8$T-b6+0@~w))K8ZN|L2=k88(3dJOnWBRn;6QN>rD)cz23w~#$0cLc6y%Q z>rIS_z23wmnB#}-{nKLWHzQ^~wD&g(UIeo}+1}d}+uqv(^Za4I#Y5n_IPAArZzADX z%Dvu%*J~hiy@{&iUT?zdH+a1Xuip^%-?d8e`VCQ@SZ`uf$47ah^Bxy_y@?62*PECW zM|~%(50Ww0o2X~Z^(N-UJ>LL37}l3q%9!g-tcbnd#H!fk+Y)=d39la!^PlUmUfOfo z<>U1tmc?NY#`+Q~8FRe}t_Q*AWrJd=%=IQ(8FRgfwTu~uUx8nM=W|?sRqXX9Y8i9AiE**lo0!O$@Aq?k z2DW$mr?@@?x#OP_`}(*ZLoTn}&@K!=qqvm---4o_IeXzVy`#BcFOXkoa;?Y zX3X^_ro~=wVn*!sChB6ZH!&;rdJ~O|x!%N_*y~NqXUz2`7Q|j}Vo~h%CYHowx3|}u zSi{Lm6|ui4ic% z%j->yf!UtD-h|hC@Ol$dN^kvU3a*R2-o$(%Ul4n}iKf`=O;je@`o#Pb>rD)b7jWHN zZ-VPRP+zY%!Sx=@TyMhbJGg)0dJdHPc(3Q+{>AGzya#2<_07C~gZr1!S8r}V^v}5d zxvuQE*zIRR?DoU;9GKqiXDU0M?Poe;wx1cX+fPI6@}A4&Y(EQPx1VN_emRq~{j7>R z?FarWmXEg&z%G-=;eQmIuJ78#$h*K8CgZqWufsSvyFb;%_!ZkM{%5}74?_^(yg2+} z_wVm~kBsGc1d~46y;x4Jw;|byEJsrfx$A9Q?0TCNyWZ+LKH~5f_os$9l*4~>nYyOiZM$*te0*!qo&t=|-wb}Yx? z!^9cs9fv=ZG2`%u#o_OQk!v*Lz2I@P3SdGUcE?AtZo4?_j?3F)-BH?W9fv;$IobZM zr6Rwk9fxw?*K1jN-nZ)+^S-5>hv|LaR$&(*dm9u}&ij^jAIg2-((aR| zpAcJL+I=XuzO?(0t?#th`qJ*>^wf7YW9myg5argFb|130CYa@Ke-!OJWN)oPzFzQ# z*#4{9uFb~}iS4f%FPL_q{Crbl`>$ri_FpX)>6gUzU(xQv{LJfM-ha{GAPzslu9EkI zwEK`9hhGyr4u3@KIQ#`L%g_DSQXy|j?*5@AcK@)h^e$gIB659T8sEetV#nc+iXDeP zCUzYDl-P0j(_+Wr*Ts&*$J8s%M`j#;Bjdf`d9ma0n_}y~2Bsawark%?366370^%se zj>E5I%sBiBvE%UZs2ImP4u3`LIQ${mZ5)T+5IYWkRqQzYao9GvZCcg9p{2Y~?X+nI4j5z!m@hxP;+0(AV;~j_J z$mEQ}pBKA)m&A_4Z;2g;PrD5Ba~wW~=wQd;V@U2WVJLU|T@`oQ zuhLsT+D&+VZ_8rOA6nvfT#4}?arm{q&F3Em^LWb{m!F@1LhSQTiQQjLi``#3F2B=1 zO73~utl0hO5;*UF9GCAn{8h=#2qB8}j>F#&M}L6lKDg>OODbC6czT@y`C3hVDf;h(iS;T>g9fzL|w(G<7R|C@y z?>PKnvFm$8>^S_1f+xj}!=EXRuV-?`;WrAN6FUxnUhFvh#f%w;zm%nC9DXxn#^JAu z9f!Xmb{u~7Q2TnxjKi;G%sBi!E}wDuBbl5$2Ig~>E5u!;Xo0`a;1?vE%St z88Z%lL+m*GJT9Mc_=C82d49*?=W+Rr!*4)NJGA4-=f#f0Z|eBa5B>96!H&y!9DW{` zfA}8w5isxJ`5lL!$K^8)e--k)zgSm#wa8qnMr{nT%=WG@EIWFJw z4aj-@j>8|sT#oEGddKBE4u4p3$Kj8O9fvr$$x_QrPc&EQ>_^bTPcIpXlo zS3BRui#YuC{hj!_478vXMXKy^y!Wp)0>zmYNH@aN4^Xh9ryNf^OsS7d#}a|z<`m%)54a~%Gv z*mlXZWAk%XMQpocy^zlq^0|U>>%{qNms}LvF1aMOT@sJ}o1XJpnVfb>+6}3{?UFDJ zMEmo7RTcZb8Wj7!84~+G8_Cks&NrGd?R;Zm+xaHNuK%e_PP^oc*mlWAk$ypJeHX>n zcS&r0n_}y`lBK7OS>ZbId7w2mbdMg6JpD4XS95} zNN+o%?U?h$@e5+xF>Plww~F*@V%sq{#I|D&!w#6+9cX7H+ip2t@D!N$hvV=af95#+ zy5x?-Z-^a-KVKZ*6d$@3c0W|kn%Hsp8)C=V(~g*rE4CwAPCH_5w^65; z=XV_boY-;r^FID$I}U$A>^S_TOwKs`rr2@#EphbULwJ8%>^S^qFpfVTV<0z{+raDb z2aH*01|8l79u~hA^8Wd~X;zG1u{H2NkB@O5L39h^@HalRxAVSUjO&Yg|KWANARmEF zdAsGjfb4b)6Tqf=o)P~H^t%Z`db5R`^91Tgc`xJ(;?VCg=qG*}@*^vIzv8-ImJeZE z&h_KGAlGkF<93Ye_=wb$*#5;?vHgoxjHA@g{>56x^e>|7+SiM=GJr|LNXGOpj+xul z(eXFhzc?ki{fnF@u-)0e$aw+TVEQeSVw8dohJEqF}qaU4_nIG@My zNwLTAy4d-9o&q|R8#DJYDMgRit~c}_>JQDq;b&4SHwPk z5S*9C1eoR78P~+Vo|!^ETQJ9c9`A8)sW_hFdej%}2&e97zfYI*Mv*=h;~vLtruVov zCboX#Vvl=M1W%g@f@cqxBqTQZ2uj{Y0B-t8^yTB^7lNO<7_UUklgcZ zjT8Pk8aF1G)U<1X{F|BmA*+5Wqx*#5gAj1!dGe>W|* z|BmAb<@VoA6#lz8Fw4vSI}8cIzCOlPQ~vQ<+kb~Hxx@6|q00=u^hDc#w=TB-&i=q# zD2IQ}{y_WhhW53Or=0$~5wXudF1G*9{y_Wh?Eka>t|tGQ{dYqd(|q6hD!uh%Ts6zb+ob$;9G^KJ&lLW;?;2wJ@8&Y5|IX`j*?+erIhp=DuB(;%pGL&?-%Wr!`k{ZW7d$Jr|Bn7Z zruRBpmBN3=`;v06qcvUl?`8}CT|;bt-9o`lvHf?gjOoAgx?1+%O`t9F{ABv??BBEh zZcTFg@76P>|Bn8>ynmZ2{CD-jf45NZqS*esrr7>FuggWIz2E*o`|m2~dstug-&MuF ze`Wkv|86p4`tPPPrvHxq!uOpxORG`|oCz-u^lJ2YtQv4_a>j zpqc)_+Id*e>Wwz|7}`q|6N^d|J|I}{yX{$ znV*ke7Jv3^dmXJL|C;@G)xzIK{~zna{yX~ra-I;|e>W+%e{M$X>#Y~^2AKNUf43;M z|87Za{~i5-L|85kV`|l>i){p)_%I&|ai|xOg72AK;$e8}S znZkcp7u#PqSMY+^{=21&>A!1cO#j`o*#0~F3w^x(g_hf2XdXJ&zCQc!M#aAVu|n>3 zxtx9qa+at4cQZW($ z|E?ys|IYqG`|n01xBqTbZ2#Rv#`NFKi0!{?i0!{y68n0W#a>6NTKMnm@3a4HUh=o! z*!JHoWK92E6P(YlS0wlGtCD+uy&?Aex?0;jzaA8Oeq9rLemyMq{CY&}`Spw6fH_2J zZ)_K@1MhlU;lD%B*$9$Q9{#&ZcO9(-r0?I?U5{T`rKZw{9dBS?YKg;6Hn?x|I$B5f z{ln{MK|Z~0^K(Z->~fhG+y2}HQ{V94UEf`gA8N$5n#p@1Ul)h}4i9-1+10{7ck{k~ zcpWXsCy_pXE~<;IAKwF@yrZA;w?50_D_?`T{dwpse*6~LW$wg7rtE0%el7fW6ZoEh z*mB$T?7wSBZvWk!IAJ`$xQ-SoTXrqm{RYALb1NRjgMD8OiGAOUh<%@pW$Edk7|)pg zi3zd&6VqbX|4b&Q|BiM%>SO=Je35=h?C0#J*!nJut*`xc*0+_Vr@m_$Q{Q#5^{wn` z>tlUs_oIIHr_{vOcce&fJD}~DwgWo9X{6_Kyyf+RX(y!IcFaYwkEdOb^3q>tUN6#b zi0!|tz)r{GZO5b?k?d_uY&+&;!L%c?zp?+$c0~K{?60%`ZeHo_zgsMhw_Wkjt!@9^ zhUE6&*=}h69PNCp58I6zVCrKz?S7PdT%nzh?EYz4?Ea~x<9+@1&$+z~!p_Iz-QF1Y zPj-8=zs~J#BumfsHkvWp+nCtxZBp#>)6U5J-QH%zZf}hu{T!Ir?`=)&@vS2NmE~W_ zUuS=w{dM-=*u9A(tkt2yV7VO!Gx!ByPIMj*r z!S2|G@js8JychEEf+xfugZ%k-A4*eV{EBTF|MPgtdm(QWJSVPx6Xb6@l;$(8fEUD9 zLVm;Sp^m>0yJKtOf96klFXU?luZ!_3whjEx^lwD^OCCgdY-{t6fsa0LD50wk`M(F> z@DR#F9R9g^%$vm9{t4zu4^}(xCo21nzcBo3i`C9LTw(uvxY~&;3jaW>+L@=^iu{hO zRy%P)y_IxTsD_#-UPX@Q^YiFp#P&yV-bA_mQ4<-{ zAJq`sAH{hM)7u}#c?#M7s7bN?QBAS^Q5^S~-u@_#<7E4z=)WUhU2DHjRzru#>w7== zveAQSSo|hj@8vfiOk?6X@MSPIPh`9k%yF8>-@@{G@?htEJeLp0Y0E2+FNiH~ia&+? ztCd6HpJV!%7wm&ES>xPQD61m_=>NoZ@Jj~|rDn#X;AJq!RnHq%i{o38d)|;RZZf^+ z4TECO3ugiqhik+IIdF8<2g?l%b4?oak1wKQ(~9TbSCFKx-RxS zfpIa+-`jj9=X>>wV!v140<(O*RpCF(?;k8>5N!X`aKR&D`=iFhQQjBuT{W@upA_34 zRTtYIH7~Y5ivCdQV}I15*#0Q`M=7^IivCfu{ZT8Koc^d)vHejSV*8^K9z}V){ZV)n z-DHoO7W;Z;#J0!HiEWSL`;fHP*&er$G3{{;_%A8QVoDR-=?}ro-y8j#WX`8|Vm^%`j`Z#?QG~(nFHvN{ z?k`b9!R{|-#qKXrM4jW=U(RLB{&HUI{&God{hFDa{pE_-{pDJbem#@3zoh?^<>mhJ z+Bc?zsX}bL?w5j7v-=zo^WsMjr5biq{+*EbFCR)X;)lRDwGMs7xIoH#Az#SSlNZHb zhWz>K7}qlH1-A-b6W{bLxEG$mIGXVdU=&^GXSwJ7qYtvvFEv!p7!yc=lZ$8*Ec4) z=ed&w^ErU+F`ny=_IK9zjpx3r`aA3Uz6bR?cyoWOtHSiZ3GRcFp3e>B&wvkH-=Fy0 zK>jl2!~LE2Bgp%~i<0-=h5T;oPfOw<@PV=Z&ifMNec)xuUj*KNzQ41+FL?;e=MJ8a zycfJC_VuJ4ZTWXWUcG?!DUNv~f(k~&zY6)0Nt{pIH$az1Hw|!|!-026!oqka4esEUoesE6gesDfJp8eoL#_R_d#qI}}#cm&bj-Y z>HPRy!~A33h?}D&=KP@-@#1NBTkd#q+dCaEUX|SO;)CLtHxBlsn%ME;!2+E!&08*^iD8?St|HNj&b7N{!|nH3grC=ZecRY!>@6Ff0`DD zUteNJ5io>$T@%X`>wM^`gzGcKW~aXKVKGq0eLX~h2s+QBXfSvew*yADfaw)wcs_e z=jZIlc|4i(^MroO%=vjm?D=^ulXHHKrWNTeA1!!F?D_eO*!tEB`CP#ZV3zlfpuCSf zIMC^*7r^}perifi?gKB2KLWn|p@B|6O+El_75S}+{}A#k9v(;)^}AtzTN+4JaoqRI z1Bvz_>f_D*c&w}c*g$6;^|2GWGmpZ&I!u6lByvu^q~fiGDbNK={o806C#9|YIM zv5xyw18G)#AC4b|sIti%8%1%s^Vq*$5bg)@_k)iP<9^7v56p3j>0{l|>j%=1_-B#6e`FwWoU*(M zImapTr@k8U(SbB7j&)FP9!TTjkMQ_0+&@lFeQv}3Bkp-KYzK$tFSI@#$4x~_BE!boa@}vzGmh+_X`2 zJ3jo%8HZn4?0NsB*zI>Jlhgh&Blf(X_BdXjH;$`h&-)j|p7+!K#`3@G_Vzly8yRyQ z-_+NYa~l(4G&@qrHody#@Rr#wRFt9CHYCqiGI5-;AI4 zU`*qN%L(qmn8J;7L&~og&xzkCo~0 zGyZ7CGnnK382Iyp_zxTBi0{O2Gv|P0=Qq*QX6wm!a(*gHUmI!b!Sm*NtQLAykZ-QX zN}&fHTQ=!2F18+gMyFoZqk^`a>+!Ce{`V-4@mtz@j1}do39)q|~^73fnKFG_Xg6qr6 zgLA38Jm$r2AGBTP?StPa<^8f==rMxx=6Z0>o$E1%d~-cG=gRe1F7)7>hjQz&jxjT@ z7p?_OJ?0BN_$-p^Q7!aXD$0YMOs>aBp~sxqdd!#Q@w&DiJa1kvLq&N^7JBeJd3n?e zJ=jm>^)gtL2j>)ddGK9zmIt5pay?dy@~9Mgj2GoW8&qB%v?1ks3>W1=-$~v+7<>D_ zL;FaRDi7T6d3n$V`$H%v-{0&n^LDxf&g&(iyz=s3JI~8wPVDx$LO}r zdep(W9*f{yk1^<(>(NlZULftVv?}2=KmCnn1A>Y19=UprIzgg#H-%@Tp zsYr|j8~sd$?~0a*!99F<{9kN62^~POeJ=9BcTI}@#2!8b6x+X!`r4c7#s0@5pZ2;G zx#**j1=6FfmRk=e)y4K+%o91;t`tq{>Vxh5wW9sJ5xcjg=TR72O~3i8hm*`=`|ogR zaq>AH|SHe=NG{*MEw~rk#Bz*Hub)UqsjNbC)!(ItV5LVf1UClD%#tl?1-6v zvHx3CKD2Y>TTSIqE1KMCrKg=B-}oL4^KTXV`8>=0<8gle-QFI?^B4Emi>C5Ds+aj9 z{r0GGlv}a?Em2;5iSfJn_A%){RP5iYa$YaW`L9)OjIYVJZ;kt+FU=MEe?a=TqW-%_ zjK(dEdXM9}`#%!p(wF#rmT%9;`(P}GnIiqWwZC4Zr~jJi2aEK-sCKeir03j$>G?0; zPT`q@J1640yOM*duc_#dyZfJo_k@_fTI6$!+QV>>&pWgquJ29TEs-zEA?}Z^==ISK z(9VnfUr@R6y~uofmFki40{M0->bs9F`Ar)>k&6xGT;zX=^lV0bb`LowJr|1oA5uGn z>2=d~O!^NN``@DbqFU6~U#fojzHGkz=cA;)G+m^peSrH1i}Wx#$9}#in{QvE{;*!` zf3NbNi}QDn_?K!|3sJ7!{pXbbN|F9GYCo+aeO>i6QKY|G_XXd-%(rJ$k9@B(-~LAT zHP0cK2 zFY32QzZ|y&;&qGkZ&JB!6#Wm^31+=)6zN|X^@sW@Zn2+?`yF}~{lhP-JyeVFqDSR6 zROEB3_AeFv_MIv>xG*+tcd6aNb+Bo>N$qE{(C3A^U+R%x_mC5+_r>D8|1|C^)O(Tt zFGaZ^zOU&2Un@Nu#eT;9vOL#|{WnVgjbi^7qyCV-sF%M|{Z@+ck^cU;kBWN#8}%m} z#r}6n|A``>Ur>9PEcTyM{?kQ2{0gP#d-VDC`#SGJk^Xzte)t}JzC95AIpQ;m^nVrg zhq%XLKU`_p&<_;*Z&Cj9kze-=?@|5oef4~6=)SIoJeP1BDH;RBPe%RrZ+Y(cZ&81U zzbM9qO0;jpaTMdopGAM#j-$%Y`jatEAWov_Hx5U6_HTLaI2|e?j-=@SABg)1`V`~N z%~78HTb?^U9rcU2ucE)@dIInqZh7v&63DT?eD3%+aXj)b#*5dhe9GsJL6t-K+;Lp# z%jb@{xUZp4F^-JH_4jWXM}8sN3F1bIarw=vm-4yeb1LWZxnnBEahid*<)(GJkgi~WD3ax0%ZUaop9pF569|MIzGJ@iI77y0j(p5=4Lfb=Y% zJAO|2l+PV|q<{I`@p|1C<#WepRKMkO$FD~}h07HRz7#Mw7-1rxIz74`P}hS z%D;T>c$eB$`P^|_`IpZfV`@L;bH|%iU*&VhG2IvCbI0dZkL7d6U+BIrpF2jBfBD>T ztFG&R{oE0iys7!xS3(-E{&)<|9?`?!Wh>I!gY~LE~4fz-2$UCEdM;uPE z|1YB7J{<2a7N@|tR!jzv;7g(Bku7>2iF!G*MbFQLo=3Lm$@i8K9k4~u&xD>ww&;0v zl;@GJpl4LtCiOoZdS1Fk&)uQtrCaoTJoLPDi=ORyKk_fi?GvHrrCano7J6R#74$47 zA<+0-ocHpGqs=eiS#iHzzQx{nd)yb7$NQ&w`u))kx2FG3q37kPZMW+l@q!q?E{`~_ z?%wuaJt;bgO}meWp2xQ6+3xp`ZPD{Zq35wJdj4JX|69|4F!VgOMbEDaJ&%0_J&$kF zk?_@V-s2G;nhU=#nh4St_se3G^YMr`&C`E2?z`jhK10609_{w{7W+28$AO51G+eZk zUCO^z?0+n@ja~Q8jdIWvhwW((GMR_v(a9`SyP4Iarj#?P}+YW6HPZ=sub&_J5b!^LWut9*Cjtc$zHs|Ag9M zx;@Vw@kOfNYN5|-rDyf}&FQb#c`N5O??(tIw&Q8A*uPWhr;GD8)lTM%@_dErw^8hG zw*&Mig+8CueZlW$=i7%=kFyi`-uB-;>BN?uH$*>nVoN{vol*WsU-V<|xrAAq*wT;v zZuDa(w)A5&QNJg)^kd%`{n&{u{n+0{d7g;(lX7K09OZdpOF#CJC^zU+^kY95_uYvt z{n%R6`-v_6*yYh~Pi*POekt0|i7oxuo1@==o-x1cYC0=@%6{ywsIL=S`mwKy_HbfL zKlXI=M<=%QWAB#!Wj}U>^eOwXyOh4{$9^!{Ij*<3Prqb+ihk^QD$lYX`*^gs6I=SR zpNM`8^&98!md|A>pRymjO8S)j*l$KZhW1nRV?P-E7|OHg$IeTivLE}h%D?Q#`lBB^ zv85mTKDCFkADfq+Wk2>Zwezwcy&sUbVxrAN!B0-?ATj zh4d`@v1jSLWk2?{I&ayJ{jJKg?8p9t+DX}uy+rj}_G4E|&$1u;nChkM$J)A{JQ98PR4r>`Tl<$d6%Pu=~G#W;I1HH-e_)+qmzskDduj`SHX@;?)N zGTsB|=AP1-sIQap{&&9r`*hxsLjOOC_Ixs}7x(W!4ZX3ym@mCH?$eX0w8Q+TNOv;g zu=Df&R7e4%HN{!djt zW&Fbq@>w`g0xMe0x~;=~R*ajXG~L?(gmqJ9S@__WU-xqy2Uzuh;#x9_^^Re_Hw1ihLeZeXSJxFVp=}`b{2EyKTk! zyZQfL%4amr-`)R0=|5KN|2wreuD6_Tx2V4O9n*Y!i^`wtC+FKQD4)^}_M7TYN-y%~>(#GTq8)W5KdyE)SmZMhdY?>=6v9*J^374OgG`#%)z z`&4Qb{rP;{@23)D(DUt!(f+YN+DljR;W++OS}Xe7_r*NnRGNu;>!!!6KiE#Cv0_~N z)o8b;(p-_x{;020X}ZYgPj%k)BK=#UJh!I*RP=YJw#+}NO;0+_Uz@hRD7VvTym+qp zwrCHhw>;PUi)at0(`b?Ym!q6d$9FOF6HJHRr_+3q{^n>Wr?<>2{y54F=PjOJ=As`t z9q&8l`Tx7PFHWb)BK=g9`{`H@EKmROC?Dig)XSkLXPmbvXRbeux7^cWQ7;#w-JXv3 zAM^ZwK>AM%=X+E7y6BH^y~VhRrHUi}(hs#e+R5oO{i@CRyjA*_?d`DiDcjHgi2e%Y z^W4q(Tu?q!#r{8(K721P-`=D0SuL*X(deh3XHjnL_zBc|oTr=9LDg5;p8ti;J5^lo zzlm|;^p^YX?{&RXMgClGgY`98lrz5r&HdFP|G$X-$hsuAZD4!3g+!l*+ zxHrysIxQ6X+!XyX+F_i>xntc9wX4?I?mqr?A@1wbX`|Tx8_^$~PD{6MPJffiVWH5c zUwSTIzd8L!-JZ{F-hZRcyIkzQOX-KcadY~&t6fbL<@q_)*I2Rt7nOdg(C2-wm)C60 z|E$hC^6Jg|Nj+Gpt=!%p{m(U9>?+TVe&(8Z4?I8SN25QvCRK`d{wqIChtG?8zh=wx z-M@=;sINGGH=l>&{<$>J+{O?L0QM+nChjsV=p!6^2 zy~m`_Mo~U@s9wr>_4{?7PDVX<^M9?*TgIEU{mm$!XfNILw@d$-BAQ7d z=Z-VcFQDHjo;xn69$Ur!(<+ChLZ7eIeZ3a#sH^Aelz$n&(Z2uD&Wrq?j&^@dT95N| z^ZDm$x2wheSzQ;uhm&uoq<{Gw^jB(cWqja`s;|;tf0z2D^11j&mCty{yJ!Be^e_GU zcdDI~&q0s-eh+=S`8-?stVTU|_g_%I%I|yR+xMwmRf~K!R4=o|{;!L2N54_*|IHX@ z(XST!cPRgj;=Dhn{A)0YhxXXeE)4xZr5&^SO0DF zv)885zWuVOuWMs{i#(tHsNZW-D}Hw+?~d}^n!ZQnQ^ryA$ewhjn}PoNpV1GTNi)Us z$XlZR&TNUtYuh`{q{$-v$KyUfvn7uDcjLOwq=}-O2co^6iS=P}rCuNR3G$EY=t}m) z^`A-gVxI8aDCaX<-lzM$D4#Q1o_8MCd0WN2^m)>ArpW)-~dBcP6#{z1=f>KH3k;t(d3rJ4~?R#&@~9sZ;ua z=r>TFMf*7y*Lfz^1Ig3>nXb3Am;Pnk574uiCv1!Bgg(Xo-;eta^&aKgJ;Q+VnTz|r zyZ;BYf1yZ!ROPlwT-*c{#qkNA0Ikq~EQ2T#I(s&1bvLTh1%~D9RW2Mcm)r^#4xn zzl=}jcb3?Gs>M9vM|6J;75V%`v_G_;=>NL;zftXTERO5$|CIEcDfaiN9L9@z!aq}c zt{3x!pH}{h#d*J0`n2DB=$`ju(GJd}*T9wXm%mT_+jN}2d%drS zeh2+bk^aA`f8h7k^6jkjuNCR92))mwp<;ip$CqONdzC-G|CMi_R=x8(VEKkmKVUnP zDz$uX`|qA~cFWF(;=0amv5S6P)XUi|cG30F^XwM8=tp9naCVDbbZ7Jf*dOhpd-}(s z9iH7{pZWD@uV=T|MNdS1o!w#={cN=Jvs>(f>B|FE$tcVbtTfE$`Q~=O5>`jPD3>=09VybkHp&I{UhMy|=$B9q#s1$8MmfZJx_Y+lDX8~i|F5Z?PZs6C zBYVM;e}8whn;T;7s9bm^uJeX8Rm|r<7VYPTge9>yZLf^-x?zidnirYQ2CT`2>r@uuxPixr}C*r`|ajG=yE9T>$AGv@;TyrqFzxB z#r@u=e5Ruvb@RWV@|-WuyA<~w+Cy<)tb`snq*jstkH-CbLwv`en|n&1RXeE__sh@5 zyyS*d#x?QSo@{*#=k*}!=@2B|Y;XPz>^hik^zKyCUmIwD+;8^pU1%TNKcRHqf2-2Z zXn%CG_?zvR=|_wG_iKMc`)m4L!Tv*;F@enOGx#}_b>?HSH>Fph-5g5Y!f$E+v!v&u zxTfE?>%1#s>-kgQL)rQ#4V||Z<<@O%TnmWX9m?PO)nYH+#Mk~cvG>;_pKc{iYhHGl z(${@H9d}H6+F$8>xaJSbbEruF7NsB4eqYy*Xus_M&gXf`$Myv8|0bocLC($j+=9Ok z;mqE~G*5gl(jCg)fAn>|I<7ZvvN&W}<;G$2Q1)Jl_y4oVr#lJv{-aU9aq~q!_BXyy zdX7lXT1c@@PUNG)#XhJ1TCX+qAe7XM?dSuppviv6DjAIiqr1@)J|p!9zK#rgaa z@;j7`caD4F`%4GYO*&gFqZxl!R8KtZ=kfPs!E+gZ0e`a|xiLN2*-?;;ao{|T<>d7I2(vZ5}8Ont^f(9VzNAIh$m<t0{`z1udk zJeG>`Sk%1U`HyAg!SmTaM>*@GkzH?;hvpTOM|ot-@|aZDOF7HK_7gI%zlMH{o7w&% zGRwnpTx6Dq{SD;MF9hB4_($J9SWehjEUb?@0UMd+y%f}CkKdHDe(G6yviz4aj`o@{ z(|aD`<43dpkm>6gv;M}j^Iz2O|9$yYv+`&8ZDi%U8-F*m{($#KB^y6@|F34u``OP& z%r@@la(u~{_w)bX=WiA5C)bD9pN~i6R#skY&sF?zb9-GcI3KTh{8Cn)Z11C*;zYJQ z-*dY8vAi1@v%Cjy@5-6qNXEP$2EVZ@XMHSZ%=GIS^Zbt2^7#ifpp$w2$&7ja;a6|Y zztzULezu>B<<~8r|0m@)5(VFGKTJP_A8wuUN1d6Ye6#z9&QCk6CN9R+WCA{m|A=+R}N{sVa58&HG}eeYtsjRrAGPU&@*KE2qow%l@eAx!73k zkNSUmYEkXg_1vsK=P=`Wo983T{d;}Mqw1CQ-@DNL)%E1BFJ)A{n$PBSg0eb3$x^X7 zK2oL@Q?H(<8>{`(?@Q=KMN=ayA}b-bF*^BHwK!p-v;mB0C1lWMQFZ(dp} ztNfQ8Sy!swRTZn%_}l$gzM}f9^(y~hV|BjVO+L!w=Ki7jo3|9yFslB5`^mhyf2iZ< zU00*&-BkGwoBM~_-n_9o{=?>ep^iuP%P;z?_VvbU{C;EAzu(+H)cB{H`-d8T+E{IW zd%RS8N50ge@>33Fn`%*3$JfU7&~2>RoA-lMdo^B*>!IB||5WYG`@O2Y+8^~dp4DQ; zH-E=VSmQ&xE@?w4=Jt(^LLok_SJmwa6R~rRLElXCsM)2d+D=vjpMaF zKI;7C%lmv6+Z#4k$IHC`r-o6-Bf$00ZLH46ys^3--st|e$Np98`>Sd^b$<(SKC6w@ z{+XX&sP=09?QuSLxW5e>tMhH%$5;K;`E)ktPvx`USmop6eD-*~afs{PhB75=KQMt+1?+NBl%K`YOnnN_x)}A{9PTN?e+O%C7*6Hf8HXVHuuwI|2OkP z&8KMd`cNJJapUFs-dwNh_;;K0r;g`gbA77gss5jrI^|_5RaGH&*X=6&tJfvtHU*y?ecb@HdgOHy}Ge_|H-_+p!%!*|Kz4#{nh!)i^nD6329y$Z4@%Ui$J9R*pGf1G@MSV0zLb*p?)K^A58 zR@6%hvM8U)*UJjBD1Sn}UQv)m`IGYXs)8)aKOkSPDafMygYxw$1zD7TNWMO+Ad9j} zNd5)WvM9ev;+D;s~Wc-UBl6FkF~^ihk-S5=wUtH$R3ZS11G%0Vrr-aNlBj!>V# z8C<{>+`t_?z!N;f%ROqd|EFr=Z|uP4`L@Z=N4ma07Sn08j7?o7YFGc$xp}`&Gsc?7}{5em}|dk5He$ z8C<{>+`t_?z!N;f*7|(F?C&Y;z%J~==5r}#dlBjrID-qgf*ZJl2Y7;K*jk_enEk!7 zv3fk)!RGm!YOm@8)SK5MrrtciGfvSyhfBDITeycu_y8Ya^L~)pKlONRKF4P4uFnUJ zeRvPY8>`3r6gICX)%H}qdB4TDM*9}-;SoN-N7!DUznbx`z&qIdJWsV(&sX-FdgTaC z;0!L{3U1&I9^eU{Ve@?4?7#UOp0Tq&UpIDPAKt?eoWL1ez!luU9c=ziirQcGe9`qS$41=gQ$)sKIwy@z`9dd2iNzh7V+qkRhJa0%CN3-|B{AK)Wwzgd!! z#q6*7`Ks{__2%~&Onrd*5RTy#&fyZS;TG=U5kA02*!=w5=KUhm zK0ma07Sn08j7?o6p^u{XJdZ4>5LN7xv*j9Ki{k!3A8w4cx&4Ji#+;e&5FA zd%C_~U~E25Xl&kJFg8EmFy5no1SfC?7jOkPa0d_Y1kdpDq-4F`)%-T^N1J@i`{Webn#a2u|P( zF5n7o;0_+(37+BQN!;dqn%}Q7`8n(Ro5n8e!+SV_6F7qlxPlwFg9mtmXV`os)8u!m zo@8#0hXcE?51Zd-Guw+$pTHShz!luU9X!AjJj2%VdFqSnS^b~w2l9tq*oXIU1Shch z{W){I3e;C{19$KMPw)&cPtrH%+x&k3vphaKlUD*8m&h+1-K7tcC zgA2HV8@Pi9c!Foxd~n_D|LNxa`z3$ah0W(hP5$%sYq*7bc!Uq|5w?FC@`rb@2M2Hn$8ZYga0%CN z3-|B{AK)WwzYY1rJJ^E*ID}(3g>$%sYq*7bc!Uq|5w^bs`NKQdg9A8(V>pF#xP)uC zg?o5}5AYGTe>(Dqcd!Qsa0th63g>VM*KiB>@CYB^BW!;u@`rb@2M2Hn$8ZYga0%CN z3-|B{AK)Ww?~p&dgFQHaLpX+0IEPEPhFiFYNB96AVf)LFKfHrIIDkVqhEq6)OSpzx zxQ9ph03TudXCQxg2YYY;hj0w1a1NJn4YzO)kMIFL!uFRVe|QIbZ~%vJ45x4omv9ZY za1W300Y1X^+mS!KgFQHaLpX+0IEPEPhFiFYNB96AVf!nPKfHrIIDkVqhEq6)OSpzx zxQ9ph03TudG2{>LU=I%95RTy#&fyZS;TG=U5kA02*nS7{hj*|C2XF|-a0=&e3D~}S81*Tf!zEn9E!@K+e1MOz`9E@If6f1oGj^|D z9G_1}Xnwz1)hq8&AHfNn!3A8w4cx&4Ji#+;U3)N}Q`muB*oXIU1SfC?7jOkPa0d_Y z1kbSf(>><=onC+NcsQ^N`|uu)-~`U#0+`t_?z!N;f<_}<<=kGmu zJRI1CeRvN?Z~|v=0atJXcklpD@C=(jxptoa6UZNSVISVZ5uCsoT)-9Fz#Tlm6FkG_ zPhOtq|1*(4?7}|0ha)(FGq`{&xPd!(fG2o{t)KN^zNfGQyRZ-M;RsIP3@+dbZr~0c z;0c~#^9#7==l`7#9uEh0VISVZ5uCsoT)-9Fz#Tlm6FkG#&weo9Q`muB*oXIU1SfC? z7jOkPa0d_Y1kbSbbC5smz%J~=dpLpDoYAKt+p9KazQ!zrA@C0xTT+`}V$fRC{K3y?qTZu|q% z)Q9(Q1SfC?7jOkPa0d_Y1kbP)T;!|rIfWhAg?)GrM{ojXZ~<3v19$KMPw)&|zYzJu z4(!4{yoVz=fit*(E4YC>cz`E(hOMtg{;&hPun+Iy2u|P(F5n7o;0_+(37%o=7a@Px zfnC^#!;ODXHXXw$oWmtt!!6vyBYc35u>J0f{MG(mfp@S62XF|-a0=&e3Dcz`E(hOJ+M{9y-nVISVZ z5uCsoT)-9Fz#Tlm6FkG#*CKz|fnC^#_izL!a0VA}1vhX95AX!fu=O6~4?D06`|uu) z-~`U#04W*3|8Jn~hw2aZ?Kbtw=Kmd-`T+GI9K$J`!zEn9E!@K+ ze1MOz{mU-$SNWO$-(d3Fq27Z7ID}(3g>$%sYq*7bc!Uq|5w?Fh@`rb@2M2Hn$8ZYg za0%CN3-|B{AK)WwhsYn^!5$pIAsoXgoWmtt!!6vyBYc35u>C8LKfHrIIDkVqhEq6) zOSpzxxQ9ph03TudS0aCS2YYY;hj0w1a1NJnv$6Vn$sIhv6FkG#|9p|J+TJPbz%J~= zdpLpCw;XNF|37o+NT)_?8!2>+OGi?28ma07Sn08j7?ThW90p2807!alr*BRGLGxPU9T zfjfABCwPXfr>tc;KmV`;yRZ-M;RsIP3@+dbZr~0c;0c~#>wU-{c3>Cw;XNF|37o+N zT)_?8!2>+OGi*JL{9y-nVISVZ5uCsoT)-9Fz#Tlm6FkG#GsquyU>Ek`JsiOaoWTWL z!42HO13bYqY~4owumiiW5AWd!PT&kK;0kWw4j$kMo?+|#$RBoK7xv*j9Ki{k!3A8w z4cx&4Ji#+;eE|8x4(!4{yoVz=fit*(E4YC>cz`E(hOHR+!w&4iKD>t`IDs>`fGfCx zJ9vO6c!sTKkw5IfF6_g5ID!*6gA2HV8@Pi9c!Fox`a0wfJFpA;@E(rf1kT_BuHXjl z-~pcC8MeM2`NIzE!alr*BRGLGxPU9TfjfABCwPXL|IUNQ!+~Achxc#< zCvXNAa0NGT2M_QB&#?8}gZZAq4(!4{yoVz=fit+=SpEO68gAhp9^nIggze`q@>kIP!Uy;W+X?cA zcd!Qsa0th63g>VM*KiB>@CYB^BW(W~RHQd5IJi-U~2;29NKfHrIIDkVqhEq6)OSpzxxQ9ph03TudKJtfm zum=Zl2*+>==Wq$va0~bF2p`}hY=02>!#mi612}|ZIE8b#glo8kdw7Ho@Da8@g#6(h z?7;yX!ZDn}Ib6au+`>IP!Uy;W+rJk1!#mi612}|ZIE8b#glo8kdw7Ho@Da9C@`rb@ z2M2Hn$8ff>`hWHXT)_?8!2>+OGi?1PYgrzV?`r&0*nwTxhxc#ma07Sn08j7?Ti=5GVFz|$AKt?eoWL1ez!luU9X!AjJj2#+ zNB*z_yRZ-M;RsIP3@+dbZr~0c;0c~#>vtf3*nwTxhxc# zf7pRt*oXIU1SfC?7jOkPa0d_Y1kbSbt;ipCU>Ek`JsiOaoWTWL!42HO13bYqZ2eB; z4?D06`|uu)-~`U#0ma07Sn08j7?TOULI zumiiW5AWd!PT&kK;0kWw4j$mc#^3pQmUV>fZ@b7})n9>kum=Zl2*+>==Wq$va0~bF z2p`}hZ2xZL5AR?P4&V@u;S|o{60YGE?%@$Wz(?5rIP!;gum=Zl2*+>==Wq$va0~bF z2p`}hY?sI%-oYLmz#$yNDV)P4T*EEg!y|lvkFfpi$RFOp9vr|S9K$J`!zEn9E!@K+ ze1MOz{dt`IDs>`fGfCxJ9vO6c!sS%jQn8-c3~gh!x5ao8C<{>+`t_?z!N;f)^{L( z*nwTxhxc#Cw;XNF|37o+NT)_?8!2>+OGi=q!A9i3D_TfDo!3mtf1zf=m+`$7p!82_AG2{Cw;XNF|37o+NT)_?8!2>+OGi?2D$RBoK z7xv*j9Ki{k!3A8w4cx&4Ji#+;Hy8PT=JVv|UGNU}-~bNc7*63FF5wz(;T|601AK(- zKZX3^9qhpY9Ktc2!Z}>RHQd5IJi-U~2-|-e`NKQdg9A8(V>pF#xP)uCg?o5}5AYGT z{|xencd!Qsa0th63g>VM*KiB>@CYB^BW(X!$%sYq*7bc!Uq|5w^bz`NKQdg9A8(V>pF#xP)uCg?o5}5AYGT z{{r%dcd!Qsa0th63g>VM*KiB>@CYB^BW%Bd{NWw!!2uk?F`U9VT*5Wn!aY2~2lxov ze-Zh^JJ^E*ID}(3g>$%sYq*7bc!Uq|5w`yl@`rb@2M2Hn$8ZYga0%CN3-|B{AK)Ww z|7GM4?_duO;1G`C6wcuiuHhE$;SoN-N7(L=KfHrIIDkVqhEq6)OSpzxxQ9ph03Tud zuUO0Sh#xWpDvk za07Sn08j7?TYvo`U$sA{umiiW5AWd!PT&kK;0kWw4j$kMo?+{IkU#9eF6_g5ID!*6 zgA2HV8@Pi9c!Fox`Wwg}c3>Cw;XNF|37o+NT)_?8!2>+OGi>$9A9i3D_TfDo!3mtf z1zf=m+`$7p!82_AP2>+dunYU}9**Dy&fo&B;0EsC0iNI)w*D6KhaK33eRvN?Z~|v= z0atJXcklpD@C;jj8~MWy?7}|0ha)(FGq`{&xPd!(fG2o{tyhsh?7%MU!+SV_(~ZAI z9&dBFglo8kdw7Ho@DaAZ_ac9_KUd%#?7;yX!ZDn}Ib6au+`>IP!Uy;W+kXf7!#mi6 z12}|ZIE8b#glo8kdw7Ho@DaBEF7k(Wum=Zl2*+>==Wq$va0~bF2p`}hY!ApE-oYLm zz#$yNDV)P4T*EEg!y|lvkFfpskUzYGJve|vIEGU=hfBDITeycu_y8Ya`|l%vcn5oM z0Eci4r*ICJa1FO`50CHxKEn1tK>qL!_TT^x;TTTg94_G+Zs8st;RAex?SF{;;T`P3 z0UW|HoWeO=!ZqB&Jv_n(_z2to2>HW1*n>@DBFi z01n|8PT?Fb;Tmq?9vIP!Uy;W+Y|DK-Hksk z?~nQL9**Dy&fo&B;0EsC0iNI)w*Hm1ERV={mCq^cz%J~=dpLpEk`JsiOaoWTWL!42HO13bYq zY<&{>!w&4iKD>t`IDs>`fGfCxJ9vO6c!sV26Zyjq?7}|0ha)(FGq`{&xPd!(fG2o{ zt^W)8!w&4iKD>t`IDs>`fGfCxJ9vO6c!sU-NB*z_yRZ-M;RsIP3@+dbZr~0c;0c~# z>wx@W2lh7pj?cHO01n|8PT?Fb;Tmq?9vEK>qL!_TT^x;TTTg94_G+ zZs8st;RAex?N1?pcn5oM0Eci4r*ICJa1FO`50CHxKEn3DMgH&(_TT^x;TTTg94_G+ zZs8st;RAex?SF^-;T`P30UW|HoWeO=!ZqB&Jv_n(_z2to9{IyN*nS!X!Vc`hKD>t` zIDs>`fGfCxJ9vO6c!sV2g#2L#c3~gh!x5ao8C<{>+`t_?z!N;f)@P7E?7%MU!+SV_ z6F7qlxPlwFg9mtmXV^L-f7pRt*oXIU1SfC?7jOkPa0d_Y1kbSbL&zU?U>Ek`JsiOa zoWTWL!42HO13bYqZ2f2C4?D06`|uu)-~`U#0;qzAyJbcn5oM0Eci4r*ICJa1FO`50CHx zKEn3rA%A!WdvE}Ua15t#4wrBZw{Q=S@Bu!;_U9vicn5oM0Eci4r*ICJa1FO`50CHx zKEn1FAb)rVdvE}Ua15t#4wrBZw{Q=S@Bu!;_9Mt2-oYLmz#$yNDV)P4T*EEg!y|lv zkFfnH@`rb@2M2Hn$8ZYga0%CN3-|B{e|lq;=_4l>`KstG@Y~=U@RRU+H~vYoy*u!S z;TPeT;FsZ7;8)>KZhR)=e;R(|O&9s9`nSMugKxl3!ta6aZ2Sq?{)gcg;g{f-;aA{S z;n(0#Z>(P0Jz`(vtNa%DZSW2FN%%eRGw_EuRu8Q&!Y{!u!>_=v!mq)ff*<)27x_LX z;alLh!8hP1;rGDL!1v)7H&*}u^CkFY_!an7_%--b@Mqz-{K$*^KO^DW;2ZFh@O$8A z;QR1L;g>d6e;?&#_!an7_%--b@MqySf8j;GYP`2?tbRZH2K*%a9{3sfKKxPmWAMux ze_Y0Y1%4HN4gM7TS@_LwzQ|W?|E=(ijn(H>o`l~6KLg)~KMH>g{=@Jq8>{!vUxia@Y{En02ZceemAxyY~_q>ajCf-v69#wH^HF`1UjJxTn6KC3jzV`u07&56jj*C?)T^{f-a3 zaCZOBy|brZc>ejbySJZuX4%Qly>}`L)&BO=uOIP&beA+tOBv{?r|&=eq1$J79+#1R z%?EGayMNER|8!!ub$0thx1V2&?mT<%{_W>YiQ0D)OXs!SW6wR6+_Rp2{sVWHy!2{0 z*w#AGa;WcFvIqB{diHraq{*|-+_NrrMCE($VFzRBd?tHz`|iV<=;O7txc9=-UwRR>7h>h61?FYyLbEfXYRl7xzFNqa{hZ7 zs?&Y<_R}AF|J@g!`|sG~Lz`YQ8Q=fH-LJPEyL0D5&z(K>%rkfIJ^O*rJ;3?(^SPTX zsV(R4b?xLdy+fwL{j=p1-BZE+r|#dj&d%;U`}FPS@7=cE|IFF@zCq2Dv-=--_LFe-ozxLgi_rBz?-A->mZ9R7H{@wde zy-(KP@Z7S#`@%C%-G6EsUEL|HcfadhPnsq#}E3RF=2(IcP z>2z!9B#m@%?WPH?nyM$xuIjqSO(3n;BH5;iuAkl1o09fxBzw6=(m_Y6!+EIIlC&6KB`g{Pgt|PWrFZ73xh1n{S>IZD zU9V*p>FRZT&0Q_CMpwwJSpwO%4pcfziOOdQR6c8or`yWbmp~l^9Z4@8NG}~oueH%d zBy&vnlR2fgBy-Aa>DCf>XL>CY$~4u1npvig4rELn$N)M}XKsz;Nb5)vGiBb{O})*V zCb(e&HR+Z*+5feXY*j~U3u|=q?1tWgnqj8>S|sh)NcLilWG{52wy{Px&#voj$o}id zJG-`SORwc*>Oju?QX!{t4P^S6Vf9AT@m3Q+%`qLw)X>2-6Uf-QM5f&m$jCa7eb#}T z$!qRXCu8eCE({Y%LTj0fq9eJ>tdX45Wd_QPV_Dx^*EiO+oZ_Y2)oXQoS_;&RTLPK7 zxc)GS#W z%YNxdCa=4+Qqx5@SGTDpx+(`{jnovdMPEDbuOddv-DPq=g@hjiZE1B90WxsT@ zb?vTP*D}@81m<>pGGRtVL>)pKsv2+4ZI9 z@iV=a!=eMZB-Y@@8n~uFHhtd4MC!uO+m>0T1GzAkKwS^Ia`5;gl;Df&$>qLnoA&izE;WPUP@$6>$WD4$-NZFoYocRflO{) zB9nUwB5U2jn)q7Gyt zE`e-uEs_2@lKwi7*{2(uK<;(AlT1Eca~{YnTuNl_=^D9bu95W8k;++}ca^eQtBjX< zpsqm`$PIT{%S5=QBboPWk-GEh)^ap;r0&5>k-7)#jxvOfyt5l>i*lUxTCQ$Aj@~dt}T+G-dMCQdi0|Ngc=oi{66VrI$eVQ3uk0 zZ6g=)8p+AgkveTlb2Y*AmgLoi4&>Fu63E?REs+hZk-D9&{jQlt*L1YpS=EtNn^f!N z$-@#zFWp#fO}a`=iY1cst^+kYmJ&5NbffcVxo??{SI=wLNKKukQZ}IjHHX%ct2&TN zLq+=4wR&%AdG-9E>r07#gGQiUZ?ErWsaMetD_`ENk>--49JD1vv-VcY!^ToB$5O4; zqsQWPEm!QqbuHKJ((2k;yi$(;(rR7HjMZM(a;BeH3gm$6Ku)<1WXgI=l}zfjiC)X( z*4r?Fx_vGsa*VI)NS*~RB{EBOjm*;XCOVSs-&%@fLN04L`8ts2J-XmLkg2LmWU4NK zjHClKRZZ_Tl2mk&n!QV%Jj^U>X{-aOF(o&a8o9GBYjtNeO-;>J9V}CEsk^G?;@ax^ zvX)b{tmUY#=st>SnTuW!EHQwU!5rbx)VI>ifD&?dqB2zP;RZ!R43SrFHtU(^cx4 zlIIh8Sh;8FNL>iJNL>l0($j%l3QHi*Elis=kmnS-M4nSDfh4e&s9V2jZ6dk7FGX^l zENi(=OcNcb+xk)>+gYpRWUi6S8y(3Nvv${OHTCs&r12U_V;xDdHvsbvjTl+m{k`PIVxsQMXaOE?O^<PF|0+M~5h4%iyW0n?FsP%u4pAVx9;8+0G?1SoZkA8LSE(HiIvzGc#CK$qZIcES^{*8D0l!1}`OQ0_#TS zkvei~ncUvjetIqYuLGIfYxlK6?(=#xGRbuylY9web8Cs3 zGTU``ndG{Y?ED(3S+2{}EH|~cbRdrdrcMXaZ!I~GWc>5iCQ{eH(ors}n8cvb^>bdJBX!j*MRFo^@AE(oh;A(VWqPe`WH#u=a@m-wYip4l zP#vkuV5yWn)Pb6GYa|<&=rR3vzxpY_)yMP}<+Yo;=A{F5uU$%H!#YqCbt#dJtZmfv z)ZJuyuC4W2CZVn{ftq`!>DBYPHB$5Zy!LU^Q3vYQx|B$xwMz0?BiT6}$ok!AoExL$gYOG~yA}$@|or`5HZ(NuS+|YqM1JQxJ_%KyhbtHR!eJPS- zse|QKtXs(p(}6lo>d33va$a>&rz6>49jJ-3w36Lj8>zFqoH}W=1ky$qNE;nUMoXaH zZ`CCxP)A;us42fh>N$cgQgeKX)NS*;(lza`u8|t%yxAJ5&ARfTp#Kk+uagf9f59c& z`KGUYbSeG&Kl#B*{ZsvmvR@*hDm%F-S|T4dRG&}YE+3P@KUaU--nOD+Hn1t(%Sl>zbR0^c6{0R;g{&~owcDaYjs39 z{@<3e%f{cUjmi?})%kbR-xT}}2`(EyUB@?h`qJ)A@@4v)@~@KJylnh(9e48K%4dTv8-M(2J;EF1|1Hx0vhl;+>&O4GmyG|F4>|rptjF)Ae!H0cH)TKXA;&-d zGCh8^HuPovFdrA@eVIyUyQN2Uiwf zzWxXKGW|{d-}R9Et=FWnEN?XacRnQl{3~8R{!fwZar{3ilj5@TpWM_t-a2Y8E*8_@ zl>9O2f7$u(AJgNzoBV&8bTa)-{(ti!{+EqEUe)7okN=llGJf%p@x9md`0g7V{}&%JzI|PfU#+|E%lgaZ%j~~7{y*@= zm**dUzaBquq|;_G{Y}yLOaIIAuh;Rn`K!lT)8CB$Cb=nJcKn++$%Q4$8_mBjkp7pA zKi+tK{_nVC{68myUpD^yMS6ViireIySKSy``4s2NEsur{UE~!^B znpwZwvy=`C0O1j-Q!-@0Bv{lN4F=t2(21uAfs^WoqI0p_E-Ve)xoLIjp}2 z;7hxoEngh}x*Yf~c=r#hXIq(koiDrf_4iZfB|6}~-j!i^>{Uzm`}7$N*XPly-@lQD LX8bF9bJqV01l-~7 literal 349424 zcmeF42bfgV`MB@wGAxT?0Y_jpIs~yL7&RKvm;`%QETdSLnPE9Bu)s3NG7Kt+iekkE zVq+GhSg{3c8SGuLmsqf4?}{bx|GsnHGjkah#gyll=bya~>^tY&)9!b^Q|@W^q&@cE zvmz1+{1pkl4N4|&8wB%qj}{HR?XTX!F5F2K902nbg-(-K{16{qyD~&9n9z?>cHf zSN_OVRqf&}T;R+<6@MFX;^WtF))RBNzvOI}u9nhY?q9QF?XE7~SpDm2R{HP!jVhUrRk3bv(*^Hs{M{ z?5jixTZ*@ka`!cUm5UGG%Q-pOg_B0^rFf8csC={}Hy?hv{QPrer@QoOyqcBKATEF9 z`J4^$``lCU6YoEQ? zA}GpzHN*Ac6#6;;`n;-NT0f~gRBp;xG-6}&a-1)jsSD=yPd)7VUR& z?qZQY+aEq%xh+Rq{mpGT9ZrSk!PDV5==3n#?CRCrmedb5E}ZnFvDTf&-$i07xMCYr ziEy+XC}dnZTB=va$$d?iKB=##PnF-=PH1>F!nHfgAGyNy>4305!uS4ilU#a}`NcL} z=^FQZ$^0vrFSJbNmtb~sNao+he3@l^et_lRnv*TF`4_o=ie;0eFD~gy*Eo4)i}9UR zcHhZ0TtAKdiTWvKOP@UNOnqvpza>+(+-LKBY`BH6#x`lJ}3Rh+nq)_Rv-+YEUR`}jqc7#pnI7YwW98>{0tw4^RnMpLP3B!VQCq8u zJ~X?BP(A#qd?{#UAy;y?(`SSHi}@hJipzapUXN`=Z&iqLrE7kv-mhu>`SkkwD-$O_ zv~wxfe=0wcNv&ly-R^ml$=_mL`8if4H+}S2aJcoS`ZQv25Dc#Q%<7}+|FCqOtyMF% z1BT^lT)9^JOnP9Qdg@<0d_=Csm2+SIGh@E6{)_rq^ZH8qt@TN`{J!3TzL%F@-!9a( z>uu{hO~>&1{$n*ABP5x*8dtxlegCoPfofkrqN|)``9?vHn!wYBO0|e$vSyLwq?=`?{ec>(u>- z+F_zsFBaVoA2BSg_H~(zgyZyC(`Vmb=_lrfe9wrg5_$mX5O z(_@fpsGO-BR+a8jJ-@)FKU^;^5`W=(UiG>>oR#bOM_o9YiE?H0uHMR#Kbg_%YV{io z9_<|D#w@Vu_WJMJv25PeBTXWoxVTT#?qz2TwC-b-3&mFJ#l5ZBk9UOisk|I B}5 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 diff --git a/ebpf/c/kafka.c b/ebpf/c/kafka.c new file mode 100644 index 0000000..eaf5ced --- /dev/null +++ b/ebpf/c/kafka.c @@ -0,0 +1,74 @@ +//go:build ignore +// https://kafka.apache.org/protocol.html + +// RequestOrResponse => Size (RequestMessage | ResponseMessage) +// Size => int32 + + +// Request Header v0 => request_api_key request_api_version correlation_id +// request_api_key => INT16 +// request_api_version => INT16 +// correlation_id => INT32 +// client_id => NULLABLE_STRING // added in v1 + +// method will be decoded in user space +// #define METHOD_KAFKA_PRODUCE 1 + +struct kafka_request_header { + __s32 size; + __s16 api_key; + __s16 api_version; + __s32 correlation_id; +}; + +// Response Header v1 => correlation_id TAG_BUFFER +// correlation_id => INT32 + +struct kafka_response_header { + __s32 size; + __s32 correlation_id; +}; + +static __always_inline +int is_kafka_request_header(char *buf, __u64 buf_size, __s32 *request_id) { + struct kafka_request_header h = {}; + if (buf_size < sizeof(h)) { + return 0; + } + + if (bpf_probe_read(&h, sizeof(h), buf) < 0) { + return 0; + } + + h.size = bpf_htonl(h.size); + + // we parse only one message in one write syscall for now. + // batch publish is not supported. + if (h.size+4 != buf_size) { + return 0; + } + + h.api_key = bpf_htons(h.api_key); // determines message api, ProduceAPI, FetchAPI, etc. +// h.api_version = bpf_htons(h.api_version); // version of the API, v8, v9, etc. + h.correlation_id = bpf_htonl(h.correlation_id); + if (h.correlation_id > 0 && (h.api_key >= 0 && h.api_key <= 74)) { // https://kafka.apache.org/protocol.html#protocol_api_keys + *request_id = h.correlation_id; + return 1; + } + return 0; +} + +static __always_inline +int is_kafka_response_header(char *buf, __s32 correlation_id) { + struct kafka_response_header h = {}; + if (bpf_probe_read(&h, sizeof(h), buf) < 0) { + return 0; + } + // correlation_id match + if (bpf_htonl(h.correlation_id) == correlation_id) { + return 1; + } + return 0; +} + + diff --git a/ebpf/c/l7.c b/ebpf/c/l7.c index 15c2128..3fcb853 100644 --- a/ebpf/c/l7.c +++ b/ebpf/c/l7.c @@ -5,6 +5,8 @@ #define PROTOCOL_POSTGRES 3 #define PROTOCOL_HTTP2 4 #define PROTOCOL_REDIS 5 +#define PROTOCOL_KAFKA 6 + #define MAX_PAYLOAD_SIZE 1024 #define PAYLOAD_PREFIX_SIZE 16 @@ -40,6 +42,7 @@ struct l7_request { __u8 request_type; __u32 seq; __u32 tid; + __s32 correlation_id; // used only for kafka }; struct socket_key { @@ -235,6 +238,25 @@ int process_enter_of_syscalls_write_sendto(void* ctx, __u64 fd, __u8 is_tls, cha }else if (!is_redis_pong(buf,count) && is_redis_command(buf,count)){ req->protocol = PROTOCOL_REDIS; req->method = METHOD_UNKNOWN; + }else if (is_kafka_request_header(buf, count, &req->correlation_id)){ + // request pipelining, batch publish + // if multiple writes are done subsequently over the same connection + // do not change record in active_l7_requests + // correlation ids can mismatch + + // order is guaranteed over the same socket on kafka. + + // write(first_part_of_batch_req_corr1 + // write(second_part_of_batch_req_corr2 ----> do not write to active_l7_requests, wait for the response + // read(first_part_of_batch_resp_corr1 + // read(second_part_of_batch_resp_corr2 + + struct l7_request *prev_req = bpf_map_lookup_elem(&active_l7_requests, &k); + if (prev_req && prev_req->protocol == PROTOCOL_KAFKA) { + return 0; + } + req->protocol = PROTOCOL_KAFKA; + req->method = METHOD_UNKNOWN; }else if (is_rabbitmq_publish(buf,count)){ req->protocol = PROTOCOL_AMQP; req->method = METHOD_PUBLISH; @@ -671,6 +693,8 @@ int process_exit_of_syscalls_read_recvfrom(void* ctx, __u64 id, __u32 pid, __s64 e->status = parse_redis_response(read_info->buf, ret); e->method = METHOD_REDIS_COMMAND; } + }else if (e->protocol == PROTOCOL_KAFKA){ + e->status = is_kafka_response_header(read_info->buf, active_req->correlation_id); } }else{ bpf_map_delete_elem(&active_reads, &id); diff --git a/ebpf/l7_req/l7.go b/ebpf/l7_req/l7.go index 753b27d..a2c32a6 100644 --- a/ebpf/l7_req/l7.go +++ b/ebpf/l7_req/l7.go @@ -23,6 +23,7 @@ const ( BPF_L7_PROTOCOL_POSTGRES BPF_L7_PROTOCOL_HTTP2 BPF_L7_PROTOCOL_REDIS + BPF_L7_PROTOCOL_KAFKA ) // for user space @@ -32,6 +33,7 @@ const ( L7_PROTOCOL_AMQP = "AMQP" L7_PROTOCOL_POSTGRES = "POSTGRES" L7_PROTOCOL_REDIS = "REDIS" + L7_PROTOCOL_KAFKA = "KAFKA" L7_PROTOCOL_UNKNOWN = "UNKNOWN" ) @@ -51,6 +53,8 @@ func (e L7ProtocolConversion) String() string { return L7_PROTOCOL_HTTP2 case BPF_L7_PROTOCOL_REDIS: return L7_PROTOCOL_REDIS + case BPF_L7_PROTOCOL_KAFKA: + return L7_PROTOCOL_KAFKA case BPF_L7_PROTOCOL_UNKNOWN: return L7_PROTOCOL_UNKNOWN default: @@ -611,6 +615,7 @@ func (l7p *L7Prog) Consume(ctx context.Context, ch chan interface{}) { method = Http2MethodConversion(l7Event.Method).String() case L7_PROTOCOL_REDIS: method = RedisMethodConversion(l7Event.Method).String() + // no method set for kafka on kernel side default: method = "Unknown" } @@ -636,6 +641,22 @@ func (l7p *L7Prog) Consume(ctx context.Context, ch chan interface{}) { Seq: l7Event.Seq, } + if userspacel7Event.Protocol == L7_PROTOCOL_KAFKA { + // log all information + log.Logger.Info(). + Uint32("pid", userspacel7Event.Pid). + Uint32("status", userspacel7Event.Status). + Uint64("duration", userspacel7Event.Duration). + Str("protocol", userspacel7Event.Protocol). + Str("method", userspacel7Event.Method). + Uint64("write-time-ns", userspacel7Event.WriteTimeNs). + Uint32("tid", userspacel7Event.Tid). + Uint32("seq", userspacel7Event.Seq). + Str("payload", string(userspacel7Event.Payload[:userspacel7Event.PayloadSize])). + Msg("kafka event") + return + } + go func(l7Event *L7Event) { select { case ch <- l7Event: From b16314828f2d78fdbb7d9b20349b9075136e383f Mon Sep 17 00:00:00 2001 From: kenanfarukcakir Date: Fri, 14 Jun 2024 19:01:35 +0300 Subject: [PATCH 02/24] go mod --- go.mod | 10 +++++++++- go.sum | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 60 insertions(+), 1 deletion(-) diff --git a/go.mod b/go.mod index 15bc7c1..279a36e 100644 --- a/go.mod +++ b/go.mod @@ -7,6 +7,7 @@ require ( github.com/alecthomas/kingpin/v2 v2.4.0 github.com/cilium/ebpf v0.10.1-0.20230626090016-654491c8a500 github.com/cilium/fake v0.6.1 + github.com/cisco-open/libnasp/components/kafka-protocol-go/pkg v0.0.0-20240528033116-a905e3260e31 github.com/fsnotify/fsnotify v1.7.0 github.com/go-kit/log v0.2.1 github.com/golang/protobuf v1.5.3 @@ -15,6 +16,7 @@ require ( github.com/prometheus/common v0.48.0 github.com/prometheus/node_exporter v1.6.1 github.com/rs/zerolog v1.29.1 + github.com/segmentio/kafka-go v0.4.47 github.com/stretchr/testify v1.8.4 golang.org/x/arch v0.5.0 golang.org/x/mod v0.12.0 @@ -27,13 +29,19 @@ require ( ) require ( + emperror.dev/errors v0.8.1 // indirect github.com/Microsoft/go-winio v0.6.0 // indirect github.com/blang/semver/v4 v4.0.0 // indirect github.com/cenkalti/backoff/v4 v4.2.1 // indirect + github.com/eapache/go-xerial-snappy v0.0.0-20230111030713-bf00bc1b83b6 // indirect github.com/felixge/httpsnoop v1.0.3 // indirect github.com/go-logr/stdr v1.2.2 // indirect + github.com/golang/snappy v0.0.4 // indirect github.com/google/gnostic-models v0.6.8 // indirect github.com/grpc-ecosystem/grpc-gateway/v2 v2.16.0 // indirect + github.com/klauspost/compress v1.16.5 // indirect + github.com/pierrec/lz4/v4 v4.1.18 // indirect + github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.46.0 // indirect go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.45.0 // indirect @@ -72,7 +80,7 @@ require ( github.com/gogo/protobuf v1.3.2 github.com/google/go-cmp v0.6.0 // indirect github.com/google/gofuzz v1.2.0 // indirect - github.com/google/uuid v1.3.1 // indirect + github.com/google/uuid v1.3.1 github.com/hashicorp/go-cleanhttp v0.5.2 // indirect github.com/hashicorp/go-envparse v0.1.0 // indirect github.com/hashicorp/go-hclog v1.2.0 // indirect diff --git a/go.sum b/go.sum index f9c5845..b61c8d7 100644 --- a/go.sum +++ b/go.sum @@ -2,6 +2,8 @@ cloud.google.com/go/compute v1.23.0 h1:tP41Zoavr8ptEqaW6j+LQOnyBBhO7OkOMAGrgLopT cloud.google.com/go/compute v1.23.0/go.mod h1:4tCnrn48xsqlwSAiLf1HXMQk8CONslYbdiEZc9FEIbM= cloud.google.com/go/compute/metadata v0.2.3 h1:mg4jlk7mCAj6xXp9UJ4fjI9VUI5rubuGBW5aJ7UnBMY= cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA= +emperror.dev/errors v0.8.1 h1:UavXZ5cSX/4u9iyvH6aDcuGkVjeexUGJ7Ij7G4VfQT0= +emperror.dev/errors v0.8.1/go.mod h1:YcRvLPh626Ubn2xqtoprejnA5nFha+TJ+2vew48kWuE= github.com/Microsoft/go-winio v0.6.0 h1:slsWYD/zyx7lCXoZVlvQrj0hPTM1HI4+v1sIda2yDvg= github.com/Microsoft/go-winio v0.6.0/go.mod h1:cTAf44im0RAYeL23bpB+fzCyDH2MJiz2BO69KH/soAE= github.com/NVIDIA/go-nvml v0.12.0-2 h1:Sg239yy7jmopu/cuvYauoMj9fOpcGMngxVxxS1EBXeY= @@ -24,6 +26,8 @@ github.com/cilium/ebpf v0.10.1-0.20230626090016-654491c8a500 h1:eAn1/gEVvcamZLoF github.com/cilium/ebpf v0.10.1-0.20230626090016-654491c8a500/go.mod h1:WE7CZAnqOL2RouJ4f1uyNhqr2P4CCvXFIqdRDUgWsVs= github.com/cilium/fake v0.6.1 h1:cLkNx1nkF0b0pPW79JaQxaI5oG2/rBzRKpp0YUg1fTA= github.com/cilium/fake v0.6.1/go.mod h1:V9lCbbcsnSf3vB6sdOP7Q0bsUUJ/jyHPZxnFAw5nPUc= +github.com/cisco-open/libnasp/components/kafka-protocol-go/pkg v0.0.0-20240528033116-a905e3260e31 h1:hjREoktKeX82wJgux7OkwscmzU68IxYs1CHoFTkZYS0= +github.com/cisco-open/libnasp/components/kafka-protocol-go/pkg v0.0.0-20240528033116-a905e3260e31/go.mod h1:QA7VtLuomo9p1gzrLHZCfIGg0OrCoeoDitt+54QIPMQ= github.com/cncf/xds/go v0.0.0-20230607035331-e9ce68804cb4 h1:/inchEIKaYC1Akx+H+gqO04wryn5h75LSazbRlnya1k= github.com/cncf/xds/go v0.0.0-20230607035331-e9ce68804cb4/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/coreos/go-systemd/v22 v22.5.0 h1:RrqgGjYQKalulkV8NGVIfkXQf6YYmOyiJKk8iXXhfZs= @@ -37,6 +41,8 @@ github.com/dennwc/btrfs v0.0.0-20230312211831-a1f570bd01a1/go.mod h1:MYsOV9Dgsec github.com/dennwc/ioctl v1.0.0 h1:DsWAAjIxRqNcLn9x6mwfuf2pet3iB7aK90K4tF16rLg= github.com/dennwc/ioctl v1.0.0/go.mod h1:ellh2YB5ldny99SBU/VX7Nq0xiZbHphf1DrtHxxjMk0= github.com/dvyukov/go-fuzz v0.0.0-20210103155950-6a8e9d1f2415/go.mod h1:11Gm+ccJnvAhCNLlf5+cS9KjtbaD5I5zaZpFMsTHWTw= +github.com/eapache/go-xerial-snappy v0.0.0-20230111030713-bf00bc1b83b6 h1:8yY/I9ndfrgrXUbOGObLHKBR4Fl3nZXwM2c7OYTT8hM= +github.com/eapache/go-xerial-snappy v0.0.0-20230111030713-bf00bc1b83b6/go.mod h1:YvSRo5mw33fLEx1+DlK6L2VV43tJt5Eyel9n9XBcR+0= github.com/ema/qdisc v0.0.0-20230120214811-5b708f463de3 h1:Jrl8sD8wO34+EE1dV2vhOXrqFAZa/FILDnZRaV28+cw= github.com/ema/qdisc v0.0.0-20230120214811-5b708f463de3/go.mod h1:FhIc0fLYi7f+lK5maMsesDqwYojIOh3VfRs8EVd5YJQ= github.com/emicklei/go-restful/v3 v3.11.0 h1:rAQeMHw1c7zTmncogyy8VvRZwtkmkZ4FxERmMY4rD+g= @@ -81,6 +87,8 @@ github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5y github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= +github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/google/gnostic-models v0.6.8 h1:yo/ABAfM5IMRsS1VnXjTBvUb61tFIHozhlYvRgGre9I= github.com/google/gnostic-models v0.6.8/go.mod h1:5n7qKqH0f5wFt+aWF8CW6pZLLNOfYuF5OpfBSENuI8U= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= @@ -122,6 +130,9 @@ github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnr github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/klauspost/compress v1.15.9/go.mod h1:PhcZ0MbTNciWF3rruxRgKxI5NkcHHrHUDtV4Yw2GlzU= +github.com/klauspost/compress v1.16.5 h1:IFV2oUNUzZaz+XyusxpLzpzS8Pt5rh0Z16For/djlyI= +github.com/klauspost/compress v1.16.5/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= @@ -168,6 +179,10 @@ github.com/opencontainers/selinux v1.11.0 h1:+5Zbo97w3Lbmb3PeqQtpmTkMwsW5nRI3YaL github.com/opencontainers/selinux v1.11.0/go.mod h1:E5dMC3VPuVvVHDYmi78qvhJp8+M586T4DlDRYpFkyec= github.com/patrickmn/go-cache v2.1.0+incompatible h1:HRMgzkcYKYpi3C8ajMPV8OFXaaRUnok+kx1WdO15EQc= github.com/patrickmn/go-cache v2.1.0+incompatible/go.mod h1:3Qf8kWWT7OJRJbdiICTKqZju1ZixQ/KpMGzzAfe6+WQ= +github.com/pierrec/lz4/v4 v4.1.15/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= +github.com/pierrec/lz4/v4 v4.1.18 h1:xaKrnTkyoqfh1YItXl56+6KJNVYWlEEPuAQW9xsplYQ= +github.com/pierrec/lz4/v4 v4.1.18/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= +github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= @@ -190,6 +205,8 @@ github.com/rs/zerolog v1.29.1 h1:cO+d60CHkknCbvzEWxP0S9K6KqyTjrCNUy1LdQLCGPc= github.com/rs/zerolog v1.29.1/go.mod h1:Le6ESbR7hc+DP6Lt1THiV8CQSdkkNrd3R0XbEgp3ZBU= github.com/safchain/ethtool v0.3.0 h1:gimQJpsI6sc1yIqP/y8GYgiXn/NjgvpM0RNoWLVVmP0= github.com/safchain/ethtool v0.3.0/go.mod h1:SA9BwrgyAqNo7M+uaL6IYbxpm5wk3L7Mm6ocLW+CJUs= +github.com/segmentio/kafka-go v0.4.47 h1:IqziR4pA3vrZq7YdRxaT3w1/5fvIH5qpCwstUanQQB0= +github.com/segmentio/kafka-go v0.4.47/go.mod h1:HjF6XbOKh0Pjlkr5GVZxt6CsjjwnmhVOfURM5KMd8qg= github.com/siebenmann/go-kstat v0.0.0-20210513183136-173c9b0a9973 h1:GfSdC6wKfTGcgCS7BtzF5694Amne1pGCSTY252WhlEY= github.com/siebenmann/go-kstat v0.0.0-20210513183136-173c9b0a9973/go.mod h1:G81aIFAMS9ECrwBYR9YxhlPjWgrItd+Kje78O6+uqm8= github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= @@ -205,10 +222,14 @@ github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= +github.com/xdg-go/pbkdf2 v1.0.0/go.mod h1:jrpuAogTd400dnrH08LKmI/xc1MbPOebTwRqcT5RDeI= +github.com/xdg-go/scram v1.1.2/go.mod h1:RT/sEzTbU5y00aCK8UOx6R7YryM0iF1N2MOmC3kKLN4= +github.com/xdg-go/stringprep v1.0.4/go.mod h1:mPGuuIYwz7CmR2bT9j4GbQqutWS1zV24gijq1dTyGkM= github.com/xhit/go-str2duration/v2 v2.1.0 h1:lxklc02Drh6ynqX+DdPyp5pCKLUQpRT8bp8Ydu2Bstc= github.com/xhit/go-str2duration/v2 v2.1.0/go.mod h1:ohY8p+0f07DiV6Em5LKB0s2YpLtXVyJfNt1+BlmyAsU= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= go.ddosify.com/ddosify v1.0.5 h1:2FPBr8hjGam7nIjCCGr11MwrX8U7+RvbAFDp6g5eR2I= go.ddosify.com/ddosify v1.0.5/go.mod h1:ciivfP/6RuLd01uc56pdUa2+SQalfKwEXsIhOu04rL4= go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.46.0 h1:PzIubN4/sjByhDRHLviCjJuweBXWFZWhghjg7cS28+M= @@ -245,12 +266,16 @@ golang.org/x/arch v0.5.0/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4= golang.org/x/crypto v0.18.0 h1:PGVlW0xEltQnzFZ55hkuX5+KLyrMYhHld1YHO4AKcdc= golang.org/x/crypto v0.18.0/go.mod h1:R0j02AL6hcrfOiy9T4ZYp/rcWeMxM3L6QYxlOuEG1mg= golang.org/x/exp v0.0.0-20230522175609-2e198f4a06a1 h1:k/i9J1pBpvlfR+9QsetwPyERsqu1GIbi967PQMq3Ivc= golang.org/x/exp v0.0.0-20230522175609-2e198f4a06a1/go.mod h1:V1LtkGg67GoY2N1AnLN78QLrzxkLyJw7RJb1gzOOz9w= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= +golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.12.0 h1:rmsUpXtvNzj340zd98LZ4KntptpfRHwpFOHG188oHXc= golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= @@ -258,6 +283,11 @@ golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= +golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= +golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE= golang.org/x/net v0.20.0 h1:aCL9BSgETF1k+blQaYUBx9hJ9LOGP3gAVemcZlf1Kpo= golang.org/x/net v0.20.0/go.mod h1:z8BVo6PvndSri0LbOE3hAn0apkU+1YvI6E70E9jsnvY= golang.org/x/oauth2 v0.16.0 h1:aDkGMBSYxElaoP81NpoUoz2oo2R2wHdZpGToUxfyQrQ= @@ -265,6 +295,8 @@ golang.org/x/oauth2 v0.16.0/go.mod h1:hqZ+0LWXsiVoZpeld6jVt06P3adbS2Uu911W1SsJv2 golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.3.0 h1:ftCYgMx6zT/asHUrPw8BLLscYtGznsLAnjq5RH9P66E= golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -272,19 +304,36 @@ golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5h golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191008105621-543471e840be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211031064116-611d5d643895/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.18.0 h1:DBdB3niSjOA/O0blCZBqDefyWNYveAYMNF1Wum0DYQ4= golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= +golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= +golang.org/x/term v0.13.0/go.mod h1:LTmsnFJwVN6bCy1rVCoS+qHT1HhALEFxKncY3WNNh4U= golang.org/x/term v0.16.0 h1:m+B6fahuftsE9qjo0VWp2FW0mB3MTJvR0BaMQrq0pmE= golang.org/x/term v0.16.0/go.mod h1:yn7UURbUtPyrVJPGPq404EukNFxcm/foM+bV/bfcDsY= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= +golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= +golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= +golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4= @@ -294,6 +343,8 @@ golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtn golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= +golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= +golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= golang.org/x/tools v0.12.0 h1:YW6HUoUmYBpwSgyaGaZq1fHjrBjX1rlpZ54T6mu2kss= golang.org/x/tools v0.12.0/go.mod h1:Sc0INKfu04TlqNoRA1hgpFZbhYXHPr4V5DzpSBTPqQM= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= From b103054f069f3e13c28289ccf98f364b1999fc1c Mon Sep 17 00:00:00 2001 From: kenanfarukcakir Date: Fri, 14 Jun 2024 19:02:27 +0300 Subject: [PATCH 03/24] parse kafka on kernel --- ebpf/c/bpf_bpfeb.go | 6 ++++- ebpf/c/bpf_bpfeb.o | Bin 356984 -> 360888 bytes ebpf/c/bpf_bpfel.go | 6 ++++- ebpf/c/bpf_bpfel.o | Bin 357536 -> 361760 bytes ebpf/c/kafka.c | 13 +++++++--- ebpf/c/l7.c | 21 ++++++++++++++- ebpf/l7_req/l7.go | 61 +++++++++++++++++++++++++++++++++++++------- 7 files changed, 92 insertions(+), 15 deletions(-) diff --git a/ebpf/c/bpf_bpfeb.go b/ebpf/c/bpf_bpfeb.go index 92455fe..971c0d3 100644 --- a/ebpf/c/bpf_bpfeb.go +++ b/ebpf/c/bpf_bpfeb.go @@ -50,7 +50,8 @@ type bpfL7Event struct { _ [1]byte Seq uint32 Tid uint32 - _ [4]byte + KafkaApiVersion int16 + _ [2]byte } type bpfL7Request struct { @@ -66,6 +67,9 @@ type bpfL7Request struct { Seq uint32 Tid uint32 CorrelationId int32 + ApiKey int16 + ApiVersion int16 + _ [4]byte } type bpfLogMessage struct { diff --git a/ebpf/c/bpf_bpfeb.o b/ebpf/c/bpf_bpfeb.o index 5eba882cd417742d98af1fc8594ecae36212ac10..85f154c3bcd5126124b13ff9c77fb5c36ab4dfd3 100644 GIT binary patch literal 360888 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¾ORSW4-!ke_^+etlghebU-*#Yzlu8Z$4gX<#i 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πnqn(C>$5+ac*$Hogrc6iKtBTSU^L9P{ge%YQcA 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