| 123456789101112131415161718192021222324252627282930313233343536373839404142434445 |
- package exporter
- import (
- "time"
- "github.com/google/uuid"
- "github.com/opencost/opencost/core/pkg/heartbeat"
- )
- // HeartbeatSource is an `export.ExportSource` implementation that provides the basic data for a `Heartbeat` payload, and
- // leverages a `HeartbeatMetadataProvider` to inject custom metadata.
- type HeartbeatSource struct {
- startTime time.Time
- applicationName string
- version string
- metadataProvider HeartbeatMetadataProvider
- }
- // NewHeartbeatSource creates a new `HeartbeatSource` instance. The `provider` parameter is used to inject custom metadata,
- // but can be set to `nil` if no metadata is needed.
- func NewHeartbeatSource(applicationName string, version string, provider HeartbeatMetadataProvider) *HeartbeatSource {
- return &HeartbeatSource{
- startTime: time.Now().UTC(),
- applicationName: applicationName,
- version: version,
- metadataProvider: provider,
- }
- }
- // Make creates a new `Heartbeat` instance with the provided current time.
- func (h *HeartbeatSource) Make(t time.Time) *heartbeat.Heartbeat {
- id := uuid.Must(uuid.NewV7()).String()
- uptime := uint64(t.Sub(h.startTime).Minutes())
- var metadata map[string]any
- if h.metadataProvider != nil {
- metadata = h.metadataProvider.GetMetadata()
- }
- return heartbeat.NewHeartbeat(id, t, uptime, h.applicationName, h.version, metadata)
- }
- func (h *HeartbeatSource) Name() string {
- return heartbeat.HeartbeatEventName + "-source"
- }
|