fix dynamic generation skip bug
[scpubgit/System-Introspector-Report.git] / bin / system-introspector-report
1 #!/usr/bin/env perl
2 use strictures;
3 use Getopt::Long;
4 use Pod::Usage;
5 use Try::Tiny;
6 use System::Introspector::Report::Source;
7 use System::Introspector::Report::Config;
8 use Log::Contextual                         qw( :log set_logger );
9 use Log::Contextual::SimpleLogger;
10
11 GetOptions(
12   's|storage=s' => \my $storage_dir,
13   'c|config=s'  => \my $config_file,
14   'r|report=s'  => \my @report_types,
15   'p|publish=s' => \my @publish_types,
16   'a|all'       => \my $all_reports,
17   'v|verbose+'  => \my $log_verbose,
18   'h|help'      => sub { pod2usage(0) },
19 ) or pod2usage(2);
20
21 die "$0 requires --storage (-s) to be specified\n"
22   unless defined $storage_dir;
23
24 die "$0 requires --config (-c) to be specified\n"
25   unless defined $config_file;
26
27 my @additional_log_levels = qw( debug trace );
28 my $logger = Log::Contextual::SimpleLogger->new({
29   levels => [
30     qw( error fatal warn info ),
31     grep { defined }
32       @additional_log_levels[0 .. (($log_verbose || 0) - 1)],
33   ],
34 });
35 set_logger $logger;
36
37 my $timed = sub { sprintf shift, scalar localtime };
38
39 log_info { 'Starting at %s'->$timed };
40
41 my $config = System::Introspector::Report::Config
42   ->new(config_file => log_info { "Loading config '$_[0]'" } $config_file);
43
44 my $source = System::Introspector::Report::Source
45   ->new_from_root(log_info { "Loading storage '$_[0]'" } $storage_dir);
46
47 my @types = $all_reports
48   ? $config->report_types
49   : map [$_, {}], @report_types;
50 log_info { "Generating report data" };
51 my @reports = $source->generate(@types);
52
53 log_info { "Publishing report data" };
54 for my $publisher ($config->publishers(@publish_types)) {
55   try {
56     $publisher->publish(\@reports);
57   }
58   catch {
59     print "Error during publish: $_\n";
60   };
61 }
62
63 log_info { 'Done at %s'->$timed };
64
65 __END__
66
67 =head1 NAME
68
69 system-introspector-report - Generate System::Introspector reports
70
71 =cut