mirror of
				https://git.haproxy.org/git/haproxy.git/
				synced 2025-11-04 02:21:03 +01:00 
			
		
		
		
	CLEANUP: removed obsolete examples an move a few to better places
The following example files awere removed as irrelevant by this time : auth.cfg check.conf ssl.cfg haproxy.spec The following scripts were removed as having been unused for more than a decade : debug2ansi debug2html debugfind check init.haproxy stats_haproxy.sh seemless_reload.txt was moved to doc/ where it's more suitable. haproxy.vim was moved to contrib/syntax-highlight/ scripts/create-release was updated not to try to update haproxy.spec anymore.
This commit is contained in:
		
							parent
							
								
									965e84e2df
								
							
						
					
					
						commit
						a8ee4b199f
					
				@ -1,134 +0,0 @@
 | 
			
		||||
global
 | 
			
		||||
#	chroot /var/empty/
 | 
			
		||||
#	uid 451
 | 
			
		||||
#	gid 451
 | 
			
		||||
	log 192.168.131.214:8514 local4 debug
 | 
			
		||||
	maxconn 8192
 | 
			
		||||
 | 
			
		||||
defaults
 | 
			
		||||
	timeout connect		3500
 | 
			
		||||
	timeout queue		11000
 | 
			
		||||
	timeout tarpit		12000
 | 
			
		||||
	timeout client		30000
 | 
			
		||||
	timeout http-request	40000
 | 
			
		||||
	timeout http-keep-alive	5000
 | 
			
		||||
	timeout server		40000
 | 
			
		||||
	timeout check		7000
 | 
			
		||||
 | 
			
		||||
	option	contstats
 | 
			
		||||
	option	log-health-checks
 | 
			
		||||
 | 
			
		||||
################################
 | 
			
		||||
userlist customer1
 | 
			
		||||
	group adm users tiger,xdb
 | 
			
		||||
	group dev users scott,tiger
 | 
			
		||||
	group uat users boss,xdb,tiger
 | 
			
		||||
	user scott insecure-password cat
 | 
			
		||||
	user tiger insecure-password dog
 | 
			
		||||
	user xdb insecure-password hello
 | 
			
		||||
	user boss password $6$k6y3o.eP$JlKBx9za966ud67qe45NSQYf8Nw.XFuk8QVRevoLh1XPCQDCBPjcU2JtGBSS0MOQW2PFxHSwRv6J.C0/D7cV91
 | 
			
		||||
 | 
			
		||||
userlist customer1alt
 | 
			
		||||
	group adm
 | 
			
		||||
	group dev
 | 
			
		||||
	group uat
 | 
			
		||||
	user scott insecure-password cat groups dev
 | 
			
		||||
	user tiger insecure-password dog groups adm,dev,uat
 | 
			
		||||
	user xdb insecure-password hello groups adm,uat
 | 
			
		||||
	user boss password $6$k6y3o.eP$JlKBx9za966ud67qe45NSQYf8Nw.XFuk8QVRevoLh1XPCQDCBPjcU2JtGBSS0MOQW2PFxHSwRv6J.C0/D7cV91 groups uat
 | 
			
		||||
 | 
			
		||||
# Both customer1 and customer1alt userlist are functionally identical
 | 
			
		||||
 | 
			
		||||
frontend c1
 | 
			
		||||
	bind 127.101.128.1:8080
 | 
			
		||||
	log global
 | 
			
		||||
	mode http
 | 
			
		||||
 | 
			
		||||
	acl host_stats	hdr_beg(host) -i stats.local
 | 
			
		||||
	acl host_dev	hdr_beg(host) -i dev.local
 | 
			
		||||
	acl host_uat	hdr_beg(host) -i uat.local
 | 
			
		||||
 | 
			
		||||
	acl auth_uat	http_auth_group(customer1) uat
 | 
			
		||||
 | 
			
		||||
	# auth for host_uat checked in frontend, use realm "uat"
 | 
			
		||||
	http-request	auth realm uat if host_uat !auth_uat
 | 
			
		||||
 | 
			
		||||
	use_backend	c1stats if host_stats
 | 
			
		||||
	use_backend	c1dev	if host_dev
 | 
			
		||||
	use_backend	c1uat	if host_uat
 | 
			
		||||
 | 
			
		||||
backend c1uat
 | 
			
		||||
	mode http
 | 
			
		||||
	log global
 | 
			
		||||
 | 
			
		||||
	server s6 192.168.152.206:80
 | 
			
		||||
	server s7 192.168.152.207:80
 | 
			
		||||
 | 
			
		||||
backend c1dev
 | 
			
		||||
	mode http
 | 
			
		||||
	log global
 | 
			
		||||
 | 
			
		||||
	# require users from customer1 assigned to group dev
 | 
			
		||||
	acl auth_ok	http_auth_group(customer1) dev
 | 
			
		||||
 | 
			
		||||
	# auth checked in backend, use default realm (c1dev)
 | 
			
		||||
	http-request auth if !auth_ok
 | 
			
		||||
 | 
			
		||||
	server s6 192.168.152.206:80
 | 
			
		||||
	server s7 192.168.152.207:80
 | 
			
		||||
 | 
			
		||||
backend c1stats
 | 
			
		||||
	mode http
 | 
			
		||||
	log global
 | 
			
		||||
 | 
			
		||||
	# stats auth checked in backend, use default realm (Stats)
 | 
			
		||||
	acl nagios	src 192.168.126.31
 | 
			
		||||
	acl guests	src 192.168.162.0/24
 | 
			
		||||
	acl auth_ok	http_auth_group(customer1) adm
 | 
			
		||||
 | 
			
		||||
	stats enable
 | 
			
		||||
	stats refresh 60
 | 
			
		||||
	stats uri /
 | 
			
		||||
	stats scope c1
 | 
			
		||||
	stats scope c1stats
 | 
			
		||||
 | 
			
		||||
	# unconditionally deny guests, without checking auth or asking for a username/password
 | 
			
		||||
	stats http-request deny if guests
 | 
			
		||||
 | 
			
		||||
	# allow nagios without password, allow authenticated users
 | 
			
		||||
	stats http-request allow if nagios
 | 
			
		||||
	stats http-request allow if auth_ok
 | 
			
		||||
 | 
			
		||||
	# ask for a username/password
 | 
			
		||||
	stats http-request auth realm Stats
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
################################
 | 
			
		||||
userlist customer2
 | 
			
		||||
	user peter insecure-password peter
 | 
			
		||||
	user monica insecure-password monica
 | 
			
		||||
 | 
			
		||||
frontend c2
 | 
			
		||||
	bind 127.201.128.1:8080
 | 
			
		||||
	log global
 | 
			
		||||
	mode http
 | 
			
		||||
 | 
			
		||||
	acl auth_ok http_auth(customer2)
 | 
			
		||||
	acl host_b1 hdr(host) -i b1.local
 | 
			
		||||
 | 
			
		||||
	http-request auth unless auth_ok
 | 
			
		||||
 | 
			
		||||
	use_backend	c2b1 if host_b1
 | 
			
		||||
	default_backend	c2b0
 | 
			
		||||
 | 
			
		||||
backend c2b1
 | 
			
		||||
	mode http
 | 
			
		||||
	log global
 | 
			
		||||
 | 
			
		||||
	server s1 192.168.152.201:80
 | 
			
		||||
 | 
			
		||||
backend c2b0
 | 
			
		||||
	mode http
 | 
			
		||||
	log global
 | 
			
		||||
 | 
			
		||||
	server s1 192.168.152.201:80
 | 
			
		||||
							
								
								
									
										540
									
								
								examples/check
									
									
									
									
									
								
							
							
						
						
									
										540
									
								
								examples/check
									
									
									
									
									
								
							@ -1,540 +0,0 @@
 | 
			
		||||
#!/usr/bin/perl
 | 
			
		||||
###################################################################################################################
 | 
			
		||||
# $Id:: check 20 2007-02-23 14:26:44Z fabrice                     $
 | 
			
		||||
# $Revision:: 20                                                  $
 | 
			
		||||
###################################################################################################################
 | 
			
		||||
# Authors : Fabrice Dulaunoy <fabrice@dulaunoy.com>
 | 
			
		||||
#
 | 
			
		||||
# Copyright (C) 2006-2007 Fabrice Dulaunoy <fabrice@dulaunoy.com>
 | 
			
		||||
#
 | 
			
		||||
# This program is free software; you can redistribute it and/or modify it
 | 
			
		||||
# under the terms of the GNU General Public License as published by the
 | 
			
		||||
# Free Software Foundation; either version 2 of the License, or (at your
 | 
			
		||||
# option) any later version.  See <http://www.fsf.org/copyleft/gpl.txt>.
 | 
			
		||||
#
 | 
			
		||||
# This program is distributed in the hope that it will be useful, but
 | 
			
		||||
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
 | 
			
		||||
# or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 | 
			
		||||
# for more details.
 | 
			
		||||
###################################################################################################################
 | 
			
		||||
#
 | 
			
		||||
###################################################################################################################
 | 
			
		||||
 | 
			
		||||
use strict;
 | 
			
		||||
 | 
			
		||||
package MyPackage;
 | 
			
		||||
use Config::General;
 | 
			
		||||
use Getopt::Std;
 | 
			
		||||
use LWP::UserAgent;
 | 
			
		||||
use URI;
 | 
			
		||||
use File::Basename;
 | 
			
		||||
 | 
			
		||||
# CVS VSERSION
 | 
			
		||||
#my $VERSION = do { my @rev = ( q$Revision: 20 $ =~ /\d+/g ); sprintf "%d." . "%d" x $#rev, @rev };
 | 
			
		||||
# SVN VERSION
 | 
			
		||||
my $VERSION = sprintf "1.%02d", '$Revision: 20 $ ' =~ /(\d+)/;
 | 
			
		||||
 | 
			
		||||
