]>
Commit | Line | Data |
---|---|---|
1 | #!/usr/bin/perl | |
2 | ||
3 | use lib '../../'; | |
4 | use strict; | |
5 | use warnings; | |
6 | use Time::HiRes qw( usleep ualarm gettimeofday tv_interval ); | |
7 | use PVE::INotify; | |
8 | use PVE::AccessControl; | |
9 | use Net::SSLeay qw(get_https post_https sslcat make_headers make_form); | |
10 | ||
11 | use Data::Dumper; | |
12 | ||
13 | my $hostname = PVE::INotify::read_file("hostname"); | |
14 | ||
15 | # normally you use username/password, | |
16 | # but we can simply create a ticket if we are root | |
17 | my $ticket = PVE::AccessControl::assemble_ticket('root@pam'); | |
18 | ||
19 | my $wcount = 10; | |
20 | my $qcount = 100; | |
21 | ||
22 | sub test_rpc { | |
23 | my ($host) = @_; | |
24 | ||
25 | for (my $i = 0; $i < $qcount; $i++) { | |
26 | eval { | |
27 | my ($page, $response, %reply_headers) | |
28 | = get_https($host, 8006, '/api2/json', | |
29 | make_headers(Cookie => "PVEAuthCookie=$ticket")); | |
30 | die "$response\n" if $response !~ m/200 OK/; | |
31 | }; | |
32 | ||
33 | my $err = $@; | |
34 | ||
35 | if ($err) { | |
36 | ||
37 | print "ERROR: $err\n"; | |
38 | last; | |
39 | } | |
40 | } | |
41 | } | |
42 | ||
43 | sub run_tests { | |
44 | my ($host) = @_; | |
45 | ||
46 | my $workers; | |
47 | ||
48 | my $starttime = [gettimeofday]; | |
49 | ||
50 | for (my $i = 0; $i < $wcount; $i++) { | |
51 | if (my $pid = fork ()) { | |
52 | $workers->{$pid} = 1; | |
53 | } else { | |
54 | test_rpc ($host); | |
55 | exit (0); | |
56 | } | |
57 | } | |
58 | ||
59 | # wait for children | |
60 | 1 while (wait > 0); | |
61 | ||
62 | my $elapsed = int(tv_interval ($starttime) * 1000); | |
63 | ||
64 | my $tpq = $elapsed / ($wcount*$qcount); | |
65 | ||
66 | print "$host: $tpq ms per query\n"; | |
67 | } | |
68 | ||
69 | run_tests($hostname); # test 'pveproxy' |