Host probe for generic hostname/uname info
[scpubgit/System-Introspector.git] / lib / System / Introspector / Host.pm
1 package System::Introspector::Host;
2 use Moo;
3
4 sub gather {
5     my ($self) = @_;
6     return {
7         hostname => $self->_gather_hostname,
8         uname    => $self->_gather_uname_info,
9     };
10 }
11
12 my @UnameFields = qw(
13     kernel_name
14     kernel_release
15     kernel_version
16     nodename
17     machine
18     processor
19     hardware_platform
20     operating_system
21 );
22
23 sub _gather_uname_info {
24     my ($self) = @_;
25     my %uname;
26     for my $field (@UnameFields) {
27         (my $option = $field) =~ s{_}{-}g;
28         my $value = `uname --$option`;
29         chomp $value;
30         $uname{ $field } = $value;
31     }
32     return \%uname;
33 }
34
35 sub _gather_hostname {
36     my ($self) = @_;
37     open my $fh, '<', '/etc/hostname'
38         or die "Unable to read /etc/hostname: $!\n";
39     my $hostname = <$fh>;
40     chomp $hostname;
41     return $hostname;
42 }
43
44 1;