httpclix

package
v1.56.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 12, 2025 License: MIT Imports: 17 Imported by: 0

README

Package httpclix

Пакет httpclix предоставляет расширенный HTTP-клиент с балансировкой нагрузки, метриками, трейсингом и логированием. Интегрируется с системами мониторинга и трассировки, поддерживает гибкую настройку middleware.

Types

ClientBalancer

Структура для клиента со встроенным балансировщиком HTTP-запросов между несколькими хостами. Управляет подключениями, обновлением списка хостов и автоматическим добавлением схемы (HTTP/HTTPS). Расширяет httpcli.Client и использует пакет lb для балансировки.

Methods:

Содержит все методы клиента-предшественника.

NewClientBalancer(initialHosts []string, opts ...Option) *ClientBalancer

Конструктор HTTP-клиента с балансировщиком. Принимает начальный список хостов и опции для настройки:

  • WithClientOptions(opts ...httpcli.Option) Option – добавить опции для родительского клиента из пакета httpcli.
  • WithHttpsSchema() Option – автоматически добавлять к хостам https схему, вместо http.
  • WithClient(cli *http.Client) Option – создание http-клиента на основе базового клиента из стандартной библиотеки net/http.
(c *ClientBalancer) Upgrade(hosts []string)

Обновляет список активных хостов. Автоматически добавляет схему, если она не указана.

ClientTracer

Структура ClientTracer предоставляет инструменты для трейсинга HTTP-запросов, включая измерение времени выполнения ключевых этапов. Используется совместно с httptrace.ClientTrace для интеграции в HTTP-клиент.

Methods:

NewClientTracer(clientStorage *metrics.ClientStorage, endpoint string) *ClientTracer

Создает трейсер для интеграции с httptrace.

(cli *ClientTracer) ClientTrace() *httptrace.ClientTrace

Создает и возвращает объект httptrace.ClientTrace с хуками для отслеживания этапов запроса:

  • DNSStart – Засекает время начала DNS-запроса.
  • DNSDone – Рассчитывает длительность DNS-запроса и сохраняет в метрики через clientStorage.ObserveDnsLookup.
  • ConnectStart – Засекает начало установки TCP-соединения.
  • ConnectDone – Сохраняет длительность установки соединения через clientStorage.ObserveConnEstablishment.
  • WroteHeaders – Начало записи тела запроса (после отправки заголовков).
  • WroteRequest – Сохраняет длительность записи тела запроса через clientStorage.ObserveRequestWriting.
  • GotFirstResponseByte – Засекает получение первого байта ответа.
(cli *ClientTracer) ResponseReceived()

Вызывается при полном получении ответа. Рассчитывает длительность чтения ответа и сохраняет в метрики через clientStorage.ObserveResponseReading.

Functions

Default(opts ...httpcli.Option) *httpcli.Client

Создает клиент с предустановленными middleware:

  • Добавление RequestId.
  • Сбор метрик через http_metrics.
  • Трейсинг запросов.
DefaultWithBalancer(initialHosts []string, opts ...Option) *ClientBalancer

Создает клиент-балансировщик с предустановленными middleware:

  • Добавление RequestId.
  • Сбор метрик через http_metrics.
  • Трейсинг запросов.
RequestId() httpcli.Middleware

Добавляющая заголовок X-Request-Id к запросам middleware. Если requestId отсутствует в контексте — генерирует новый.

Metrics(storage *http_metrics.ClientStorage) httpcli.Middleware

Собирающая метрики middleware:

  • Время выполнения запроса.
  • Статус-коды ответов.
  • Ошибки
  • Время DNS, установки соединения, записи тела и чтения ответа.
Log(logger log.Logger) httpcli.Middleware

Middleware для логирования запросов и ответов, включая заголовки и тело (опционально, можно настроить с помощью контекста).

LogConfigToContext(ctx context.Context, logRequestBody bool, logResponseBody bool, opts ...LogOption) context.Context

Данная функция добавляет в контекст настройки логирования для HTTP-запросов. Эти настройки определяют, какие данные ( тело, заголовки, дампы) будут записаны в лог при обработке запроса и ответа.

Доступные опции:

  • LogDump(dumpRequest bool, dumpResponse bool) LogOption – включение/выключение дампа запроса и ответа.
  • LogHeaders(requestHeaders bool, responseHeaders bool) LogOption – включение/выключение логирования заголовков запроса и ответа.