my %option;
 | 
			
		||||
 | 
			
		||||
getopts( "vHhc:", \%option );
 | 
			
		||||
 | 
			
		||||
if ( $option{ h } )
 | 
			
		||||
{
 | 
			
		||||
    print "Usage: $0 [options ...]\n\n";
 | 
			
		||||
    print "Where options include:\n";
 | 
			
		||||
    print "\t -h \t\t\tthis help (what else ?)\n";
 | 
			
		||||
    print "\t -H \t\t\tshow a sample config file\n";
 | 
			
		||||
    print "\t -v \t\t\tprint version and exit\n";
 | 
			
		||||
    print "\t -c file \t\tuse config file (default /etc/check.conf)\n";
 | 
			
		||||
    print "\n\t This is a small program parsing the config file \n";
 | 
			
		||||
    print "\t and checking one or more condition on one or more  servers\n";
 | 
			
		||||
    print "\t these condition could be \n";
 | 
			
		||||
    print "\t\t HTTP return code list (with optinal Host Header and optional Basic Authentication) \n";
 | 
			
		||||
    print "\t\t a regex over a HTTP GET  (with optinal Host Header and optional Basic Authentication)\n";
 | 
			
		||||
    print "\t\t a regex over a FTP GET ( with optional Basic Authentication)\n";
 | 
			
		||||
    print "\t\t a TCP open port\n";
 | 
			
		||||
    print "\t the result state is an AND over all tests  \n";
 | 
			
		||||
    print "\t this result could be \n";
 | 
			
		||||
    print "\t\t a simple HTTP return state  (\"200 OK\" or \"503 Service Unavailable\"  \n";
 | 
			
		||||
    print "\t\t a HTML page with a status OK or NOK for each test\n";
 | 
			
		||||
    print "\t\t a HTML page with a staus OK or NOK for each test in a row of a TABLE\n";
 | 
			
		||||
    print "\n\t The natural complement of this tools is the poll_check tool\n";
 | 
			
		||||
    print "\t The result code of this tools is designed to fit the HAPROXY requirement (test over a port not related to the WEB server)\n";
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
if ( $option{ H } )
 | 
			
		||||
{
 | 
			
		||||
    print "\t A sample config file could be:\n";
 | 
			
		||||
    print <<'EOF';
 | 
			
		||||
    
 | 
			
		||||
			###########################################################
 | 
			
		||||
			# listening port ( default 9898 )
 | 
			
		||||
			port 9899
 | 
			
		||||
			
 | 
			
		||||
			# on which IP to bind (default 127.0.0.1 ) * = all IP
 | 
			
		||||
			host 10.2.1.1
 | 
			
		||||
			
 | 
			
		||||
			# which client addr is allow ( default 127.0.0.0/8 )
 | 
			
		||||
			#cidr_allow = 0.0.0.0/0 
 | 
			
		||||
			
 | 
			
		||||
			# verbosity from 0 to 4 (default 0 = no log )
 | 
			
		||||
			log_level = 1
 | 
			
		||||
			
 | 
			
		||||
			# daemonize (default 0 = no )
 | 
			
		||||
			daemon = 1
 | 
			
		||||
			
 | 
			
		||||
			# content put a HTML content after header
 | 
			
		||||
			# (default 0 = no content 1 = html 2 = table )
 | 
			
		||||
			content = 2
 | 
			
		||||
			
 | 
			
		||||
			# reparse the config file at each request ( default 0 = no )
 | 
			
		||||
			# only SIGHUP reread the config file)
 | 
			
		||||
			reparse = 1
 | 
			
		||||
			
 | 
			
		||||
			# pid_file  (default /var/run/check.pid )
 | 
			
		||||
			# $$$ = basename of config file
 | 
			
		||||
			# $$ = PID
 | 
			
		||||
			pid_file=/var/run/CHECK_$$$.pid
 | 
			
		||||
			
 | 
			
		||||
			# log_file  (default /var/log/check.log )
 | 
			
		||||
			# $$$ = basename of config file
 | 
			
		||||
			# $$ = PID
 | 
			
		||||
			log_file=/var/log/CHECK_$$$.log
 | 
			
		||||
			
 | 
			
		||||
			# number of servers to keep running (default = 5)
 | 
			
		||||
			min_servers = 2
 | 
			
		||||
			
 | 
			
		||||
			# number of servers to have waiting for requests (default = 2)
 | 
			
		||||
			min_spare_servers = 1
 | 
			
		||||
			
 | 
			
		||||
			# maximum number of servers to have waiting for requests (default = 10)
 | 
			
		||||
			max_spare_servers =1
 | 
			
		||||
			
 | 
			
		||||
			# number of servers (default = 50)
 | 
			
		||||
			max_servers = 2
 | 
			
		||||
			
 | 
			
		||||
   			
 | 
			
		||||
			###########################################################
 | 
			
		||||
			# a server to check
 | 
			
		||||
			# type could be get , regex or tcp
 | 
			
		||||
			#
 | 
			
		||||
			# get = do a http or ftp get and check the result code with
 | 
			
		||||
			# the list, coma separated, provided ( default = 200,201 )
 | 
			
		||||
			# hostheader is optional and send to the server if provided
 | 
			
		||||
			#
 | 
			
		||||
			# regex = do a http or ftp get and check the content result 
 | 
			
		||||
			# with regex provided
 | 
			
		||||
			# hostheader is optional and send to the server if provided
 | 
			
		||||
			#
 | 
			
		||||
			# tcp = test if the tcp port provided is open
 | 
			
		||||
			#
 | 
			
		||||
			###########################################################
 | 
			
		||||
			
 | 
			
		||||
			<realserver>
 | 
			
		||||
				url=http://127.0.0.1:80/apache2-default/index.html
 | 
			
		||||
				type = get
 | 
			
		||||
				code=200,201
 | 
			
		||||
				hostheader = www.test.com
 | 
			
		||||
			</realserver>
 | 
			
		||||
			
 | 
			
		||||
			
 | 
			
		||||
			<realserver>
 | 
			
		||||
				url=http://127.0.0.1:82/apache2-default/index.html
 | 
			
		||||
				type = get
 | 
			
		||||
				code=200,201
 | 
			
		||||
				hostheader = www.myhost.com
 | 
			
		||||
			</realserver>
 | 
			
		||||
			
 | 
			
		||||
			<realserver>
 | 
			
		||||
				url=	 http://10.2.2.1
 | 
			
		||||
				type = regex
 | 
			
		||||
				regex= /qdAbm/
 | 
			
		||||
			</realserver>
 | 
			
		||||
			
 | 
			
		||||
			<realserver>
 | 
			
		||||
				type = tcp
 | 
			
		||||
				url = 10.2.2.1
 | 
			
		||||
				port =80
 | 
			
		||||
			</realserver>
 | 
			
		||||
			
 | 
			
		||||
			<realserver>
 | 
			
		||||
				type = get
 | 
			
		||||
				url = ftp://USER:PASSWORD@10.2.3.1
 | 
			
		||||
				code=200,201
 | 
			
		||||
			</realserver>
 | 
			
		||||
			###########################################################
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
EOF
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
if ( $option{ h } || $option{ H } )
 | 
			
		||||
{
 | 
			
		||||
    exit;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
if ( $option{ v } ) { print "$VERSION\n"; exit; }
 | 
			
		||||
 | 
			
		||||
use vars qw(@ISA);
 | 
			
		||||
use Net::Server::PreFork;
 | 
			
		||||
@ISA = qw(Net::Server::PreFork);
 | 
			
		||||
 | 
			
		||||
my $port;
 | 
			
		||||
my $host;
 | 
			
		||||
my $reparse;
 | 
			
		||||
my $cidr_allow;
 | 
			
		||||
my $log_level;
 | 
			
		||||
my $log_file;
 | 
			
		||||
my $pid_file;
 | 
			
		||||
my $daemon;
 | 
			
		||||
my $min_servers;
 | 
			
		||||
my $min_spare_servers;
 | 
			
		||||
my $max_spare_servers;
 | 
			
		||||
my $max_servers;
 | 
			
		||||
my $html_content;
 | 
			
		||||
 | 
			
		||||
my $conf_file = $option{ c } || "/etc/check.conf";
 | 
			
		||||
my $pwd = $ENV{ PWD };
 | 
			
		||||
$conf_file =~ s/^\./$pwd/;
 | 
			
		||||
$conf_file =~ s/^([^\/])/$pwd\/$1/;
 | 
			
		||||
my $basename = basename( $conf_file, ( '.conf' ) );
 | 
			
		||||
my $CONF = parse_conf( $conf_file );
 | 
			
		||||
 | 
			
		||||
my $reparse_one = 0;
 | 
			
		||||
 | 
			
		||||
$SIG{ HUP } = sub { $reparse_one = 1; };
 | 
			
		||||
 | 
			
		||||
my @TEST;
 | 
			
		||||
my $test_list = $CONF->{ realserver };
 | 
			
		||||
if ( ref( $test_list ) eq "ARRAY" )
 | 
			
		||||
{
 | 
			
		||||
    @TEST = @{ $test_list };
 | 
			
		||||
}
 | 
			
		||||
else
 | 
			
		||||
{
 | 
			
		||||
    @TEST = ( $test_list );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
my $server = MyPackage->new(
 | 
			
		||||
    {
 | 
			
		||||
        port                => $port,
 | 
			
		||||
        host                => $host,
 | 
			
		||||
        cidr_allow          => $cidr_allow,
 | 
			
		||||
        log_level           => $log_level,
 | 
			
		||||
        child_communication => 1,
 | 
			
		||||
        setsid              => $daemon,
 | 
			
		||||
        log_file            => $log_file,
 | 
			
		||||
        pid_file            => $pid_file,
 | 
			
		||||
        min_servers         => $min_servers,
 | 
			
		||||
        min_spare_servers   => $min_spare_servers,
 | 
			
		||||
        max_spare_servers   => $max_spare_servers,
 | 
			
		||||
        max_servers         => $max_servers,
 | 
			
		||||
    }
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
$server->run();
 | 
			
		||||
exit;
 | 
			
		||||
 | 
			
		||||
sub process_request
 | 
			
		||||
{
 | 
			
		||||
    my $self = shift;
 | 
			
		||||
    if ( $reparse || $reparse_one )
 | 
			
		||||
    {
 | 
			
		||||
        $CONF = parse_conf( $conf_file );
 | 
			
		||||
    }
 | 
			
		||||
    my $result;
 | 
			
		||||
    my @TEST;
 | 
			
		||||
    my $test_list = $CONF->{ realserver };
 | 
			
		||||
 | 
			
		||||
    if ( ref( $test_list ) eq "ARRAY" )
 | 
			
		||||
    {
 | 
			
		||||
        @TEST = @{ $test_list };
 | 
			
		||||
    }
 | 
			
		||||
    else
 | 
			
		||||
    {
 | 
			
		||||
        @TEST = ( $test_list );
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    my $allow_code;
 | 
			
		||||
    my $test_item;
 | 
			
		||||
    my $html_data;
 | 
			
		||||
    foreach my $test ( @TEST )
 | 
			
		||||
    {
 | 
			
		||||
        my $uri;
 | 
			
		||||
        my $authority;
 | 
			
		||||
        my $URL = $test->{ url };
 | 
			
		||||
        $uri       = URI->new( $URL );
 | 
			
		||||
        $authority = $uri->authority;
 | 
			
		||||
 | 
			
		||||
        if ( exists $test->{ type } )
 | 
			
		||||
        {
 | 
			
		||||
            if ( $test->{ type } =~ /get/i )
 | 
			
		||||
            {
 | 
			
		||||
                my $allow_code = $test->{ code } || '200,201';
 | 
			
		||||
                $test_item++;
 | 
			
		||||
                my $host = $test->{ hostheader } || $authority;
 | 
			
		||||
                my $res = get( $URL, $allow_code, $host );
 | 
			
		||||
                if ( $html_content == 1 )
 | 
			
		||||
                {
 | 
			
		||||
                    if ( $res )
 | 
			
		||||
                    {
 | 
			
		||||
                        $html_data .= "GET OK $URL<br>\r\n";
 | 
			
		||||
                    }
 | 
			
		||||
                    else
 | 
			
		||||
                    {
 | 
			
		||||
                        $html_data .= "GET NOK $URL<br>\r\n";
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                if ( $html_content == 2 )
 | 
			
		||||
                {
 | 
			
		||||
                    if ( $res )
 | 
			
		||||
                    {
 | 
			
		||||
                        $html_data .= "<tr><td>GET</td><td>OK</td><td>$URL</td></tr>\r\n";
 | 
			
		||||
                    }
 | 
			
		||||
                    else
 | 
			
		||||
                    {
 | 
			
		||||
                        $html_data .= "<tr><td>GET</td><td>NOK</td><td>$URL</td></tr>\r\n";
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                $result += $res;
 | 
			
		||||
            }
 | 
			
		||||
            if ( $test->{ type } =~ /regex/i )
 | 
			
		||||
            {
 | 
			
		||||
                my $regex = $test->{ regex };
 | 
			
		||||
                $test_item++;
 | 
			
		||||
                my $host = $test->{ hostheader } || $authority;
 | 
			
		||||
                my $res = regex( $URL, $regex, $host );
 | 
			
		||||
                if ( $html_content == 1 )
 | 
			
		||||
                {
 | 
			
		||||
                    if ( $res )
 | 
			
		||||
                    {
 | 
			
		||||
                        $html_data .= "REGEX OK $URL<br>\r\n";
 | 
			
		||||
                    }
 | 
			
		||||
                    else
 | 
			
		||||
                    {
 | 
			
		||||
                        $html_data .= "REGEX NOK $URL<br>\r\n";
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                if ( $html_content == 2 )
 | 
			
		||||
                {
 | 
			
		||||
                    if ( $res )
 | 
			
		||||
                    {
 | 
			
		||||
                        $html_data .= "<tr><td>REGEX</td><td>OK</td><td>$URL</td></tr>\r\n";
 | 
			
		||||
                    }
 | 
			
		||||
                    else
 | 
			
		||||
                    {
 | 
			
		||||
                        $html_data .= "<tr><td>REGEX</td><td>NOK</td><td>$URL</td></tr>\r\n";
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                $result += $res;
 | 
			
		||||
            }
 | 
			
		||||
            if ( $test->{ type } =~ /tcp/i )
 | 
			
		||||
            {
 | 
			
		||||
                $test_item++;
 | 
			
		||||
                my $PORT = $test->{ port } || 80;
 | 
			
		||||
                my $res = TCP( $URL, $PORT );
 | 
			
		||||
                if ( $html_content == 1 )
 | 
			
		||||
                {
 | 
			
		||||
                    if ( $res )
 | 
			
		||||
                    {
 | 
			
		||||
                        $html_data .= "TCP OK  $URL<br>\r\n";
 | 
			
		||||
                    }
 | 
			
		||||
                    else
 | 
			
		||||
                    {
 | 
			
		||||
                        $html_data .= "TCP NOK $URL<br>\r\n";
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                if ( $html_content == 2 )
 | 
			
		||||
                {
 | 
			
		||||
                    if ( $res )
 | 
			
		||||
                    {
 | 
			
		||||
                        $html_data .= "<tr><td>TCP</td><td>OK</td><td>$URL</td></tr>\r\n";
 | 
			
		||||
                    }
 | 
			
		||||
                    else
 | 
			
		||||
                    {
 | 
			
		||||
                        $html_data .= "<tr><td>TCP</td><td>NOK</td><td>$URL</td></tr>\r\n";
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                $result += $res;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    my $len;
 | 
			
		||||
    if ( $html_content == 1 )
 | 
			
		||||
    {
 | 
			
		||||
        $html_data = "\r\n<html><body>\r\n$html_data</body></html>\r\n";
 | 
			
		||||
        $len       = ( length( $html_data ) ) - 2;
 | 
			
		||||
    }
 | 
			
		||||
    if ( $html_content == 2 )
 | 
			
		||||
    {
 | 
			
		||||
        $html_data = "\r\n<table align='center' border='1' >\r\n$html_data</table>\r\n";
 | 
			
		||||
        $len       = ( length( $html_data ) ) - 2;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if ( $result != $test_item )
 | 
			
		||||
    {
 | 
			
		||||
        my $header = "HTTP/1.0 503 Service Unavailable\r\n";
 | 
			
		||||
        if ( $html_content )
 | 
			
		||||
        {
 | 
			
		||||
            $header .= "Content-Length: $len\r\nContent-Type: text/html; charset=iso-8859-1\r\n";
 | 
			
		||||
        }
 | 
			
		||||
        print $header . $html_data;
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
    my $header = "HTTP/1.0 200 OK\r\n";
 | 
			
		||||
    if ( $html_content )
 | 
			
		||||
    {
 | 
			
		||||
        $header .= "Content-Length: $len\r\nContent-Type: text/html; charset=iso-8859-1\r\n";
 | 
			
		||||
    }
 | 
			
		||||
    print $header. $html_data;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
1;
 | 
			
		||||
 | 
			
		||||
##########################################################
 | 
			
		||||
##########################################################
 | 
			
		||||
# function to REGEX on a GET from URL
 | 
			
		||||
#	arg: 	uri
 | 
			
		||||
#		regex to test (with extra parameter like perl e.g.  /\bweb\d{2,3}/i )
 | 
			
		||||
#		IP
 | 
			
		||||
#		port (optionnal: default=80)
 | 
			
		||||
#	ret:	0 if no reply
 | 
			
		||||
#		1 if reply
 | 
			
		||||
##########################################################
 | 
			
		||||
##########################################################
 | 
			
		||||
sub regex
 | 
			
		||||
{
 | 
			
		||||
    my $url   = shift;
 | 
			
		||||
    my $regex = shift;
 | 
			
		||||
    my $host  = shift;
 | 
			
		||||
 | 
			
		||||
    $regex =~ /\/(.*)\/(.*)/;
 | 
			
		||||
    my $reg = $1;
 | 
			
		||||
    my $ext = $2;
 | 
			
		||||
    my %options;
 | 
			
		||||
    $options{ 'agent' }   = "LB_REGEX_PROBE/$VERSION";
 | 
			
		||||
    $options{ 'timeout' } = 10;
 | 
			
		||||
    my $ua = LWP::UserAgent->new( %options );
 | 
			
		||||
    my $response = $ua->get( $url, "Host" => $host );
 | 
			
		||||
    if ( $response->is_success )
 | 
			
		||||
    {
 | 
			
		||||
        my $html = $response->content;
 | 
			
		||||
        if ( $ext =~ /i/ )
 | 
			
		||||
        {
 | 
			
		||||
            if ( $html =~ /$reg/si )
 | 
			
		||||
            {
 | 
			
		||||
                return 1;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        else
 | 
			
		||||
        {
 | 
			
		||||
            if ( $html =~ /$reg/s )
 | 
			
		||||
            {
 | 
			
		||||
                return 1;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
##########################################################
 | 
			
		||||
##########################################################
 | 
			
		||||
# function to GET an URL (HTTP or FTP) ftp://FTPTest:6ccount4F@brice!@172.29.0.146
 | 
			
		||||
#	arg: 	uri
 | 
			
		||||
#		allowed code (comma seaparated)
 | 
			
		||||
#		IP
 | 
			
		||||
#		port (optionnal: default=80)
 | 
			
		||||
#	ret:	0 if not the expected vcode
 | 
			
		||||
#		1 if the expected code is returned
 | 
			
		||||
##########################################################
 | 
			
		||||
##########################################################
 | 
			
		||||
sub get
 | 
			
		||||
{
 | 
			
		||||
    my $url  = shift;
 | 
			
		||||
    my $code = shift;
 | 
			
		||||
    my $host = shift;
 | 
			
		||||
 | 
			
		||||
    $code =~ s/\s*//g;
 | 
			
		||||
    my %codes = map { $_ => $_ } split /,/, $code;
 | 
			
		||||
    my %options;
 | 
			
		||||
    $options{ 'agent' }   = "LB_HTTP_PROBE/$VERSION";
 | 
			
		||||
    $options{ 'timeout' } = 10;
 | 
			
		||||
    my $ua = LWP::UserAgent->new( %options );
 | 
			
		||||
    my $response = $ua->get( $url, "Host" => $host );
 | 
			
		||||
    if ( $response->is_success )
 | 
			
		||||
    {
 | 
			
		||||
        my $rc = $response->{ _rc };
 | 
			
		||||
        if ( defined $codes{ $rc } )
 | 
			
		||||
        {
 | 
			
		||||
            return 1;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
##########################################################
 | 
			
		||||
##########################################################
 | 
			
		||||
# function to test a port on a host
 | 
			
		||||
#	arg: 	hostip
 | 
			
		||||
#		port
 | 
			
		||||
#		timeout
 | 
			
		||||
#	ret:	0 if not open
 | 
			
		||||
#		1 if open
 | 
			
		||||
##########################################################
 | 
			
		||||
##########################################################
 | 
			
		||||
sub TCP
 | 
			
		||||
{
 | 
			
		||||
    use IO::Socket::PortState qw(check_ports);
 | 
			
		||||
    my $remote_host = shift;
 | 
			
		||||
    my $remote_port = shift;
 | 
			
		||||
    my $timeout     = shift;
 | 
			
		||||
 | 
			
		||||
    my %porthash = ( tcp => { $remote_port => { name => 'to_test', } } );
 | 
			
		||||
    check_ports( $remote_host, $timeout, \%porthash );
 | 
			
		||||
    return $porthash{ tcp }{ $remote_port }{ open };
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
##############################################
 | 
			
		||||
# parse config file
 | 
			
		||||
# IN: 	File PATH
 | 
			
		||||
# Out:	Ref to a hash with config data
 | 
			
		||||
##############################################
 | 
			
		||||
sub parse_conf
 | 
			
		||||
{
 | 
			
		||||
    my $file = shift;
 | 
			
		||||
 | 
			
		||||
    my $conf = new Config::General(
 | 
			
		||||
        -ConfigFile        => $file,
 | 
			
		||||
        -ExtendedAccess    => 1,
 | 
			
		||||
        -AllowMultiOptions => "yes"
 | 
			
		||||
    );
 | 
			
		||||
    my %config = $conf->getall;
 | 
			
		||||
    $port              = $config{ port }              || 9898;
 | 
			
		||||
    $host              = $config{ host }              || '127.0.0.1';
 | 
			
		||||
    $reparse           = $config{ reparse }           || 0;
 | 
			
		||||
    $cidr_allow        = $config{ cidr_allow }        || '127.0.0.0/8';
 | 
			
		||||
    $log_level         = $config{ log_level }         || 0;
 | 
			
		||||
    $log_file          = $config{ log_file }          || "/var/log/check.log";
 | 
			
		||||
    $pid_file          = $config{ pid_file }          || "/var/run/check.pid";
 | 
			
		||||
    $daemon            = $config{ daemon }            || 0;
 | 
			
		||||
    $min_servers       = $config{ min_servers }       || 5;
 | 
			
		||||
    $min_spare_servers = $config{ min_spare_servers } || 2;
 | 
			
		||||
    $max_spare_servers = $config{ max_spare_servers } || 10;
 | 
			
		||||
    $max_servers       = $config{ max_servers }       || 50;
 | 
			
		||||
    $html_content      = $config{ content }           || 0;
 | 
			
		||||
 | 
			
		||||
    $pid_file =~ s/\$\$\$/$basename/g;
 | 
			
		||||
    $pid_file =~ s/\$\$/$$/g;
 | 
			
		||||
    $log_file =~ s/\$\$\$/$basename/g;
 | 
			
		||||
    $log_file =~ s/\$\$/$$/g;
 | 
			
		||||
 | 
			
		||||
    if ( !( keys %{ $config{ realserver } } ) )
 | 
			
		||||
    {
 | 
			
		||||
        die "No farm to test\n";
 | 
			
		||||
    }
 | 
			
		||||
    return ( \%config );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -1,93 +0,0 @@
 | 
			
		||||
 | 
			
		||||
# listening port ( default 9898 )
 | 
			
		||||
port 9899
 | 
			
		||||
 | 
			
		||||
# on which IP to bind (default 127.0.0.1 ) * = all IP
 | 
			
		||||
#host 10.2.1.1
 | 
			
		||||
 | 
			
		||||
# which client addr is allow ( default 127.0.0.0/8 )
 | 
			
		||||
#cidr_allow = 0.0.0.0/0 
 | 
			
		||||
 | 
			
		||||
# verbosity from 0 to 4 (default 0 = no log )
 | 
			
		||||
log_level = 1
 | 
			
		||||
 | 
			
		||||
# daemonize (default 0 = no )
 | 
			
		||||
daemon = 1
 | 
			
		||||
 | 
			
		||||
# content put a HTML content after header
 | 
			
		||||
# (default 0 = no content 1 = html 2 = table )
 | 
			
		||||
content = 2
 | 
			
		||||
 | 
			
		||||
# reparse the config file at each request ( default 0 = no )
 | 
			
		||||
# only SIGHUP reread the config file)
 | 
			
		||||
reparse = 1
 | 
			
		||||
 | 
			
		||||
# pid_file  (default /var/run/check.pid )
 | 
			
		||||
# $$$ = basename of config file
 | 
			
		||||
# $$ = PID
 | 
			
		||||
pid_file=/var/run/CHECK_$$$.pid
 | 
			
		||||
 | 
			
		||||
# log_file  (default /var/log/check.log )
 | 
			
		||||
# $$$ = basename of config file
 | 
			
		||||
# $$ = PID
 | 
			
		||||
log_file=/var/log/CHECK_$$$.log
 | 
			
		||||
 | 
			
		||||
# number of servers to keep running (default = 5)
 | 
			
		||||
min_servers = 2
 | 
			
		||||
 | 
			
		||||
# number of servers to have waiting for requests (default = 2)
 | 
			
		||||
min_spare_servers = 1
 | 
			
		||||
 | 
			
		||||
# maximum number of servers to have waiting for requests (default = 10)
 | 
			
		||||
max_spare_servers =1
 | 
			
		||||
 | 
			
		||||
# number of servers (default = 50)
 | 
			
		||||
max_servers = 2
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
###########################################################
 | 
			
		||||
# a server to check
 | 
			
		||||
# type could be get , regex or tcp
 | 
			
		||||
 | 
			
		||||
# get = do a http or ftp get and check the result code with
 | 
			
		||||
# the list, coma separated, provided ( default = 200,201 )
 | 
			
		||||
# hostheader is optional and send to the server if provided
 | 
			
		||||
 | 
			
		||||
# regex = do a http or ftp get and check the content result 
 | 
			
		||||
# with regex provided
 | 
			
		||||
# hostheader is optional and send to the server if provided
 | 
			
		||||
 | 
			
		||||
# tcp = test if the tcp port provided is open
 | 
			
		||||
 | 
			
		||||
#<realserver>
 | 
			
		||||
#	url=http://127.0.0.1:80/apache2-default/index.html
 | 
			
		||||
#	type = get
 | 
			
		||||
#	code=200,201
 | 
			
		||||
#	hostheader = www.test.com
 | 
			
		||||
#</realserver>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#<realserver>
 | 
			
		||||
#	url=http://127.0.0.1:82/apache2-default/index.html
 | 
			
		||||
#	type = get
 | 
			
		||||
#	code=200,201
 | 
			
		||||
#	hostheader = www.myhost.com
 | 
			
		||||
#</realserver>
 | 
			
		||||
 | 
			
		||||
<realserver>
 | 
			
		||||
	url=	 http://10.2.2.1
 | 
			
		||||
	type = regex
 | 
			
		||||
	regex= /qdAbm/
 | 
			
		||||
</realserver>
 | 
			
		||||
 | 
			
		||||
<realserver>
 | 
			
		||||
	type = tcp
 | 
			
		||||
	url = 10.2.2.1
 | 
			
		||||
	port =80
 | 
			
		||||
</realserver>
 | 
			
		||||
 | 
			
		||||
#<realserver>
 | 
			
		||||
#	type = get
 | 
			
		||||
#	url = ftp://FTPuser:FTPpassword@10.2.3.1
 | 
			
		||||
#	code=200,201
 | 
			
		||||
#</realserver>
 | 
			
		||||
@ -1,2 +0,0 @@
 | 
			
		||||
#!/bin/sh
 | 
			
		||||
tr -d '\015' | sed -e 's,\(: Cookie:.*$\),'$'\e''\[35m\1'$'\e''\[0m,gi' -e 's,\(: Set-Cookie:.*$\),'$'\e''\[31m\1'$'\e''\[0m,gi' -e 's,\(^[^:]*:[^:]*srvhdr.*\)$,'$'\e''\[32m\1'$'\e''\[0m,i' -e 's,\(^[^:]*:[^:]*clihdr.*\)$,'$'\e''\[34m\1'$'\e''\[0m,i'
 | 
			
		||||
@ -1,2 +0,0 @@
 | 
			
		||||
#!/bin/sh
 | 
			
		||||
(echo '<html><body><pre>'; tr -d '\015' | sed -e 's,\(: Cookie:.*$\),<font color="#e000c0">\1</font>,gi' -e 's,\(: Set-Cookie:.*$\),<font color="#e0a000">\1</font>,gi' -e 's,\(^[^:]*:[^:]*srvhdr.*\)$,<font color="#00a000">\1</font>,i' -e 's,\(^[^:]*:[^:]*clihdr.*\)$,<font color="#0000c0">\1</font>,i' -e 's,\(^.*\)$,<tt>\1</tt>,' ; echo '</pre></body></html>')
 | 
			
		||||
@ -1,8 +0,0 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
if [ $# -lt 2 ]; then
 | 
			
		||||
	echo "Usage: $0 regex debug_file > extracted_file"
 | 
			
		||||
	exit 1
 | 
			
		||||
fi
 | 
			
		||||
word=$1
 | 
			
		||||
file=$2
 | 
			
		||||
exec grep $(for i in $(grep $word $file |cut -f1 -d: | sort -u ) ; do echo -n '\('$i':\)\|'; done; echo '^$') $file
 | 
			
		||||
@ -1,472 +0,0 @@
 | 
			
		||||
Summary: HA-Proxy is a TCP/HTTP reverse proxy for high availability environments
 | 
			
		||||
Name: haproxy
 | 
			
		||||
Version: 2.0-dev7
 | 
			
		||||
Release: 1
 | 
			
		||||
License: GPL
 | 
			
		||||
Group: System Environment/Daemons
 | 
			
		||||
URL: http://www.haproxy.org/
 | 
			
		||||
Source0: http://www.haproxy.org/download/1.6/src/devel/%{name}-%{version}.tar.gz
 | 
			
		||||
BuildRoot: %{_tmppath}/%{name}-%{version}-root
 | 
			
		||||
BuildRequires: pcre-devel
 | 
			
		||||
Requires: /sbin/chkconfig, /sbin/service
 | 
			
		||||
 | 
			
		||||
%description
 | 
			
		||||
HA-Proxy is a TCP/HTTP reverse proxy which is particularly suited for high
 | 
			
		||||
availability environments. Indeed, it can:
 | 
			
		||||
- route HTTP requests depending on statically assigned cookies
 | 
			
		||||
- spread the load among several servers while assuring server persistence
 | 
			
		||||
  through the use of HTTP cookies
 | 
			
		||||
- switch to backup servers in the event a main one fails
 | 
			
		||||
- accept connections to special ports dedicated to service monitoring
 | 
			
		||||
- stop accepting connections without breaking existing ones
 | 
			
		||||
- add/modify/delete HTTP headers both ways
 | 
			
		||||
- block requests matching a particular pattern
 | 
			
		||||
 | 
			
		||||
It needs very little resource. Its event-driven architecture allows it to easily
 | 
			
		||||
handle thousands of simultaneous connections on hundreds of instances without
 | 
			
		||||
risking the system's stability.
 | 
			
		||||
 | 
			
		||||
%prep
 | 
			
		||||
%setup -q
 | 
			
		||||
 | 
			
		||||
# We don't want any perl dependecies in this RPM:
 | 
			
		||||
%define __perl_requires /bin/true
 | 
			
		||||
 | 
			
		||||
%build
 | 
			
		||||
%{__make} USE_PCRE=1 DEBUG="" ARCH=%{_target_cpu} TARGET=linux26
 | 
			
		||||
 | 
			
		||||
%install
 | 
			
		||||
[ "%{buildroot}" != "/" ] && %{__rm} -rf %{buildroot}
 | 
			
		||||
 
 | 
			
		||||
%{__install} -d %{buildroot}%{_sbindir}
 | 
			
		||||
%{__install} -d %{buildroot}%{_sysconfdir}/rc.d/init.d
 | 
			
		||||
%{__install} -d %{buildroot}%{_sysconfdir}/%{name}
 | 
			
		||||
%{__install} -d %{buildroot}%{_mandir}/man1/
 | 
			
		||||
 | 
			
		||||
%{__install} -s %{name} %{buildroot}%{_sbindir}/
 | 
			
		||||
%{__install} -c -m 755 examples/%{name}.init %{buildroot}%{_sysconfdir}/rc.d/init.d/%{name}
 | 
			
		||||
%{__install} -c -m 755 doc/%{name}.1 %{buildroot}%{_mandir}/man1/
 | 
			
		||||
 
 | 
			
		||||
%clean
 | 
			
		||||
[ "%{buildroot}" != "/" ] && %{__rm} -rf %{buildroot}
 | 
			
		||||
 
 | 
			
		||||
%post
 | 
			
		||||
/sbin/chkconfig --add %{name}
 | 
			
		||||
 | 
			
		||||
%preun
 | 
			
		||||
if [ $1 = 0 ]; then
 | 
			
		||||
  /sbin/service %{name} stop >/dev/null 2>&1 || :
 | 
			
		||||
  /sbin/chkconfig --del %{name}
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
%postun
 | 
			
		||||
if [ "$1" -ge "1" ]; then
 | 
			
		||||
  /sbin/service %{name} condrestart >/dev/null 2>&1 || :
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
%files
 | 
			
		||||
%defattr(-,root,root)
 | 
			
		||||
%doc CHANGELOG README doc/architecture.txt doc/configuration.txt doc/intro.txt doc/management.txt doc/proxy-protocol.txt
 | 
			
		||||
%doc %{_mandir}/man1/%{name}.1*
 | 
			
		||||
 | 
			
		||||
%attr(0755,root,root) %{_sbindir}/%{name}
 | 
			
		||||
%dir %{_sysconfdir}/%{name}
 | 
			
		||||
%attr(0755,root,root) %config %{_sysconfdir}/rc.d/init.d/%{name}
 | 
			
		||||
 | 
			
		||||
%changelog
 | 
			
		||||
* Tue Jun 11 2019 Willy Tarreau <w@1wt.eu>
 | 
			
		||||
- updated to 2.0-dev7
 | 
			
		||||
 | 
			
		||||
* Fri Jun  7 2019 Willy Tarreau <w@1wt.eu>
 | 
			
		||||
- updated to 2.0-dev6
 | 
			
		||||
 | 
			
		||||
* Sun Jun  2 2019 Willy Tarreau <w@1wt.eu>
 | 
			
		||||
- updated to 2.0-dev5
 | 
			
		||||
 | 
			
		||||
* Wed May 22 2019 Willy Tarreau <w@1wt.eu>
 | 
			
		||||
- updated to 2.0-dev4
 | 
			
		||||
 | 
			
		||||
* Wed May 15 2019 Willy Tarreau <w@1wt.eu>
 | 
			
		||||
- updated to 2.0-dev3
 | 
			
		||||
 | 
			
		||||
* Tue Mar 26 2019 Willy Tarreau <w@1wt.eu>
 | 
			
		||||
- updated to 2.0-dev2
 | 
			
		||||
 | 
			
		||||
* Tue Feb 26 2019 Willy Tarreau <w@1wt.eu>
 | 
			
		||||
- updated to 2.0-dev1
 | 
			
		||||
 | 
			
		||||
* Sat Dec 22 2018 Willy Tarreau <w@1wt.eu>
 | 
			
		||||
- updated to 2.0-dev0
 | 
			
		||||
 | 
			
		||||
* Wed Dec 19 2018 Willy Tarreau <w@1wt.eu>
 | 
			
		||||
- updated to 1.9.0
 | 
			
		||||
 | 
			
		||||
* Sun Dec 16 2018 Willy Tarreau <w@1wt.eu>
 | 
			
		||||
- updated to 1.9-dev11
 | 
			
		||||
 | 
			
		||||
* Sat Dec  8 2018 Willy Tarreau <w@1wt.eu>
 | 
			
		||||
- updated to 1.9-dev10
 | 
			
		||||
 | 
			
		||||
* Sun Dec  2 2018 Willy Tarreau <w@1wt.eu>
 | 
			
		||||
- updated to 1.9-dev9
 | 
			
		||||
 | 
			
		||||
* Sun Nov 25 2018 Willy Tarreau <w@1wt.eu>
 | 
			
		||||
- updated to 1.9-dev8
 | 
			
		||||
 | 
			
		||||
* Sun Nov 18 2018 Willy Tarreau <w@1wt.eu>
 | 
			
		||||
- updated to 1.9-dev7
 | 
			
		||||
 | 
			
		||||
* Sun Nov 11 2018 Willy Tarreau <w@1wt.eu>
 | 
			
		||||
- updated to 1.9-dev6
 | 
			
		||||
 | 
			
		||||
* Sun Oct 28 2018 Willy Tarreau <w@1wt.eu>
 | 
			
		||||
- updated to 1.9-dev5
 | 
			
		||||
 | 
			
		||||
* Sun Oct 21 2018 Willy Tarreau <w@1wt.eu>
 | 
			
		||||
- updated to 1.9-dev4
 | 
			
		||||
 | 
			
		||||
* Sat Sep 29 2018 Willy Tarreau <w@1wt.eu>
 | 
			
		||||
- updated to 1.9-dev3
 | 
			
		||||
 | 
			
		||||
* Wed Sep 12 2018 Willy Tarreau <w@1wt.eu>
 | 
			
		||||
- updated to 1.9-dev2
 | 
			
		||||
 | 
			
		||||
* Thu Aug  2 2018 Willy Tarreau <w@1wt.eu>
 | 
			
		||||
- updated to 1.9-dev1
 | 
			
		||||
 | 
			
		||||
* Sun Nov 26 2017 Willy Tarreau <w@1wt.eu>
 | 
			
		||||
- updated to 1.9-dev0
 | 
			
		||||
 | 
			
		||||
* Sun Nov 26 2017 Willy Tarreau <w@1wt.eu>
 | 
			
		||||
- updated to 1.8.0
 | 
			
		||||
 | 
			
		||||
* Sun Nov 19 2017 Willy Tarreau <w@1wt.eu>
 | 
			
		||||
- updated to 1.8-rc4
 | 
			
		||||
 | 
			
		||||
* Sat Nov 11 2017 Willy Tarreau <w@1wt.eu>
 | 
			
		||||
- updated to 1.8-rc3
 | 
			
		||||
 | 
			
		||||
* Fri Nov  3 2017 Willy Tarreau <w@1wt.eu>
 | 
			
		||||
- updated to 1.8-rc2
 | 
			
		||||
 | 
			
		||||
* Tue Oct 31 2017 Willy Tarreau <w@1wt.eu>
 | 
			
		||||
- updated to 1.8-rc1
 | 
			
		||||
 | 
			
		||||
* Sun Oct 22 2017 Willy Tarreau <w@1wt.eu>
 | 
			
		||||
- updated to 1.8-dev3
 | 
			
		||||
 | 
			
		||||
* Fri Jun  2 2017 Willy Tarreau <w@1wt.eu>
 | 
			
		||||
- updated to 1.8-dev2
 | 
			
		||||
 | 
			
		||||
* Mon Apr  3 2017 Willy Tarreau <w@1wt.eu>
 | 
			
		||||
- updated to 1.8-dev1
 | 
			
		||||
 | 
			
		||||
* Fri Nov 25 2016 Willy Tarreau <w@1wt.eu>
 | 
			
		||||
- updated to 1.8-dev0
 | 
			
		||||
 | 
			
		||||
* Fri Nov 25 2016 Willy Tarreau <w@1wt.eu>
 | 
			
		||||
- updated to 1.7.0
 | 
			
		||||
 | 
			
		||||
* Wed Nov  9 2016 Willy Tarreau <w@1wt.eu>
 | 
			
		||||
- updated to 1.7-dev6
 | 
			
		||||
 | 
			
		||||
* Tue Oct 25 2016 Willy Tarreau <w@1wt.eu>
 | 
			
		||||
- updated to 1.7-dev5
 | 
			
		||||
 | 
			
		||||
* Sun Aug 14 2016 Willy Tarreau <w@1wt.eu>
 | 
			
		||||
- updated to 1.7-dev4
 | 
			
		||||
 | 
			
		||||
* Tue May 10 2016 Willy Tarreau <w@1wt.eu>
 | 
			
		||||
- updated to 1.7-dev3
 | 
			
		||||
 | 
			
		||||
* Mon Mar 14 2016 Willy Tarreau <w@1wt.eu>
 | 
			
		||||
- updated to 1.7-dev2
 | 
			
		||||
 | 
			
		||||
* Sun Dec 20 2015 Willy Tarreau <w@1wt.eu>
 | 
			
		||||
- updated to 1.7-dev1
 | 
			
		||||
 | 
			
		||||
* Tue Oct 13 2015 Willy Tarreau <w@1wt.eu>
 | 
			
		||||
- updated to 1.7-dev0
 | 
			
		||||
 | 
			
		||||
* Tue Oct 13 2015 Willy Tarreau <w@1wt.eu>
 | 
			
		||||
- updated to 1.6.0
 | 
			
		||||
 | 
			
		||||
* Tue Oct  6 2015 Willy Tarreau <w@1wt.eu>
 | 
			
		||||
- updated to 1.6-dev7
 | 
			
		||||
 | 
			
		||||
* Mon Sep 28 2015 Willy Tarreau <w@1wt.eu>
 | 
			
		||||
- updated to 1.6-dev6
 | 
			
		||||
 | 
			
		||||
* Mon Sep 14 2015 Willy Tarreau <w@1wt.eu>
 | 
			
		||||
- updated to 1.6-dev5
 | 
			
		||||
 | 
			
		||||
* Sun Aug 30 2015 Willy Tarreau <w@1wt.eu>
 | 
			
		||||
- updated to 1.6-dev4
 | 
			
		||||
 | 
			
		||||
* Sun Aug 30 2015 Willy Tarreau <w@1wt.eu>
 | 
			
		||||
- updated to 1.6-dev4
 | 
			
		||||
 | 
			
		||||
* Wed Jul 22 2015 Willy Tarreau <w@1wt.eu>
 | 
			
		||||
- updated to 1.6-dev3
 | 
			
		||||
 | 
			
		||||
* Wed Jun 17 2015 Willy Tarreau <w@1wt.eu>
 | 
			
		||||
- updated to 1.6-dev2
 | 
			
		||||
 | 
			
		||||
* Wed Mar 11 2015 Willy Tarreau <w@1wt.eu>
 | 
			
		||||
- updated to 1.6-dev1
 | 
			
		||||
 | 
			
		||||
* Thu Jun 19 2014 Willy Tarreau <w@1wt.eu>
 | 
			
		||||
- updated to 1.6-dev0
 | 
			
		||||
 | 
			
		||||
* Thu Jun 19 2014 Willy Tarreau <w@1wt.eu>
 | 
			
		||||
- updated to 1.5.0
 | 
			
		||||
 | 
			
		||||
* Wed May 28 2014 Willy Tarreau <w@1wt.eu>
 | 
			
		||||
- updated to 1.5-dev26
 | 
			
		||||
 | 
			
		||||
* Sat May 10 2014 Willy Tarreau <w@1wt.eu>
 | 
			
		||||
- updated to 1.5-dev25
 | 
			
		||||
 | 
			
		||||
* Sat Apr 26 2014 Willy Tarreau <w@1wt.eu>
 | 
			
		||||
- updated to 1.5-dev24
 | 
			
		||||
 | 
			
		||||
* Wed Apr 23 2014 Willy Tarreau <w@1wt.eu>
 | 
			
		||||
- updated to 1.5-dev23
 | 
			
		||||
 | 
			
		||||
* Mon Feb  3 2014 Willy Tarreau <w@1wt.eu>
 | 
			
		||||
- updated to 1.5-dev22
 | 
			
		||||
 | 
			
		||||
* Tue Dec 17 2013 Willy Tarreau <w@1wt.eu>
 | 
			
		||||
- updated to 1.5-dev21
 | 
			
		||||
 | 
			
		||||
* Mon Dec 16 2013 Willy Tarreau <w@1wt.eu>
 | 
			
		||||
- updated to 1.5-dev20
 | 
			
		||||
 | 
			
		||||
* Mon Jun 17 2013 Willy Tarreau <w@1wt.eu>
 | 
			
		||||
- updated to 1.5-dev19
 | 
			
		||||
 | 
			
		||||
* Wed Apr  3 2013 Willy Tarreau <w@1wt.eu>
 | 
			
		||||
- updated to 1.5-dev18
 | 
			
		||||
 | 
			
		||||
* Fri Dec 28 2012 Willy Tarreau <w@1wt.eu>
 | 
			
		||||
- updated to 1.5-dev17
 | 
			
		||||
 | 
			
		||||
* Mon Dec 24 2012 Willy Tarreau <w@1wt.eu>
 | 
			
		||||
- updated to 1.5-dev16
 | 
			
		||||
 | 
			
		||||
* Wed Dec 12 2012 Willy Tarreau <w@1wt.eu>
 | 
			
		||||
- updated to 1.5-dev15
 | 
			
		||||
 | 
			
		||||
* Mon Nov 26 2012 Willy Tarreau <w@1wt.eu>
 | 
			
		||||
- updated to 1.5-dev14
 | 
			
		||||
 | 
			
		||||
* Thu Nov 22 2012 Willy Tarreau <w@1wt.eu>
 | 
			
		||||
- updated to 1.5-dev13
 | 
			
		||||
 | 
			
		||||
* Mon Sep 10 2012 Willy Tarreau <w@1wt.eu>
 | 
			
		||||
- updated to 1.5-dev12
 | 
			
		||||
 | 
			
		||||
* Mon Jun  4 2012 Willy Tarreau <w@1wt.eu>
 | 
			
		||||
- updated to 1.5-dev11
 | 
			
		||||
 | 
			
		||||
* Mon May 14 2012 Willy Tarreau <w@1wt.eu>
 | 
			
		||||
- updated to 1.5-dev10
 | 
			
		||||
 | 
			
		||||
* Tue May  8 2012 Willy Tarreau <w@1wt.eu>
 | 
			
		||||
- updated to 1.5-dev9
 | 
			
		||||
 | 
			
		||||
* Mon Mar 26 2012 Willy Tarreau <w@1wt.eu>
 | 
			
		||||
- updated to 1.5-dev8
 | 
			
		||||
 | 
			
		||||
* Sat Sep 10 2011 Willy Tarreau <w@1wt.eu>
 | 
			
		||||
- updated to 1.5-dev7
 | 
			
		||||
 | 
			
		||||
* Fri Apr  8 2011 Willy Tarreau <w@1wt.eu>
 | 
			
		||||
- updated to 1.5-dev6
 | 
			
		||||
 | 
			
		||||
* Tue Mar 29 2011 Willy Tarreau <w@1wt.eu>
 | 
			
		||||
- updated to 1.5-dev5
 | 
			
		||||
 | 
			
		||||
* Sun Mar 13 2011 Willy Tarreau <w@1wt.eu>
 | 
			
		||||
- updated to 1.5-dev4
 | 
			
		||||
 | 
			
		||||
* Thu Nov 11 2010 Willy Tarreau <w@1wt.eu>
 | 
			
		||||
- updated to 1.5-dev3
 | 
			
		||||
 | 
			
		||||
* Sat Aug 28 2010 Willy Tarreau <w@1wt.eu>
 | 
			
		||||
- updated to 1.5-dev2
 | 
			
		||||
 | 
			
		||||
* Wed Aug 25 2010 Willy Tarreau <w@1wt.eu>
 | 
			
		||||
- updated to 1.5-dev1
 | 
			
		||||
 | 
			
		||||
* Sun May 23 2010 Willy Tarreau <w@1wt.eu>
 | 
			
		||||
- updated to 1.5-dev0
 | 
			
		||||
 | 
			
		||||
* Sun May 16 2010 Willy Tarreau <w@1wt.eu>
 | 
			
		||||
- updated to 1.4.6
 | 
			
		||||
 | 
			
		||||
* Thu May 13 2010 Willy Tarreau <w@1wt.eu>
 | 
			
		||||
- updated to 1.4.5
 | 
			
		||||
 | 
			
		||||
* Wed Apr  7 2010 Willy Tarreau <w@1wt.eu>
 | 
			
		||||
- updated to 1.4.4
 | 
			
		||||
 | 
			
		||||
* Tue Mar 30 2010 Willy Tarreau <w@1wt.eu>
 | 
			
		||||
- updated to 1.4.3
 | 
			
		||||
 | 
			
		||||
* Wed Mar 17 2010 Willy Tarreau <w@1wt.eu>
 | 
			
		||||
- updated to 1.4.2
 | 
			
		||||
 | 
			
		||||
* Thu Mar  4 2010 Willy Tarreau <w@1wt.eu>
 | 
			
		||||
- updated to 1.4.1
 | 
			
		||||
 | 
			
		||||
* Fri Feb 26 2010 Willy Tarreau <w@1wt.eu>
 | 
			
		||||
- updated to 1.4.0
 | 
			
		||||
 | 
			
		||||
* Tue Feb  2 2010 Willy Tarreau <w@1wt.eu>
 | 
			
		||||
- updated to 1.4-rc1
 | 
			
		||||
 | 
			
		||||
* Mon Jan 25 2010 Willy Tarreau <w@1wt.eu>
 | 
			
		||||
- updated to 1.4-dev8
 | 
			
		||||
 | 
			
		||||
* Mon Jan 25 2010 Willy Tarreau <w@1wt.eu>
 | 
			
		||||
- updated to 1.4-dev7
 | 
			
		||||
 | 
			
		||||
* Fri Jan  8 2010 Willy Tarreau <w@1wt.eu>
 | 
			
		||||
- updated to 1.4-dev6
 | 
			
		||||
 | 
			
		||||
* Sun Jan  3 2010 Willy Tarreau <w@1wt.eu>
 | 
			
		||||
- updated to 1.4-dev5
 | 
			
		||||
 | 
			
		||||
* Mon Oct 12 2009 Willy Tarreau <w@1wt.eu>
 | 
			
		||||
- updated to 1.4-dev4
 | 
			
		||||
 | 
			
		||||
* Thu Sep 24 2009 Willy Tarreau <w@1wt.eu>
 | 
			
		||||
- updated to 1.4-dev3
 | 
			
		||||
 | 
			
		||||
* Sun Aug  9 2009 Willy Tarreau <w@1wt.eu>
 | 
			
		||||
- updated to 1.4-dev2
 | 
			
		||||
 | 
			
		||||
* Wed Jul 29 2009 Willy Tarreau <w@1wt.eu>
 | 
			
		||||
- updated to 1.4-dev1
 | 
			
		||||
 | 
			
		||||
* Tue Jun 09 2009 Willy Tarreau <w@1wt.eu>
 | 
			
		||||
- updated to 1.4-dev0
 | 
			
		||||
 | 
			
		||||
* Sun May 10 2009 Willy Tarreau <w@1wt.eu>
 | 
			
		||||
- updated to 1.3.18
 | 
			
		||||
 | 
			
		||||
* Sun Mar 29 2009 Willy Tarreau <w@1wt.eu>
 | 
			
		||||
- updated to 1.3.17
 | 
			
		||||
 | 
			
		||||
* Sun Mar 22 2009 Willy Tarreau <w@1wt.eu>
 | 
			
		||||
- updated to 1.3.16
 | 
			
		||||
 | 
			
		||||
* Sat Apr 19 2008 Willy Tarreau <w@1wt.eu>
 | 
			
		||||
- updated to 1.3.15
 | 
			
		||||
 | 
			
		||||
* Wed Dec  5 2007 Willy Tarreau <w@1wt.eu>
 | 
			
		||||
- updated to 1.3.14
 | 
			
		||||
 | 
			
		||||
* Thu Oct 18 2007 Willy Tarreau <w@1wt.eu>
 | 
			
		||||
- updated to 1.3.13
 | 
			
		||||
 | 
			
		||||
* Sun Jun 17 2007 Willy Tarreau <w@1wt.eu>
 | 
			
		||||
- updated to 1.3.12
 | 
			
		||||
 | 
			
		||||
* Sun Jun  3 2007 Willy Tarreau <w@1wt.eu>
 | 
			
		||||
- updated to 1.3.11.4
 | 
			
		||||
 | 
			
		||||
* Mon May 14 2007 Willy Tarreau <w@1wt.eu>
 | 
			
		||||
- updated to 1.3.11.3
 | 
			
		||||
 | 
			
		||||
* Mon May 14 2007 Willy Tarreau <w@1wt.eu>
 | 
			
		||||
- updated to 1.3.11.2
 | 
			
		||||
 | 
			
		||||
* Mon May 14 2007 Willy Tarreau <w@1wt.eu>
 | 
			
		||||
- updated to 1.3.11.1
 | 
			
		||||
 | 
			
		||||
* Mon May 14 2007 Willy Tarreau <w@1wt.eu>
 | 
			
		||||
- updated to 1.3.11
 | 
			
		||||
 | 
			
		||||
* Thu May 10 2007 Willy Tarreau <w@1wt.eu>
 | 
			
		||||
- updated to 1.3.10.2
 | 
			
		||||
 | 
			
		||||
* Tue May 09 2007 Willy Tarreau <w@1wt.eu>
 | 
			
		||||
- updated to 1.3.10.1
 | 
			
		||||
 | 
			
		||||
* Tue May 08 2007 Willy Tarreau <w@1wt.eu>
 | 
			
		||||
- updated to 1.3.10
 | 
			
		||||
 | 
			
		||||
* Sun Apr 15 2007 Willy Tarreau <w@1wt.eu>
 | 
			
		||||
- updated to 1.3.9
 | 
			
		||||
 | 
			
		||||
* Tue Apr 03 2007 Willy Tarreau <w@1wt.eu>
 | 
			
		||||
- updated to 1.3.8.2
 | 
			
		||||
 | 
			
		||||
* Sun Apr 01 2007 Willy Tarreau <w@1wt.eu>
 | 
			
		||||
- updated to 1.3.8.1
 | 
			
		||||
 | 
			
		||||
* Sun Mar 25 2007 Willy Tarreau <w@1wt.eu>
 | 
			
		||||
- updated to 1.3.8
 | 
			
		||||
 | 
			
		||||
* Wed Jan 26 2007 Willy Tarreau <w@1wt.eu>
 | 
			
		||||
- updated to 1.3.7
 | 
			
		||||
 | 
			
		||||
* Wed Jan 22 2007 Willy Tarreau <w@1wt.eu>
 | 
			
		||||
- updated to 1.3.6
 | 
			
		||||
 | 
			
		||||
* Wed Jan 07 2007 Willy Tarreau <w@1wt.eu>
 | 
			
		||||
- updated to 1.3.5
 | 
			
		||||
 | 
			
		||||
* Wed Jan 02 2007 Willy Tarreau <w@1wt.eu>
 | 
			
		||||
- updated to 1.3.4
 | 
			
		||||
 | 
			
		||||
* Wed Oct 15 2006 Willy Tarreau <w@1wt.eu>
 | 
			
		||||
- updated to 1.3.3
 | 
			
		||||
 | 
			
		||||
* Wed Sep 03 2006 Willy Tarreau <w@1wt.eu>
 | 
			
		||||
- updated to 1.3.2
 | 
			
		||||
 | 
			
		||||
* Wed Jul 09 2006 Willy Tarreau <w@1wt.eu>
 | 
			
		||||
- updated to 1.3.1
 | 
			
		||||
 | 
			
		||||
* Wed May 21 2006 Willy Tarreau <willy@w.ods.org>
 | 
			
		||||
- updated to 1.2.14
 | 
			
		||||
 | 
			
		||||
* Wed May 01 2006 Willy Tarreau <willy@w.ods.org>
 | 
			
		||||
- updated to 1.2.13
 | 
			
		||||
 | 
			
		||||
* Wed Apr 15 2006 Willy Tarreau <willy@w.ods.org>
 | 
			
		||||
- updated to 1.2.12
 | 
			
		||||
 | 
			
		||||
* Wed Mar 30 2006 Willy Tarreau <willy@w.ods.org>
 | 
			
		||||
- updated to 1.2.11.1
 | 
			
		||||
 | 
			
		||||
* Wed Mar 19 2006 Willy Tarreau <willy@w.ods.org>
 | 
			
		||||
- updated to 1.2.10
 | 
			
		||||
 | 
			
		||||
* Wed Mar 15 2006 Willy Tarreau <willy@w.ods.org>
 | 
			
		||||
- updated to 1.2.9
 | 
			
		||||
 | 
			
		||||
* Sat Jan 22 2005 Willy Tarreau <willy@w.ods.org>
 | 
			
		||||
- updated to 1.2.3 (1.1.30)
 | 
			
		||||
 | 
			
		||||
* Sun Nov 14 2004 Willy Tarreau <w@w.ods.org>
 | 
			
		||||
- updated to 1.1.29
 | 
			
		||||
- fixed path to config and init files
 | 
			
		||||
- statically linked PCRE to increase portability to non-pcre systems
 | 
			
		||||
 | 
			
		||||
* Sun Jun  6 2004 Willy Tarreau <willy@w.ods.org>
 | 
			
		||||
- updated to 1.1.28
 | 
			
		||||
- added config check support to the init script
 | 
			
		||||
 | 
			
		||||
* Tue Oct 28 2003 Simon Matter <simon.matter@invoca.ch>
 | 
			
		||||
- updated to 1.1.27
 | 
			
		||||
- added pid support to the init script
 | 
			
		||||
 | 
			
		||||
* Wed Oct 22 2003 Simon Matter <simon.matter@invoca.ch>
 | 
			
		||||
- updated to 1.1.26
 | 
			
		||||
 | 
			
		||||
* Thu Oct 16 2003 Simon Matter <simon.matter@invoca.ch>
 | 
			
		||||
- initial build
 | 
			
		||||
@ -1,55 +0,0 @@
 | 
			
		||||
#!/bin/sh
 | 
			
		||||
#
 | 
			
		||||
# config.rc sample with defaults :
 | 
			
		||||
# service haproxy
 | 
			
		||||
#   config /etc/haproxy/haproxy.cfg
 | 
			
		||||
#   maxconn 1024
 | 
			
		||||
#
 | 
			
		||||
config="/etc/haproxy/haproxy.cfg"
 | 
			
		||||
maxconn=1024
 | 
			
		||||
 | 
			
		||||
bin=/usr/sbin/haproxy
 | 
			
		||||
cmdline='$bin -D'
 | 
			
		||||
 | 
			
		||||
. $ROOT/sbin/init.d/default 
 | 
			
		||||
 | 
			
		||||
if [ -e "$config" ]; then
 | 
			
		||||
   maintfd=`grep '^\([^#]*\)\(listen\|server\)' $config|wc -l`
 | 
			
		||||
else
 | 
			
		||||
   maintfd=0
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
maxfd=$[$maxconn*2 + $maintfd]
 | 
			
		||||
if [ $maxfd -lt 100 ]; then
 | 
			
		||||
   maxfd=100;
 | 
			
		||||
fi
 | 
			
		||||
cmdline="$cmdline -n $maxconn -f $config"
 | 
			
		||||
ulimit -n $maxfd
 | 
			
		||||
 | 
			
		||||
# to get a core when needed, uncomment the following :
 | 
			
		||||
# cd /var/tmp
 | 
			
		||||
# ulimit -c unlimited
 | 
			
		||||
 | 
			
		||||
# soft stop
 | 
			
		||||
function do_stop {
 | 
			
		||||
   pids=`pidof -o $$ -- $PNAME`
 | 
			
		||||
   if [ ! -z "$pids" ]; then
 | 
			
		||||
      echo "Asking $PNAME to terminate gracefully..."
 | 
			
		||||
      kill -USR1 $pids
 | 
			
		||||
      echo "(use kill $pids to stop immediately)."
 | 
			
		||||
   fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# dump status
 | 
			
		||||
function do_status {
 | 
			
		||||
   pids=`pidof -o $$ -- $PNAME`
 | 
			
		||||
   if [ ! -z "$pids" ]; then
 | 
			
		||||
      echo "Dumping $PNAME status in logs."
 | 
			
		||||
      kill -HUP $pids
 | 
			
		||||
   else
 | 
			
		||||
      echo "Process $PNAME is not running."
 | 
			
		||||
   fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
main $*
 | 
			
		||||
 | 
			
		||||
@ -1,26 +0,0 @@
 | 
			
		||||
# This configuration is a simplified example of how to use ssl on front
 | 
			
		||||
# and backends with additional certificates loaded from a directory for SNI
 | 
			
		||||
# capable clients.
 | 
			
		||||
 | 
			
		||||
global
 | 
			
		||||
	maxconn 100
 | 
			
		||||
 | 
			
		||||
defaults
 | 
			
		||||
	mode http
 | 
			
		||||
	timeout connect 5s
 | 
			
		||||
	timeout client 5s
 | 
			
		||||
	timeout server 5s
 | 
			
		||||
 | 
			
		||||
frontend myfrontend
 | 
			
		||||
	# primary cert is /etc/cert/server.pem
 | 
			
		||||
	# /etc/cert/certdir/ contains additional certificates for SNI clients
 | 
			
		||||
	bind :443 ssl crt /etc/cert/server.pem crt /etc/cert/certdir/
 | 
			
		||||
	bind :80
 | 
			
		||||
	default_backend mybackend
 | 
			
		||||
 | 
			
		||||
backend mybackend
 | 
			
		||||
	# a http backend
 | 
			
		||||
	server s3 10.0.0.3:80
 | 
			
		||||
	# a https backend
 | 
			
		||||
	server s4 10.0.0.3:443 ssl verify none
 | 
			
		||||
 | 
			
		||||
@ -1,78 +0,0 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
 | 
			
		||||
## contrib by prizee.com
 | 
			
		||||
 | 
			
		||||
socket='/var/run/haproxy.stat'
 | 
			
		||||
 | 
			
		||||
if ! type socat >/dev/null 2>&1 ; then
 | 
			
		||||
    echo "can't find socat in PATH" 1>&2
 | 
			
		||||
    exit 1
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
printUsage ()
 | 
			
		||||
{
 | 
			
		||||
    echo -e "Usage : $(basename $0) [options] -s section
 | 
			
		||||
--section -s section\t: section to use ( --list format)
 | 
			
		||||
Options :
 | 
			
		||||
--socket -S [socket]\t: socket to use (default: /var/run/haproxy.stat)
 | 
			
		||||
--list -l\t\t: print available sections
 | 
			
		||||
--help -h\t\t: print this  message"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
getRawStat ()
 | 
			
		||||
{
 | 
			
		||||
    if [ ! -S $socket ] ; then
 | 
			
		||||
	echo "$socket socket unavailable" 1>&2
 | 
			
		||||
	exit 1
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    if ! printf "show stat\n" | socat unix-connect:${socket} stdio | grep -v "^#" ; then
 | 
			
		||||
	echo "cannot read $socket" 1>&2
 | 
			
		||||
	exit 1
 | 
			
		||||
    fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
getStat ()
 | 
			
		||||
{
 | 
			
		||||
    stats=$(getRawStat | grep $1 | awk -F "," '{print $5" "$8}')
 | 
			
		||||
    export cumul=$(echo $stats | cut -d " " -f2)
 | 
			
		||||
    export current=$(echo $stats | cut -d " " -f1)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
showList ()
 | 
			
		||||
{
 | 
			
		||||
    getRawStat | awk -F "," '{print $1","$2}'
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
set -- `getopt -u -l socket:,section:,list,help -- s:S:lh "$@"`
 | 
			
		||||
 | 
			
		||||
while true ; do
 | 
			
		||||
    case $1 in
 | 
			
		||||
	--socket|-S) socket=$2 ; shift 2 ;;
 | 
			
		||||
	--section|-s) section=$2 ; shift 2 ;;
 | 
			
		||||
	--help|-h) printUsage ; exit 0 ;;
 | 
			
		||||
	--list|-l) showList ; exit 0 ;;
 | 
			
		||||
	--) break ;;
 | 
			
		||||
    esac
 | 
			
		||||
done
 | 
			
		||||
 | 
			
		||||
if [ "$section" = "" ] ; then
 | 
			
		||||
    echo "section not specified, run '$(basename $0) --list' to know available sections" 1>&2
 | 
			
		||||
    printUsage
 | 
			
		||||
    exit 1
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
cpt=0
 | 
			
		||||
totalrate=0
 | 
			
		||||
while true ; do
 | 
			
		||||
    getStat $section
 | 
			
		||||
    if [ "$cpt" -gt "0" ] ; then
 | 
			
		||||
	sessionrate=$(($cumul-$oldcumul))
 | 
			
		||||
	totalrate=$(($totalrate+$sessionrate))
 | 
			
		||||
	averagerate=$(($totalrate/$cpt))
 | 
			
		||||
	printf "$sessionrate sessions/s (avg: $averagerate )\t$current concurrent sessions\n"
 | 
			
		||||
    fi
 | 
			
		||||
    oldcumul=$cumul
 | 
			
		||||
    sleep 1
 | 
			
		||||
    cpt=$(($cpt+1))
 | 
			
		||||
done
 | 
			
		||||
@ -177,17 +177,6 @@ echo "Updating VERDATE ..."
 | 
			
		||||
echo '$Format:%ci$' > VERDATE
 | 
			
		||||
echo "$DATE" >> VERDATE
 | 
			
		||||
 | 
			
		||||
echo "Updating haproxy.spec ..."
 | 
			
		||||
sed -e "s/^Version: .*/Version: $NEW/" < examples/haproxy.spec >examples/haproxy.spec- && mv examples/haproxy.spec- examples/haproxy.spec
 | 
			
		||||
 | 
			
		||||
(sed -ne '0,/^%changelog/p';
 | 
			
		||||
 date -d "$DATE" "+* %a %b %e %Y $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL>"
 | 
			
		||||
 echo "- updated to $(cat VERSION)"
 | 
			
		||||
 echo
 | 
			
		||||
) < examples/haproxy.spec >examples/haproxy.spec-
 | 
			
		||||
sed -ne '0,/^%changelog/d;p' < examples/haproxy.spec >>examples/haproxy.spec-
 | 
			
		||||
mv examples/haproxy.spec- examples/haproxy.spec
 | 
			
		||||
 | 
			
		||||
# updating branch and date in all modified doc files except the outdated architecture.txt
 | 
			
		||||
for file in doc/intro.txt doc/configuration.txt doc/management.txt $(git diff --name-only v${OLD}.. -- doc); do
 | 
			
		||||
	if [ ! -e "$file" ]; then continue; fi
 | 
			
		||||
@ -207,7 +196,7 @@ sed -e "s:^\(#define\s*PRODUCT_BRANCH\s*\)\"[^\"]*\":\1\"$BRANCH\":" \
 | 
			
		||||
    -i include/common/version.h
 | 
			
		||||
 | 
			
		||||
if [ -n "$INTERACTIVE" ]; then
 | 
			
		||||
	vi CHANGELOG VERSION VERDATE examples/haproxy*.spec \
 | 
			
		||||
	vi CHANGELOG VERSION VERDATE \
 | 
			
		||||
	   src/haproxy.c doc/configuration.txt \
 | 
			
		||||
	   $(git diff --name-only v${OLD}.. -- doc)
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user