Skip to content

fix: lower websocket session ended log severity from Error to Warn in pkg/ws/client.go - #172

Open
nudgebee-dev[bot] wants to merge 1 commit into
mainfrom
fix/fix-lower-websocket-session-ended-log-se-1792979467
Open

nudgebee-dev[bot] wants to merge 1 commit into
mainfrom
fix/fix-lower-websocket-session-ended-log-se-1792979467

Conversation

@nudgebee-dev

@nudgebee-dev nudgebee-dev Bot commented Oct 26, 2026

Copy link
Copy Markdown

Description

In pkg/ws/client.go at line 122 within Client.Run, session termination errors returned by c.connectAndServe(ctx) are logged at Error severity with c.logger.Error("websocket session ended", "err", err). During transient disconnections or routine connection renegotiation with the relay, the client automatically recovers via exponential backoff reconnects. However, logging at Error severity increments container_log_messages_total{level="error"} and triggers benign ForagerServiceLogErrors Prometheus alerts.

This change demotes the log severity from Error to Warn (c.logger.Warn("websocket session ended", "err", err)), retaining full visibility into session terminations without incrementing error log metrics, while unrecoverable errors remain logged at error level.

Type of change

  • Bug fix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • Enhancement (non-breaking change which improves existing functionality)
  • Refactor (non-breaking change which improves code structure)
  • Breaking change (fix or feature that would cause existing functionality to not work as expected)
  • Documentation
  • CI/CD

Original Error/Logs

Click to expand the original error that triggered this fix
Change the log severity of expected or transient session endings from c.logger.Error to c.logger.Warn or c.logger.Info in pkg/ws/client.go line 122. During routine connection renegotiation or relay disconnects, the client successfully reconnects via exponential backoff; logging at Error level produces benign alert firings under ForagerServiceLogErrors. Regression check: verify that normal connection termination does not increment container_log_messages_total{level="error"} while unrecoverable errors remain logged at error level.

How Has This Been Tested?

  • Unit tests
  • Manual testing

Checklist

  • CLA signed (the CLA bot will prompt on your first PR)
  • make validate passes (fmt + lint + test)
  • Docs updated if the wire shape, config surface, or proxy module behavior changed

🤖 This PR was automatically generated by NudgeBee AI coding agent

Powered by AI-driven code analysis and automated fix generation

🔍 View Original Investigation

Click the link above to see the full investigation and analysis that led to this fix

View Detailed Nubi Conversation


✅ Verification

Build verification passed for the affected modules.

Commands run
PASSED (cd . && go build ./...) exit=0
go: downloading github.com/spf13/viper v1.21.0
go: downloading github.com/fsnotify/fsnotify v1.9.0
go: downloading github.com/go-viper/mapstructure/v2 v2.4.0
go: downloading github.com/sagikazarmark/locafero v0.11.0
go: downloading github.com/spf13/afero v1.15.0
go: downloading github.com/spf13/cast v1.10.0
go: downloading github.com/spf13/pflag v1.0.10
go: downloading github.com/sourcegraph/conc v0.3.1-0.20240121214520-5f936abd7ae8
go: downloading github.com/subosito/gotenv v1.6.0
go: downloading github.com/pelletier/go-toml/v2 v2.2.4
go: downloading go.yaml.in/yaml/v3 v3.0.4

… pkg/ws/client.go

# Description

In `pkg/ws/client.go` at line 122 within `Client.Run`, session termination errors returned by `c.connectAndServe(ctx)` are logged at `Error` severity with `c.logger.Error("websocket session ended", "err", err)`. During transient disconnections or routine connection renegotiation with the relay, the client automatically recovers via exponential backoff reconnects. However, logging at `Error` severity increments `container_log_messages_total{level="error"}` and triggers benign `ForagerServiceLogErrors` Prometheus alerts.

This change demotes the log severity from `Error` to `Warn` (`c.logger.Warn("websocket session ended", "err", err)`), retaining full visibility into session terminations without incrementing error log metrics, while unrecoverable errors remain logged at error level.

## Type of change

- [x] Bug fix (non-breaking change which fixes an issue)
- [ ] New feature (non-breaking change which adds functionality)
- [ ] Enhancement (non-breaking change which improves existing functionality)
- [ ] Refactor (non-breaking change which improves code structure)
- [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)
- [ ] Documentation
- [ ] CI/CD

## Original Error/Logs

<details>
<summary>Click to expand the original error that triggered this fix</summary>

```
Change the log severity of expected or transient session endings from c.logger.Error to c.logger.Warn or c.logger.Info in pkg/ws/client.go line 122. During routine connection renegotiation or relay disconnects, the client successfully reconnects via exponential backoff; logging at Error level produces benign alert firings under ForagerServiceLogErrors. Regression check: verify that normal connection termination does not increment container_log_messages_total{level="error"} while unrecoverable errors remain logged at error level.
```

</details>

# How Has This Been Tested?

- [x] Unit tests
- [ ] Manual testing

# Checklist

- [ ] CLA signed (the CLA bot will prompt on your first PR)
- [x] `make validate` passes (fmt + lint + test)
- [ ] Docs updated if the wire shape, config surface, or proxy module behavior changed

---

🤖 **This PR was automatically generated by [NudgeBee](https://nudgebee.com) AI coding agent**

*Powered by AI-driven code analysis and automated fix generation*

🔍 **[View Original Investigation](https://dev.nudgebee.pollux.in/investigate?id=cd386c67-495f-4518-8b50-7fa677152bdc)**

*Click the link above to see the full investigation and analysis that led to this fix*

View Detailed **[Nubi Conversation](https://dev.nudgebee.pollux.in/ask-nudgebee?accountId=f13ddc45-07f3-42b4-bd0e-19606c852d18&session_id=event-4e4fee2c9ba759b6)**

---

### ✅ Verification

Build verification passed for the affected modules.

<details><summary>Commands run</summary>

```
PASSED (cd . && go build ./...) exit=0
go: downloading github.com/spf13/viper v1.21.0
go: downloading github.com/fsnotify/fsnotify v1.9.0
go: downloading github.com/go-viper/mapstructure/v2 v2.4.0
go: downloading github.com/sagikazarmark/locafero v0.11.0
go: downloading github.com/spf13/afero v1.15.0
go: downloading github.com/spf13/cast v1.10.0
go: downloading github.com/spf13/pflag v1.0.10
go: downloading github.com/sourcegraph/conc v0.3.1-0.20240121214520-5f936abd7ae8
go: downloading github.com/subosito/gotenv v1.6.0
go: downloading github.com/pelletier/go-toml/v2 v2.2.4
go: downloading go.yaml.in/yaml/v3 v3.0.4
```

</details>
@nudgebee-dev
nudgebee-dev Bot force-pushed the fix/fix-lower-websocket-session-ended-log-se-1792979467 branch from 9b312fc to 0d9d31e Compare October 26, 2026 01:58
@nudgebee-dev

nudgebee-dev Bot commented Oct 26, 2026

Copy link
Copy Markdown
Author

Nudgebee Automated Followup

Updated go.mod to bump the Go language directive from 1.26.9 to 1.26.10. This resolves the CI govulncheck failure (crypto/x509 vulnerability in Go 1.26.9 stdlib). Folded the change into the bot PR commit and force-pushed with lease to origin/fix/fix-lower-websocket-session-ended-log-se-1792979467.

Commit: 0d9d31e16c28

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant