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 => [ |
a0c9420e |
30 | qw( error fatal warn info ), |
72599a55 |
31 | grep { defined } |
32 | @additional_log_levels[0 .. (($log_verbose || 0) - 1)], |
33 | ], |
34 | }); |
35 | set_logger $logger; |
36 | |
f40a8521 |
37 | log_info { 'Starting' }; |
38 | |
499ebcdd |
39 | my $config = System::Introspector::Report::Config |
9909e59e |
40 | ->new(config_file => log_info { "Loading config '$_[0]'" } $config_file); |
499ebcdd |
41 | |
42 | my $source = System::Introspector::Report::Source |
9909e59e |
43 | ->new_from_root(log_info { "Loading storage '$_[0]'" } $storage_dir); |
499ebcdd |
44 | |
45 | my @types = $all_reports |
46 | ? $config->report_types |
47 | : map [$_, {}], @report_types; |
9909e59e |
48 | log_info { "Generating report data" }; |
499ebcdd |
49 | my @reports = $source->generate(@types); |
50 | |
9909e59e |
51 | log_info { "Publishing report data" }; |
499ebcdd |
52 | for my $publisher ($config->publishers(@publish_types)) { |
0331d9cd |
53 | try { |
54 | $publisher->publish(\@reports); |
55 | } |
56 | catch { |
57 | print "Error during publish: $_\n"; |
58 | }; |
499ebcdd |
59 | } |
f40a8521 |
60 | |
9909e59e |
61 | log_info { "Done" }; |
499ebcdd |
62 | |
63 | __END__ |
64 | |
65 | =head1 NAME |
66 | |
67 | system-introspector-report - Generate System::Introspector reports |
68 | |
69 | =cut |