#!/usr/bin/perl -w

=head1 NAME

    mk-zk-delivery-files - создание файлов для zk-delivery

=head1 DESCRIPTION

    Параметры:
    -d files=zk_node_path1:file_path1:hooks_dir1:hooks_status_file1,...

=cut

use strict;
use warnings;

use File::Basename qw/dirname/;

use SvnRelease::MkFiles;

my $mkfiles = SvnRelease::MkFiles->new(
    files => [
        {tmpl => 'cfg', file => "/etc/zk-delivery/[% instance %].cfg", },
        {tmpl => 'init', file => "/etc/event.d/zk-delivery-[% instance %]", },
        {tmpl => 'init', file => "/etc/init/zk-delivery-[% instance %].conf", },
        {tmpl => 'zabbix_conf', file => "/etc/zabbix/conf.d/zk-delivery-[% instance %].conf", },
        {tmpl => 'monrun_conf', file => "/etc/monrun/conf.d/zk-delivery-[% instance %].conf", },
        {tmpl => 'logrotate_d', file => "/etc/logrotate.d/zk-delivery-[% instance %]", },
        {tmpl => 'debian_postinst', file => "/DEBIAN/postinst", perm => 0755, },
        {dir => '/var/log/zk-delivery', },
        {dir => '/var/run'},
        ],
    templates_fh => \*DATA,
    substvars => {
        'zkdelivery:Depends' => join(', ',
                                'yandex-du-zk-delivery',
                                'logrotate',
                                'upstart',
            ),
    },
    );

my ($instance, @dummy) = $mkfiles->parse_options("instance_name");
if (@dummy || $instance !~ /^[a-z0-9_\-]+$/) {
    $mkfiles->usage();
}

$mkfiles->{vars}->{servers} ||= 'localhost';
$mkfiles->{vars}->{log} ||= '/var/log/zk-delivery/common.log';
$mkfiles->{vars}->{user} ||= 'root';
$mkfiles->{vars}->{port} ||= '2181';
$mkfiles->{vars}->{local_server} ||= '127.0.0.1';

$mkfiles->{vars}->{instance} = $instance;

# добавляем директории для файлов
for my $file (map {(split(":"))[1]} split(',', $mkfiles->{vars}->{files})) {
    push @{$mkfiles->{files}}, {dir => dirname($file)};
}

$mkfiles->mk();

__DATA__
<< cfg
---
servers: [% FOR s = servers.split(',') %][% s %]:[% port %][% ',' IF !loop.last %][% END %]
local_server: [% FOR s = local_server.split(',') %][% s %]:[% port %][% ',' IF !loop.last %][% END %]
log: [% log %]
alive_file: /var/run/zk-delivery-[% instance %].alive
files: [% FOR f = files.split(','); fi = f.split(':'); %]
  - zk_path: [% fi.0 %]
    file: [% fi.1 %]
    hooks_dir: [% fi.2 %]
    hooks_status_file: [% fi.3 %][% END %]

<< init
description "Zookeeper delivery configuration"

start on startup
respawn
respawn limit 100 10

script
    ulimit -v 1000000
    sudo -u [% user %] /usr/local/bin/zk-delivery -c /etc/zk-delivery/[% instance %].cfg >>[% log %] 2>>[% log %] || sleep 10
end script


<< zabbix_conf
UserParameter=zk-delivery-[% instance %].age,expr `date +%s` - `stat -c %Z /var/run/zk-delivery-[% instance %].alive`


<< logrotate_d
[% log %] {
	weekly
	rotate 7
	missingok
	create 644 [% user %] [% user %]
	compress
}

<< debian_postinst
#!/bin/bash -e

. /usr/share/debconf/confmodule

initctl start zk-delivery-[% instance %] || true


<< monrun_conf
[zk-delivery-[% instance %]]
execution_interval=60
execution_timeout=30
command=[ $((`date +%s` - `stat -c %Z /var/run/zk-delivery-[% instance %].alive 2>/dev/null || echo 0`)) -le 90 ] && echo '0;Ok' || echo '2;Old monfile.'
restart_command=/usr/sbin/service zk-delivery-[% instance %] restart
restart_attempt=10
restart_window=600
restart_min_interval=60
restart_where_description=Old monfile

[zk-delivery-hooks-[% instance %]]
execution_interval=60
execution_timeout=30
command=/usr/local/bin/zk-delivery-hooks-mon -c /etc/zk-delivery/[% instance %].cfg

