aboutsummaryrefslogtreecommitdiffstats
path: root/bin/youri-check.in
diff options
context:
space:
mode:
Diffstat (limited to 'bin/youri-check.in')
-rwxr-xr-xbin/youri-check.in395
1 files changed, 0 insertions, 395 deletions
diff --git a/bin/youri-check.in b/bin/youri-check.in
deleted file mode 100755
index bbb5e4d..0000000
--- a/bin/youri-check.in
+++ /dev/null
@@ -1,395 +0,0 @@
-#!/usr/bin/perl
-# $Id$
-
-=head1 NAME
-
-youri-check - package check agent
-
-=head1 VERSION
-
-Version 1.0
-
-=head1 SYNOPSIS
-
-youri-check [options] <mode>
-
-Options:
-
- --config <file> use file <file> as config file
- --skip-media <media> skip media <media>
- --skip-plugin <plugin> skip plugin <plugin>
- --parallel parallel run
- --verbose verbose run
- --test test run
- --help print this help message
-
-=head1 DESCRIPTION
-
-B<youri-check> allows to check packages in a repository.
-
-In input mode, all medias defined in configuration are passed to a list of
-input plugins, each of them storing their result in a persistent resultset. In
-output mode, this resultset is passed to a list of output plugins, each of them
-producing arbitrary effects.
-
-=head1 OPTIONS
-
-=over
-
-=item B<--config> <file>
-
-Use given file as configuration, instead of normal one.
-
-=item B<--skip-media> <media>
-
-Skip media with given identity.
-
-=item B<--skip-plugin> <plugin>
-
-Skip plugin with given identity.
-
-=item B<--parallel>
-
-Run all plugins parallelously
-
-=item B<--verbose>
-
-Produce more verbose output (can be used more than once)
-
-=item B<--test>
-
-Don't perform any modification.
-
-=item B<--help>
-
-Print a brief help message and exits.
-
-=back
-
-=head1 CONFIGURATION
-
-Configuration is read from the first file found among:
-
-=over
-
-=item * the one specified by B<--config> option on command-line
-
-=item * $HOME/.youri/check.conf
-
-=item * @sysconfdir@/youri/check.conf
-
-=back
-
-All additional configuration files specified by B<includes> directive are then
-processed. Then command line options. Any directive overrides prior definition.
-
-=over
-
-=item B<includes> I<files>
-
-Uses space-separated list I<files> as a list of additional configuration files.
-
-=item B<resolver> I<id>
-
-Declare a maintainer resolver object with identity I<id>.
-
-=item B<preferences> I<id>
-
-Declare a maintainer preferences object with identity I<id>.
-
-=item B<resultset> I<id>
-
-Declare a resultset object with identity I<id>.
-
-=item B<medias> I<ids>
-
-Declares a list of media objects with identity taken in space-separated list
-I<ids>.
-
-=item B<inputs> I<ids>
-
-Declares a list of input plugin objects with identity taken in space-separated
-list I<ids>.
-
-=item B<outputs> I<ids>
-
-Declares a list of output plugin objects with identity taken in space-separated
-list I<ids>.
-
-=back
-
-Each object declared in configuration must be fully defined later, using a
-configuration section, starting with bracketed object identity, followed by at
-least a class directive, then any number of additional object-specific
-directives.
-
-Example:
-
- objects = foo
-
- [foo]
- class = Foo::Bar
- key1 = value1
- key2 = value2
-
-=head1 SEE ALSO
-
-Youri::Config, for configuration file format.
-
-Each used plugin man page, for available options.
-
-=head1 COPYRIGHT AND LICENSE
-
-Copyright (C) 2002-2006, YOURI project
-
-This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
-
-=cut
-
-use strict;
-use warnings;
-
-use Youri::Config;
-use Youri::Utils;
-use Pod::Usage;
-use Net::Config qw/%NetConfig/;
-use DateTime;
-
-my $config = Youri::Config->new(
- command_spec => [
- 'config=s',
- 'skip-plugin=s@',
- 'skip-media=s@',
- 'parallel!',
- 'help|h!',
- 'test|t!',
- 'verbose|v!'
- ],
- file_spec => [
- 'includes=s',
- 'resolver=s',
- 'preferences=s',
- 'resultset=s',
- 'medias=s',
- 'inputs=s',
- 'outputs=s'
- ],
- directories => [ '@sysconfdir@', "$ENV{HOME}/.youri" ],
- file_name => 'check.conf',
- caller => $0,
-);
-
-pod2usage(
- -verbose => 0,
- -message => "No mode specified, aborting\n"
-) unless @ARGV;
-
-my $mode = $ARGV[0];
-
-# convenient global flags
-my $test = $config->get('test');
-my $verbose = $config->get('verbose');
-
-# libnet configuration
-my %netconfig = $config->get_section('netconfig');
-$NetConfig{$_} = $netconfig{$_} foreach keys %netconfig;
-
-# resultset creation
-my $resultset_id = $config->get('resultset');
-die "No resultset defined" unless $resultset_id;
-
-report("Creating resultset $resultset_id");
-my $resultset = create_instance(
- 'Youri::Check::Resultset',
- test => $test,
- verbose => $verbose > 0 ? $verbose - 1 : 0,
- $config->get_section($resultset_id)
-);
-
-my $children;
-
-my %skip_plugins = map { $_ => 1 } @{$config->get('skip-plugin')};
-
-if ($mode eq 'input') {
-
- # additional objects
-
- my $resolver;
- my $resolver_id = $config->get('resolver');
- if ($resolver_id) {
- report("Creating maintainer resolver $resolver_id");
- eval {
- $resolver = create_instance(
- 'Youri::Check::Maintainer::Resolver',
- test => $test,
- verbose => $verbose > 1 ? $verbose - 2 : 0,
- $config->get_section($resolver_id)
- );
- };
- print STDERR "Failed to create maintainer resolver $resolver_id: $@\n" if $@;
- }
-
- my $preferences;
- my $preferences_id = $config->get('preferences');
- if ($preferences_id) {
- report("Creating maintainer preferences $preferences_id");
- eval {
- $preferences = create_instance(
- 'Youri::Check::Maintainer::Preferences',
- test => $test,
- verbose => $verbose > 1 ? $verbose - 2 : 0,
- $config->get_section($preferences_id)
- );
- };
- print STDERR "Failed to create maintainer preferences $preferences_id: $@\n" if $@;
- }
-
- my @medias;
- my %skip_medias = map { $_ => 1 } @{$config->get('skip-media')};
- foreach my $id (split(/\s+/, $config->get('medias'))) {
- next if $skip_medias{$id};
- report("Creating media $id");
- eval {
- push(
- @medias,
- create_instance(
- 'Youri::Media',
- id => $id,
- test => $test,
- verbose => $verbose > 0 ? $verbose - 1 : 0,
- $config->get_section($id)
- )
- );
- };
- print STDERR "Failed to create media $id: $@\n" if $@;
- }
-
- # prepare resultset
- $resultset->reset();
- $resultset->set_resolver($resolver);
-
-
- foreach my $id (split(/\s+/, $config->get('inputs'))) {
- next if $skip_plugins{$id};
- report("Creating input $id");
- my $input;
- eval {
- $input = create_instance(
- 'Youri::Check::Input',
- id => $id,
- test => $test,
- verbose => $verbose > 0 ? $verbose - 1 : 0,
- resolver => $resolver,
- preferences => $preferences,
- $config->get_section($id)
- );
- };
- if ($@) {
- print STDERR "Failed to create input $id: $@\n";
- } else {
- if ($config->get('parallel')) {
- # fork
- my $pid = fork;
- die "Can't fork: $!" unless defined $pid;
- if ($pid) {
- # parent process
- $children++;
- next;
- }
- }
- eval {
- $input->prepare(@medias);
- };
- if ($@) {
- print STDERR "Failed to prepare input $id: $@\n";
- } else {
- # clone resultset in child process
- $resultset = $config->get('parallel') ?
- $resultset->clone() :
- $resultset;
-
- foreach my $media (@medias) {
- next if $media->skip_input($id);
- my $media_id = $media->get_id();
- report("running input $id on media $media_id");
- eval {
- $input->run($media, $resultset);
- };
- if ($@) {
- print STDERR "Failed to run input $id on media $media_id: $@\n";
- }
- }
- }
- if ($config->get('parallel')) {
- # child process
- exit;
- }
- }
- }
-
-} elsif ($mode eq 'output') {
-
- foreach my $id (split(/\s+/, $config->get('outputs'))) {
- next if $skip_plugins{$id};
- report("Creating output $id");
- my $output;
- eval {
- $output = create_instance(
- 'Youri::Check::Output',
- id => $id,
- test => $test,
- verbose => $verbose > 0 ? $verbose - 1 : 0,
- config => $config,
- $config->get_section($id)
- );
- };
- if ($@) {
- print STDERR "Failed to create output $id: $@\n";
- } else {
- if ($config->get('parallel')) {
- # fork
- my $pid = fork;
- die "Can't fork: $!" unless defined $pid;
- if ($pid) {
- # parent process
- $children++;
- next;
- }
- }
-
- # clone resultset in child process
- $resultset = $config->get('parallel') ?
- $resultset->clone() :
- $resultset;
-
- report("running output $id");
- eval {
- $output->run($resultset);
- };
- if ($@) {
- print STDERR "Failed to run output $id: $@\n";
- }
-
- if ($config->get('parallel')) {
- # child process
- exit;
- }
- }
- }
-} else {
- die "Invalid mode $mode";
-}
-
-# wait for all forked processus termination
-while ($children) {
- wait;
- $children--;
-}
-
-sub report {
- my ($message) = @_;
- print DateTime->now()->strftime('[%H:%M:%S] ')
- if $verbose > 1;
- print "$message\n"
- if $verbose > 0;
-}