Commit | Line | Data |
499ebcdd |
1 | #!/usr/bin/env perl |
2 | use strictures; |
3 | use Getopt::Long; |
4 | use Pod::Usage; |
0331d9cd |
5 | use Try::Tiny; |
499ebcdd |
6 | use System::Introspector::Report::Source; |
7 | use System::Introspector::Report::Config; |
8c04c391 |
8 | use Log::Contextual qw( :log set_logger ); |
72599a55 |
9 | use Log::Contextual::SimpleLogger; |
499ebcdd |
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, |
72599a55 |
17 | 'v|verbose+' => \my $log_verbose, |
499ebcdd |
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" |
2956c871 |
25 | unless defined $config_file; |
499ebcdd |
26 | |
72599a55 |
27 | my @additional_log_levels = qw( debug trace ); |
28 | my $logger = Log::Contextual::SimpleLogger->new({ |
29 | levels => [ |
30 | qw( error fatal info ), |
31 | grep { defined } |
32 | @additional_log_levels[0 .. (($log_verbose || 0) - 1)], |
33 | ], |
34 | }); |
35 | set_logger $logger; |
36 | |
499ebcdd |
37 | my $config = System::Introspector::Report::Config |
8c04c391 |
38 | ->new(config_file => log_debug { "Loading config '$_[0]'" } $config_file); |
499ebcdd |
39 | |
40 | my $source = System::Introspector::Report::Source |
8c04c391 |
41 | ->new_from_root(log_debug { "Loading storage '$_[0]'" } $storage_dir); |
499ebcdd |
42 | |
43 | my @types = $all_reports |
44 | ? $config->report_types |
45 | : map [$_, {}], @report_types; |
8c04c391 |
46 | log_debug { "Generating report data" }; |
499ebcdd |
47 | my @reports = $source->generate(@types); |
48 | |
8c04c391 |
49 | log_debug { "Publishing report data" }; |
499ebcdd |
50 | for my $publisher ($config->publishers(@publish_types)) { |
0331d9cd |
51 | try { |
52 | $publisher->publish(\@reports); |
53 | } |
54 | catch { |
55 | print "Error during publish: $_\n"; |
56 | }; |
499ebcdd |
57 | } |
8c04c391 |
58 | log_debug { "Done" }; |
499ebcdd |
59 | |
60 | __END__ |
61 | |
62 | =head1 NAME |
63 | |
64 | system-introspector-report - Generate System::Introspector reports |
65 | |
66 | =cut |