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; |
8a63da0b |
8 | use System::Introspector::Report::Logging qw( :log router ); |
499ebcdd |
9 | |
10 | GetOptions( |
11 | 's|storage=s' => \my $storage_dir, |
12 | 'c|config=s' => \my $config_file, |
13 | 'r|report=s' => \my @report_types, |
14 | 'p|publish=s' => \my @publish_types, |
15 | 'a|all' => \my $all_reports, |
72599a55 |
16 | 'v|verbose+' => \my $log_verbose, |
499ebcdd |
17 | 'h|help' => sub { pod2usage(0) }, |
18 | ) or pod2usage(2); |
19 | |
20 | die "$0 requires --storage (-s) to be specified\n" |
21 | unless defined $storage_dir; |
22 | |
23 | die "$0 requires --config (-c) to be specified\n" |
2956c871 |
24 | unless defined $config_file; |
499ebcdd |
25 | |
d23c8d13 |
26 | my $timed = sub { sprintf shift, scalar localtime }; |
27 | |
28 | log_info { 'Starting at %s'->$timed }; |
f40a8521 |
29 | |
499ebcdd |
30 | my $config = System::Introspector::Report::Config |
9909e59e |
31 | ->new(config_file => log_info { "Loading config '$_[0]'" } $config_file); |
499ebcdd |
32 | |
33 | my $source = System::Introspector::Report::Source |
9909e59e |
34 | ->new_from_root(log_info { "Loading storage '$_[0]'" } $storage_dir); |
499ebcdd |
35 | |
36 | my @types = $all_reports |
37 | ? $config->report_types |
38 | : map [$_, {}], @report_types; |
9909e59e |
39 | log_info { "Generating report data" }; |
499ebcdd |
40 | my @reports = $source->generate(@types); |
41 | |
9909e59e |
42 | log_info { "Publishing report data" }; |
499ebcdd |
43 | for my $publisher ($config->publishers(@publish_types)) { |
0331d9cd |
44 | try { |
45 | $publisher->publish(\@reports); |
46 | } |
47 | catch { |
48 | print "Error during publish: $_\n"; |
49 | }; |
499ebcdd |
50 | } |
f40a8521 |
51 | |
d23c8d13 |
52 | log_info { 'Done at %s'->$timed }; |
499ebcdd |
53 | |
54 | __END__ |
55 | |
56 | =head1 NAME |
57 | |
58 | system-introspector-report - Generate System::Introspector reports |
59 | |
60 | =cut |