HAProxy: show servers state

Dump the state of the servers found in the running configuration. A backend
name or identifier may be provided to limit the output to this backend only.

The dump has the following format:
 - first line contains the format version (1 in this specification);
 - second line contains the column headers, prefixed by a sharp ('#');
 - third line and next ones contain data;
 - each line starting by a sharp ('#') is considered as a comment.

Since multiple versions of the output may co-exist, below is the list of
fields and their order per file format version :
 1:
   be_id:                       Backend unique id.
   be_name:                     Backend label.
   srv_id:                      Server unique id (in the backend).
   srv_name:                    Server label.
   srv_addr:                    Server IP address.
   srv_op_state:                Server operational state (UP/DOWN/...).
                                  0 = SRV_ST_STOPPED
                                    The server is down.
                                  1 = SRV_ST_STARTING
                                    The server is warming up (up but
                                    throttled).
                                  2 = SRV_ST_RUNNING
                                    The server is fully up.
                                  3 = SRV_ST_STOPPING
                                    The server is up but soft-stopping
                                    (eg: 404).
   srv_admin_state:             Server administrative state (MAINT/DRAIN/...).
                                The state is actually a mask of values :
                                  0x01 = SRV_ADMF_FMAINT
                                    The server was explicitly forced into
                                    maintenance.
                                  0x02 = SRV_ADMF_IMAINT
                                    The server has inherited the maintenance
                                    status from a tracked server.
                                  0x04 = SRV_ADMF_CMAINT
                                    The server is in maintenance because of
                                    the configuration.
                                  0x08 = SRV_ADMF_FDRAIN
                                    The server was explicitly forced into
                                    drain state.
                                  0x10 = SRV_ADMF_IDRAIN
                                    The server has inherited the drain status
                                    from a tracked server.
                                  0x20 = SRV_ADMF_RMAINT
                                    The server is in maintenance because of an
                                    IP address resolution failure.
                                  0x40 = SRV_ADMF_HMAINT
                                    The server FQDN was set from stats socket.

   srv_uweight:                 User visible server's weight.
   srv_iweight:                 Server's initial weight.
   srv_time_since_last_change:  Time since last operational change.
   srv_check_status:            Last health check status.
   srv_check_result:            Last check result (FAILED/PASSED/...).
                                  0 = CHK_RES_UNKNOWN
                                    Initialized to this by default.
                                  1 = CHK_RES_NEUTRAL
                                    Valid check but no status information.
                                  2 = CHK_RES_FAILED
                                    Check failed.
                                  3 = CHK_RES_PASSED
                                    Check succeeded and server is fully up
                                    again.
                                  4 = CHK_RES_CONDPASS
                                    Check reports the server doesn't want new
                                    sessions.
   srv_check_health:            Checks rise / fall current counter.
   srv_check_state:             State of the check (ENABLED/PAUSED/...).
                                The state is actually a mask of values :
                                  0x01 = CHK_ST_INPROGRESS
                                    A check is currently running.
                                  0x02 = CHK_ST_CONFIGURED
                                    This check is configured and may be
                                    enabled.
                                  0x04 = CHK_ST_ENABLED
                                    This check is currently administratively
                                    enabled.
                                  0x08 = CHK_ST_PAUSED
                                    Checks are paused because of maintenance
                                    (health only).
   srv_agent_state:             State of the agent check (ENABLED/PAUSED/...).
                                This state uses the same mask values as
                                "srv_check_state", adding this specific one :
                                  0x10 = CHK_ST_AGENT
                                    Check is an agent check (otherwise it's a
                                    health check).
   bk_f_forced_id:              Flag to know if the backend ID is forced by
                                configuration.
   srv_f_forced_id:             Flag to know if the server's ID is forced by
                                configuration.
   srv_fqdn:                    Server FQDN.
   srv_port:                    Server port.
   srvrecord:                   DNS SRV record associated to this SRV.

Expect script suppress output

You might write your program like this:

#!/bin/sh
output=$(expect -c '
# suppress the display of the process interaction
log_user 0

spawn telnet '"$HOST $PORT"'
sleep 1
send "\r"
send "\r"
# after a prompt, send the interesting command
expect Prompt> { send "dir\r"  }
# eat the \n the remote end sent after we sent our \r
expect "\n"
# wait for the next prompt, saving its position in expect_out(buffer)
expect -indices Prompt>

# output what came after the command and before the next prompt
# (i.e. the output of the "dir" command)
puts [string range $expect_out(buffer) \
                   0 [expr $expect_out(0,start) - 1]]
')
echo "======="
echo "$output"
echo "======="

How to grep the output of cURL?

curl writes the output to stderr, so redirect that and also suppress the progress:

curl -v --silent https://google.com/ 2>&1 | grep expire

The reason why curl writes the information to stderr is so you can do:
curl <url> | someprgram without that information clobbering the input of someprogram

It is possible to use --stderr - as parameter, to redirect the output from stderr (default) to stdout. With this option you also should use --silent to suppress the progress bar.

$ curl -v --silent https://google.com/ --stderr - | grep expire
*    expire date: 2015-09-01 00:00:00 GMT