The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package Tapper::MCP::State::Plugin::OSRC;
our $AUTHORITY = 'cpan:TAPPER';
$Tapper::MCP::State::Plugin::OSRC::VERSION = '5.0.3';
use strict;
use warnings;
use Tapper::MCP::Net::Reset::OSRC;
use Tapper::MCP::Net;
use Moose;

has cfg => (is => 'rw',
           isa => 'HashRef',
           default => sub {{}},
           );


sub BUILD{
        my ($self) = @_;
        $self->cfg->{reset_remain} = $self->cfg->{mcp_callback_handler}{pluginoptions}{try_reset} || 0;
}


sub keep_alive
{
        my ($self, $state_details) = @_;

        # try resetting only in reboot states
        return (1, undef) if $state_details->current_state !~ m/reboot/;

        return (1, undef) if $self->cfg->{reset_remain} == 0;


        my $resetter = Tapper::MCP::Net::Reset::OSRC->new();
        my $options;
        if ($self->cfg->{reset_plugin} eq 'OSRC') {
                $options = $self->cfg->{reset_plugin_options}
        } else {
                $options = $self->cfg->{mcp_callback_handler}{options}{reset_options};
        }
        $resetter->reset_host($self->cfg->{hostname}, $options);
        $self->cfg->{reset_remain}--;
        return (0, $self->cfg->{keep_alive}{timeout_receive});
}

1;

__END__

=pod

=encoding UTF-8

=head1 NAME

Tapper::MCP::State::Plugin::OSRC

=head1 DESCRIPTION

This is a plugin for Tapper::MCP::State. It offers callback for MCP state changes.

=head1 NAME

Tapper::MCP::State::Plugin::OSRC - Handle callbacks for MCP states according to OSRC needs

=head1

To use it add the following config to your Tapper config file:

 mcp_callback_handler:
   plugin: OSRC
   pluginoptions:
     try_reset: 3

This configures Tapper MCP to use the OSRC plugin for state callbacks.

=head1 FUNCTIONS

=head2 keep_alive

Handle keep_alive timeout.

@param Tapper::MCP::State::Details object (for access to state details)

@return success - (0, timeout span)
@return error   - (1, undef)

=head1 AUTHORS

=over 4

=item *

AMD OSRC Tapper Team <tapper@amd64.org>

=item *

Tapper Team <tapper-ops@amazon.com>

=back

=head1 COPYRIGHT AND LICENSE

This software is Copyright (c) 2016 by Advanced Micro Devices, Inc..

This is free software, licensed under:

  The (two-clause) FreeBSD License

=cut