add sponsored by notice
[scpubgit/System-Introspector.git] / bin / system-introspector
CommitLineData
b549a663 1#!/usr/bin/env perl
2use strictures 1;
3
4use Getopt::Long;
5use Pod::Usage;
6use System::Introspector::State;
7use File::Tree::Snapshot;
8use System::Introspector::Config;
9
10GetOptions(
11 'c|config=s' => \my $config_file,
12 's|storage=s' => \my $storage_dir,
13 'H|host=s' => \my $hostname,
14 'allow-empty' => \my $allow_empty,
15 'a|all' => \my $update_all,
16 'g|group=s' => \my @update_groups,
17 'h|help' => sub { pod2usage(0) },
18) or pod2usage(2);
19
20die "Requires --all or --group option\n"
21 unless $update_all or @update_groups;
22
23my $config = System::Introspector::Config->new(
24 config_file => (defined($config_file)
25 ? $config_file
26 : "$storage_dir/main.conf"),
27);
28
29$config->has_group($_) or die "Unknown group '$_'\n"
30 for @update_groups;
31
32@update_groups = $config->groups
33 if $update_all;
34
35for my $group (@update_groups) {
36 my $group_dir = "$storage_dir/$group";
37 print "Group $group at $group_dir\n";
38 my $storage = File::Tree::Snapshot->new(
39 storage_path => $group_dir,
40 allow_empty => $allow_empty,
41 );
42 $storage->create
43 unless $storage->exists;
44 my $state = System::Introspector::State->new(
45 defined($hostname) ? (host => $hostname) : (),
46 storage => $storage,
47 config => $config->config_for_group($group),
48 );
49 eval { $state->fetch_and_store };
50 if (my $error = $@) {
51 $storage->reset;
52 }
53 else {
54 $storage->commit;
55 }
56}
57
58__END__
59
60=head1 NAME
61
62system-introspector - Generate System Introspection Data
63
64=head1 SYNOPSIS
65
66 system-introspector --storage <path> [OPTIONS]
67
68=head1 OPTIONS
69
70=head2 -s <path>, --storage <path>
71
72Path to storage. Always required.
73
74=head2 -H <host>, --host <host>
75
76Remote host gathering
77
78=head2 --allow-empty
79
80Allow empty commits to storage.
81
82=head2 -h, --help
83
84Display help.
85
86=cut