#!/usr/bin/perl

=encoding UTF-8
=cut

=head1 DESCRIPTION

Идея - это скрипт должен быть в кроне чтобы он запускался раз в час.

При каждом запуске скрипт делает:

 * проверяет есть ли в регистри докерный образ с базой за сегодня,
   если такой есть, то скачивает на машину

Для того чтобы скрипт работал ему нужен конфиг:

    $ cat /etc/registry_partner.json
    {
        "username" : "john",
        "password" : "secret"
    }

=cut

# common modules
use strict;
use warnings FATAL => 'all';
use feature 'say';
use utf8;
use open qw(:std :utf8);

use Carp;
use JSON::PP;
use File::Slurp;
use Moment;

use lib::abs qw(
    /var/www/creator.partner.yandex-team.ru/api/lib/
);
use Utils;

# global vars

# subs

sub get_today_docker_db_image {

    my $image = find_today_docker_image();

    if (defined($image)){
        run_cmd("docker pull $image &> /dev/null");
    }

    return 1;
}

sub remove_old_docker_db_images {
    my (%p) = @_;

    my $max_left = delete $p{max_left};

    my @images_to_delete = get_images_to_delete(
        current_images => [ get_current_docker_db_images() ],
        max_left => $max_left,
    );

    foreach my $image (@images_to_delete) {
        `docker rmi $image`;
    }
}

sub to_pretty_json {
    my ($data) = @_;

    my $json_coder = JSON::PP
        ->new
        ->pretty
        ->canonical
        ->indent_length(4)
        ;

    my $pretty_json = $json_coder->encode($data);

    return $pretty_json;
}

sub save_docker_db_images_list {

    my @images = get_current_docker_db_images();

    write_file(
        '/local/creator/meta/docker_db_images.json',
        {
            binmode => ':utf8',
        },
        to_pretty_json \@images,
    );
}

# main
sub main {

    docker_registry_login();

    get_today_docker_db_image();
    remove_old_docker_db_images( max_left => 30 );
    save_docker_db_images_list();

}
main();

1;
__END__