Usage

Default
package main

import (
	"context"
	"log"

	"github.com/txix-open/isp-kit/http/httpclix"
)

type user struct {
	Id   string
	Name string
}

func main() {
	/* client with metrics, traces & logging */
	cli := httpclix.Default()
	userList := make([]user, 0)

	err := cli.Get("https://api.example.com/users").
		JsonResponseBody(&userList).
		StatusCodeToError().
		DoWithoutResponse(context.Background())
	if err != nil {
		log.Fatal(err)
	}
}

Client with balancer
package main

import (
	"context"

	"github.com/txix-open/isp-kit/http/httpclix"
)

type user struct {
	Id   string
	Name string
}

func main() {
	hosts := []string{"host1:8080", "host2:8080", "http://host2:8080"}
	cli := httpclix.NewClientBalancer(hosts, httpclix.WithHttpsSchema())

	/* Requests are distributed between hosts */
	for i := range 5 {
		err := cli.Get("/data").
			JsonResponseBody(&userList).
			StatusCodeToError().
			DoWithoutResponse(context.Background())
		/* some business logic */
	}

	/* update host list */
	cli.Upgrade([]string{"new-host:8080"})
}

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func Default

func Default(opts ...httpcli.Option) *httpcli.Client

func DefaultMiddlewares added in v1.45.0

func DefaultMiddlewares() []httpcli.Middleware

func Log

func Log(logger log.Logger) httpcli.Middleware

func LogConfigToContext

func LogConfigToContext(
	ctx context.Context,
	logRequestBody bool,
	logResponseBody bool,
	opts ...LogOption,
) context.Context

func Metrics

func Metrics(storage *http_metrics.ClientStorage) httpcli.Middleware

func RequestId

func RequestId() httpcli.Middleware

Types

type ClientBalancer added in v1.45.0

type ClientBalancer struct {
	*httpcli.Client
	// contains filtered or unexported fields
}

func DefaultWithBalancer added in v1.45.0

func DefaultWithBalancer(initialHosts []string, opts ...Option) *ClientBalancer

func NewClientBalancer added in v1.45.0

func NewClientBalancer(initialHosts []string, opts ...Option) *ClientBalancer

func (*ClientBalancer) Delete added in v1.45.0

func (c *ClientBalancer) Delete(method string) *httpcli.RequestBuilder

func (*ClientBalancer) Execute added in v1.45.0

func (c *ClientBalancer) Execute(ctx context.Context, builder *httpcli.RequestBuilder) (*httpcli.Response, error)

func (*ClientBalancer) Get added in v1.45.0

func (c *ClientBalancer) Get(method string) *httpcli.RequestBuilder

func (*ClientBalancer) Patch added in v1.45.0

func (c *ClientBalancer) Patch(method string) *httpcli.RequestBuilder

func (*ClientBalancer) Post added in v1.45.0

func (c *ClientBalancer) Post(method string) *httpcli.RequestBuilder

func (*ClientBalancer) Put added in v1.45.0

func (c *ClientBalancer) Put(method string) *httpcli.RequestBuilder

func (*ClientBalancer) Upgrade added in v1.45.0

func (c *ClientBalancer) Upgrade(hosts []string)

type ClientTracer added in v1.38.0

type ClientTracer struct {
	// contains filtered or unexported fields
}

func NewClientTracer added in v1.38.0

func NewClientTracer(clientStorage *metrics.ClientStorage, endpoint string) *ClientTracer

func (*ClientTracer) ClientTrace added in v1.38.0

func (cli *ClientTracer) ClientTrace() *httptrace.ClientTrace

func (*ClientTracer) ResponseReceived added in v1.38.0

func (cli *ClientTracer) ResponseReceived()

type LogOption added in v1.36.0

type LogOption func(*logConfig)

func LogDump added in v1.36.0

func LogDump(dumpRequest bool, dumpResponse bool) LogOption

func LogHeaders added in v1.36.0

func LogHeaders(requestHeaders bool, responseHeaders bool) LogOption

type Option added in v1.45.0

type Option func(c *clientBalancerOptions)

func WithClient added in v1.45.0

func WithClient(cli *http.Client) Option

func WithClientOptions added in v1.45.0

func WithClientOptions(opts ...httpcli.Option) Option

WithClientOptions appends passed opts to clientOpts

func WithHttpsSchema added in v1.45.0

func WithHttpsSchema() Option

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL