Documentation
¶
Overview ¶
Package invoker contains RPC invoker helpers and middlewares.
Index ¶
Examples ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Debug ¶
type Debug struct {
// contains filtered or unexported fields
}
Debug is pretty-print debugging invoker middleware.
type Metrics ¶
type Metrics struct {
// contains filtered or unexported fields
}
Metrics is a metrics exporting middleware for tg.Invoker.
Example ¶
package main
import (
"context"
"fmt"
"os"
"os/signal"
"time"
"github.com/uber-go/tally"
"github.com/uber-go/tally/prometheus"
"go.uber.org/multierr"
"golang.org/x/xerrors"
"github.com/gotd/td/telegram"
"github.com/gotd/td/telegram/message"
"github.com/gotd/td/tg"
"github.com/gotd/contrib/invoker"
)
func metricsInvoker(ctx context.Context) (rerr error) {
prom := prometheus.NewReporter(prometheus.Options{})
client, err := telegram.ClientFromEnvironment(telegram.Options{})
if err != nil {
return xerrors.Errorf("create client: %w", err)
}
scope, closer := tally.NewRootScope(tally.ScopeOptions{
Prefix: "my_gotd_service",
Tags: map[string]string{},
CachedReporter: prom,
Separator: prometheus.DefaultSeparator,
}, 1*time.Second)
defer func() {
multierr.AppendInto(&rerr, closer.Close())
}()
r := invoker.NewMetrics(client, scope)
raw := tg.NewClient(r)
s := message.NewSender(raw)
return client.Run(ctx, func(ctx context.Context) error {
_, err := s.Self().Text(ctx, "hello")
return err
})
}
func main() {
ctx, cancel := signal.NotifyContext(context.Background(), os.Interrupt)
defer cancel()
if err := metricsInvoker(ctx); err != nil {
_, _ = fmt.Fprintf(os.Stderr, "%+v\n", err)
os.Exit(1)
}
}
func NewMetrics ¶
NewMetrics creates new Metrics.
Click to show internal directories.
Click to hide internal directories.