#!/usr/bin/perl -w
# Ken Zhang, 2013-08-07
# This script is used for satellite daily reporting.
use strict;
use DBI;
my $oraclehost = "satellite_server_name";
my $oracleins = "rhnsat";
my $oracleuser = "rhnsat";
my $oraclepasswd = "rhnsat";
my $oracleport = "1521";
my $sql_last_checkin_list = qq {select server_name from rhnserveroverview WHERE last_checkin_days_ago > '1' order by server_id};
#my $sql_last_checkin_list = qq {select server_name from rhnserveroverview order by server_name};
my $sql_total_servers = qq {select count(*) as TOTAL_CLIENTS from rhnserveroverview};
my $sql_critical_list = qq {select * from (SELECT E.advisory_name, E.advisory_type, E.update_date, E.synopsis as advisory_synopsis,(SELECT COUNT(DISTINCT S.id) FROM rhnServerNeededErrataCache SNEC, rhnServer S, rhnUserServerPerms USP WHERE USP.user_id =1 AND USP.server_id = S.ID AND S.id = SNEC.server_id AND EXISTS (SELECT 1 FROM rhnServerFeaturesView SFV WHERE SFV.server_id = SNEC.server_id AND SFV.label = 'ftr_errata_updates') AND SNEC.errata_id = E.id) AS AFFECTED_SYSTEM_COUNT FROM rhnErrata E where E.synopsis LIKE 'Critical%') where AFFECTED_SYSTEM_COUNT>=1 order by update_date desc};
my $oracle_dbh = DBI->connect("dbi:Oracle:host=$oraclehost;sid=$oracleins",$oracleuser,$oraclepasswd,{RaiseError=>1, AutoCommit=>0}) or die "Cannot connect to database!$!\n";
my $sth1 = $oracle_dbh->prepare($sql_last_checkin_list);
$sth1->execute();
open OUTPUT, '>', 'temp.out';
print OUTPUT "These servers are not reporting in last one day.\n\n";
while (my @output = $sth1->fetchrow_array()){
print OUTPUT "@output\n";
}
my $sth2 = $oracle_dbh->prepare($sql_total_servers);
$sth2->execute();
my $totalservers = $sth2->fetchrow_array();
print OUTPUT "\n================================================\n";
print OUTPUT "There are $totalservers servers registered with satellite.\n\n";
print OUTPUT "\n================================================\n";
print OUTPUT "Advisory_Name | Advisory_Type | Update_Date | Synopsis | System_Counts\n" ;
my $sth3 = $oracle_dbh->prepare($sql_critical_list);
$sth3->execute();
my $critical_cnt = 0;
my @criticallist;
while (@criticallist = $sth3->fetchrow_array()){
print OUTPUT "@criticallist.\n";
$critical_cnt++;
if ($criticallist[0] !~ /^RHSA.*/ ) {$critical_cnt--;}
}