App-Munner

 view release on metacpan or  search on metacpan

bin/munner  view on Meta::CPAN

    foreach my $pair (@$list) {
        next
          if !$pair;

        next
          if ref $pair ne "HASH";

        my ( $key, $val ) = %$pair;

        if ( $export ) {
            $env .= "export ";
        }

        $env .= join "=", quotemeta($key), $val;

        if ( $export ) {
            $env .= ";\n";
        }
        else {
            $env .= " \\\n";
        }
    }

    return $env;
}

sub _env_hash {
    my $list = shift
      or return q{};

    return config_help("env need to be in list")
      if ref $list ne "ARRAY";

    my %env = ();

    foreach my $pair (@$list) {
        next
          if !$pair;

        next
          if ref $pair ne "HASH";

        my ( $key, $val ) = %$pair;

        $env{$key} = $val;
    }

    return \%env;
}

sub _make_run_script {
    my $app_name = shift;
    my $command  = shift
      or die "$app_name is MISSING RUN COMMAND.";

    my $filename = shift;
    my $fh       = shift;
    print $fh "#!/bin/sh\n";
    print $fh $command;
    close $fh;
    chmod 0700, $filename;
}

sub killer {
    foreach my $app_name (@apps) {
        my $app_config = $apps{$app_name};
        my $pid        = delete $app_config->{pid}
          or next;
        kill sig_num("INT"), $pid;
    }
    exit;
}

sub group_of_apps {
    my $wanted_groups = shift
      or return ();

    return ()
      if ref $wanted_groups ne "ARRAY"
      or !@$wanted_groups;

    my $groups = $config->{groups}
      or config_help("No group is define in your config");

    config_help("Group config is missing or invalid")
      if ref $groups ne "HASH"
      or !%$groups;

    foreach my $group_name (@$wanted_groups) {
        my $group_config = $groups->{$group_name}
          or config_help("Group name $group_name is not defined in the config");

        my $apps = $group_config->{apps} || [];

        config_help("groups.$group_name.apps need to be an array")
          if ref $apps ne "ARRAY";

        push @apps, @$apps;

        my $grps = $group_config->{groups} || [];

        config_help("groups.$group_name.groups need to be an array")
          if ref $grps ne "ARRAY";

        if (@$grps) {
            push @apps, group_of_apps($grps);
        }
    }

    return uniq @apps;
}

sub config_help {
    my $message = shift || q{};
    print <<"HELP";
$message

munner.yml config template:
---------------------------
base_dir: "... base directory to find the app ..."
apps:



( run in 0.797 second using v1.01-cache-2.11-cpan-5837b0d9d2c )