Commit Graph

17 Commits

Author SHA1 Message Date
Matthieu MOREL 824c9f7a43
[chore]: enable gofumpt linter in internal, otelcol, pdata, pipeline and processor (#11855)
#### Description

[gofumpt](https://golangci-lint.run/usage/linters/#gofumpt) is a
stricter format than gofmt, while being backwards compatible.

---------

Signed-off-by: Matthieu MOREL <matthieu.morel35@gmail.com>
Co-authored-by: Alex Boten <223565+codeboten@users.noreply.github.com>
2024-12-12 19:21:54 +00:00
Bogdan Drutu 65dcab1568
[chore] Remove unused parameter for sharedcomponent (#11439)
Signed-off-by: Bogdan Drutu <bogdandrutu@gmail.com>
2024-10-14 15:36:22 -07:00
Matthieu MOREL 37f783308e
[chore]: enable require-error rule from testifylint (#11199)
#### Description

Testifylint is a linter that provides best practices with the use of
testify.

This PR enables
[require-error](https://github.com/Antonboom/testifylint?tab=readme-ov-file#require-error)
rule from [testifylint](https://github.com/Antonboom/testifylint)

Signed-off-by: Matthieu MOREL <matthieu.morel35@gmail.com>
2024-09-18 15:02:22 -07:00
Matthieu MOREL 6925a306fa
[chore]: enable len and empty rules from testifylint (#11021)
#### Description

Testifylint is a linter that provides best practices with the use of
testify.

This PR enables
[len](https://github.com/Antonboom/testifylint?tab=readme-ov-file#len)
and
[empty](https://github.com/Antonboom/testifylint?tab=readme-ov-file#empty)
rules from [testifylint](https://github.com/Antonboom/testifylint)

It also adds testifylint as tool to use with a make command

Signed-off-by: Matthieu MOREL <matthieu.morel35@gmail.com>
2024-09-09 09:57:58 -07:00
Tyler Helmuth cb24d0c7d7
[component] Remove ReportStatus from component.TelemetrySettings (#10777)
#### Description

This PR removes `ReportStatus` from `component.TelemetrySettings` and
instead expects components to check if their `component.Host` implements
a new `componentstatus.Reporter` interface.

<!-- Issue number if applicable -->
#### Link to tracking issue
Related to
https://github.com/open-telemetry/opentelemetry-collector/pull/10725
Related to
https://github.com/open-telemetry/opentelemetry-collector/pull/10413

<!--Describe what testing was performed and which tests were added.-->
#### Testing
unit tests and a sharedinstance e2e test.

The contrib tests will fail because this is a breaking change. If we
merge this I and @mwear can commit to updating contrib before the next
release.

---------

Co-authored-by: Pablo Baeyens <pablo.baeyens@datadoghq.com>
2024-08-16 09:27:01 +02:00
renovate[bot] 9c199ef4fa
Update module github.com/golangci/golangci-lint to v1.56.1 (#9559)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
|
[github.com/golangci/golangci-lint](https://togithub.com/golangci/golangci-lint)
| `v1.55.2` -> `v1.56.1` |
[![age](https://developer.mend.io/api/mc/badges/age/go/github.com%2fgolangci%2fgolangci-lint/v1.56.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/go/github.com%2fgolangci%2fgolangci-lint/v1.56.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/go/github.com%2fgolangci%2fgolangci-lint/v1.55.2/v1.56.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/github.com%2fgolangci%2fgolangci-lint/v1.55.2/v1.56.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>golangci/golangci-lint
(github.com/golangci/golangci-lint)</summary>

###
[`v1.56.1`](https://togithub.com/golangci/golangci-lint/blob/HEAD/CHANGELOG.md#v1561)

[Compare
Source](https://togithub.com/golangci/golangci-lint/compare/v1.56.0...v1.56.1)

1.  updated linters
    -   `errcheck`: from 1.6.3 to 1.7.0
    -   `govet`: disable `loopclosure` with go1.22
    -   `revive`: from 1.3.6 to 1.3.7
    -   `testifylint`: from 1.1.0 to 1.1.1

###
[`v1.56.0`](https://togithub.com/golangci/golangci-lint/blob/HEAD/CHANGELOG.md#v1560)

[Compare
Source](https://togithub.com/golangci/golangci-lint/compare/v1.55.2...v1.56.0)

1.  new linters
- feat: add `spancheck` linter https://github.com/jjti/go-spancheck
2.  updated linters
    -   `depguard`: from 2.1.0 to 2.2.0
    -   `exhaustive`: from 0.11.0 to 0.12.0
    -   `exhaustruct`: from 3.1.0 to 3.2.0
    -   `gci`: from 0.11.2 to 0.12.1
    -   `ginkgolinter`: from 0.14.1 to 0.15.2
    -   `go-check-sumtype`: from 0.1.3 to 0.1.4
    -   `go-critic`: from 0.9.0 to 0.11.0
    -   `go-errorlint`: from 1.4.5 to 1.4.8
    -   `go-spancheck`: from 0.4.2 to 0.5.2
    -   `goconst`: from 1.6.0 to 1.7.0
    -   `godot`: from 1.4.15 to 1.4.16
    -   `gofumpt`: from 0.5.0 to 0.6.0
    -   `inamedparam`: from 0.1.2 to 0.1.3
    -   `ineffassign`: from 0.0.0-20230610083614-0e73809eb601 to 0.1.0
    -   `ireturn`: from 0.2.2 to 0.3.0
    -   `misspell`: add mode option
    -   `musttag`: from v0.7.2 to v0.8.0
    -   `paralleltest`: from 1.0.8 to 1.0.9
    -   `perfsprint`: from 0.2.0 to 0.6.0
    -   `protogetter`: from 0.2.3 to 0.3.4
    -   `revive`: from 1.3.4 to 1.3.6
    -   `sloglint`: add static-msg option
    -   `sloglint`: from 0.1.2 to 0.4.0
    -   `testifylint`: from 0.2.3 to 1.1.0
- `unparam`: from
[`2022122`](https://togithub.com/golangci/golangci-lint/commit/20221223090309)-7455f1af531d
to
[`2024010`](https://togithub.com/golangci/golangci-lint/commit/20240104100049)-c549a3470d14
    -   `whitespace`: update after moving to the `analysis` package
    -   `wsl`: from 3.4.0 to 4.2.0
    -   `zerologlint`: from 0.1.3 to 0.1.5
3.  misc.
    -   🎉 go1.22 support
    -   Implement stats per linter with a flag
- fix: make versioning inside Docker image consistent with binaries
    -   fix: parse Go RC version
4.  Documentation
    -   Add missing fields to .golangci.reference.yml
    -   Fix noctx description
    -   Improve .golangci.reference.yml defaults
    -   Improve typecheck FAQ
- Note that `exhaustruct` struct regular expressions are expected to
match the entire `package/name/structname`
    -   Adjust wrapcheck ignoreSigs to new defaults

**Important**

`testifylint` has [breaking
changes](https://togithub.com/Antonboom/testifylint/releases/tag/v1.0.0)
about enabling/disabling checks:

- If you were using the option `enable` with a filtered list of checks,
you should either add `disable-all: true` (1) or use `disable` field
(2).

    ```yml
    ```

### Example (1)

      testifylint:
        disable-all: true
        enable:
          - bool-compare
          - compares
          - empty
          - error-is-as
          - error-nil
          - expected-actual
          - go-require
          - float-compare
          - len
          - nil-compare
          - require-error

### - suite-dont-use-pkg

          - suite-extra-assert-call
          - suite-thelper
    ```

    ```yml

### Example (2)

      testifylint:
        disable:
          - suite-dont-use-pkg
    ```

</details>

---

### Configuration

📅 **Schedule**: Branch creation - "on tuesday" (UTC), Automerge - At any
time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://developer.mend.io/github/open-telemetry/opentelemetry-collector).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy4xNzMuMCIsInVwZGF0ZWRJblZlciI6IjM3LjE3My4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiJ9-->

---------

Signed-off-by: Alex Boten <aboten@lightstep.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: opentelemetrybot <107717825+opentelemetrybot@users.noreply.github.com>
Co-authored-by: Alex Boten <aboten@lightstep.com>
2024-02-13 13:03:51 -08:00
Pablo Baeyens 26c157e3bf
[component] Add MustNewType constructor for component.Type (#9414)
**Description:** 

- Adds `component.MustNewType` to create a type. This function panics if
the type has invalid characters. Add similar functions
`component.MustNewID` and `component.MustNewIDWithName`.
- Adds `component.Type.String` to recover the string
- Use `component.MustNewType`, `component.MustNewID`,
`component.MustNewIDWithName` and `component.Type.String` everywhere in
this codebase. To do this I changed `component.Type` into an opaque
struct and checked for compile-time errors.

Some notes:

1. All components currently on core and contrib follow this rule. This
is still breaking for other components.
2. A future PR will change this into a struct, to actually validate this
(right now you can just do `component.Type("anything")` to bypass
validation). I want to do this in two steps to avoid breaking contrib
tests: we first introduce this function, and after that we change into a
struct.

**Link to tracking Issue:** Updates #9208
2024-02-02 17:33:03 +01:00
Antoine Toulme c5a2c78d61
Move error out of `ReportComponentStatus` function signature, use `ReportStatus` instead (#9175)
Fixes #9148
2024-01-09 09:36:41 -08:00
Antoine Toulme 1c845787ba
[chore] polish sharedcomponent API (#9157)
Attempt to simplify as much as possible the API exposed by the
sharedcomponent package ahead of exposing it as part of a published
module.

Relates to #9156 

Changes:
* Remove the map field in the struct, make the struct a map
* Remove the `NewSharedComponents` function, just initialize the map
instead.
* Rename GetOrAdd to LoadOrStore
2023-12-21 13:18:11 -08:00
Matthew Wear 53615832e6
Component Status Reporting (#8169)
This PR introduces component status reporting. There have been several
attempts to introduce this functionality previously, with the most
recent being: #6560.

This PR was orignally based off of #6560, but has evolved based on the
feedback received and some additional enhancements to improve the ease
of use of the `ReportComponentStatus` API.

In earlier discussions (see
https://github.com/open-telemetry/opentelemetry-collector/pull/8169#issuecomment-1668367246)
we decided to model status as a finite state machine with the following
statuses: `Starting`, `OK`, `RecoverableError`, `PermanentError`,
`FatalError`. `Stopping`, and `Stopped`. A benefit of this design is
that `StatusWatcher`s will be notified on changes in status rather than
on potentially repetitive reports of the same status.

With the additional statuses and modeling them using a finite state
machine, there are more statuses to report. Rather than having each
component be responsible for reporting all of the statuses, I automated
status reporting where possible. A component's status will automatically
be set to `Starting` at startup. If the components `Start` returns an
error, the status will automatically be set to `PermanentError`. A
component is expected to report `StatusOK` when it has successfully
started (if it has successfully started) and from there can report
changes in status as it runs. It will likely be a common scenario for
components to transition between `StatusOK` and `StatusRecoverableError`
during their lifetime. In extenuating circumstances they can transition
into terminal states of `PermanentError` and `FatalError` (where a fatal
error initiates collector shutdown). Additionally, during component
Shutdown statuses are automatically reported where possible. A
component's status is set to `Stopping` when Shutdown is initially
called, if Shutdown returns an error, the status will be set to
`PermanentError` if it does not return an error, the status is set to
`Stopped`.

In #6560 ReportComponentStatus was implemented on the `Host` interface.
I found that few components use the Host interface, and none of them
save a handle to it (to be used outside of the `start` method). I found
that many components keep a handle to the `TelemetrySettings` that they
are initialized with, and this seemed like a more natural, convenient
place for the `ReportComponentStatus` API. I'm ultimately flexible on
where this method resides, but feel that `TelemetrySettings` a more user
friendly place for it.

Regardless of where the `ReportComponentStatus` method resides (Host or
TelemetrySettings), there is a difference in the method signature for
the API based on whether it is used from the service or from a
component. As the service is not bound to a specific component, it needs
to take the `instanceID` of a component as a parameter, whereas the
component version of the method already knows the `instanceID`. In #6560
this led to having both `component.Host` and `servicehost.Host` versions
of the Host interface to be used at the component or service levels. In
this version, we have the same for TelemetrySettings. There is a
`component.TelemetrySettings` and a `servicetelemetry.Settings` with the
only difference being the method signature of `ReportComponentStatus`.

Lastly, this PR sets up the machinery for report component status, and
allows extensions to be `StatusWatcher`s, but it does not introduce any
`StatusWatcher`s. We expect the OpAMP extension to be a `StatusWatcher`
and use data from this system as part of its AgentHealth message (the
message is currently being extended to accommodate more component level
details). We also expect there to be a non-OpAMP `StatusWatcher`
implementation, likely via the HealthCheck extension (or something
similiar).

**Link to tracking Issue:** #7682

cc: @tigrannajaryan @djaglowski @evan-bradley

---------

Co-authored-by: Tigran Najaryan <tnajaryan@splunk.com>
Co-authored-by: Pablo Baeyens <pbaeyens31+github@gmail.com>
Co-authored-by: Daniel Jaglowski <jaglows3@gmail.com>
Co-authored-by: Evan Bradley <11745660+evan-bradley@users.noreply.github.com>
Co-authored-by: Tigran Najaryan <4194920+tigrannajaryan@users.noreply.github.com>
Co-authored-by: Alex Boten <aboten@lightstep.com>
2023-10-06 11:35:38 -07:00
Alex Boten 80d704deb4
[chore] use license shortform (#7694)
* [chore] use license shortform

To remain consistent w/ contrib repo, see https://github.com/open-telemetry/opentelemetry-collector-contrib/pull/22052

Signed-off-by: Alex Boten <aboten@lightstep.com>

* make goporto

Signed-off-by: Alex Boten <aboten@lightstep.com>

---------

Signed-off-by: Alex Boten <aboten@lightstep.com>
2023-05-18 13:11:17 -07:00
Bogdan Drutu a4d8fc1bfa
Use generics for sharedcomponents, removes casting increases type safetiness (#6772)
Signed-off-by: Bogdan Drutu <bogdandrutu@gmail.com>

Signed-off-by: Bogdan Drutu <bogdandrutu@gmail.com>
2023-01-24 11:55:38 -08:00
Bogdan Drutu def55617f5
Fix otlpreceiver transport metrics attribute (#6784)
Signed-off-by: Bogdan Drutu <bogdandrutu@gmail.com>

Signed-off-by: Bogdan Drutu <bogdandrutu@gmail.com>
2022-12-13 14:10:50 -08:00
Bogdan d6ed8246b6 Deprecate all types and funcs in config package
The main reason is to remove the circular dependency between the config (including sub-packages) and component. Here is the current state:
* component depends on config
* config/sub-package[grpc, http, etc.] depends on config & component

Because of this "circular" dependency, we cannot split for example "config" into its own module, only if all the other config sub-packages are also split.

Signed-off-by: Bogdan <bogdandrutu@gmail.com>
2022-11-05 10:04:49 -07:00
Bogdan Drutu 6f4057bddd
Deprecate last funcs/structs in `componenthelper` (#5069)
Fixes https://github.com/open-telemetry/opentelemetry-collector/issues/4681

These funcs/structs are not used, and in case we need them in multiple places we can add them to `component` directly.

Signed-off-by: Bogdan Drutu <bogdandrutu@gmail.com>
2022-03-25 01:58:06 -07:00
James 85b8094e26
Rename `config.NewID` to `config.NewComponentID` and `config.NewIDFromString` to `config.NewComponentIDFromString` (#4137)
This PR is to rename `config.NewID` to `config.NewComponentID` and `config.NewIDFromString` to `config.NewComponentIDFromString` for naming consistency.  

**Link to tracking Issue:** 
Fixes #4105
2021-09-29 10:28:07 -04:00
Bogdan Drutu a19d6ce268
Add an internal sharedcomponent to be shared by receivers with shared resources (#3198)
* Add an internal sharedcomponent to be shared by receivers with shared resources

Use the new code in OTLP receiver.

Signed-off-by: Bogdan Drutu <bogdandrutu@gmail.com>

* Add comments to sharedcomponent package

Signed-off-by: Bogdan Drutu <bogdandrutu@gmail.com>
2021-05-17 16:45:06 -07:00