aboutsummaryrefslogtreecommitdiffstats
path: root/hardware-models
diff options
context:
space:
mode:
Diffstat (limited to 'hardware-models')
-rwxr-xr-xhardware-models78
1 files changed, 78 insertions, 0 deletions
diff --git a/hardware-models b/hardware-models
new file mode 100755
index 0000000..3cb857d
--- /dev/null
+++ b/hardware-models
@@ -0,0 +1,78 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+
+use SiteSummary;
+use Getopt::Std;
+
+my %vendors;
+my %models;
+my %hostmap;
+my %modelmap;
+my %opts;
+
+sub usage {
+ my $retval = shift;
+ print <<EOF;
+Usage: $0 [-l]
+ -l list hosts with the given vendor/model
+EOF
+ exit $retval;
+}
+
+getopt("l", \%opts) || usage(1);
+
+for_all_hosts(\&handle_host);
+
+print_summary();
+
+sub handle_host {
+ my $hostid = shift;
+ #print "$hostid\n";
+ my ($vendor, $model, undef) = get_hardware_info($hostid);
+ $vendor = "[unknown]" unless defined $vendor;
+ $vendors{$vendor}++;
+ if ($model) {
+ $models{$vendor}{$model}++;
+ if (exists $modelmap{$vendor} && exists $modelmap{$vendor}{$model}) {
+ push @{$modelmap{$vendor}{$model}}, $hostid ;
+ } else {
+ $modelmap{$vendor}{$model} = [$hostid];
+ }
+ } else {
+ if (exists $hostmap{$vendor}) {
+ push @{$hostmap{$vendor}}, $hostid ;
+ } else {
+ $hostmap{$vendor} = [$hostid];
+ }
+ }
+}
+
+sub print_summary {
+ printf(" %-25s %5s\n", "vendor", "count");
+ for my $vendor (sort keys %vendors) {
+ printf(" %-25s %5d\n", $vendor, $vendors{$vendor});
+ if (exists $opts{l}) {
+ if (exists $hostmap{$vendor}) {
+ for my $hostid (sort @{$hostmap{$vendor}}) {
+ my $hostname = get_hostname($hostid);
+ my ($vendor, $model, undef) = get_hardware_info($hostid);
+ $vendor = "[unknown]" unless defined $vendor;
+ $model = "" unless defined $model;
+ printf " %s %s/%s %s\n", $hostname, $vendor, $model, $hostid;
+ }
+ }
+ for my $model (sort keys %{$models{$vendor}}) {
+ printf(" %-23s %5d\n", $model, $models{$vendor}{$model});
+ if (exists $opts{l}) {
+ for my $hostid (sort @{$modelmap{$vendor}{$model}}) {
+ my $hostname = get_hostname($hostid);
+ my ($vendor, $model, undef) = get_hardware_info($hostid);
+ printf " %s %s/%s %s\n", $hostname, $vendor, $model, $hostid;
+ }
+ }
+ }
+ }
+ }
+}