Subversion Repositories camp_sysinfo_client (old)

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
1 rodolico 1
#! /usr/bin/perl -w
2
 
3
# sysinfo
4
# Author: R. W. Rodolico
5
# Primary client portion of sysinfo system. Will collect information about its current
6
# host and create a report containing the information. This report can then be processed
7
# by process_sysinfo.pl on the collection computer.
8
# output file consists of a key/value pair, with the key in square brackets, example:
9
#  [tag]value
10
# where tag is the name of the function we are looking at (hostname, report date, cpu type)
11
# and value is the associated value.
12
# Also has multi line key/values, which are in the form
13
#   [tag]
14
#   value1
15
#   value2
16
#   [another tag (or end of file)]
17
# where value1 and value2 are considered attributes of tag. This is used where there are multiple
18
# values for a function, such as for installed packages, IP Addresses, hardware lists, and 
19
# disk partitions.
20
 
21
# Assumes following packages installed on system:
22
# hostname
23
# uname
24
# procinfo
25
# uptime
26
# lspci
27
# lsb_release
28
 
29
# apt-get install procinfo lsb sysinfo
30
 
31
# Will search for one of the following package managers:
32
# dpkg (Debian and derivatives)
33
# rpm  (RedHat and derivatives)
34
# yast (SuSE and derivatives) NOT IMPLEMENTED
35
 
36
# Also assumes following standard apps are accessible
37
# ifconfig
38
# grep
39
# awk
40
# cat
41
# df
42
# free
43
#
44
# Version 1.3 20071104
45
# added capability of e-mailing the results by itself and external configuration file
46
 
47
# Version 1.3.1 20071110
48
# added du -sk to explicitly do directory sizes in 'k'. Also, fixed some documentation
49
 
50
# Version 1.3.3 20081104
51
# modified hostname to hostname -f, and allowed user to place custom value in configuration file
52
# also, modified to go with Debian standards in preparation to creating a debian package.
53
 
54
# Version 2.0 20081208
55
# Modified to use different libraries for different OS's in preparation to porting to Windows
56
# Uses different packages based on which OS it is on.
57
 
58
# Following are global variables overridden if configuration file exists
59
my $APPLICATION_ROOT;
60
my $client_name;
61
my $CUSTOM_PACKAGE_FINDER ;
62
my @directoriesToWatch;
63
my $hostname;
64
# only required if reports are sent from process_sysinfo.pl. Not the norm.
65
my $iMailResults = 0; # if 0 (false), ignore following variables
66
my $mailTo;
67
my $mailCC;
68
my $mailBCC;
69
my $mailServer;
70
my $mailServerPort;
71
my $mailFrom;
72
my $mailSubject = `hostname` . ' sysinfo ' . `date +"%F"`;
73
my $SENDMAIL;
74
 
75
my $TESTING = 0;
76
 
77
my $VERSION = '2.0.0';
78
 
79
sub loadConfigurationFile {
80
   my $configuration_file;
81
   if ($TESTING) {
82
      $configuration_file = './sysinfo.conf';
83
   } else {
84
      $configuration_file = '/etc/sysinfo/sysinfo.conf';
85
   }
86
   open CONFFILE, "<$configuration_file" or die "Can not open configuration file $configuration_file";
87
   my $confFileContents = join( '', <CONFFILE> );
88
   close CONFFILE;
89
   return $confFileContents;
90
}
91
 
92
# generic routine to send an e-mail
93
sub sendmessage {
94
   my ( $from, $to, $subject, $message, $cc, $bcc, $server, $port ) = @_;
95
   open SENDMAIL, "|$SENDMAIL" or die "Could not open sendmail";
96
   print SENDMAIL "From: $from\nTo: $to\nSubject: $subject\n";
97
   print SENDMAIL "cc: $cc\n" if $cc;
98
   print SENDMAIL "bcc: $bcc\n" if $bcc;
99
   print SENDMAIL "\n$message\n";
100
   print SENDMAIL ".\n";
101
   close SENDMAIL;
102
}
103
 
104
 
105
 
106
 
107
BEGIN { # block to find home grown libraries.
108
   push @INC, '.'; # here is where local library is
109
}
110
 
111
if ($TESTING) {
112
   use Data::Dumper;
113
}
114
# Windows:  ppm install XML::Simple
115
# Debian: apt-get install libxml-simple-perl
116
use XML::Simple; 
117
use SysinfoLinux;
118
 
119
eval( &loadConfigurationFile ); # load the configuration file
120
# parameters are assumed to override configuration file details. If we have parameters
121
# they are of the form varname=value, where value is the new value to assign to varname
122
# the command has a dollar sign prepended (for the variable) and a semi-colon appended
123
# to create a command that may be executed by eval. Thus, this must be a single line
124
# no embedded spaces parameter.
125
#while ($parameter = shift ) {
126
#   eval ( '$' . $parameter . ';');
127
#}
128
 
129
die "You must configure this package in /etc/sysinfo/sysinfo.conf" unless $client_name;
130
 
131
my $commandLine;
132
if (@ARGV) {
133
   $commandLine = join("\n", @ARGV) . "\n\n";
134
}
135
 
136
my $System;
137
$$System{'report'}{'version'} = $VERSION;
138
$$System{'report'}{'date'} = `date '+%Y-%m-%d %H:%M'`;
139
$$System{'report'}{'client'} = $client_name;
140
chomp $$System{'report'}{'date'};
141
$$System{'network'} = &SysinfoLinux::getNetwork;
142
$$System{'diskinfo'} = &SysinfoLinux::getDiskInfo(@directoriesToWatch);
143
$$System{'software'} = &SysinfoLinux::getSoftware($CUSTOM_PACKAGE_FINDER);
144
$$System{'operatingsystem'} = &SysinfoLinux::getOperatingSystem;
145
$$System{'system'} = &SysinfoLinux::getSystemInformation($hostname);
146
$$System{'pci'} = &SysinfoLinux::getPCI;
147
 
148
 
149
my $output = XML::Simple->new(AttrIndent => 1, KeepRoot => 1, NoAttr => 1, RootName => "sysinfo$VERSION" ); # NoIndent => 1
150
 
151
 
152
#print Data::Dumper->Dump([$System],['System']);
153
 
154
 
155
if ($iMailResults) {
156
   &sendmessage( $mailFrom, $mailTo, $mailSubject, $output->XMLout($System), $mailCC, $mailBCC, $mailServer, $mailServerPort );
157
} else {
158
   print $output->XMLout($System);
159
}
160
 
161
1;