The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

Dancer2::Plugin::Shutdown - Graceful shutdown your Dancer2 application

VERSION

version 0.002

SYNOPSIS

    use Dancer2;
    use Dancer2::Plugin::Shutdown;

    $SIG{HUP} = sub {
        # on hangup, shutdown in 120 seconds
        shutdown_at(120);
    };

DESCRIPTION

This plugin gracefully shutdowns your application. This is done by returning a 503 error on every request after "shutdown_at" is called.

An additional check allows active sessions to proceed normally, but the session cookie expires as soon as possible.

The behaviour can be changed with shutdown_session_validator, the default behaviour is similiar to:

    shutdown_session_validator(sub {
        my ($app, $rest, $sessid) = @_;
        # $sessid is session->id
        # or undef if no active session is detected
        return 0 unless $sessid;
        # $rest is the remaining time in seconds
        # till planned shutdown
        $app->session->expires($rest);
        # let valid sessions survive until shutdown
        return 1;
    });

Additionally a Warning header is added with code 199 and a message similiar to: Application shuts down in 106 seconds.

Hint: The expiration of the session cookie will not extended.

FUNCTIONS

shutdown_at

Invokation: shutdown_at( $time )

$time may be an absolute or a relative timestamp. A relative timestamp is indicated by an integer less than the current timestamp, so:

    shutdown_at(120);

is the same as:

    shutdown_at(time+120);

shutdown_session_validator

Invokation: shutdown_session_validator( sub { ... } )

Changes the session validator subroutine. The sub will be called before every request with this arguments:

  • $app

    An instance of Dancer2::Core::App

  • $rest

    The remaining time in seconds till application shutdown

  • $session

    The session id, but only when a valid and active sesion is detected. Otherwise undefined.

PROPAGATION

This plugin works only in single-instance environments. With Starman or Corona, the propagation can be done via Redis. There is a plugin that fits this need: Dancer2::Plugin::Shutdown::Redis.

BUGS

Please report any bugs or feature requests on the bugtracker website https://github.com/zurborg/libdancer2-plugin-shutdown-perl/issues

When submitting a bug or request, please include a test-file or a patch to an existing test-file that illustrates the bug or desired feature.

AUTHOR

David Zurborg <zurborg@cpan.org>

COPYRIGHT AND LICENSE

This software is Copyright (c) 2015 by David Zurborg.

This is free software, licensed under:

  The ISC License