burak / CPAN-Sys-Info

Fetch information from the host system (Perl)

Clone this repository (size: 40.6 KB): HTTPS / SSH
$ hg clone http://bitbucket.org/burak/cpan-sys-info/

Changed (Δ407 bytes):

raw changeset »

eg/sysinfo.pl (83 lines added, 68 lines removed)

Up to file-list eg/sysinfo.pl:

1
1
#!/usr/bin/perl -w
2
package sysinfo;
2
package Sysinfo;
3
3
use strict;
4
use warnings;
4
5
use lib qw(../Sys-Info-Device-BIOS/lib);
5
6
use vars qw( $VERSION );
6
7
use POSIX qw(locale_h);
@@ -9,6 +10,10 @@ use Sys::Info::Constants qw(NEW_PERL);
9
10
use Time::Elapsed qw( elapsed );
10
11
use Number::Format;
11
12
use Text::Table;
13
use Carp qw( croak );
14
use constant CPUTF8 => 65_001;
15
use constant KB     => 1024;
16
use constant LAST_ELEMENT => -1;
12
17
13
18
$VERSION = '0.10';
14
19
@@ -22,81 +27,40 @@ my $NA = 'N/A';
22
27
my $NF   = Number::Format->new( THOUSANDS_SEP => q{,}, DECIMAL_POINT => q{.} );
23
28
my %meta = $os->meta;
24
29
my $need_chcp = $os->is_winnt && $ENV{PROMPT};
30
my $oldcp;
25
31
26
my @probe;
32
run();
27
33
28
my %bit = (
29
   cpu => $cpu->bitness,
30
   os  => $os->bitness,
31
);
32
map { $bit{$_} ||= '??' } keys %bit;
33
34
@probe = eval {(
35
   [ "Sys::Info Version"         => Sys::Info->VERSION                     ],
36
   [ "Perl Version"              => $i->perl_long                          ],
37
   [ "Host Name"                 => $os->host_name                         ],
38
   [ "OS Name"                   => $os->name( long => 1, edition => 1 )   ],
39
   [ "OS Version"                => $os->version . '.' . $os->build        ],
40
   [ "OS Manufacturer"           => $meta{'manufacturer'}        || $NA    ],
41
   [ "OS Configuration"          => $os->product_type            || $NA    ],
42
   [ "OS Build Type"             => $meta{'build_type'}          || $NA    ],
43
   [ "Running on"                => "$bit{cpu}bit CPU & $bit{os}bit OS"    ],
44
   [ "Registered Owner"          => $meta{'owner'}               || $NA    ],
45
   [ "Registered Organization"   => $meta{'organization'}        || $NA    ],
46
   [ "Product ID"                => $meta{'product_id'}          || $NA    ],
47
   [ "Original Install Date"     => scalar localtime $meta{'install_date'} ],
48
   [ "System Up Time"            => $up                          || $NA    ],
49
   [ "System Manufacturer"       => $meta{'system_manufacturer'} || $NA    ],
50
   [ "System Model"              => $meta{'system_model'}        || $NA    ],
51
   [ "System Type"               => $meta{'system_type'}         || $NA    ],
52
   [ "Processor(s)"              => processors()                 || $NA    ],
53
   [ "BIOS Version"              => $i->device('bios')->version  || $NA    ],
54
   [ "Windows Directory"         => $meta{windows_dir}           || $NA    ],
55
   [ "System Directory"          => $meta{system_dir}            || $NA    ],
56
   [ "Boot Device"               => $meta{'boot_device'}         || $NA    ],
57
   [ "System Locale"             => $LOCALE                      || $NA    ],
58
   [ "Input Locale"              => $LOCALE                      || $NA    ],
59
   [ "Time Zone"                 => $os->tz                      || $NA    ],
60
   [ "Total Physical Memory"     => mb($meta{'physical_memory_total'}    ) ],
61
   [ "Available Physical Memory" => mb($meta{'physical_memory_available'}) ],
62
   [ "Virtual Memory: Max Size"  => mb($meta{'page_file_total'}          ) ],
63
   [ "Virtual Memory: Available" => mb($meta{'page_file_available'}      ) ],
64
   [ "Virtual Memory: In Use"    => vm()                                   ],
65
   [ "Page File Location(s)"     => $meta{page_file_path}          || $NA  ],
66
   [ "Domain"                    => $os->domain_name               || $NA  ],
67
   [ "Logon Server"              => $os->logon_server              || $NA  ],
68
69
   [ "Windows CD Key"            => $os->cdkey                     || $NA  ],
70
   [ "Microsoft Office CD Key"   => ($os->cdkey( office => 1 ))[0] || $NA  ],
71
)};
72
73
die "Error fetching information: $@" if $@;
74
75
my $oldcp;
76
if ( $need_chcp ) {
77
   chomp($oldcp = (split /:\s?/, qx(chcp))[-1]);
78
   system(chcp => 65001, '2>nul', '1>nul') if $oldcp; # try to change it to unicode
79
   eval q{ binmode STDOUT, ':utf8' } if NEW_PERL;
34
END {
35
   system chcp => $oldcp, '2>nul', '1>nul' if $need_chcp && $oldcp;
80
36
}
81
37
82
END {
83
   system(chcp => $oldcp, '2>nul', '1>nul') if $need_chcp && $oldcp;
38
sub run {
39
   my @probe = probe();
40
41
   if ( $need_chcp ) {
42
      ## no critic (InputOutput::ProhibitBacktickOperators)
43
      chomp($oldcp = (split /:\s?/xms, qx(chcp))[LAST_ELEMENT]);
44
      system chcp => CPUTF8, '2>nul', '1>nul' if $oldcp; # try to change it to unicode
45
      if ( NEW_PERL ) {
46
         my $eok = eval q{ binmode STDOUT, ':utf8'; 1; };
47
      }
48
   }
49
   my @titles = ( "FIELD\n=====", "VALUE\n=====");
50
   @titles = ( q{}, q{});
51
52
   my $tb = Text::Table->new( @titles );
53
   $tb->load( @probe );
54
   print "\n", $tb or croak "Unable to orint to STDOUT: $!";
55
   return;
84
56
}
85
57
86
my @titles = ( "FIELD\n=====", "VALUE\n=====");
87
@titles = ( "", "");
88
89
my $tb = Text::Table->new( @titles );
90
   $tb->load( @probe );
91
print "\n";
92
print $tb;
93
94
58
sub processors {
95
   my $rv = sprintf "%s ~%sMHz",
59
   my $rv = sprintf '%s ~%sMHz',
96
60
                    scalar($cpu->identify),
97
61
                    $cpu->speed;
98
   $rv =~ s{\s+}{ }sg;
99
   $rv;
62
   $rv =~ s{\s+}{ }xmsg;
63
   return $rv;
100
64
}
101
65
102
66
sub vm {
@@ -107,10 +71,61 @@ sub vm {
107
71
108
72
sub mb {
109
73
   my $kb = shift || return $NA;
110
   my $int = sprintf '%.0f', $kb / 1024;
74
   my $int = sprintf '%.0f', $kb / KB;
111
75
   return sprintf '%s MB', $NF->format_number( $int );
112
76
}
113
77
78
sub probe {
79
   my %bit = (
80
      cpu => $cpu->bitness,
81
      os  => $os->bitness,
82
   );
83
   $bit{$_} ||= q{??} for keys %bit;
84
85
   my @rv = eval {(
86
   [ 'Sys::Info Version'         => Sys::Info->VERSION                     ],
87
   [ 'Perl Version'              => $i->perl_long                          ],
88
   [ 'Host Name'                 => $os->host_name                         ],
89
   [ 'OS Name'                   => $os->name( long => 1, edition => 1 )   ],
90
   [ 'OS Version'                => $os->version . q{.} . $os->build       ],
91
   [ 'OS Manufacturer'           => $meta{'manufacturer'}        || $NA    ],
92
   [ 'OS Configuration'          => $os->product_type            || $NA    ],
93
   [ 'OS Build Type'             => $meta{'build_type'}          || $NA    ],
94
   [ 'Running on'                => "$bit{cpu}bit CPU & $bit{os}bit OS"    ],
95
   [ 'Registered Owner'          => $meta{'owner'}               || $NA    ],
96
   [ 'Registered Organization'   => $meta{'organization'}        || $NA    ],
97
   [ 'Product ID'                => $meta{'product_id'}          || $NA    ],
98
   [ 'Original Install Date'     => scalar localtime $meta{'install_date'} ],
99
   [ 'System Up Time'            => $up                          || $NA    ],
100
   [ 'System Manufacturer'       => $meta{'system_manufacturer'} || $NA    ],
101
   [ 'System Model'              => $meta{'system_model'}        || $NA    ],
102
   [ 'System Type'               => $meta{'system_type'}         || $NA    ],
103
   [ 'Processor(s)'              => processors()                 || $NA    ],
104
   [ 'BIOS Version'              => $i->device('bios')->version  || $NA    ],
105
   [ 'Windows Directory'         => $meta{windows_dir}           || $NA    ],
106
   [ 'System Directory'          => $meta{system_dir}            || $NA    ],
107
   [ 'Boot Device'               => $meta{'boot_device'}         || $NA    ],
108
   [ 'System Locale'             => $LOCALE                      || $NA    ],
109
   [ 'Input Locale'              => $LOCALE                      || $NA    ],
110
   [ 'Time Zone'                 => $os->tz                      || $NA    ],
111
   [ 'Total Physical Memory'     => mb($meta{'physical_memory_total'}    ) ],
112
   [ 'Available Physical Memory' => mb($meta{'physical_memory_available'}) ],
113
   [ 'Virtual Memory: Max Size'  => mb($meta{'page_file_total'}          ) ],
114
   [ 'Virtual Memory: Available' => mb($meta{'page_file_available'}      ) ],
115
   [ 'Virtual Memory: In Use'    => vm()                                   ],
116
   [ 'Page File Location(s)'     => $meta{page_file_path}          || $NA  ],
117
   [ 'Domain'                    => $os->domain_name               || $NA  ],
118
   [ 'Logon Server'              => $os->logon_server              || $NA  ],
119
120
   [ 'Windows CD Key'            => $os->cdkey                     || $NA  ],
121
   [ 'Microsoft Office CD Key'   => ($os->cdkey( office => 1 ))[0] || $NA  ],
122
   )};
123
124
   croak "Error fetching information: $@" if $@;
125
   return @rv;
126
}
127
128
1;
114
129
115
130
__END__
116
131