haproxy

package module
v0.0.0-...-88e856e Latest Latest
Warning

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

Go to latest
Published: Jul 11, 2023 License: MIT Imports: 9 Imported by: 0

README

GoDoc codebeat badge

go-haproxy

Go library for interacting with HAProxys stats socket.

Usage

Initialize a client object. Supported address schemas are tcp:// and unix:///

client := &haproxy.HAProxyClient{
  Addr: "tcp://localhost:9999",
}

Fetch results for a built in command(currently supports show stats and show info):

stats, err := client.Stats()
for _, i := range stats {
	fmt.Printf("%s: %s\n", i.SvName, i.Status)
}

Or retrieve the result body from an arbitrary command string:

result, err := h.RunCommand("show info")
fmt.Println(result.String())

Documentation

Overview

Package haproxy provides a minimal client for communicating with, and issuing commands to, HAproxy over a network or file socket.

Index

Examples

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type HAProxyClient

type HAProxyClient struct {
	Addr      string
	Timeout   int // Timeout for connect   [ default = 30 sec  ]
	TimeoutOp int // Timeout for operation [ default = Timeout ]
	// contains filtered or unexported fields
}

HAProxyClient is the main structure of the library.

func (*HAProxyClient) Info

func (h *HAProxyClient) Info() (*Info, error)

Equivalent to HAProxy "show info" command.

Example
client := &haproxy.HAProxyClient{
	Addr: HAPROXY_SOCKET_ADDR,
}
info, err := client.Info()
if err != nil {
	fmt.Println(err)
	return
}
fmt.Printf("%s version %s\n", info.Name, info.Version)
Output:

HAProxy version 2.8.1

func (*HAProxyClient) RunCommand

func (h *HAProxyClient) RunCommand(cmd string) (*bytes.Buffer, error)

RunCommand is the entrypoint to the client. Sends an arbitray command string to HAProxy.

Example
client := &haproxy.HAProxyClient{
	Addr: HAPROXY_SOCKET_ADDR,
}
result, err := client.RunCommand("show info")
if err != nil {
	fmt.Println(err)
	return
}
fmt.Println(result.String())
Output:

func (*HAProxyClient) Stats

func (h *HAProxyClient) Stats() (stats []*Stat, err error)

Equivalent to HAProxy "show stat" command.

Example
client := &haproxy.HAProxyClient{
	Addr:      HAPROXY_SOCKET_ADDR,
	Timeout:   30,
	TimeoutOp: 5,
}
stats, err := client.Stats()
if err != nil {
	fmt.Println(err)
	return
}
for _, s := range stats {
	fmt.Printf("%s: %s\n", s.SvName, s.Status)
}
Output:

static: DOWN
app1: UP
app2: UP
...

type Info

