Net::HAProxy - control HAProxy through a socket


version 0.001


    use Try::Tiny;
    use Net::HAProxy;

    my $haproxy = Net::HAProxy->new(
        socket => '/var/run/haproxy-services.sock',
        timeout => 1 # default

    # dump statistics
    print Dumper $haproxy->stats;

    # specify which statistics to list
    print $haproxy->stats({ iid => 2, sid => 1, type => -1});

    # info about haproxy status
    print Dumper $haproxy->info;

    try {
        $haproxy->enable_server('pxname', 'svname');
    } catch {
        print "Couldn't enable server: $_\n";

    try {
        $haproxy->disable_server('pxname', 'svname');
    } catch {
        print "Couldn't disable server: $_\n";

    try {
        $haproxy->set_weight('pxname', 'svname', 50);
    } catch {
        print "Couldn't set weighting: $_\n";



Arguments: ({ iid => -1, sid => -1, type => -1}) sid => service id, -1 for all services (default). iid => unique proxy id, -1 for all proxies (default). type => 1 for frontends, 2 for backends, 4 for servers, -1 for all (default)

    these values can be ORed, for example:
          1 + 2     = 3   -> frontend + backend.
          1 + 2 + 4 = 7   -> frontend + backend + server.

Returns: array of hashes, keys described below

field descriptions

This field documentation was borrowed from the HAProxy 1.4 docs

If your using an earlier version of HAProxy this should still work, please check the docs for the right field descriptions

 act: server is active (server), number of active servers (backend)
 bck: server is backup (server), number of backup servers (backend)
 bin: bytes in
 bout: bytes out
 check_code: layer5-7 code, if available
 check_duration: time in ms took to finish last health check
 check_status: status of last health check, one of:
        UNK     -> unknown
        INI     -> initializing
        SOCKERR -> socket error
        L4OK    -> check passed on layer 4, no upper layers testing enabled
        L4TMOUT -> layer 1-4 timeout
        L4CON   -> layer 1-4 connection problem, for example
                   "Connection refused" (tcp rst) or "No route to host" (icmp)
        L6OK    -> check passed on layer 6
        L6TOUT  -> layer 6 (SSL) timeout
        L6RSP   -> layer 6 invalid response - protocol error
        L7OK    -> check passed on layer 7
        L7OKC   -> check conditionally passed on layer 7, for example 404 with
        L7TOUT  -> layer 7 (HTTP/SMTP) timeout
        L7RSP   -> layer 7 invalid response - protocol error
        L7STS   -> layer 7 response error, for example HTTP 5xx
 chkdown: number of UP->DOWN transitions
 chkfail: number of failed checks
 cli_abrt: number of data transfers aborted by the client
 downtime: total downtime (in seconds)
 dreq: denied requests
 dresp: denied responses
 econ: connection errors
 ereq: request errors
 eresp: response errors (among which srv_abrt)
 hanafail: failed health checks details
 hrsp_1xx: http responses with 1xx code
 hrsp_2xx: http responses with 2xx code
 hrsp_3xx: http responses with 3xx code
 hrsp_4xx: http responses with 4xx code
 hrsp_5xx: http responses with 5xx code
 hrsp_other: http responses with other codes (protocol error)
 iid: unique proxy id
 lastchg: last status change (in seconds)
 lbtot: total number of times a server was selected
 pid: process id (0 for first instance, 1 for second, ...)
 pxname: proxy name
 qcur: current queued requests
 qlimit: queue limit
 qmax: max queued requests
 rate_lim: limit on new sessions per second
 rate_max: max number of new sessions per second
 rate: number of sessions per second over last elapsed second
 req_rate: HTTP requests per second over last elapsed second
 req_rate_max: max number of HTTP requests per second observed
 req_tot: total number of HTTP requests received
 scur: current sessions
 sid: service id (unique inside a proxy)
 slim: sessions limit
 smax: max sessions
 srv_abrt: number of data transfers aborted by the server (inc. in eresp)
 status: status (UP/DOWN/NOLB/MAINT/MAINT(via)...)
 stot: total sessions
 svname: service name (FRONTEND for frontend, BACKEND for backend, any name for server)
 throttle: warm up status
 tracked: id of proxy/server if tracking is enabled
 type (0=frontend, 1=backend, 2=server, 3=socket)
 weight: server weight (server), total weight (backend)
 wredis: redispatches (warning)
 wretr: retries (warning)


returns a hash


Arguments: proxy name (pxname), service name (svname), integer (0-100)

Dies on invalid proxy / service name / weighting


Arguments: proxy name (pxname), service name (svname)

Dies on invalid proxy / service name.


Arguments: proxy name (pxname), service name (svname)

Dies on invalid proxy / service name.


list errors, currently returns raw response


show current sessions currently returns raw response


robin edwards <>


This software is copyright (c) 2011 by robin edwards.

This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.