give modules default loggers so they are usable on their own (in tests)
[scpubgit/System-Introspector-Report.git] / bin / system-introspector-report
CommitLineData
499ebcdd 1#!/usr/bin/env perl
2use strictures;
3use Getopt::Long;
4use Pod::Usage;
0331d9cd 5use Try::Tiny;
499ebcdd 6use System::Introspector::Report::Source;
7use System::Introspector::Report::Config;
8c04c391 8use Log::Contextual qw( :log set_logger );
72599a55 9use Log::Contextual::SimpleLogger;
499ebcdd 10
11GetOptions(
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
21die "$0 requires --storage (-s) to be specified\n"
22 unless defined $storage_dir;
23
24die "$0 requires --config (-c) to be specified\n"
2956c871 25 unless defined $config_file;
499ebcdd 26
72599a55 27my @additional_log_levels = qw( debug trace );
28my $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});
35set_logger $logger;
36
f40a8521 37log_info { 'Starting' };
38
499ebcdd 39my $config = System::Introspector::Report::Config
9909e59e 40 ->new(config_file => log_info { "Loading config '$_[0]'" } $config_file);
499ebcdd 41
42my $source = System::Introspector::Report::Source
9909e59e 43 ->new_from_root(log_info { "Loading storage '$_[0]'" } $storage_dir);
499ebcdd 44
45my @types = $all_reports
46 ? $config->report_types
47 : map [$_, {}], @report_types;
9909e59e 48log_info { "Generating report data" };
499ebcdd 49my @reports = $source->generate(@types);
50
9909e59e 51log_info { "Publishing report data" };
499ebcdd 52for 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 61log_info { "Done" };
499ebcdd 62
63__END__
64
65=head1 NAME
66
67system-introspector-report - Generate System::Introspector reports
68
69=cut