Commit | Line | Data |
4536f655 |
1 | |
2 | package Stem::Load::Driver ; |
3 | |
4 | use strict ; |
5 | |
6 | use Time::HiRes qw( gettimeofday tv_interval ) ; |
7 | |
8 | my $attr_spec = [ |
9 | |
10 | |
11 | { |
12 | 'name' => 'reg_name', |
13 | 'help' => <<HELP, |
14 | Name this Cell was registered with. |
15 | HELP |
16 | }, |
17 | { |
18 | 'name' => 'load_addr', |
19 | 'help' => <<HELP, |
20 | Address to send the load messages |
21 | HELP |
22 | }, |
23 | { |
24 | 'name' => 'load_data', |
25 | 'help' => <<HELP, |
26 | Data string to send. |
27 | HELP |
28 | }, |
29 | { |
30 | 'name' => 'data_sizes', |
31 | 'help' => <<HELP, |
32 | Range of data sizes to select from randomly |
33 | HELP |
34 | }, |
35 | { |
36 | 'name' => 'max_msg_cnt', |
37 | 'default' => 1000, |
38 | 'help' => <<HELP, |
39 | Maximum number of messages to send |
40 | HELP |
41 | }, |
42 | { |
43 | 'name' => 'max_duration', |
44 | 'default' => 10, |
45 | 'help' => <<HELP, |
46 | Maximum number of seconds to run |
47 | HELP |
48 | }, |
49 | ] ; |
50 | |
51 | sub new { |
52 | |
53 | my( $class ) = shift ; |
54 | |
55 | my $self = Stem::Class::parse_args( $attr_spec, @_ ) ; |
56 | return $self unless ref $self ; |
57 | |
58 | return $self ; |
59 | } |
60 | |
61 | sub go_cmd { |
62 | |
63 | my( $self, $msg ) = @_ ; |
64 | |
65 | $self->{'echo_cnt'} = 0 ; |
66 | |
67 | $self->{'start_time'} = gettimeofday() ; |
68 | |
69 | $self->{'go_from_addr'} = $msg->from() ; |
70 | |
71 | $self->send_load_msg() ; |
72 | |
73 | return "Load Started\n" ; |
74 | } |
75 | |
76 | sub response_in { |
77 | |
78 | my( $self, $msg ) = @_ ; |
79 | |
80 | my $time_delta = gettimeofday() - $self->{'start_time'} ; |
81 | |
82 | if ( ++$self->{'echo_cnt'} >= $self->{'max_msg_cnt'} || |
83 | $time_delta > $self->{'max_duration'} ) { |
84 | |
85 | my $msgs_per_second = $self->{'echo_cnt'} / $time_delta ; |
86 | |
87 | my $done_msg = Stem::Msg->new( |
88 | 'to' => $self->{'go_from_addr'}, |
89 | 'from' => $self->{'reg_name'}, |
90 | 'type' => 'response', |
91 | 'data' => <<DATA, |
92 | sent $self->{'echo_cnt'} messages in $time_delta seconds |
93 | $msgs_per_second messages per second |
94 | DATA |
95 | ) ; |
96 | |
97 | $done_msg->dispatch() ; |
98 | |
99 | return ; |
100 | } |
101 | |
102 | $self->send_load_msg() ; |
103 | |
104 | return ; |
105 | } |
106 | |
107 | |
108 | sub send_load_msg { |
109 | |
110 | my( $self ) = @_ ; |
111 | |
112 | $self->{'echo_msg'} ||= Stem::Msg->new( |
113 | 'to' => $self->{'load_addr'}, |
114 | 'from' => $self->{'reg_name'}, |
115 | 'type' => 'echo', |
116 | 'data' => \'echo me', |
117 | ) ; |
118 | |
119 | $self->{'echo_msg'}->dispatch() ; |
120 | |
121 | return ; |
122 | } |
123 | |
124 | 1 ; |