start of object::remote logging usage
[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 System::Introspector::Report::Logging qw( :log router );
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,
16   'v|verbose+'  => \my $log_verbose,
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"
24   unless defined $config_file;
25
26 my $timed = sub { sprintf shift, scalar localtime };
27
28 log_info { 'Starting at %s'->$timed };
29
30 my $config = System::Introspector::Report::Config
31   ->new(config_file => log_info { "Loading config '$_[0]'" } $config_file);
32
33 my $source = System::Introspector::Report::Source
34   ->new_from_root(log_info { "Loading storage '$_[0]'" } $storage_dir);
35
36 my @types = $all_reports
37   ? $config->report_types
38   : map [$_, {}], @report_types;
39 log_info { "Generating report data" };
40 my @reports = $source->generate(@types);
41
42 log_info { "Publishing report data" };
43 for my $publisher ($config->publishers(@publish_types)) {
44   try {
45     $publisher->publish(\@reports);
46   }
47   catch {
48     print "Error during publish: $_\n";
49   };
50 }
51
52 log_info { 'Done at %s'->$timed };
53
54 __END__
55
56 =head1 NAME
57
58 system-introspector-report - Generate System::Introspector reports
59
60 =cut