]> git.proxmox.com Git - pve-manager.git/blob - bin/test/perftest1.pl
7c6c470e443655d1fec2eb698d2193dd11da22df
[pve-manager.git] / bin / test / perftest1.pl
1 #!/usr/bin/perl -w
2
3 use lib '../../';
4 use strict;
5 use Time::HiRes qw( usleep ualarm gettimeofday tv_interval );
6 use PVE::API2Client;
7 use PVE::INotify;
8
9 use Data::Dumper;
10
11 my $hostname = PVE::INotify::read_file("hostname");
12
13 # normally you use username/password,
14 # but we can simply create a ticket if we are root
15 my $ticket = PVE::AccessControl::assemble_ticket('root@pam');
16
17 my $wcount = 1;
18 my $qcount = 100;
19
20 sub test_rpc {
21 my ($host) = @_;
22
23 my $conn = PVE::API2Client->new(
24 #username => 'root@pam',
25 #password => 'yourpassword',
26 ticket => $ticket,
27 host => $host,
28 );
29
30 for (my $i = 0; $i < $qcount; $i++) {
31 eval {
32 my $res = $conn->get("api2/json", {});
33 };
34
35 my $err = $@;
36
37 if ($err) {
38
39 print "ERROR: $err\n";
40 last;
41 }
42 }
43 }
44
45 sub run_tests {
46 my ($host) = @_;
47
48 my $workers;
49
50 my $starttime = [gettimeofday];
51
52 for (my $i = 0; $i < $wcount; $i++) {
53 if (my $pid = fork ()) {
54 $workers->{$pid} = 1;
55 } else {
56 test_rpc ($host);
57 exit (0);
58 }
59 }
60
61 # wait for children
62 1 while (wait > 0);
63
64 my $elapsed = int(tv_interval ($starttime) * 1000);
65
66 my $tpq = $elapsed / ($wcount*$qcount);
67
68 print "$host: $tpq ms per query\n";
69 }
70
71 # TODO: Apache is much slower, why? (SSL?)
72
73 run_tests("localhost"); # test 'pvedaemon'
74
75 run_tests($hostname); # test 'apache'