diff --git a/Anvil/Tools/Alert.pm b/Anvil/Tools/Alert.pm
index d348b51d..0e684ced 100644
--- a/Anvil/Tools/Alert.pm
+++ b/Anvil/Tools/Alert.pm
@@ -85,10 +85,6 @@ If there is a problem, C<< !!error!! >> is returned.
Parameters;
-=head3 name (required)
-
-This is the name of the alert. So for an alert related to a critically high temperature, this might get set to C<< temperature_high_critical >>. It is meant to compliment the C<< record_locator >> parameter.
-
=head3 record_locator
This is a record locator, which generally allows a given alert to be tied to a given source. For example, an alert related to a temperature might use C<< an-a01n01.alteeve.com:cpu1_temperature >>.
@@ -112,25 +108,15 @@ sub check_alert_sent
my $anvil = $self->parent;
$anvil->Log->entry({source => $THIS_FILE, line => __LINE__, level => $debug, key => "log_0125", variables => { method => "Alert->check_alert_sent()" }});
- my $name = defined $parameter->{name} ? $parameter->{name} : "";
my $record_locator = defined $parameter->{record_locator} ? $parameter->{record_locator} : "";
my $set_by = defined $parameter->{set_by} ? $parameter->{set_by} : "";
my $clear = defined $parameter->{clear} ? $parameter->{clear} : 0;
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => $debug, list => {
- name => $name,
record_locator => $record_locator,
set_by => $set_by,
clear => $clear,
}});
- # Do we have an alert name?
- if (not $name)
- {
- # Nope
- $anvil->Log->entry({source => $THIS_FILE, line => __LINE__, level => 0, priority => "err", key => "log_0020", variables => { method => "Alert->check_alert_sent()", parameter => "name" }});
- return("!!error!!");
- }
-
# Do we have an record locator?
if (not $record_locator)
{
@@ -161,8 +147,6 @@ AND
alert_set_by = ".$anvil->Database->quote($set_by)."
AND
alert_record_locator = ".$anvil->Database->quote($record_locator)."
-AND
- alert_name = ".$anvil->Database->quote($name)."
;";
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => $debug, list => { query => $query }});
@@ -202,7 +186,6 @@ WHERE
clear => $clear,
set_by => $set_by,
record_locator => $record_locator,
- name => $name,
}});
return("!!error!!");
}
@@ -222,14 +205,12 @@ INSERT INTO
alert_sent_host_uuid,
alert_set_by,
alert_record_locator,
- alert_name,
modified_date
) VALUES (
".$anvil->Database->quote($anvil->Get->uuid).",
".$anvil->Database->quote($anvil->Get->host_uuid).",
".$anvil->Database->quote($set_by).",
".$anvil->Database->quote($record_locator).",
- ".$anvil->Database->quote($name).",
".$anvil->Database->quote($anvil->data->{sys}{database}{timestamp})."
);
";
diff --git a/Anvil/Tools/Database.pm b/Anvil/Tools/Database.pm
index aa7236a6..48847f0b 100644
--- a/Anvil/Tools/Database.pm
+++ b/Anvil/Tools/Database.pm
@@ -497,10 +497,8 @@ sub check_agent_data
$anvil->Log->entry({source => $THIS_FILE, line => __LINE__, level => $debug, key => "log_0125", variables => { method => "Database->check_agent_data()" }});
my $agent = defined $parameter->{agent} ? $parameter->{agent} : "";
- my $tables = defined $parameter->{tables} ? $parameter->{tables} : "";
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => $debug, list => {
agent => $agent,
- tables => $tables,
}});
if (not $agent)
@@ -511,10 +509,10 @@ sub check_agent_data
my $schema_file = $anvil->data->{path}{directories}{scan_agents}."/".$agent."/".$agent.".sql";
my $loaded = $anvil->Database->check_for_schema({
- debug => 2,
+ debug => $debug,
file => $schema_file,
});
- $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => {
+ $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => $debug, list => {
loaded => $loaded,
schema_file => $schema_file,
}});
@@ -528,7 +526,7 @@ sub check_agent_data
record_locator => "schema_load_failure",
set_by => $agent,
});
- $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { changed => $changed }});
+ $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => $debug, list => { changed => $changed }});
if ($changed)
{
# Log and register an alert. This should never happen, so we set it as a
@@ -554,7 +552,7 @@ sub check_agent_data
set_by => $agent,
clear => 1,
});
- $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { changed => $changed }});
+ $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => $debug, list => { changed => $changed }});
if ($changed)
{
# Register an alert cleared message.
@@ -576,7 +574,7 @@ sub check_agent_data
foreach my $uuid (@{$loaded})
{
my $host_name = $anvil->Database->get_host_from_uuid({short => 1, host_uuid => $uuid});
- $anvil->Log->entry({source => $THIS_FILE, line => __LINE__, 'print' => 1, level => 2, key => "message_0183", variables => {
+ $anvil->Log->entry({source => $THIS_FILE, line => __LINE__, 'print' => 1, level => $debug, key => "message_0183", variables => {
agent_name => $agent,
host_name => $host_name,
@@ -649,7 +647,7 @@ sub check_for_schema
my $table = "";
my $schema = "public";
- my $body = $anvil->Storage->read_file({file => $file});
+ my $body = $anvil->Storage->read_file({debug => $debug, file => $file});
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => $debug, list => { body => $body }});
foreach my $line (split/\n/, $body)
{
@@ -677,7 +675,7 @@ sub check_for_schema
# Did we find a table?
if (not $table)
{
- $anvil->Log->entry({source => $THIS_FILE, line => __LINE__, level => 0, priority => "err", key => "log_0050"});
+ $anvil->Log->entry({source => $THIS_FILE, line => __LINE__, level => 0, priority => "err", key => "log_0097", variables => { file => $file}});
return("!!error!!");
}
@@ -718,6 +716,7 @@ sub check_for_schema
# Write out the schema now.
$anvil->Database->write({
+ debug => $debug,
uuid => $uuid,
transaction => 1,
query => $body,
@@ -11232,8 +11231,8 @@ sub log_connections
}});
my $query = "SELECT system_identifier FROM pg_control_system();";
- my $identifier = $anvil->Database->query({uuid => $uuid, debug => ($debug + 1), query => $query, source => $THIS_FILE, line => __LINE__})->[0]->[0];
- $anvil->Log->entry({source => $THIS_FILE, line => __LINE__, level => ($debug + 1), key => "log_0540", variables => {
+ my $identifier = $anvil->Database->query({uuid => $uuid, debug => $debug, query => $query, source => $THIS_FILE, line => __LINE__})->[0]->[0];
+ $anvil->Log->entry({source => $THIS_FILE, line => __LINE__, level => $debug, key => "log_0540", variables => {
uuid => $uuid,
identifier => $identifier,
}});
@@ -11746,6 +11745,114 @@ sub mark_active
}
+=head2 purge_data
+
+This method takes an array reference of table name and will delete them in reverse order.
+
+Specifically, it takes each table name and looks for an associated function called C<< history_
() >> and calls a C<< DROP ... CASCADE; >> (which takes an associated TRIGGER with it), then looks to see if there is a table in the C<< history >> and C<< public >> schemas, DROP'ing them if found.
+
+This method is designed to allow ScanCore scan agents to be called with C<< --purge >> so that collected data can be purged from the database(s) without deleting non-ScanCore data.
+
+This method returns C<< !!error!! >> if there is a problem, and C<< 0 >> otherwise.
+
+Parameters;
+
+=head3 tables (required)
+
+This is an array reference of table tables to search more. There is no need to specify schema as both C<< public >> and C<< history >> schemas are checked automatically.
+
+This array is walked through in reverse order to allow the same array that is used to load and resync data to be used here.
+
+=cut
+sub purge_data
+{
+ my $self = shift;
+ my $parameter = shift;
+ my $anvil = $self->parent;
+ my $debug = defined $parameter->{debug} ? $parameter->{debug} : 3;
+ $anvil->Log->entry({source => $THIS_FILE, line => __LINE__, level => $debug, key => "log_0125", variables => { method => "Database->purge_data()" }});
+
+ my $tables = $parameter->{tables} ? $parameter->{tables} : "";
+
+ if (not $tables)
+ {
+ $anvil->Log->entry({source => $THIS_FILE, line => __LINE__, level => 0, priority => "err", key => "log_0020", variables => { method => "Database->purge_data()", parameter => "tables" }});
+ return("!!error!!");
+ }
+ if (ref($tables) ne "ARRAY")
+ {
+ $anvil->Log->entry({source => $THIS_FILE, line => __LINE__, level => 0, priority => "err", key => "log_0218", variables => { name => "tables", value => $tables }});
+ return("!!error!!");
+ }
+
+ my $count = \@{$tables};
+ $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => $debug, list => { count => $count }});
+ foreach my $uuid (sort {$a cmp $b} keys %{$anvil->data->{cache}{database_handle}})
+ {
+ my $vacuum = 0;
+ foreach my $table (reverse @{$tables})
+ {
+ # Check for the function.
+ my $safe_table = $anvil->Database->quote($table);
+ $safe_table =~ s/^'(.*?)'$/$1/;
+ my $history_function = "history_".$table;
+ my $function_query = "SELECT COUNT(*) FROM pg_catalog.pg_proc WHERE proname = ".$anvil->Database->quote($history_function).";";
+ $anvil->Log->entry({source => $THIS_FILE, line => __LINE__, level => $debug, key => "log_0124", variables => { function_query => $function_query }});
+
+ my $function_count = $anvil->Database->query({query => $function_query, uuid => $uuid, source => $THIS_FILE, line => __LINE__})->[0]->[0];
+ $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => $debug, list => { function_count => $function_count }});
+ if ($function_count)
+ {
+ # Delete it.
+ $vacuum = 1;
+ $history_function =~ s/^'(.*?)'$/$1/;
+ my $query = "DROP FUNCTION ".$history_function."() CASCADE;";
+ $anvil->Log->entry({source => $THIS_FILE, line => __LINE__, level => $debug, key => "log_0124", variables => { query => $query }});
+ $anvil->Database->write({debug => $debug, uuid => $uuid, query => $query, source => $THIS_FILE, line => __LINE__});
+ }
+
+ my $history_query = "SELECT COUNT(*) FROM pg_catalog.pg_tables WHERE tablename = ".$anvil->Database->quote($table)." AND schemaname='history';";
+ $anvil->Log->entry({source => $THIS_FILE, line => __LINE__, level => $debug, key => "log_0124", variables => { history_query => $history_query }});
+
+ my $history_count = $anvil->Database->query({query => $history_query, uuid => $uuid, source => $THIS_FILE, line => __LINE__})->[0]->[0];
+ $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => $debug, list => { history_count => $history_count }});
+ if ($history_count)
+ {
+ # Delete it.
+ $vacuum = 1;
+ my $query = "DROP TABLE history.".$safe_table.";";
+ $anvil->Log->entry({source => $THIS_FILE, line => __LINE__, level => $debug, key => "log_0124", variables => { query => $query }});
+ $anvil->Database->write({debug => $debug, uuid => $uuid, query => $query, source => $THIS_FILE, line => __LINE__});
+ }
+
+ my $public_query = "SELECT COUNT(*) FROM pg_catalog.pg_tables WHERE tablename = ".$anvil->Database->quote($table)." AND schemaname='public';";
+ $anvil->Log->entry({source => $THIS_FILE, line => __LINE__, level => $debug, key => "log_0124", variables => { public_query => $public_query }});
+
+ my $public_count = $anvil->Database->query({query => $public_query, uuid => $uuid, source => $THIS_FILE, line => __LINE__})->[0]->[0];
+ $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => $debug, list => { public_count => $public_count }});
+ if ($public_count)
+ {
+ # Delete it.
+ $vacuum = 1;
+ my $query = "DROP TABLE public.".$safe_table.";";
+ $anvil->Log->entry({source => $THIS_FILE, line => __LINE__, level => $debug, key => "log_0124", variables => { query => $query }});
+ $anvil->Database->write({debug => $debug, uuid => $uuid, query => $query, source => $THIS_FILE, line => __LINE__});
+ }
+ }
+
+ $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => $debug, list => { vacuum => $vacuum }});
+ if ($vacuum)
+ {
+ $anvil->Log->entry({source => $THIS_FILE, line => __LINE__, level => 1, key => "log_0458"});
+ my $query = "VACUUM FULL;";
+ $anvil->Database->write({debug => $debug, uuid => $uuid, query => $query, source => $THIS_FILE, line => __LINE__});
+ }
+ }
+
+ return(0);
+}
+
+
=head2 query
This performs a query and returns an array reference of array references (from C<< DBO->fetchall_arrayref >>). The first array contains all the returned rows and each row is an array reference of columns in that row.
@@ -12116,6 +12223,8 @@ sub refresh_timestamp
This will resync the database data on this and peer database(s) if needed. It takes no arguments and will immediately return unless C<< sys::database::resync_needed >> was set.
+If C<< switches::purge >> is set, this method will also return without doing anything.
+
=cut
sub resync_databases
{
@@ -12134,6 +12243,14 @@ sub resync_databases
return(0);
}
+ $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => $debug, list => { "switches::purge" => $anvil->data->{switches}{purge} }});
+ if ((exists $anvil->data->{switches}{purge}) && ($anvil->data->{switches}{purge}))
+ {
+ # The user is calling a purge, so skip resync for now as the data might be about to all go away anyway.
+ delete $anvil->data->{sys}{database}{table};
+ return(0);
+ }
+
#$anvil->data->{sys}{database}{log_transactions} = 1;
# Archive old data before resync'ing
@@ -12870,7 +12987,7 @@ sub _archive_table
if (not $table)
{
- $anvil->Log->entry({source => $THIS_FILE, line => __LINE__, level => 0, priority => "err", key => "log_0020", variables => { method => "Convert->_archive_table()", parameter => "table" }});
+ $anvil->Log->entry({source => $THIS_FILE, line => __LINE__, level => 0, priority => "err", key => "log_0020", variables => { method => "Database->_archive_table()", parameter => "table" }});
return("!!error!!");
}
diff --git a/Anvil/Tools/ScanCore.pm b/Anvil/Tools/ScanCore.pm
index a1abc2af..8d68f4b0 100755
--- a/Anvil/Tools/ScanCore.pm
+++ b/Anvil/Tools/ScanCore.pm
@@ -139,7 +139,7 @@ sub agent_startup
}
# Connect to DBs.
- $anvil->Database->connect({debug => ($debug + 1)});
+ $anvil->Database->connect({debug => $debug});
$anvil->Log->entry({source => $agent, line => __LINE__, level => $debug, secure => 0, key => "log_0132"});
if (not $anvil->data->{sys}{database}{connections})
{
@@ -150,19 +150,19 @@ sub agent_startup
# Make sure our schema is loaded.
$anvil->Database->check_agent_data({
- debug => $debug,
- agent => $agent,
+ debug => $debug,
+ agent => $agent,
});
# Read in our word strings.
my $words_file = $anvil->data->{path}{directories}{scan_agents}."/".$agent."/".$agent.".xml";
- $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { words_file => $words_file }});
+ $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => $debug, list => { words_file => $words_file }});
my $problem = $anvil->Words->read({
- debug => ($debug + 1),
+ debug => $debug,
file => $words_file,
});
- $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { problem => $problem }});
+ $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => $debug, list => { problem => $problem }});
if ($problem)
{
diff --git a/notes b/notes
index 249a6af1..73875c0d 100644
--- a/notes
+++ b/notes
@@ -3,6 +3,7 @@ ALTER TABLE history.recipients RENAME recipient_new_level TO recipient_level;
ALTER TABLE history.recipients DROP COLUMN recipient_units;
ALTER TABLE recipients RENAME recipient_new_level TO recipient_level;
ALTER TABLE recipients DROP COLUMN recipient_units;
+ALTER TABLE alert_sent DROP COLUMN alert_name;
DROP FUNCTION history_recipients() CASCADE;
CREATE FUNCTION history_recipients() RETURNS trigger
diff --git a/scancore-agents/scan-hardware/scan-hardware b/scancore-agents/scan-hardware/scan-hardware
index 723e11bc..4c1970cd 100755
--- a/scancore-agents/scan-hardware/scan-hardware
+++ b/scancore-agents/scan-hardware/scan-hardware
@@ -10,6 +10,7 @@
#
# TODO:
# - Decide if it's worth having a separate ScanCore.log file or just feed into anvil.log.
+#
use strict;
use warnings;
@@ -43,17 +44,31 @@ $anvil->Log->entry({source => $THIS_FILE, line => __LINE__, level => 1, key => "
# Read switches
$anvil->Get->switches;
+# These are the tables used by this agent. The order matters as it controls to order the tables are created
+# and sync'ed. For purges, this array is walked backwards.
+$anvil->data->{scancore}{'scan-hardware'}{tables} = ["scan_hardware", "scan_hardware_ram_modules"];
+
# Handle start-up tasks
my $problem = $anvil->ScanCore->agent_startup({
- debug => 2,
+ debug => 3,
agent => $THIS_FILE,
- tables => ["scan_hardware", "scan_hardware_ram_modules"],
+ tables => $anvil->data->{scancore}{'scan-hardware'}{tables},
});
if ($problem)
{
$anvil->nice_exit({exit_code => 1});
}
+if ($anvil->data->{switches}{purge})
+{
+ # This can be called when doing bulk-database purges.
+ $anvil->Database->purge_data({
+ debug => 2,
+ tables => $anvil->data->{scancore}{'scan-hardware'}{tables},
+ });
+ $anvil->nice_exit({exit_code => 0});
+}
+
# Read the data.
collect_data($anvil);
@@ -64,10 +79,10 @@ read_last_scan($anvil);
find_changes($anvil);
# Finally, process health weights.
-process_health($anvil)
+process_health($anvil);
# Mark that we ran.
-$anvil->Database->insert_or_update_updated({debug => 2, updated_by => $THIS_FILE});
+$anvil->Database->insert_or_update_updated({updated_by => $THIS_FILE});
$anvil->nice_exit({exit_code => 0});
@@ -84,18 +99,23 @@ sub collect_cpu_data
my $total_threads = 0;
my $cores = 0;
my $threads = 0;
+ my $sockets = 0;
my $in_cpu = "";
- my ($output, $return_code) = $anvil->System->call({level => 2, shell_call => $anvil->data->{path}{exe}{dmidecode}." --type processor", source => $THIS_FILE, line => __LINE__});
- $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { output => $output, return_code => $return_code }});
+ my ($output, $return_code) = $anvil->System->call({shell_call => $anvil->data->{path}{exe}{dmidecode}." --type processor", source => $THIS_FILE, line => __LINE__});
+ $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 3, list => { output => $output, return_code => $return_code }});
foreach my $line (split/\n/, $output)
{
- $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { line => $line }});
+ $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 3, list => { line => $line }});
if ($line =~ /Socket Designation: (.*+)$/)
{
$in_cpu = $1;
- $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { in_cpu => $in_cpu }});
+ $sockets++;
+ $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => {
+ in_cpu => $in_cpu,
+ sockets => $sockets,
+ }});
}
elsif (not $line)
{
@@ -129,25 +149,24 @@ sub collect_cpu_data
}});
}
}
- close $file_handle;
# Read in /proc/cpuinfo.
my $flags = "";
- my $flag_mismatch = 0;
+ my $flags_mismatch = 0;
my $bugs = "";
my $bugs_mismatch = 0;
my $model = "";
my $model_mismatch = 0;
- my $cpu_info = $anvil->Storage->read_file({level => 2, file => $anvil->data->{path}{proc}{cpuinfo}});
- foreach my $line (split/,/, $cpu_info)
+ my $cpu_info = $anvil->Storage->read_file({debug => 3, file => $anvil->data->{path}{proc}{cpuinfo}});
+ foreach my $line (split/\n/, $cpu_info)
{
$line = $anvil->Words->clean_spaces({string => $line});
- $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { line => $line }});
+ $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 3, list => { line => $line }});
- if ($line =~ /^flags: (.*?)$/)
+ if ($line =~ /^flags\s*: (.*?)$/)
{
my $these_flags = $1;
- $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { these_flags => $these_flags }});
+ $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 3, list => { these_flags => $these_flags }});
if (not $flags)
{
$flags = $these_flags;
@@ -156,8 +175,8 @@ sub collect_cpu_data
elsif ($flags ne $these_flags)
{
# This should never happen.
- $flag_mismatch = 1;
- my $changed = $anvil->Alert->check_alert_sent({
+ $flags_mismatch = 1;
+ my $changed = $anvil->Alert->check_alert_sent({
debug => 2,
record_locator => "scan_hardware::cpu_flags_mismatch",
set_by => $THIS_FILE,
@@ -178,10 +197,10 @@ sub collect_cpu_data
}
}
}
- if ($line =~ /^bugs: (.*?)$/)
+ if ($line =~ /^bugs\s*: (.*?)$/)
{
my $these_bugs = $1;
- $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { these_bugs => $these_bugs }});
+ $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 3, list => { these_bugs => $these_bugs }});
if (not $bugs)
{
$bugs = $these_bugs;
@@ -190,9 +209,9 @@ sub collect_cpu_data
elsif ($bugs ne $these_bugs)
{
# This should never happen...
- $bugs_mismatch = 1;
+ $bugs_mismatch = 1;
my $changed = $anvil->Alert->check_alert_sent({
- debug => 2,
+ debug => 3,
record_locator => "scan_hardware::cpu_bugs_mismatch",
set_by => $THIS_FILE,
});
@@ -212,10 +231,10 @@ sub collect_cpu_data
}
}
}
- if ($line =~ /^model name: (.*?)$/)
+ if ($line =~ /^model name\s*: (.*?)$/)
{
my $this_model = $1;
- $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { this_model => $this_model }});
+ $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 3, list => { this_model => $this_model }});
if (not $model)
{
$model = $this_model;
@@ -226,7 +245,7 @@ sub collect_cpu_data
# This should never happen...
$model_mismatch = 1;
my $changed = $anvil->Alert->check_alert_sent({
- debug => 2,
+ debug => 3,
record_locator => "scan_hardware::cpu_model_mismatch",
set_by => $THIS_FILE,
});
@@ -252,7 +271,7 @@ sub collect_cpu_data
if (not $flags_mismatch)
{
my $changed = $anvil->Alert->check_alert_sent({
- debug => 2,
+ debug => 3,
record_locator => "scan_hardware::cpu_flags_mismatch",
set_by => $THIS_FILE,
clear => 1,
@@ -272,7 +291,7 @@ sub collect_cpu_data
if (not $bugs_mismatch)
{
my $changed = $anvil->Alert->check_alert_sent({
- debug => 2,
+ debug => 3,
record_locator => "scan_hardware::cpu_bugs_mismatch",
set_by => $THIS_FILE,
clear => 1,
@@ -292,7 +311,7 @@ sub collect_cpu_data
if (not $model_mismatch)
{
my $changed = $anvil->Alert->check_alert_sent({
- debug => 2,
+ debug => 3,
record_locator => "scan_hardware::cpu_model_mismatch",
set_by => $THIS_FILE,
clear => 1,
@@ -312,12 +331,14 @@ sub collect_cpu_data
# Record what we found.
$anvil->data->{summary}{cpu}{model} = $model;
+ $anvil->data->{summary}{cpu}{sockets} = $sockets;
$anvil->data->{summary}{cpu}{cores} = $total_cores;
$anvil->data->{summary}{cpu}{threads} = $total_threads;
$anvil->data->{summary}{cpu}{bugs} = $bugs;
$anvil->data->{summary}{cpu}{flags} = $flags;
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => {
"summary::cpu::model" => $anvil->data->{summary}{cpu}{model},
+ "summary::cpu::sockets" => $anvil->data->{summary}{cpu}{sockets},
"summary::cpu::cores" => $anvil->data->{summary}{cpu}{cores},
"summary::cpu::threads" => $anvil->data->{summary}{cpu}{threads},
"summary::cpu::bugs" => $anvil->data->{summary}{cpu}{bugs},
@@ -355,17 +376,22 @@ sub collect_led_states
my $css_led = "unknown";
my $error_led = "unknown";
- my ($output, $return_code) = $anvil->System->call({level => 2, shell_call => $anvil->data->{path}{exe}{dmidecode}." --string system-manufacturer", source => $THIS_FILE, line => __LINE__});
+ my ($output, $return_code) = $anvil->System->call({shell_call => $anvil->data->{path}{exe}{dmidecode}." --string system-manufacturer", source => $THIS_FILE, line => __LINE__});
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { output => $output, return_code => $return_code }});
foreach my $line (split/\n/, $output)
{
$manufacturer = lc($line);
+ # Dell can report as 'Dell Inc.'.
+ if ($manufacturer =~ /dell/)
+ {
+ $manufacturer = "dell";
+ }
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { manufacturer => $manufacturer }});
}
if ($manufacturer eq "fujitsu")
{
- my ($output, $return_code) = $anvil->System->call({level => 2, shell_call => $anvil->data->{path}{exe}{'ipmi-oem'}." Fujitsu get-system-status", source => $THIS_FILE, line => __LINE__});
+ my ($output, $return_code) = $anvil->System->call({shell_call => $anvil->data->{path}{exe}{'ipmi-oem'}." Fujitsu get-system-status", source => $THIS_FILE, line => __LINE__});
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { output => $output, return_code => $return_code }});
foreach my $line (split/\n/, $output)
{
@@ -393,7 +419,7 @@ sub collect_led_states
{
### TODO: When we get a dell, figure this out...
### TODO: There are a lot of useful bits here, including power load/headroom. Excellent data for the UI later.
- #my ($output, $return_code) = $anvil->System->call({level => 2, shell_call => $anvil->data->{path}{exe}{'ipmi-oem'}." Dell get-system-status", source => $THIS_FILE, line => __LINE__});
+ #my ($output, $return_code) = $anvil->System->call({shell_call => $anvil->data->{path}{exe}{'ipmi-oem'}." Dell get-system-status", source => $THIS_FILE, line => __LINE__});
#$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { output => $output, return_code => $return_code }});
#foreach my $line (split/\n/, $output)
#{
@@ -427,12 +453,12 @@ sub collect_ram_data
my $part_number = "";
my $serial_number = "";
- my ($output, $return_code) = $anvil->System->call({level => 2, shell_call => $anvil->data->{path}{exe}{dmidecode}." --type memory", source => $THIS_FILE, line => __LINE__});
- $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { output => $output, return_code => $return_code }});
+ my ($output, $return_code) = $anvil->System->call({shell_call => $anvil->data->{path}{exe}{dmidecode}." --type memory", source => $THIS_FILE, line => __LINE__});
+ $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 3, list => { output => $output, return_code => $return_code }});
foreach my $line (split/\n/, $output)
{
$line = $anvil->Words->clean_spaces({string => $line});
- $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { line => $line }});
+ $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 3, list => { line => $line }});
if ($line =~ /^Locator: (.*?)$/)
{
@@ -504,7 +530,7 @@ sub collect_ram_data
$manufacturer = "";
$part_number = "";
$serial_number = "";
- $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => {
+ $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 3, list => {
"size" => $size,
"locator" => $locator,
"manufacturer" => $manufacturer,
@@ -514,17 +540,18 @@ sub collect_ram_data
}
}
- my $cpu_info = $anvil->Storage->read_file({level => 2, file => $anvil->data->{path}{proc}{meminfo}});
- foreach my $line (split/,/, $cpu_info)
+ my $cpu_info = $anvil->Storage->read_file({debug => 3, file => $anvil->data->{path}{proc}{meminfo}});
+ $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 3, list => { cpu_info => $cpu_info }});
+ foreach my $line (split/\n/, $cpu_info)
{
$line = $anvil->Words->clean_spaces({string => $line});
- $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { line => $line }});
+ $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 3, list => { line => $line }});
if ($line =~ /^(.*?):\s+(\d+.*?)$/)
{
my $variable = $1;
my $size = $2;
- $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => {
+ $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 3, list => {
variable => $variable,
size => $size,
}});
@@ -534,22 +561,22 @@ sub collect_ram_data
if ($variable eq "MemTotal")
{
$say_variable = "memory_total";
- $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { say_variable => $say_variable }});
+ $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 3, list => { say_variable => $say_variable }});
}
if ($variable eq "MemFree")
{
$say_variable = "memory_free";
- $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { say_variable => $say_variable }});
+ $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 3, list => { say_variable => $say_variable }});
}
if ($variable eq "SwapTotal")
{
$say_variable = "swap_total";
- $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { say_variable => $say_variable }});
+ $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 3, list => { say_variable => $say_variable }});
}
if ($variable eq "SwapFree")
{
$say_variable = "swap_free";
- $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { say_variable => $say_variable }});
+ $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 3, list => { say_variable => $say_variable }});
}
next if not $say_variable;
@@ -799,16 +826,16 @@ sub find_changes
{
# This always changes, so it's an info-level alert
$update = 1;
- my $say_new_scan_hardware_memory_free = $anvil->Convert->bytes_to_human_readable({'bytes' => $new_scan_hardware_memory_free})." (".$anvil->Convert->add_commas({number => $new_scan_hardware_memory_free})." #!string!scan_hardware_unit_0001!#)"
- my $say_old_scan_hardware_memory_free = $anvil->Convert->bytes_to_human_readable({'bytes' => $old_scan_hardware_memory_free})." (".$anvil->Convert->add_commas({number => $old_scan_hardware_memory_free})." #!string!scan_hardware_unit_0001!#)"
+ my $say_new_scan_hardware_memory_free = $anvil->Convert->bytes_to_human_readable({'bytes' => $new_scan_hardware_memory_free})." (".$anvil->Convert->add_commas({number => $new_scan_hardware_memory_free})." #!string!scan_hardware_unit_0001!#)";
+ my $say_old_scan_hardware_memory_free = $anvil->Convert->bytes_to_human_readable({'bytes' => $old_scan_hardware_memory_free})." (".$anvil->Convert->add_commas({number => $old_scan_hardware_memory_free})." #!string!scan_hardware_unit_0001!#)";
$anvil->Alert->register({set_by => $THIS_FILE, alert_level => "info", message => "scan_hardware_alert_0018,!!new!".$say_new_scan_hardware_memory_free."!!,!!old!".$say_old_scan_hardware_memory_free."!!"});
$anvil->Log->entry({source => $THIS_FILE, line => __LINE__, level => 1, key => "scan_hardware_alert_0018", variables => { new => $say_new_scan_hardware_memory_free, old => $say_old_scan_hardware_memory_free}});
}
if ($new_scan_hardware_swap_free ne $old_scan_hardware_swap_free)
{
$update = 1;
- my $say_new_scan_hardware_swap_free = $anvil->Convert->bytes_to_human_readable({'bytes' => $new_scan_hardware_swap_free})." (".$anvil->Convert->add_commas({number => $new_scan_hardware_swap_free})." #!string!scan_hardware_unit_0001!#)"
- my $say_old_scan_hardware_swap_free = $anvil->Convert->bytes_to_human_readable({'bytes' => $old_scan_hardware_swap_free})." (".$anvil->Convert->add_commas({number => $old_scan_hardware_swap_free})." #!string!scan_hardware_unit_0001!#)"
+ my $say_new_scan_hardware_swap_free = $anvil->Convert->bytes_to_human_readable({'bytes' => $new_scan_hardware_swap_free})." (".$anvil->Convert->add_commas({number => $new_scan_hardware_swap_free})." #!string!scan_hardware_unit_0001!#)";
+ my $say_old_scan_hardware_swap_free = $anvil->Convert->bytes_to_human_readable({'bytes' => $old_scan_hardware_swap_free})." (".$anvil->Convert->add_commas({number => $old_scan_hardware_swap_free})." #!string!scan_hardware_unit_0001!#)";
$anvil->Alert->register({set_by => $THIS_FILE, alert_level => "info", message => "scan_hardware_alert_0019,!!new!".$say_new_scan_hardware_swap_free."!!,!!old!".$say_old_scan_hardware_swap_free."!!"});
$anvil->Log->entry({source => $THIS_FILE, line => __LINE__, level => 1, key => "scan_hardware_alert_0019", variables => { new => $say_new_scan_hardware_swap_free, old => $say_old_scan_hardware_swap_free}});
@@ -833,9 +860,9 @@ sub find_changes
{
# It's high
my $changed = $anvil->Alert->check_alert_sent({
- debug => 2,
+ debug => 3,
record_locator => "scan_hardware::high_swap",
- set_by => $agent,
+ set_by => $THIS_FILE,
});
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { changed => $changed }});
if ($changed)
@@ -854,7 +881,7 @@ sub find_changes
alert_level => "warning",
message => "scan_hardware_alert_0020",
message_variables => $variables,
- set_by => $agent,
+ set_by => $THIS_FILE,
});
}
}
@@ -862,9 +889,9 @@ sub find_changes
{
# It's low
my $changed = $anvil->Alert->check_alert_sent({
- debug => 2,
+ debug => 3,
record_locator => "scan_hardware::high_swap",
- set_by => $agent,
+ set_by => $THIS_FILE,
clear => 1,
});
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { changed => $changed }});
@@ -882,7 +909,7 @@ sub find_changes
debug => 2,
alert_level => "warning",
message => "scan_hardware_alert_0021,!!say_used!".$say_used."!!,!!say_swap!".$say_swap."!!,!!swap_percent!".$new_swap_percent_used."!!",
- set_by => $agent,
+ set_by => $THIS_FILE,
});
}
}
@@ -937,7 +964,7 @@ WHERE
ram_swap_total => $anvil->Convert->bytes_to_human_readable({'bytes' => $new_scan_hardware_swap_total})." (".$anvil->Convert->add_commas({number => $new_scan_hardware_swap_total})." #!string!scan_hardware_unit_0001!#)",
ram_swap_free => $anvil->Convert->bytes_to_human_readable({'bytes' => $new_scan_hardware_swap_free})." (".$anvil->Convert->add_commas({number => $new_scan_hardware_swap_free})." #!string!scan_hardware_unit_0001!#)",
};
- $anvil->Alert->register({debug => 2, alert_level => "notice", message => "scan_hardware_alert_0022", message_variables => $message_variables, set_by => $agent });
+ $anvil->Alert->register({debug => 2, alert_level => "notice", message => "scan_hardware_alert_0022", message_variables => $message_variables, set_by => $THIS_FILE });
$anvil->Log->entry({source => $THIS_FILE, line => __LINE__, level => 1, key => "scan_hardware_alert_0019", variables => $message_variables});
# INSERT
@@ -985,7 +1012,6 @@ INSERT INTO
$anvil->Database->write({query => $query, source => $THIS_FILE, line => __LINE__});
}
- ### TODO: Left off here.
# Now the RAM modules.
foreach my $hardware_ram_module_locator (sort {$a cmp $b} keys %{$anvil->data->{ram}{dmi}{locator}})
{
@@ -1001,12 +1027,13 @@ INSERT INTO
new_scan_hardware_ram_module_serial_number => $new_scan_hardware_ram_module_serial_number,
}});
- if ((exists $anvil->data->{sql}{scan_hardware_ram_module_uuid}{$hardware_ram_module_locator}) && ($anvil->data->{sql}{scan_hardware_ram_module_uuid}{$hardware_ram_module_locator}))
+ if ((exists $anvil->data->{sql}{ram_module_locator_to_uuid}{$hardware_ram_module_locator}) && ($anvil->data->{sql}{ram_module_locator_to_uuid}{$hardware_ram_module_locator}))
{
# We've seen this module before, look for changes.
- my $scan_hardware_ram_module_uuid = $anvil->data->{sql}{scan_hardware_ram_module_uuid}{$hardware_ram_module_locator};
+ my $scan_hardware_ram_module_uuid = $anvil->data->{sql}{ram_module_locator_to_uuid}{$hardware_ram_module_locator};
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => {
- "sql::hardware_ram_module_uuid::${scan_hardware_ram_module_locator}" => $anvil->data->{sql}{scan_hardware_ram_module_uuid}{$hardware_ram_module_locator},
+ scan_hardware_ram_module_locator => $hardware_ram_module_locator,
+ scan_hardware_ram_module_uuid => $scan_hardware_ram_module_uuid,
}});
my $old_scan_hardware_ram_module_size = $anvil->data->{sql}{scan_hardware_ram_module}{scan_hardware_ram_module_uuid}{$scan_hardware_ram_module_uuid}{scan_hardware_ram_module_size};
@@ -1021,7 +1048,7 @@ INSERT INTO
}});
# Delete the entry so we know we've processed this existing module.
- delete $anvil->data->{sql}{scan_hardware_ram_module_uuid}{$hardware_ram_module_locator};
+ delete $anvil->data->{sql}{ram_module_locator_to_uuid}{$hardware_ram_module_locator};
delete $anvil->data->{sql}{scan_hardware_ram_module}{scan_hardware_ram_module_uuid}{$scan_hardware_ram_module_uuid};
### We check all at once for a single alert as it's easy to see what has changed.
@@ -1044,7 +1071,7 @@ INSERT INTO
old_serial_number => $old_scan_hardware_ram_module_serial_number,
};
$anvil->Log->entry({source => $THIS_FILE, line => __LINE__, 'print' => 1, level => 1, key => "scan_hardware_alert_0023", variables => $variables});
- $anvil->Alert->register({debug => 2, alert_level => "warning", message => "scan_hardware_alert_0023", message_variables => $variables, set_by => $agent});
+ $anvil->Alert->register({debug => 2, alert_level => "warning", message => "scan_hardware_alert_0023", message_variables => $variables, set_by => $THIS_FILE});
}
else
{
@@ -1061,7 +1088,7 @@ INSERT INTO
old_serial_number => $old_scan_hardware_ram_module_serial_number,
};
$anvil->Log->entry({source => $THIS_FILE, line => __LINE__, 'print' => 1, level => 1, key => "scan_hardware_alert_0024", variables => $variables});
- $anvil->Alert->register({debug => 2, alert_level => "warning", message => "scan_hardware_alert_0024", message_variables => $variables, set_by => $agent});
+ $anvil->Alert->register({debug => 2, alert_level => "warning", message => "scan_hardware_alert_0024", message_variables => $variables, set_by => $THIS_FILE});
}
my $query = "
@@ -1093,7 +1120,7 @@ WHERE
serial_number => $new_scan_hardware_ram_module_serial_number,
};
$anvil->Log->entry({source => $THIS_FILE, line => __LINE__, 'print' => 1, level => 2, key => "scan_hardware_alert_0025", variables => $variables});
- $anvil->Alert->register({debug => 2, alert_level => "notice", message => "scan_hardware_alert_0025", message_variables => $variables, set_by => $agent});
+ $anvil->Alert->register({debug => 2, alert_level => "notice", message => "scan_hardware_alert_0025", message_variables => $variables, set_by => $THIS_FILE});
# INSERT
my $scan_hardware_ram_module_uuid = $anvil->Get->uuid();
@@ -1129,9 +1156,10 @@ INSERT INTO
foreach my $hardware_ram_module_locator (keys %{$anvil->data->{sql}{scan_hardware_ram_module_uuid}})
{
# Module vanished!
- my $scan_hardware_ram_module_uuid = $anvil->data->{sql}{scan_hardware_ram_module_uuid}{$hardware_ram_module_locator};
+ my $scan_hardware_ram_module_uuid = $anvil->data->{sql}{ram_module_locator_to_uuid}{$hardware_ram_module_locator};
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => {
- "sql::hardware_ram_module_uuid::${scan_hardware_ram_module_locator}" => $anvil->data->{sql}{scan_hardware_ram_module_uuid}{$hardware_ram_module_locator}
+ scan_hardware_ram_module_locator => $hardware_ram_module_locator,
+ scan_hardware_ram_module_uuid => $scan_hardware_ram_module_uuid,
}});
my $old_scan_hardware_ram_module_size = $anvil->data->{sql}{scan_hardware_ram_module}{scan_hardware_ram_module_uuid}{$scan_hardware_ram_module_uuid}{scan_hardware_ram_module_size};
@@ -1146,7 +1174,7 @@ INSERT INTO
}});
# Delete the entry so we know we've processed this existing module.
- delete $anvil->data->{sql}{scan_hardware_ram_module_uuid}{$hardware_ram_module_locator};
+ delete $anvil->data->{sql}{ram_module_locator_to_uuid}{$hardware_ram_module_locator};
delete $anvil->data->{sql}{scan_hardware_ram_module}{scan_hardware_ram_module_uuid}{$scan_hardware_ram_module_uuid};
my $variables = {
@@ -1157,7 +1185,7 @@ INSERT INTO
old_serial_number => $old_scan_hardware_ram_module_serial_number,
};
$anvil->Log->entry({source => $THIS_FILE, line => __LINE__, 'print' => 1, level => 2, key => "scan_hardware_alert_0026", variables => $variables});
- $anvil->Alert->register({debug => 2, alert_level => "warning", message => "scan_hardware_alert_0026", message_variables => $variables, set_by => $agent});
+ $anvil->Alert->register({debug => 2, alert_level => "warning", message => "scan_hardware_alert_0026", message_variables => $variables, set_by => $THIS_FILE});
my $query = "
UPDATE
@@ -1209,11 +1237,11 @@ sub process_health
if ($peer_ram_total)
{
# We don't want to freak out unless the difference is at least 1GiB
- my $hardware_ram_total = $an->data->{summary}{ram}{size};
+ my $hardware_ram_total = $anvil->data->{summary}{ram}{size};
my $difference = $peer_ram_total - $hardware_ram_total;
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => {
- hardware_ram_total => $an->Readable->comma($hardware_ram_total)." (".$anvil->Convert->bytes_to_human_readable({'bytes' => $hardware_ram_total}).")",
- difference => $an->Readable->comma($difference)." (".$anvil->Convert->bytes_to_human_readable({'bytes' => $difference}).")",
+ hardware_ram_total => $anvil->Convert->add_commas({number => $hardware_ram_total})." (".$anvil->Convert->bytes_to_human_readable({'bytes' => $hardware_ram_total}).")",
+ difference => $anvil->Convert->add_commas({number => $difference})." (".$anvil->Convert->bytes_to_human_readable({'bytes' => $difference}).")",
}});
# greater than 1 GiB (default) or less than 128 MiB (default)
@@ -1230,7 +1258,7 @@ sub process_health
if ($age > 300)
{
my $changed = $anvil->Alert->check_alert_sent({
- debug => 2,
+ debug => 3,
record_locator => "scan_hardware::less_ram_than_peer",
set_by => $THIS_FILE,
});
@@ -1239,9 +1267,9 @@ sub process_health
{
# Register an alert.
my $variables = {
- local_ram => $anvil->Convert->bytes_to_human_readable({'bytes' => $hardware_ram_total})." (".$an->Readable->comma($hardware_ram_total)." #!string!suffix_0009!#)",
- peer_ram => $anvil->Convert->bytes_to_human_readable({'bytes' => $peer_ram_total})." (".$an->Readable->comma($peer_ram_total)." #!string!suffix_0009!#)",
- difference => $anvil->Convert->bytes_to_human_readable({'bytes' => $difference})." (".$an->Readable->comma($difference)." #!string!suffix_0009!#)",
+ local_ram => $anvil->Convert->bytes_to_human_readable({'bytes' => $hardware_ram_total})." (".$anvil->Convert->add_commas({number => $hardware_ram_total})." #!string!suffix_0009!#)",
+ peer_ram => $anvil->Convert->bytes_to_human_readable({'bytes' => $peer_ram_total})." (".$anvil->Convert->add_commas({number => $peer_ram_total})." #!string!suffix_0009!#)",
+ difference => $anvil->Convert->bytes_to_human_readable({'bytes' => $difference})." (".$anvil->Convert->add_commas({number => $difference})." #!string!suffix_0009!#)",
};
$anvil->Log->entry({source => $THIS_FILE, line => __LINE__, level => 1, key => "scan_hardware_alert_0027", variables => $variables});
$anvil->Alert->register({alert_level => "warning", message => "scan_hardware_alert_0027", message_variables => $variables, set_by => $THIS_FILE});
@@ -1264,7 +1292,7 @@ sub process_health
host_uuid => $anvil->Get->host_uuid,
});
my $changed = $anvil->Alert->check_alert_sent({
- debug => 2,
+ debug => 3,
record_locator => "scan_hardware::less_ram_than_peer",
set_by => $THIS_FILE,
clear => 1,
@@ -1274,7 +1302,7 @@ sub process_health
{
# Clear the alert.
my $variables = {
- ram => $anvil->Convert->bytes_to_human_readable({'bytes' => $hardware_ram_total})." (".$an->Readable->comma($hardware_ram_total)." #!string!suffix_0009!#)",
+ ram => $anvil->Convert->bytes_to_human_readable({'bytes' => $hardware_ram_total})." (".$anvil->Convert->add_commas({number => $hardware_ram_total})." #!string!suffix_0009!#)",
};
$anvil->Log->entry({source => $THIS_FILE, line => __LINE__, level => 1, key => "scan_hardware_alert_0028", variables => $variables});
$anvil->Alert->register({alert_level => "warning", message => "scan_hardware_alert_0028", message_variables => $variables, set_by => $THIS_FILE});
@@ -1325,7 +1353,7 @@ FROM
WHERE
scan_hardware_host_uuid = ".$anvil->Database->quote($anvil->Get->host_uuid)."
;";
- $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { query => $query }});
+ $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 3, list => { query => $query }});
my $results = $anvil->Database->query({query => $query, source => $THIS_FILE, line => __LINE__});
my $count = @{$results};
@@ -1352,7 +1380,7 @@ WHERE
my $scan_hardware_led_css = $row->[12];
my $scan_hardware_led_error = $row->[13];
my $scan_hardware_modified_date = $row->[14];
- $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => {
+ $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 3, list => {
"scan_hardware_uuid" => $scan_hardware_uuid,
"scan_hardware_cpu_model" => $scan_hardware_cpu_model,
"scan_hardware_cpu_cores" => $scan_hardware_cpu_cores,
@@ -1425,7 +1453,7 @@ FROM
WHERE
scan_hardware_ram_module_host_uuid = ".$anvil->Database->quote($anvil->Get->host_uuid)."
;";
- $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { query => $query }});
+ $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 3, list => { query => $query }});
$results = $anvil->Database->query({query => $query, source => $THIS_FILE, line => __LINE__});
$count = @{$results};
@@ -1443,7 +1471,7 @@ WHERE
my $scan_hardware_ram_module_manufacturer = $row->[3];
my $scan_hardware_ram_module_model = $row->[4];
my $scan_hardware_ram_module_serial_number = $row->[5];
- $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => {
+ $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 3, list => {
"scan_hardware_ram_module_uuid" => $scan_hardware_ram_module_uuid,
"scan_hardware_ram_module_locator" => $scan_hardware_ram_module_locator,
"scan_hardware_ram_module_size" => $scan_hardware_ram_module_size,
@@ -1453,9 +1481,9 @@ WHERE
}});
# Record the scan_hardware_ram_module_uuid in an easy to find place for later when looking for changes.
- $anvil->data->{sql}{scan_hardware_ram_module_uuid}{$scan_hardware_ram_module_locator} = $scan_hardware_ram_module_uuid;
+ $anvil->data->{sql}{ram_module_locator_to_uuid}{$scan_hardware_ram_module_locator} = $scan_hardware_ram_module_uuid;
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => {
- "sql::scan_hardware_ram_module_uuid::${scan_hardware_ram_module_locator}" => $anvil->data->{sql}{scan_hardware_ram_module_uuid}{$scan_hardware_ram_module_locator},
+ "sql::ram_module_locator_to_uuid::${scan_hardware_ram_module_locator}" => $anvil->data->{sql}{ram_module_locator_to_uuid}{$scan_hardware_ram_module_locator},
}});
# Store the old data now.
diff --git a/scancore-agents/scan-hardware/scan-hardware.xml b/scancore-agents/scan-hardware/scan-hardware.xml
index 10779adb..06a86657 100644
--- a/scancore-agents/scan-hardware/scan-hardware.xml
+++ b/scancore-agents/scan-hardware/scan-hardware.xml
@@ -23,7 +23,7 @@ The differences are:
#!variable!these_flags!#
====
- The issue with mismatched CPU flags has been resolved.
+ The issue with mismatched CPU flags has been resolved.
For some reason, two (or more) CPU cores/threads returned different bugs. This should never happen: The differences are:
The differences are:
@@ -33,7 +33,7 @@ The differences are:
#!variable!these_bugs!#
====
- The issue with mismatched CPU bugs has been resolved.
+ The issue with mismatched CPU bugs has been resolved.
For some reason, two (or more) CPU cores/threads returned different model names. This should never happen: The differences are:
The differences are:
@@ -43,7 +43,7 @@ The differences are:
#!variable!this_model!#
====
- The issue with mismatched CPU model name has been resolved.
+ The issue with mismatched CPU model name has been resolved.
The CPU model has changed:
- New: [#!variable!new!#]
- Old: [#!variable!old!#]
diff --git a/share/anvil.sql b/share/anvil.sql
index 38e3471c..05f479fc 100644
--- a/share/anvil.sql
+++ b/share/anvil.sql
@@ -1819,6 +1819,7 @@ CREATE TRIGGER trigger_temperature
-- This table records the last time a scan ran. It's sole purpose is to make sure at least one table's
-- 'modified_date' changes per run, so that database resyncs can be triggered reliably.
CREATE TABLE updated (
+ updated_uuid uuid not null primary key,
updated_host_uuid uuid not null,
updated_by text not null, -- The name of the agent (or "ScanCore' itself) that updated.
modified_date timestamp with time zone not null,
@@ -1838,7 +1839,6 @@ CREATE TABLE alert_sent (
alert_sent_host_uuid uuid not null, -- The node associated with this alert
alert_set_by text not null, -- name of the program that set this alert
alert_record_locator text not null, -- String used by the agent to identify the source of the alert (ie: UPS serial number)
- alert_name text not null, -- A free-form name used by the caller to identify this alert.
modified_date timestamp with time zone not null,
FOREIGN KEY(alert_sent_host_uuid) REFERENCES hosts(host_uuid)
diff --git a/share/words.xml b/share/words.xml
index d2f29e8c..45b0ba52 100644
--- a/share/words.xml
+++ b/share/words.xml
@@ -518,14 +518,13 @@ The database connection error was:
[ Error ] - Failed to start the Postgres server. Please check the system logs for details.
The database user: [#!variable!user!#] was created with UUID: [#!variable!id!#].
[ Error ] - Failed to add the database user: [#!variable!user!#]! Unable to proceed.
-
+ [ Error ] - Failed to find any tables in: [#!variable!file!#]. Unable to check/load the agent's schema.
[ Warning ] - Failed to set an alert because this host is not yet in the database. This can happen if the alert was set before this host was added to the database.
* Details of the alert:
- Type: ......... [#!variable!type!#]
- Clear? ........ [#!variable!clear!#]
- Record Locator: [#!variable!record_locator!#]
-- Name: ......... [#!variable!name!#]
- Timestamp: .... [#!variable!modified_date!#]
[ Error ] - There is no #!string!brand_0002!# database user set for the local machine. Please check: [#!data!path::config::anvil.conf!#]'s DB entry: [#!variable!uuid!#].
diff --git a/tools/test.pl b/tools/test.pl
index fa06fc34..ff1256fd 100755
--- a/tools/test.pl
+++ b/tools/test.pl
@@ -25,6 +25,22 @@ $anvil->Log->level({set => 2});
$anvil->Log->secure({set => 1});
$anvil->Get->switches;
+my $array = ["1", "2", "a", "b"];
+
+print "Normal:\n";
+foreach my $thing (@{$array})
+{
+ print "- ".$thing."\n";
+}
+
+print "Reverse:\n";
+foreach my $thing (reverse @{$array})
+{
+ print "- ".$thing."\n";
+}
+
+exit;
+
print "Connecting to the database(s);\n";
$anvil->Database->connect({debug => 3});
$anvil->Log->entry({source => $THIS_FILE, line => __LINE__, 'print' => 1, level => 2, secure => 0, key => "log_0132"});