$self->{cur_time} = 0;
$self->{loop_delay} = 0;
+ my $statusdir = $self->{hardware}->statusdir();
+ my $logfile = "$statusdir/log";
+ $self->{logfh} = IO::File->new(">>$logfile") ||
+ die "unable to open '$logfile' - $!";
+
return $self;
}
return $self->{cur_time};
}
+sub log {
+ my ($self, $level, $msg) = @_;
+
+ chomp $msg;
+
+ my $time = $self->get_time();
+
+ my $line = sprintf("%-5s %5d %12s: $msg\n", $level, $time, "$self->{nodename}/$self->{log_id}");
+ print $line;
+
+ $self->{logfh}->print($line);
+ $self->{logfh}->flush();
+}
+
sub sleep {
my ($self, $delay) = @_;
}
sub get_ha_agent_lock {
- my ($self) = @_;
+ my ($self, $node) = @_;
- my $res = $self->SUPER::get_ha_agent_lock();
+ my $res = $self->SUPER::get_ha_agent_lock($node);
++$self->{loop_delay};
return $res;
$self->{cur_time} += 1; # easier for simulation
}
+sub can_fork {
+ my ($self) = @_;
+
+ return 0;
+}
+
1;
$self->{loop_count} = 0;
$self->{cur_time} = 0;
+ my $statusdir = $self->statusdir();
+ my $logfile = "$statusdir/log";
+ $self->{logfh} = IO::File->new(">>$logfile") ||
+ die "unable to open '$logfile' - $!";
+
foreach my $node (sort keys %{$self->{nodes}}) {
my $d = $self->{nodes}->{$node};
return $self->{cur_time};
}
+sub log {
+ my ($self, $level, $msg, $id) = @_;
+
+ chomp $msg;
+
+ my $time = $self->get_time();
+
+ $id = 'hardware' if !$id;
+
+ my $line = sprintf("%-5s %5d %12s: $msg\n", $level, $time, $id);
+ print $line;
+
+ $self->{logfh}->print($line);
+ $self->{logfh}->flush();
+}
+
# simulate hardware commands
# power <node> <on|off>
# network <node> <on|off>
die "simulation end\n" if $self->{cur_time} > $max_sim_time;
+ foreach my $node (@nodes) {
+ my $d = $self->{nodes}->{$node};
+ # forced time update
+ $d->{lrm_env}->loop_start_hook($self->get_time());
+ $d->{crm_env}->loop_start_hook($self->get_time());
+ }
+
# apply new comand after 5 loop iterations
if (($self->{loop_count} % 5) == 0) {