type Info struct {
	Name                       string `kv:"Name"`
	Version                    string `kv:"Version"`
	ReleaseDate                string `kv:"Release_date"`
	Nbthread                   uint64 `kv:"Nbthread"`
	Nbproc                     uint64 `kv:"Nbproc"`
	ProcessNum                 uint64 `kv:"Process_num"`
	Pid                        uint64 `kv:"Pid"`
	Uptime                     string `kv:"Uptime"`
	UptimeSec                  uint64 `kv:"Uptime_sec"`
	MemMaxMB                   uint64 `kv:"Memmax_MB"`
	PoolAllocMB                uint64 `kv:"PoolAlloc_MB"`
	PoolUsedMB                 uint64 `kv:"PoolUsed_MB"`
	PoolFailed                 uint64 `kv:"PoolFailed"`
	UlimitN                    uint64 `kv:"Ulimit-n"`
	Maxsock                    uint64 `kv:"Maxsock"`
	Maxconn                    uint64 `kv:"Maxconn"`
	HardMaxconn                uint64 `kv:"Hard_maxconn"`
	CurrConns                  uint64 `kv:"CurrConns"`
	CumConns                   uint64 `kv:"CumConns"`
	CumReq                     uint64 `kv:"CumReq"`
	MaxSslConns                uint64 `kv:"MaxSslConns"`
	CurrSslConns               uint64 `kv:"CurrSslConns"`
	CumSslConns                uint64 `kv:"CumSslConns"`
	Maxpipes                   uint64 `kv:"Maxpipes"`
	PipesUsed                  uint64 `kv:"PipesUsed"`
	PipesFree                  uint64 `kv:"PipesFree"`
	ConnRate                   uint64 `kv:"ConnRate"`
	ConnRateLimit              uint64 `kv:"ConnRateLimit"`
	MaxConnRate                uint64 `kv:"MaxConnRate"`
	SessRate                   uint64 `kv:"SessRate"`
	SessRateLimit              uint64 `kv:"SessRateLimit"`
	MaxSessRate                uint64 `kv:"MaxSessRate"`
	SslRate                    uint64 `kv:"SslRate"`
	SslRateLimit               uint64 `kv:"SslRateLimit"`
	MaxSslRate                 uint64 `kv:"MaxSslRate"`
	SslFrontendKeyRate         uint64 `kv:"SslFrontendKeyRate"`
	SslFrontendMaxKeyRate      uint64 `kv:"SslFrontendMaxKeyRate"`
	SslFrontendSessionReusePct uint64 `kv:"SslFrontendSessionReuse_pct"`
	SslBackendKeyRate          uint64 `kv:"SslBackendKeyRate"`
	SslBackendMaxKeyRate       uint64 `kv:"SslBackendMaxKeyRate"`
	SslCacheLookups            uint64 `kv:"SslCacheLookups"`
	SslCacheMisses             uint64 `kv:"SslCacheMisses"`
	CompressBpsIn              uint64 `kv:"CompressBpsIn"`
	CompressBpsOut             uint64 `kv:"CompressBpsOut"`
	CompressBpsRateLim         uint64 `kv:"CompressBpsRateLim"`
	//ZlibMemUsage               uint64 `kv:"ZlibMemUsage"`
	//MaxZlibMemUsage            uint64 `kv:"MaxZlibMemUsage"`
	Tasks               uint64 `kv:"Tasks"`
	RunQueue            uint64 `kv:"Run_queue"`
	IdlePct             uint64 `kv:"Idle_pct"`
	Node                string `kv:"node"`
	Stopping            uint64 `kv:"Stopping"`
	Jobs                uint64 `kv:"Jobs"`
	UnstoppableJobs     uint64 `kv:"Unstoppable Jobs"`
	Listeners           uint64 `kv:"Listeners"`
	ActivePeers         uint64 `kv:"ActivePeers"`
	ConnectedPeers      uint64 `kv:"ConnectedPeers"`
	DroppedLogs         uint64 `kv:"DroppedLogs"`
	BusyPolling         uint64 `kv:"BusyPolling"`
	FailedResolutions   uint64 `kv:"FailedResolutions"`
	TotalBytesOut       uint64 `kv:"TotalBytesOut"`
	BytesOutRate        uint64 `kv:"BytesOutRate"`
	DebugCommandsIssued uint64 `kv:"DebugCommandsIssued"`
}

Response from HAProxy "show info" command.

type Stat

