diff options
| author | Shulhan <ms@kilabit.info> | 2023-03-12 23:30:22 +0700 |
|---|---|---|
| committer | Shulhan <ms@kilabit.info> | 2023-03-17 21:53:38 +0700 |
| commit | bb4cfe53505d1e7a89ab61524425fe6fdd2ed673 (patch) | |
| tree | b518f1a194d4bb795efad1cc2b96c6fbb2f7702e /lib/telemetry/stdout_forwarder.go | |
| parent | e96899d74668cc0d711396482dfefefec10ab55d (diff) | |
| download | pakakeh.go-bb4cfe53505d1e7a89ab61524425fe6fdd2ed673.tar.xz | |
lib/telemetry: package for collecting and forwarding metrics
Package telemetry is a library for collecting various Metric, for example
from standard runtime/metrics, and send or write it to one or more
Forwarder.
Each Forwarder has capability to format the Metric before sending or
writing it using Formatter.
Diffstat (limited to 'lib/telemetry/stdout_forwarder.go')
| -rw-r--r-- | lib/telemetry/stdout_forwarder.go | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/lib/telemetry/stdout_forwarder.go b/lib/telemetry/stdout_forwarder.go new file mode 100644 index 00000000..4e84898b --- /dev/null +++ b/lib/telemetry/stdout_forwarder.go @@ -0,0 +1,44 @@ +// Copyright 2023, Shulhan <ms@kilabit.info>. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package telemetry + +import ( + "fmt" + "os" +) + +// StdoutForwarder write the metrics to os.Stdout. +// This type is used as example and to provide wrapper for os.Stdout, since +// user should not call Close on os.Stdout. +type StdoutForwarder struct { + formatter Formatter +} + +// NewStdoutForwarder create new StdoutForwarder using f as Formatter. +func NewStdoutForwarder(f Formatter) *StdoutForwarder { + return &StdoutForwarder{ + formatter: f, + } +} + +// Close on StdoutForwarder sync the Stdout. +func (stdout *StdoutForwarder) Close() error { + os.Stdout.Sync() + return nil +} + +// Formatter return the Formatter used by this StdoutForwarder. +func (stdout *StdoutForwarder) Formatter() Formatter { + return stdout.formatter +} + +// Write the raw metrics to stdout. +func (stdout *StdoutForwarder) Write(wire []byte) (n int, err error) { + n, err = os.Stdout.Write(wire) + if err != nil { + return n, fmt.Errorf(`StdoutForwarder.Forward: %w`, err) + } + return n, nil +} |
