tangled
alpha
login
or
join now
hailey.at
/
at-kafka
3
fork
atom
this repo has no description
3
fork
atom
overview
issues
pulls
pipelines
simplify producerl ogic
hailey.at
3 months ago
931e3edd
e632490a
+32
-45
1 changed file
expand all
collapse all
unified
split
atkafka
atkafka.go
+32
-45
atkafka/atkafka.go
···
32
32
ospreyCompat bool
33
33
logger *slog.Logger
34
34
35
35
-
atkProducer *Producer
36
36
-
ospProducer *Producer
35
35
+
producer *Producer
37
36
38
37
plcClient *PlcClient
39
38
}
···
70
69
}
71
70
72
71
func (s *Server) Run(ctx context.Context) error {
72
72
+
s.logger.Info("starting consumer", "relay-host", s.relayHost, "bootstrap-servers", s.bootstrapServers, "output-topic", s.outputTopic)
73
73
+
74
74
+
createCtx, _ := context.WithTimeout(ctx, time.Second*5)
75
75
+
76
76
+
producerLogger := s.logger.With("component", "producer")
77
77
+
kafProducer, err := NewProducer(createCtx, producerLogger, s.bootstrapServers, s.outputTopic,
78
78
+
WithEnsureTopic(true),
79
79
+
WithTopicPartitions(200),
80
80
+
)
81
81
+
if err != nil {
82
82
+
return fmt.Errorf("failed to create producer: %w", err)
83
83
+
}
84
84
+
defer kafProducer.Close()
85
85
+
s.producer = kafProducer
86
86
+
s.logger.Info("created producer")
87
87
+
73
88
wsDialer := websocket.DefaultDialer
74
89
u, err := url.Parse(s.relayHost)
75
90
if err != nil {
76
91
return fmt.Errorf("invalid relayHost: %w", err)
77
92
}
78
93
u.Path = "/xrpc/com.atproto.sync.subscribeRepos"
94
94
+
s.logger.Info("created dialer")
79
95
80
96
wsErr := make(chan error, 1)
81
97
shutdownWs := make(chan struct{}, 1)
···
109
125
110
126
wsErr <- nil
111
127
}()
112
112
-
113
113
-
producerLogger := s.logger.With("component", "producer")
114
114
-
if s.ospreyCompat {
115
115
-
kafProducer, err := NewProducer(ctx, producerLogger, s.bootstrapServers, s.outputTopic,
116
116
-
WithEnsureTopic(true),
117
117
-
WithTopicPartitions(200),
118
118
-
)
119
119
-
if err != nil {
120
120
-
return fmt.Errorf("failed to create producer: %w", err)
121
121
-
}
122
122
-
defer kafProducer.Close()
123
123
-
s.ospProducer = kafProducer
124
124
-
} else {
125
125
-
kafProducer, err := NewProducer(ctx, producerLogger, s.bootstrapServers, s.outputTopic,
126
126
-
WithEnsureTopic(true),
127
127
-
WithTopicPartitions(200),
128
128
-
)
129
129
-
if err != nil {
130
130
-
return fmt.Errorf("failed to create producer: %w", err)
131
131
-
}
132
132
-
defer kafProducer.Close()
133
133
-
s.atkProducer = kafProducer
134
134
-
}
128
128
+
s.logger.Info("created relay consumer")
135
129
136
130
signals := make(chan os.Signal, 1)
137
131
signal.Notify(signals, syscall.SIGTERM, syscall.SIGINT)
···
432
426
}
433
427
434
428
func (s *Server) produceAsync(ctx context.Context, key string, msg []byte) error {
435
435
-
if !s.ospreyCompat && s.atkProducer != nil {
436
436
-
if err := s.atkProducer.ProduceAsync(ctx, key, msg, func(r *kgo.Record, err error) {
437
437
-
status := "ok"
438
438
-
if err != nil {
439
439
-
status = "error"
440
440
-
s.logger.Error("error producing message", "err", err)
441
441
-
}
442
442
-
producedEvents.WithLabelValues(status).Inc()
443
443
-
}); err != nil {
429
429
+
callback := func(r *kgo.Record, err error) {
430
430
+
status := "ok"
431
431
+
if err != nil {
432
432
+
status = "error"
433
433
+
s.logger.Error("error producing message", "err", err)
434
434
+
}
435
435
+
producedEvents.WithLabelValues(status).Inc()
436
436
+
}
437
437
+
438
438
+
if !s.ospreyCompat {
439
439
+
if err := s.producer.ProduceAsync(ctx, key, msg, callback); err != nil {
444
440
return fmt.Errorf("failed to produce message: %w", err)
445
441
}
446
446
-
} else if s.ospreyCompat && s.ospProducer != nil {
447
447
-
if err := s.ospProducer.ProduceAsync(ctx, key, msg, func(r *kgo.Record, err error) {
448
448
-
status := "ok"
449
449
-
if err != nil {
450
450
-
status = "error"
451
451
-
s.logger.Error("error producing message", "err", err)
452
452
-
}
453
453
-
producedEvents.WithLabelValues(status).Inc()
454
454
-
}); err != nil {
442
442
+
} else if s.ospreyCompat {
443
443
+
if err := s.producer.ProduceAsync(ctx, key, msg, callback); err != nil {
455
444
return fmt.Errorf("failed to produce message: %w", err)
456
445
}
457
457
-
} else {
458
458
-
return fmt.Errorf("failed to produce message. no compatible producer registered.")
459
446
}
460
447
461
448
return nil