type Stat struct {
	PxName        string `csv:"# pxname"`
	SvName        string `csv:"svname"`
	Qcur          uint64 `csv:"qcur"`
	Qmax          uint64 `csv:"qmax"`
	Scur          uint64 `csv:"scur"`
	Smax          uint64 `csv:"smax"`
	Slim          uint64 `csv:"slim"`
	Stot          uint64 `csv:"stot"`
	Bin           uint64 `csv:"bin"`
	Bout          uint64 `csv:"bout"`
	Dreq          uint64 `csv:"dreq"`
	Dresp         uint64 `csv:"dresp"`
	Ereq          uint64 `csv:"ereq"`
	Econ          uint64 `csv:"econ"`
	Eresp         uint64 `csv:"eresp"`
	Wretr         uint64 `csv:"wretr"`
	Wredis        uint64 `csv:"wredis"`
	Status        string `csv:"status"`
	Weight        uint64 `csv:"weight"`
	Act           uint64 `csv:"act"`
	Bck           uint64 `csv:"bck"`
	ChkFail       uint64 `csv:"chkfail"`
	ChkDown       uint64 `csv:"chkdown"`
	Lastchg       uint64 `csv:"lastchg"`
	Downtime      uint64 `csv:"downtime"`
	Qlimit        uint64 `csv:"qlimit"`
	Pid           uint64 `csv:"pid"`
	Iid           uint64 `csv:"iid"`
	Sid           uint64 `csv:"sid"`
	Throttle      uint64 `csv:"throttle"`
	Lbtot         uint64 `csv:"lbtot"`
	Tracked       uint64 `csv:"tracked"`
	Type          uint64 `csv:"type"`
	Rate          uint64 `csv:"rate"`
	RateLim       uint64 `csv:"rate_lim"`
	RateMax       uint64 `csv:"rate_max"`
	CheckStatus   string `csv:"check_status"`
	CheckCode     uint64 `csv:"check_code"`
	CheckDuration uint64 `csv:"check_duration"`
	Hrsp1xx       uint64 `csv:"hrsp_1xx"`
	Hrsp2xx       uint64 `csv:"hrsp_2xx"`
	Hrsp3xx       uint64 `csv:"hrsp_3xx"`
	Hrsp4xx       uint64 `csv:"hrsp_4xx"`
	Hrsp5xx       uint64 `csv:"hrsp_5xx"`
	HrspOther     uint64 `csv:"hrsp_other"`
	Hanafail      uint64 `csv:"hanafail"`
	ReqRate       uint64 `csv:"req_rate"`
	ReqRateMax    uint64 `csv:"req_rate_max"`
	ReqTot        uint64 `csv:"req_tot"`
	CliAbrt       uint64 `csv:"cli_abrt"`
	SrvAbrt       uint64 `csv:"srv_abrt"`
	CompIn        uint64 `csv:"comp_in"`
	CompOut       uint64 `csv:"comp_out"`
	CompByp       uint64 `csv:"comp_byp"`
	CompRsp       uint64 `csv:"comp_rsp"`
	LastSess      int64  `csv:"lastsess"`
	LastChk       string `csv:"last_chk"`
	LastAgt       uint64 `csv:"last_agt"`
	Qtime         uint64 `csv:"qtime"`
	Ctime         uint64 `csv:"ctime"`
	Rtime         uint64 `csv:"rtime"`
	Ttime         uint64 `csv:"ttime"`
	AgentStatus   uint64 `csv:"agent_status"`
	AgentCode     uint64 `csv:"agent_code"`
	AgentDuration uint64 `csv:"agent_duration"`
	CheckDesc     string `csv:"check_desc"`
	AgentDesc     string `csv:"agent_desc"`
	CheckRise     uint64 `csv:"check_rise"`
	CheckFall     uint64 `csv:"check_fall"`
	CheckHealth   uint64 `csv:"check_health"`
	AgentRise     uint64 `csv:"agent_rise"`
	AgentFall     uint64 `csv:"agent_fall"`
	AgentHealth   uint64 `csv:"agent_health"`
	Addr          string `csv:"addr"`
	Cookie        uint64 `csv:"cookie"`
	Mode          string `csv:"mode"`
	Algo          string `csv:"algo"`
	ConnRate      uint64 `csv:"conn_rate"`
	ConnRateMax   uint64 `csv:"conn_rate_max"`
	ConnTot       uint64 `csv:"conn_tot"`
	Intercepted   uint64 `csv:"intercepted"`
	Dcon          uint64 `csv:"dcon"`
	Dses          uint64 `csv:"dses"`
	Wrew          uint64 `csv:"wrew"`
	Connect       uint64 `csv:"connect"`
	Reuse         uint64 `csv:"reuse"`
	CacheLookups  uint64 `csv:"cache_lookups"`
	CacheHits     uint64 `csv:"cache_hits"`
	SrvIcur       uint64 `csv:"srv_icur"`
	SrcIlim       uint64 `csv:"src_ilim"`
	QtimeMax      uint64 `csv:"qtime_max"`
	CtimeMax      uint64 `csv:"ctime_max"`
	RtimeMax      uint64 `csv:"rtime_max"`
	TtimeMax      uint64 `csv:"ttime_max"`
	Eint          uint64 `csv:"eint"`
	IdleConnCur   uint64 `csv:"idle_conn_cur"`
	SafeConnCur   uint64 `csv:"safe_conn_cur"`
	UsedConnCur   uint64 `csv:"used_conn_cur"`
	NeedConnEst   uint64 `csv:"need_conn_est"`
}

Response from HAProxy "show stat" command.

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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