#!/usr/bin/env perl use strictures; use Getopt::Long; use Pod::Usage; use Try::Tiny; use System::Introspector::Report::Source; use System::Introspector::Report::Config; use Log::Contextual qw( :log set_logger ); use Log::Contextual::SimpleLogger; GetOptions( 's|storage=s' => \my $storage_dir, 'c|config=s' => \my $config_file, 'r|report=s' => \my @report_types, 'p|publish=s' => \my @publish_types, 'a|all' => \my $all_reports, 'v|verbose+' => \my $log_verbose, 'h|help' => sub { pod2usage(0) }, ) or pod2usage(2); die "$0 requires --storage (-s) to be specified\n" unless defined $storage_dir; die "$0 requires --config (-c) to be specified\n" unless defined $config_file; my @additional_log_levels = qw( debug trace ); my $logger = Log::Contextual::SimpleLogger->new({ levels => [ qw( error fatal info ), grep { defined } @additional_log_levels[0 .. (($log_verbose || 0) - 1)], ], }); set_logger $logger; my $config = System::Introspector::Report::Config ->new(config_file => log_debug { "Loading config '$_[0]'" } $config_file); my $source = System::Introspector::Report::Source ->new_from_root(log_debug { "Loading storage '$_[0]'" } $storage_dir); my @types = $all_reports ? $config->report_types : map [$_, {}], @report_types; log_debug { "Generating report data" }; my @reports = $source->generate(@types); log_debug { "Publishing report data" }; for my $publisher ($config->publishers(@publish_types)) { try { $publisher->publish(\@reports); } catch { print "Error during publish: $_\n"; }; } log_debug { "Done" }; __END__ =head1 NAME system-introspector-report - Generate System::Introspector reports =cut