Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 33 additions & 0 deletions internal/collector/certificatereceiver/config.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
// Copyright (c) F5, Inc.
//
// This source code is licensed under the Apache License, Version 2.0 license found in the
// LICENSE file in the root directory of this source tree.
package certificatereceiver

import (
"time"

"github.com/nginx/agent/v3/internal/collector/certificatereceiver/internal/metadata"
"go.opentelemetry.io/collector/component"
"go.opentelemetry.io/collector/scraper/scraperhelper"
)

const defaultCollectInterval = 15 * time.Second

type Config struct {
InstanceID string `mapstructure:"instance_id"`
CertFilePaths []string `mapstructure:"cert_file_paths"`
MetricsBuilderConfig metadata.MetricsBuilderConfig `mapstructure:",squash"`
scraperhelper.ControllerConfig `mapstructure:",squash"`
}

//nolint:ireturn // must return default controller interface
func createDefaultConfig() component.Config {
cfg := scraperhelper.NewDefaultControllerConfig()
cfg.CollectionInterval = defaultCollectInterval

return &Config{
ControllerConfig: cfg,
MetricsBuilderConfig: metadata.DefaultMetricsBuilderConfig(),
}
}
8 changes: 8 additions & 0 deletions internal/collector/certificatereceiver/doc.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
// Copyright (c) F5, Inc.
//
// This source code is licensed under the Apache License, Version 2.0 license found in the
// LICENSE file in the root directory of this source tree.

//go:generate mdatagen metadata.yaml

package certificatereceiver
36 changes: 36 additions & 0 deletions internal/collector/certificatereceiver/documentation.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
[comment]: <> (Code generated by mdatagen. DO NOT EDIT.)

# certificate

## Default Metrics

The following metrics are emitted by default. Each of them can be disabled by applying the following configuration:

```yaml
metrics:
<metric_name>:
enabled: false
```

### nginx.certificate.expiry

The Unix timestamp (in seconds) at which an SSL/TLS certificate expires

| Unit | Metric Type | Value Type | Stability |
| ---- | ----------- | ---------- | --------- |
| s | Gauge | Int | Development |

#### Attributes

| Name | Description | Values | Requirement Level |
| ---- | ----------- | ------ | -------- |
| file_path | The full file path of the certificate. | Any Str | Recommended |
| public_key_algorithm | The public key algorithm. | Any Str | Recommended |
| serial_number | The serial number of the certificate. | Any Str | Recommended |
| subject.common_name | The Common Name of the certificate. | Any Str | Recommended |

## Resource Attributes

| Name | Description | Values | Enabled |
| ---- | ----------- | ------ | ------- |
| instance.id | The nginx instance id. | Any Str | true |
59 changes: 59 additions & 0 deletions internal/collector/certificatereceiver/factory.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
// Copyright (c) F5, Inc.
//
// This source code is licensed under the Apache License, Version 2.0 license found in the
// LICENSE file in the root directory of this source tree.
package certificatereceiver

import (
"context"
"errors"

"github.com/nginx/agent/v3/internal/collector/certificatereceiver/internal/metadata"
"go.opentelemetry.io/collector/component"
"go.opentelemetry.io/collector/consumer"
"go.opentelemetry.io/collector/receiver"
"go.opentelemetry.io/collector/scraper"
"go.opentelemetry.io/collector/scraper/scraperhelper"
)

//nolint:ireturn // must return metrics receiver interface
func NewFactory() receiver.Factory {
return receiver.NewFactory(
metadata.Type,
createDefaultConfig,
receiver.WithMetrics(createMetricsReceiver, metadata.MetricsStability))
}

//nolint:ireturn // must return metrics receiver interface
func createMetricsReceiver(
ctx context.Context,
params receiver.Settings,
rConf component.Config,
metricsConsumer consumer.Metrics,
) (receiver.Metrics, error) {
logger := params.Logger.Sugar()

logger.Info("Creating new certificate metrics receiver")

cfg, ok := rConf.(*Config)
if !ok {
return nil, errors.New("failed to cast to Config in certificate metrics receiver")
}

cs := newCertificateScraper(params, cfg)
csMetrics, csMetricsError := scraper.NewMetrics(
cs.Scrape,
scraper.WithStart(cs.Start),
scraper.WithShutdown(cs.Shutdown),
)
if csMetricsError != nil {
return nil, csMetricsError
}

return scraperhelper.NewMetricsController(
&cfg.ControllerConfig,
params,
metricsConsumer,
scraperhelper.AddMetricsScraper(metadata.Type, csMetrics),
)
}

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading
Loading