notify: add Kafka receiver - #5410
Conversation
Signed-off-by: cshorvath <cshorvath@ultinous.com>
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (1)
🚧 Files skipped from review as they are similar to previous changes (1)
Included review availability: Your plan includes up to 8 reviews per rolling hour; 7 remain after this review. 📝 WalkthroughWalkthroughAdded an Apache Kafka notification receiver that publishes webhook v4 JSON messages. Added Kafka configuration, receiver wiring, documentation, metrics registration, and tests. Added integration cleanup during construction, reload, and shutdown. ChangesKafka receiver
Estimated code review effort: 4 (Complex) | ~45 minutes Merge Risk: ⚪ Minimal · up to This PR adds a Kafka receiver and related configuration and documentation; no actionable merge-blocking risk remains based on the supplied evidence. Sequence Diagram(s)sequenceDiagram
participant Alertmanager
participant KafkaNotifier as notify/kafka.Notifier
participant KafkaProducer
participant KafkaBroker
Alertmanager->>KafkaNotifier: Notify grouped alerts
KafkaNotifier->>KafkaNotifier: Render webhook v4 JSON
KafkaNotifier->>KafkaProducer: ProduceSync topic, group key, JSON value
KafkaProducer->>KafkaBroker: Publish Kafka record
Possibly related PRs
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Actionable comments posted: 1
🧹 Nitpick comments (2)
notify/kafka/config.go (1)
45-53: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick winWrap propagated Kafka errors with operation context.
Direct error returns make YAML parsing and producer construction failures harder to locate. Wrap each propagated error with
fmt.Errorf("kafka: <operation>: %w", err).
notify/kafka/config.go#L45-L53: wrap YAML unmarshal and client-option validation errors.notify/kafka/kafka.go#L46-L55: wrap configuration validation and producer-option construction errors.As per coding guidelines, “Wrap errors with
fmt.Errorf("...: %w", err)and check witherrors.Is/errors.Asin Go code.”🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@notify/kafka/config.go` around lines 45 - 53, Wrap the propagated errors in Config unmarshalling and validate using fmt.Errorf with “kafka: <operation>: %w” context, covering both sites: notify/kafka/config.go lines 45-53 for YAML unmarshal and client-option validation, and notify/kafka/kafka.go lines 46-55 for configuration validation and producer-option construction. Preserve error unwrapping so callers can continue using errors.Is and errors.As.Source: Coding guidelines
app/reloader.go (1)
127-130: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick winAdd receiver context to the joined error.
A receiver build failure is returned without the receiver name. Wrap
errbefore joining it with cleanup errors.As per coding guidelines, “Wrap errors with
fmt.Errorf("...: %w", err)and check witherrors.Is/errors.Asin Go code.”Proposed fix
- return errors.Join(err, notify.CloseIntegrations(integrations)) + return errors.Join( + fmt.Errorf("build receiver %q: %w", rcv.Name, err), + notify.CloseIntegrations(integrations), + )🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@app/reloader.go` around lines 127 - 130, Update the receiver build error handling around BuildReceiverIntegrations to wrap err with receiver context using fmt.Errorf and %w before joining it with notify.CloseIntegrations(integrations), including the receiver name in the message while preserving errors.Is/errors.As unwrapping.Source: Coding guidelines
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@docs/configuration.md`:
- Around line 2039-2042: Update both occurrences of the producer acknowledgement
documentation in docs/configuration.md to remove the claim that acks: "all"
enables idempotent writes. Keep the description focused on waiting for all
in-sync replicas, while preserving the existing acknowledgement-level behavior
and syntax.
---
Nitpick comments:
In `@app/reloader.go`:
- Around line 127-130: Update the receiver build error handling around
BuildReceiverIntegrations to wrap err with receiver context using fmt.Errorf and
%w before joining it with notify.CloseIntegrations(integrations), including the
receiver name in the message while preserving errors.Is/errors.As unwrapping.
In `@notify/kafka/config.go`:
- Around line 45-53: Wrap the propagated errors in Config unmarshalling and
validate using fmt.Errorf with “kafka: <operation>: %w” context, covering both
sites: notify/kafka/config.go lines 45-53 for YAML unmarshal and client-option
validation, and notify/kafka/kafka.go lines 46-55 for configuration validation
and producer-option construction. Preserve error unwrapping so callers can
continue using errors.Is and errors.As.
🪄 Autofix
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro Plus
Run ID: 00bb60ba-8a61-44d4-9c0e-4ab3746914f7
📒 Files selected for processing (17)
CHANGELOG.mdapp/reloader.goapp/reloader_test.goconfig/config.goconfig/config_test.goconfig/receiver/receiver.goconfig/receiver/receiver_test.godocs/configuration.mddocs/integrations.mdkafka/kafka.gonotify/integration_close_test.gonotify/kafka/config.gonotify/kafka/config_test.gonotify/kafka/kafka.gonotify/kafka/kafka_test.gonotify/metrics.gonotify/notify.go
Pull Request Checklist
Please check all the applicable boxes.
benchstatto compare benchmarksWhich user-facing changes does this PR introduce?