Merge branch 'ent-4772-omnishell' into ent-EDF

Conflicts:
	pandora_console/extras/pandoradb_migrate_6.0_to_7.0.mysql.sql
This commit is contained in:
fbsanchez 2019-11-13 18:15:19 +01:00
commit b0920d93af
71 changed files with 1478 additions and 312 deletions

View File

@ -36,6 +36,8 @@ mkdir -p temp_package/usr/bin/
mkdir -p temp_package/usr/sbin/ mkdir -p temp_package/usr/sbin/
mkdir -p temp_package/etc/pandora/plugins mkdir -p temp_package/etc/pandora/plugins
mkdir -p temp_package/etc/pandora/collections mkdir -p temp_package/etc/pandora/collections
mkdir -p temp_package/etc/pandora/trans
mkdir -p temp_package/etc/pandora/commands
mkdir -p temp_package/etc/init.d/ mkdir -p temp_package/etc/init.d/
mkdir -p temp_package/var/log/pandora/ mkdir -p temp_package/var/log/pandora/
mkdir -p temp_package/usr/share/man/man1/ mkdir -p temp_package/usr/share/man/man1/

View File

@ -325,6 +325,11 @@ install () {
chmod -R 700 $PANDORA_BASE$PANDORA_HOME/collections chmod -R 700 $PANDORA_BASE$PANDORA_HOME/collections
ln -s $PANDORA_BASE$PANDORA_HOME/collections $PANDORA_BASE$PANDORA_CFG ln -s $PANDORA_BASE$PANDORA_HOME/collections $PANDORA_BASE$PANDORA_CFG
echo "Copying Pandora FMS Agent commands to $PANDORA_BASE$PANDORA_HOME/commands..."
cp -r commands $PANDORA_BASE$PANDORA_HOME
chmod -R 700 $PANDORA_BASE$PANDORA_HOME/commands
ln -s $PANDORA_BASE$PANDORA_HOME/commands $PANDORA_BASE$PANDORA_CFG
echo "Copying tentacle server to $PANDORA_BASE$TENTACLE_SERVER" echo "Copying tentacle server to $PANDORA_BASE$TENTACLE_SERVER"
cp tentacle_server $PANDORA_BASE$TENTACLE_SERVER cp tentacle_server $PANDORA_BASE$TENTACLE_SERVER
chmod 755 $PANDORA_BASE$TENTACLE_SERVER chmod 755 $PANDORA_BASE$TENTACLE_SERVER

View File

@ -36,6 +36,8 @@ mkdir -p temp_package/usr/bin/
mkdir -p temp_package/usr/sbin/ mkdir -p temp_package/usr/sbin/
mkdir -p temp_package/etc/pandora/plugins mkdir -p temp_package/etc/pandora/plugins
mkdir -p temp_package/etc/pandora/collections mkdir -p temp_package/etc/pandora/collections
mkdir -p temp_package/etc/pandora/trans
mkdir -p temp_package/etc/pandora/commands
mkdir -p temp_package/etc/init.d/ mkdir -p temp_package/etc/init.d/
mkdir -p temp_package/lib/systemd/system/ mkdir -p temp_package/lib/systemd/system/
mkdir -p temp_package/var/log/pandora/ mkdir -p temp_package/var/log/pandora/

View File

@ -24,6 +24,7 @@ Version 6.0
use strict; use strict;
use warnings; use warnings;
use Scalar::Util qw(looks_like_number);
use POSIX qw(strftime floor); use POSIX qw(strftime floor);
use Sys::Hostname; use Sys::Hostname;
use File::Basename; use File::Basename;
@ -32,6 +33,18 @@ use IO::Socket;
use Sys::Syslog; use Sys::Syslog;
use Time::Local; use Time::Local;
my $YAML = 0;
# Dynamic load. Avoid unwanted behaviour.
eval {
eval 'require YAML::Tiny;1' or die('YAML::Tiny lib not found, commands feature won\'t be available');
};
if ($@) {
$YAML = 0;
print STDERR $@;
} else {
$YAML = 1;
}
# Agent XML data # Agent XML data
my $Xml; my $Xml;
@ -187,6 +200,7 @@ my %DefaultConf = (
'custom_id' => '', 'custom_id' => '',
'url_address' => '', 'url_address' => '',
'standby' => 0, 'standby' => 0,
'cmd_file' => undef,
); );
my %Conf = %DefaultConf; my %Conf = %DefaultConf;
@ -268,6 +282,20 @@ sub error ($) {
exit 1; exit 1;
} }
################################################################################
# Try to load extra libraries.c
################################################################################
sub load_libraries() {
# Dynamic load. Avoid unwanted behaviour.
eval {eval 'require YAML::Tiny;1' or die('YAML::Tiny lib not found, commands feature won\'t be available');};
if ($@) {
$YAML = 0;
print STDERR $@;
} else {
$YAML = 1;
}
}
################################################################################ ################################################################################
# Check a regular expression. Returns 1 if its valid, 0 otherwise. # Check a regular expression. Returns 1 if its valid, 0 otherwise.
################################################################################ ################################################################################
@ -284,6 +312,27 @@ sub valid_regexp ($) {
return 1; return 1;
} }
################################################################################
# Reads a file and returns entire content or undef if error.
################################################################################
sub read_file {
my $path = shift;
my $_FILE;
if( !open($_FILE, "<", $path) ) {
# failed to open, return undef
return undef;
}
# Slurp configuration file content.
my $content = do { local $/; <$_FILE> };
# Close file
close($_FILE);
return $content;
}
################################################################################ ################################################################################
# Recursively delete files and directories. # Recursively delete files and directories.
################################################################################ ################################################################################
@ -682,6 +731,13 @@ sub parse_conf_modules($) {
# Macros # Macros
} elsif ($line =~ /^\s*module_macro(\S+)\s+(.*)\s*$/) { } elsif ($line =~ /^\s*module_macro(\S+)\s+(.*)\s*$/) {
$module->{'macros'}{$1} = $2; $module->{'macros'}{$1} = $2;
# Commands
} elsif ($line =~ /^\s*cmd_file\s+(.+)$/) {
if (ref ($Conf{'commands'}) ne "HASH") {
$Conf{'commands'} = {};
}
# Initialize empty command hash.
$Conf{'commands'}->{$1} = {};
} }
} }
return; return;
@ -1157,14 +1213,14 @@ sub recv_file {
}; };
if ($@) { if ($@) {
log_message ('error', "Error retrieving file: File transfer command is not responding."); log_message ('error', "Error retrieving file: '.$file.' File transfer command is not responding.");
exit 1; exit 1;
} }
# Get the errorlevel # Get the errorlevel
my $rc = $? >> 8; my $rc = $? >> 8;
if ($rc != 0) { if ($rc != 0) {
log_message ('error', "Error retrieving file: $output"); log_message ('error', "Error retrieving file: '$file' $output");
} }
exit $rc; exit $rc;
} }
@ -1362,6 +1418,220 @@ sub check_collections () {
} }
} }
################################################################################
# Check for remote commands defined.
################################################################################
sub prepare_remote_commands {
if ($YAML == 0) {
log_message(
'error',
'Cannot use commands without YAML dependency, please install it.'
);
return;
}
foreach my $ref (keys %{$Conf{'commands'}}) {
my $file_content;
my $download = 0;
my $rcmd_file = $ConfDir.'/commands/'.$ref.'.rcmd';
# Check for local .rcmd.done files
if (-e $Conf{'temporal'}.'/'.$ref.'.rcmd.done') {
# Ignore.
delete $Conf{'commands'}->{$ref};
next;
}
# Search for local .rcmd file
if (-e $rcmd_file) {
my $remote_md5_file = $Conf{'temporal'}.'/'.$ref.'.md5';
$file_content = read_file($rcmd_file);
if (recv_file($ref.'.md5', $remote_md5_file) != 0) {
# Remote file could not be retrieved, skip.
delete $Conf{'commands'}->{$ref};
next;
}
my $local_md5 = md5($file_content);
my $remote_md5 = md5(read_file($remote_md5_file));
if ($local_md5 ne $remote_md5) {
# Must be downloaded again.
$download = 1;
}
} else {
$download = 1;
}
# Search for remote .rcmd file
if ($download == 1) {
# Download .rcmd file
if (recv_file($ref.'.rcmd') != 0) {
# Remote file could not be retrieved, skip.
delete $Conf{'commands'}->{$ref};
next;
} else {
# Success
move($Conf{'temporal'}.'/'.$ref.'.rcmd', $rcmd_file);
}
}
# Parse and prepare in memory skel.
eval {
$Conf{'commands'}->{$ref} = YAML::Tiny->read($rcmd_file);
};
if ($@) {
# Failed.
log_message('error', 'Failed to decode command. ' . "\n".$@);
delete $Conf{'commands'}->{$ref};
next;
}
}
}
################################################################################
# Command report.
################################################################################
sub report_command {
my ($ref, $err_level) = @_;
# Retrieve content from .stdout and .stderr
my $stdout_file = $Conf{'temporal'}.'/'.$ref.'.stdout';
my $stderr_file = $Conf{'temporal'}.'/'.$ref.'.stderr';
my $return;
eval {
$return = {
'error_level' => $err_level,
'stdout' => read_file($stdout_file),
'stderr' => read_file($stderr_file),
};
$return->{'name'} = $Conf{'commands'}->{$ref}->[0]->{'name'};
};
if ($@) {
log_message('error', 'Failed to report command output. ' . $@);
}
# Cleanup
unlink($stdout_file) if (-e $stdout_file);
unlink($stderr_file) if (-e $stderr_file);
# Mark command as done.
open (my $R_FILE, '> '.$ConfDir.'/commands/'.$ref.'.rcmd.done');
print $R_FILE $err_level;
close($R_FILE);
$return->{'stdout'} = '' unless defined ($return->{'stdout'});
$return->{'stderr'} = '' unless defined ($return->{'stderr'});
return $return;
}
################################################################################
# Executes a command using defined timeout.
################################################################################
sub execute_command_timeout {
my ($command, $timeout) = @_;
if (!looks_like_number($timeout)) {
`$command`;
} else {
`$command`;
}
return $?>>8;
}
################################################################################
# Executes a block of commands, returns error level, leaves output in
# redirection set by $std_files. E.g:
# $std_files = ' >> /tmp/stdout 2>> /tmp/stderr
################################################################################
sub execute_command_block {
my ($commands, $std_files, $timeout) = @_;
return 0 unless defined($commands);
my $err_level = 0;
$std_files = '' unless defined ($std_files);
if (ref($commands) ne "ARRAY") {
return 0 if $commands eq '';
$err_level = execute_command_timeout(
"($commands) $std_files",
$timeout
);
} else {
foreach my $comm (@{$commands}) {
next unless defined($comm);
$err_level = execute_command_timeout(
"($comm) $std_files",
$timeout
);
last unless ($err_level == 0);
}
}
return $err_level;
}
################################################################################
# Evalate given command.
################################################################################
sub evaluate_command {
my ($ref) = @_;
# Not found.
return unless defined $Conf{'commands'}->{$ref};
# Already completed.
return if (-e $ConfDir.'/commands/'.$ref.'.rcmd.done');
# [0] because how library works.
my $cmd = $Conf{'commands'}->{$ref}->[0];
my $std_files = ' >> '.$Conf{'temporal'}.'/'.$ref.'.stdout ';
$std_files .= ' 2>> '.$Conf{'temporal'}.'/'.$ref.'.stderr ';
# Check preconditions
my $err_level;
$err_level = execute_command_block(
$cmd->{'preconditions'},
$std_files,
$cmd->{'timeout'}
);
# Precondition not satisfied.
return report_command($ref, $err_level) unless ($err_level == 0);
# Main run.
$err_level = execute_command_block(
$cmd->{'script'},
$std_files,
$cmd->{'timeout'}
);
# Script not success.
return report_command($ref, $err_level) unless ($err_level == 0);
# Check postconditions
$err_level = execute_command_block(
$cmd->{'postconditions'},
$std_files,
$cmd->{'timeout'}
);
# Return results.
return report_command($ref, $err_level);
}
################################################################################ ################################################################################
# Sleep function # Sleep function
################################################################################ ################################################################################
@ -2985,6 +3255,8 @@ my $iter_base_time = time();
$LogFileIdx = -1; $LogFileIdx = -1;
# Loop # Loop
while (1) { while (1) {
load_libraries();
if (-e $Conf{'logfile'} && (stat($Conf{'logfile'}))[7] > $Conf{'logsize'}) { if (-e $Conf{'logfile'} && (stat($Conf{'logfile'}))[7] > $Conf{'logsize'}) {
rotate_log(); rotate_log();
} }
@ -2999,6 +3271,25 @@ while (1) {
# Check file collections # Check file collections
check_collections () unless ($Conf{'debug'} eq '1'); check_collections () unless ($Conf{'debug'} eq '1');
if ($Conf{'debug'} ne '1') {
# Check remote commands
prepare_remote_commands ();
# Cleanup old .rcmd.done files.
my %registered = map { $_.'.rcmd.done' => 1 } keys %{$Conf{'commands'}};
if(opendir(my $dir, $ConfDir.'/commands/')) {
while (my $item = readdir($dir)) {
# Skip other files.
next if ($item !~ /\.rcmd\.done$/);
# Clean .rcmd.done file if its command is not referenced in conf.
if (!defined($registered{$item})) {
unlink ($item);
}
}
}
}
# Launch broker agents # Launch broker agents
@BrokerPid = (); @BrokerPid = ();
my @broker_agents = read_config ('broker_agent'); my @broker_agents = read_config ('broker_agent');
@ -3128,6 +3419,24 @@ while (1) {
} }
} }
if (ref ($Conf{'commands'}) eq "HASH") {
foreach my $command (keys %{$Conf{'commands'}}) {
my $result = evaluate_command($command);
if (ref($result) eq "HASH") {
# Process command result.
$Xml .= "<cmd_report>\n";
$Xml .= " <cmd_response>\n";
$Xml .= " <cmd_name><![CDATA[".$result->{'name'}."]]></cmd_name>\n";
$Xml .= " <cmd_key><![CDATA[".$command."]]></cmd_key>\n";
$Xml .= " <cmd_errorlevel><![CDATA[".$result->{'error_level'}."]]></cmd_errorlevel>\n";
$Xml .= " <cmd_stdout><![CDATA[".$result->{'stdout'}."]]></cmd_stdout>\n";
$Xml .= " <cmd_stderr><![CDATA[".$result->{'stderr'}."]]></cmd_stderr>\n";
$Xml .= " </cmd_response>\n";
$Xml .= "</cmd_report>\n";
}
}
}
# Wait for all the threads # Wait for all the threads
$ThreadSem->down ($Conf{'agent_threads'}) if (defined ($ThreadSem) && $Conf{'agent_threads'} > 1); $ThreadSem->down ($Conf{'agent_threads'}) if (defined ($ThreadSem) && $Conf{'agent_threads'} > 1);
$ThreadSem->up ($Conf{'agent_threads'}) if (defined ($ThreadSem) && $Conf{'agent_threads'} > 1); $ThreadSem->up ($Conf{'agent_threads'}) if (defined ($ThreadSem) && $Conf{'agent_threads'} > 1);

View File

@ -99,6 +99,11 @@ if [ ! -e /etc/pandora/collections ]; then
ln -s /usr/share/pandora_agent/collections /etc/pandora ln -s /usr/share/pandora_agent/collections /etc/pandora
fi fi
if [ ! -e /etc/pandora/commands ]; then
mkdir -p /usr/share/pandora_agent/commands
ln -s /usr/share/pandora_agent/commands /etc/pandora
fi
mkdir -p /var/spool/pandora/data_out mkdir -p /var/spool/pandora/data_out
if [ ! -d /var/log/pandora ]; then if [ ! -d /var/log/pandora ]; then
mkdir -p /var/log/pandora mkdir -p /var/log/pandora

View File

@ -90,6 +90,11 @@ fi
if [ ! -e /etc/pandora/collections ]; then if [ ! -e /etc/pandora/collections ]; then
mkdir /etc/pandora/collections mkdir /etc/pandora/collections
fi fi
if [ ! -e /etc/pandora/commands ]; then
mkdir /etc/pandora/commands
fi
cp -aRf /usr/share/pandora_agent/pandora_agent_logrotate /etc/logrotate.d/pandora_agent cp -aRf /usr/share/pandora_agent/pandora_agent_logrotate /etc/logrotate.d/pandora_agent
# Enable the service on SystemD # Enable the service on SystemD

View File

@ -401,6 +401,11 @@ install () {
chmod -R 700 $PANDORA_BASE$PANDORA_HOME/collections chmod -R 700 $PANDORA_BASE$PANDORA_HOME/collections
ln -s $PANDORA_BASE_REAL$PANDORA_HOME/collections $PANDORA_BASE$PANDORA_CFG ln -s $PANDORA_BASE_REAL$PANDORA_HOME/collections $PANDORA_BASE$PANDORA_CFG
echo "Creating the commands directory in $PANDORA_BASE$PANDORA_HOME/commands..."
mkdir -p $PANDORA_BASE$PANDORA_HOME/commands
chmod -R 700 $PANDORA_BASE$PANDORA_HOME/commands
ln -s $PANDORA_BASE_REAL$PANDORA_HOME/commands $PANDORA_BASE$PANDORA_CFG
if [ $WITHOUT_TENTACLE_SERVER -eq 0 ] if [ $WITHOUT_TENTACLE_SERVER -eq 0 ]
then then
echo "Copying tentacle server to $PANDORA_BASE$TENTACLE_SERVER" echo "Copying tentacle server to $PANDORA_BASE$TENTACLE_SERVER"

View File

@ -13,7 +13,264 @@
* GNU General Public License for more details. * GNU General Public License for more details.
*/ */
// Begin.
/**
* Extra JS.
*
* @return void
*/
function agents_modules_load_js()
{
$ignored_params['refresh'] = '';
?>
<style type='text/css'>
.rotate_text_module {
-ms-transform: rotate(270deg);
-webkit-transform: rotate(270deg);
-moz-transform: rotate(270deg);
-o-transform: rotate(270deg);
writing-mode: lr-tb;
white-space: nowrap;
}
</style>
<script type='text/javascript'>
$(document).ready(function () {
//Get max width of name of modules
max_width = 0;
$.each($('.th_class_module_r'), function (i, elem) {
id = $(elem).attr('id').replace('th_module_r_', '');
width = $("#div_module_r_" + id).width();
if (max_width < width) {
max_width = width;
}
});
$.each($('.th_class_module_r'), function (i, elem) {
id = $(elem).attr('id').replace('th_module_r_', '');
$("#th_module_r_" + id).height(($("#div_module_r_" + id).width() + 10) + 'px');
$("#div_module_r_" + id).css('margin-top', (max_width - 20) + 'px');
$("#div_module_r_" + id).show();
});
var refr = '<?php echo get_parameter('refresh', 0); ?>';
var pure = '<?php echo get_parameter('pure', 0); ?>';
var href =' <?php echo ui_get_url_refresh($ignored_params); ?>';
if (pure) {
var startCountDown = function (duration, cb) {
$('div.vc-countdown').countdown('destroy');
if (!duration) return;
var t = new Date();
t.setTime(t.getTime() + duration * 1000);
$('div.vc-countdown').countdown({
until: t,
format: 'MS',
layout: '(%M%nn%M:%S%nn%S <?php echo __('Until next'); ?>) ',
alwaysExpire: true,
onExpiry: function () {
$('div.vc-countdown').countdown('destroy');
url = js_html_entity_decode( href ) + duration;
$(document).attr ("location", url);
}
});
}
if(refr>0){
startCountDown(refr, false);
}
var controls = document.getElementById('vc-controls');
autoHideElement(controls, 1000);
$('select#refresh').change(function (event) {
refr = Number.parseInt(event.target.value, 10);
startCountDown(refr, false);
});
}
else {
var agentes_id = $("#id_agents2").val();
var id_agentes = getQueryParam("full_agents_id");
if (agentes_id === null && id_agentes !== null) {
id_agentes = id_agentes.split(";")
id_agentes.forEach(function(element) {
$("#id_agents2 option[value="+ element +"]").attr("selected",true);
});
selection_agent_module();
}
$('#refresh').change(function () {
$('#hidden-vc_refr').val($('#refresh option:selected').val());
});
}
$("#group_id").change (function () {
jQuery.post ("ajax.php",
{"page" : "operation/agentes/ver_agente",
"get_agents_group_json" : 1,
"id_group" : this.value,
"privilege" : "AW",
"keys_prefix" : "_",
"recursion" : $('#checkbox-recursion').is(':checked')
},
function (data, status) {
$("#id_agents2").html('');
$("#module").html('');
jQuery.each (data, function (id, value) {
// Remove keys_prefix from the index
id = id.substring(1);
option = $("<option></option>")
.attr ("value", value["id_agente"])
.html (value["alias"]);
$("#id_agents").append (option);
$("#id_agents2").append (option);
});
},
"json"
);
});
$("#checkbox-recursion").change (function () {
jQuery.post ("ajax.php",
{"page" : "operation/agentes/ver_agente",
"get_agents_group_json" : 1,
"id_group" : $("#group_id").val(),
"privilege" : "AW",
"keys_prefix" : "_",
"recursion" : $('#checkbox-recursion').is(':checked')
},
function (data, status) {
$("#id_agents2").html('');
$("#module").html('');
jQuery.each (data, function (id, value) {
// Remove keys_prefix from the index
id = id.substring(1);
option = $("<option></option>")
.attr ("value", value["id_agente"])
.html (value["alias"]);
$("#id_agents").append (option);
$("#id_agents2").append (option);
});
},
"json"
);
});
$("#modulegroup").change (function () {
jQuery.post ("ajax.php",
{"page" : "operation/agentes/ver_agente",
"get_modules_group_json" : 1,
"id_module_group" : this.value,
"id_agents" : $("#id_agents2").val(),
"selection" : $("#selection_agent_module").val()
},
function (data, status) {
$("#module").html('');
if(data){
jQuery.each (data, function (id, value) {
option = $("<option></option>")
.attr ("value", value["id_agente_modulo"])
.html (value["nombre"]);
$("#module").append (option);
});
}
},
"json"
);
});
$("#id_agents2").click (function(){
selection_agent_module();
});
$("#selection_agent_module").change(function() {
jQuery.post ("ajax.php",
{"page" : "operation/agentes/ver_agente",
"get_modules_group_json" : 1,
"id_module_group" : $("#modulegroup").val(),
"id_agents" : $("#id_agents2").val(),
"selection" : $("#selection_agent_module").val()
},
function (data, status) {
$("#module").html('');
if(data){
jQuery.each (data, function (id, value) {
option = $("<option></option>")
.attr ("value", value["id_agente_modulo"])
.html (value["nombre"]);
$("#module").append (option);
});
}
},
"json"
);
});
});
function selection_agent_module() {
jQuery.post ("ajax.php",
{"page" : "operation/agentes/ver_agente",
"get_modules_group_json" : 1,
"id_module_group" : $("#modulegroup").val(),
"id_agents" : $("#id_agents2").val(),
"selection" : $("#selection_agent_module").val()
},
function (data, status) {
$("#module").html('');
if(data){
jQuery.each (data, function (id, value) {
option = $("<option></option>")
.attr ("value", value["id_agente_modulo"])
.html (value["nombre"]);
$("#module").append (option);
});
var id_modules = getQueryParam("full_modules_selected");
if(id_modules !== null) {
id_modules = id_modules.split(";");
id_modules.forEach(function(element) {
$("#module option[value="+ element +"]").attr("selected",true);
});
}
}
},
"json"
);
}
function getQueryParam (key) {
key = key.replace(/[[]/, '[');
key = key.replace(/[]]/, ']');
var pattern = "[?&]" + key + "=([^&#]*)";
var regex = new RegExp(pattern);
var url = unescape(window.location.href);
var results = regex.exec(url);
if (results === null) {
return null;
} else {
return results[1];
}
}
</script>
<?php
}
/**
* Main method.
*
* @return void
*/
function mainAgentsModules() function mainAgentsModules()
{ {
global $config; global $config;
@ -36,6 +293,9 @@ function mainAgentsModules()
exit; exit;
} }
// JS.
agents_modules_load_js();
// Update network modules for this group // Update network modules for this group
// Check for Network FLAG change request // Check for Network FLAG change request
// Made it a subquery, much faster on both the database and server side. // Made it a subquery, much faster on both the database and server side.
@ -617,243 +877,3 @@ function mainAgentsModules()
extensions_add_operation_menu_option(__('Agents/Modules view'), 'estado', 'agents_modules/icon_menu.png', 'v1r1', 'view'); extensions_add_operation_menu_option(__('Agents/Modules view'), 'estado', 'agents_modules/icon_menu.png', 'v1r1', 'view');
extensions_add_main_function('mainAgentsModules'); extensions_add_main_function('mainAgentsModules');
$ignored_params['refresh'] = '';
?>
<style type='text/css'>
.rotate_text_module {
-ms-transform: rotate(270deg);
-webkit-transform: rotate(270deg);
-moz-transform: rotate(270deg);
-o-transform: rotate(270deg);
writing-mode: lr-tb;
white-space: nowrap;
}
</style>
<script type='text/javascript'>
$(document).ready(function () {
//Get max width of name of modules
max_width = 0;
$.each($('.th_class_module_r'), function (i, elem) {
id = $(elem).attr('id').replace('th_module_r_', '');
width = $("#div_module_r_" + id).width();
if (max_width < width) {
max_width = width;
}
});
$.each($('.th_class_module_r'), function (i, elem) {
id = $(elem).attr('id').replace('th_module_r_', '');
$("#th_module_r_" + id).height(($("#div_module_r_" + id).width() + 10) + 'px');
$("#div_module_r_" + id).css('margin-top', (max_width - 20) + 'px');
$("#div_module_r_" + id).show();
});
var refr = '<?php echo get_parameter('refresh', 0); ?>';
var pure = '<?php echo get_parameter('pure', 0); ?>';
var href =' <?php echo ui_get_url_refresh($ignored_params); ?>';
if (pure) {
var startCountDown = function (duration, cb) {
$('div.vc-countdown').countdown('destroy');
if (!duration) return;
var t = new Date();
t.setTime(t.getTime() + duration * 1000);
$('div.vc-countdown').countdown({
until: t,
format: 'MS',
layout: '(%M%nn%M:%S%nn%S <?php echo __('Until next'); ?>) ',
alwaysExpire: true,
onExpiry: function () {
$('div.vc-countdown').countdown('destroy');
url = js_html_entity_decode( href ) + duration;
$(document).attr ("location", url);
}
});
}
if(refr>0){
startCountDown(refr, false);
}
var controls = document.getElementById('vc-controls');
autoHideElement(controls, 1000);
$('select#refresh').change(function (event) {
refr = Number.parseInt(event.target.value, 10);
startCountDown(refr, false);
});
}
else {
var agentes_id = $("#id_agents2").val();
var id_agentes = getQueryParam("full_agents_id");
if (agentes_id === null && id_agentes !== null) {
id_agentes = id_agentes.split(";")
id_agentes.forEach(function(element) {
$("#id_agents2 option[value="+ element +"]").attr("selected",true);
});
selection_agent_module();
}
$('#refresh').change(function () {
$('#hidden-vc_refr').val($('#refresh option:selected').val());
});
}
$("#group_id").change (function () {
jQuery.post ("ajax.php",
{"page" : "operation/agentes/ver_agente",
"get_agents_group_json" : 1,
"id_group" : this.value,
"privilege" : "AW",
"keys_prefix" : "_",
"recursion" : $('#checkbox-recursion').is(':checked')
},
function (data, status) {
$("#id_agents2").html('');
$("#module").html('');
jQuery.each (data, function (id, value) {
// Remove keys_prefix from the index
id = id.substring(1);
option = $("<option></option>")
.attr ("value", value["id_agente"])
.html (value["alias"]);
$("#id_agents").append (option);
$("#id_agents2").append (option);
});
},
"json"
);
});
$("#checkbox-recursion").change (function () {
jQuery.post ("ajax.php",
{"page" : "operation/agentes/ver_agente",
"get_agents_group_json" : 1,
"id_group" : $("#group_id").val(),
"privilege" : "AW",
"keys_prefix" : "_",
"recursion" : $('#checkbox-recursion').is(':checked')
},
function (data, status) {
$("#id_agents2").html('');
$("#module").html('');
jQuery.each (data, function (id, value) {
// Remove keys_prefix from the index
id = id.substring(1);
option = $("<option></option>")
.attr ("value", value["id_agente"])
.html (value["alias"]);
$("#id_agents").append (option);
$("#id_agents2").append (option);
});
},
"json"
);
});
$("#modulegroup").change (function () {
jQuery.post ("ajax.php",
{"page" : "operation/agentes/ver_agente",
"get_modules_group_json" : 1,
"id_module_group" : this.value,
"id_agents" : $("#id_agents2").val(),
"selection" : $("#selection_agent_module").val()
},
function (data, status) {
$("#module").html('');
if(data){
jQuery.each (data, function (id, value) {
option = $("<option></option>")
.attr ("value", value["id_agente_modulo"])
.html (value["nombre"]);
$("#module").append (option);
});
}
},
"json"
);
});
$("#id_agents2").click (function(){
selection_agent_module();
});
$("#selection_agent_module").change(function() {
jQuery.post ("ajax.php",
{"page" : "operation/agentes/ver_agente",
"get_modules_group_json" : 1,
"id_module_group" : $("#modulegroup").val(),
"id_agents" : $("#id_agents2").val(),
"selection" : $("#selection_agent_module").val()
},
function (data, status) {
$("#module").html('');
if(data){
jQuery.each (data, function (id, value) {
option = $("<option></option>")
.attr ("value", value["id_agente_modulo"])
.html (value["nombre"]);
$("#module").append (option);
});
}
},
"json"
);
});
});
function selection_agent_module() {
jQuery.post ("ajax.php",
{"page" : "operation/agentes/ver_agente",
"get_modules_group_json" : 1,
"id_module_group" : $("#modulegroup").val(),
"id_agents" : $("#id_agents2").val(),
"selection" : $("#selection_agent_module").val()
},
function (data, status) {
$("#module").html('');
if(data){
jQuery.each (data, function (id, value) {
option = $("<option></option>")
.attr ("value", value["id_agente_modulo"])
.html (value["nombre"]);
$("#module").append (option);
});
var id_modules = getQueryParam("full_modules_selected");
if(id_modules !== null) {
id_modules = id_modules.split(";");
id_modules.forEach(function(element) {
$("#module option[value="+ element +"]").attr("selected",true);
});
}
}
},
"json"
);
}
function getQueryParam (key) {
key = key.replace(/[[]/, '[');
key = key.replace(/[]]/, ']');
var pattern = "[?&]" + key + "=([^&#]*)";
var regex = new RegExp(pattern);
var url = unescape(window.location.href);
var results = regex.exec(url);
if (results === null) {
return null;
} else {
return results[1];
}
}
</script>

View File

@ -23,12 +23,12 @@ function pluginreg_extension_main()
return; return;
} }
ui_require_css_file('firts_task'); ui_require_css_file('first_task');
ui_print_page_header(__('Plugin registration'), 'images/extensions.png', false, '', true, ''); ui_print_page_header(__('Plugin registration'), 'images/extensions.png', false, '', true, '');
echo '<div class="new_task"> echo '<div class="new_task">
<div class="image_task">'; <div class="image_task">';
echo html_print_image('images/firts_task/icono_grande_import.png', true, ['title' => __('Plugin Registration') ]); echo html_print_image('images/first_task/icono_grande_import.png', true, ['title' => __('Plugin Registration') ]);
echo '</div>'; echo '</div>';
echo '<div class="text_task">'; echo '<div class="text_task">';
echo '<h3>'.__('Plugin registration').'</h3>'; echo '<h3>'.__('Plugin registration').'</h3>';

View File

@ -8,4 +8,30 @@ INSERT INTO `ttipo_modulo` VALUES
(36,'remote_cmd_string', 10, 'Remote execution, alphanumeric data', 'mod_remote_cmd_string.png'), (36,'remote_cmd_string', 10, 'Remote execution, alphanumeric data', 'mod_remote_cmd_string.png'),
(37,'remote_cmd_inc', 10, 'Remote execution, incremental data', 'mod_remote_cmd_inc.png'); (37,'remote_cmd_inc', 10, 'Remote execution, incremental data', 'mod_remote_cmd_inc.png');
CREATE TABLE `tremote_command` (
`id` SERIAL,
`name` varchar(150) NOT NULL,
`timeout` int(10) unsigned NOT NULL default 30,
`retries` int(10) unsigned NOT NULL default 3,
`preconditions` text,
`script` text,
`postconditions` text,
`utimestamp` int(20) unsigned NOT NULL default 0,
`id_group` int(10) unsigned NOT NULL default 0,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `tremote_command_target` (
`id` SERIAL,
`rcmd_id` bigint unsigned NOT NULL,
`id_agent` int(10) unsigned NOT NULL,
`utimestamp` int(20) unsigned NOT NULL default 0,
`stdout` text,
`stderr` text,
`errorlevel` int(10) unsigned NOT NULL default 0,
PRIMARY KEY (`id`),
FOREIGN KEY (`rcmd_id`) REFERENCES `tremote_command`(`id`)
ON UPDATE CASCADE ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
COMMIT; COMMIT;

View File

@ -1247,13 +1247,13 @@ ALTER TABLE titem MODIFY `source_data` int(10) unsigned;
INSERT INTO `tconfig` (`token`, `value`) VALUES ('big_operation_step_datos_purge', '100'); INSERT INTO `tconfig` (`token`, `value`) VALUES ('big_operation_step_datos_purge', '100');
INSERT INTO `tconfig` (`token`, `value`) VALUES ('small_operation_step_datos_purge', '1000'); INSERT INTO `tconfig` (`token`, `value`) VALUES ('small_operation_step_datos_purge', '1000');
INSERT INTO `tconfig` (`token`, `value`) VALUES ('days_autodisable_deletion', '30'); INSERT INTO `tconfig` (`token`, `value`) VALUES ('days_autodisable_deletion', '30');
INSERT INTO `tconfig` (`token`, `value`) VALUES ('MR', 32); INSERT INTO `tconfig` (`token`, `value`) VALUES ('MR', 33);
INSERT INTO `tconfig` (`token`, `value`) VALUES ('custom_docs_logo', 'default_docs.png'); INSERT INTO `tconfig` (`token`, `value`) VALUES ('custom_docs_logo', 'default_docs.png');
INSERT INTO `tconfig` (`token`, `value`) VALUES ('custom_support_logo', 'default_support.png'); INSERT INTO `tconfig` (`token`, `value`) VALUES ('custom_support_logo', 'default_support.png');
INSERT INTO `tconfig` (`token`, `value`) VALUES ('custom_logo_white_bg_preview', 'pandora_logo_head_white_bg.png'); INSERT INTO `tconfig` (`token`, `value`) VALUES ('custom_logo_white_bg_preview', 'pandora_logo_head_white_bg.png');
UPDATE tconfig SET value = 'https://licensing.artica.es/pandoraupdate7/server.php' WHERE token='url_update_manager'; UPDATE tconfig SET value = 'https://licensing.artica.es/pandoraupdate7/server.php' WHERE token='url_update_manager';
DELETE FROM `tconfig` WHERE `token` = 'current_package_enterprise'; DELETE FROM `tconfig` WHERE `token` = 'current_package_enterprise';
INSERT INTO `tconfig` (`token`, `value`) VALUES ('current_package_enterprise', '739'); INSERT INTO `tconfig` (`token`, `value`) VALUES ('current_package_enterprise', '741');
INSERT INTO `tconfig` (`token`, `value`) VALUES ('status_monitor_fields', 'policy,agent,data_type,module_name,server_type,interval,status,graph,warn,data,timestamp'); INSERT INTO `tconfig` (`token`, `value`) VALUES ('status_monitor_fields', 'policy,agent,data_type,module_name,server_type,interval,status,graph,warn,data,timestamp');
UPDATE `tconfig` SET `value` = 'mini_severity,evento,id_agente,estado,timestamp' WHERE `token` LIKE 'event_fields'; UPDATE `tconfig` SET `value` = 'mini_severity,evento,id_agente,estado,timestamp' WHERE `token` LIKE 'event_fields';
DELETE FROM `tconfig` WHERE `token` LIKE 'integria_api_password'; DELETE FROM `tconfig` WHERE `token` LIKE 'integria_api_password';
@ -2300,6 +2300,39 @@ CREATE TABLE `tdeployment_hosts` (
ON UPDATE CASCADE ON DELETE SET NULL ON UPDATE CASCADE ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8; ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- ----------------------------------------------------------------------
-- Table `tremote_command`
-- ----------------------------------------------------------------------
CREATE TABLE `tremote_command` (
`id` SERIAL,
`name` varchar(150) NOT NULL,
`timeout` int(10) unsigned NOT NULL default 30,
`retries` int(10) unsigned NOT NULL default 3,
`preconditions` text,
`script` text,
`postconditions` text,
`utimestamp` int(20) unsigned NOT NULL default 0,
`id_group` int(10) unsigned NOT NULL default 0,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- ----------------------------------------------------------------------
-- Table `tremote_command_target`
-- ----------------------------------------------------------------------
CREATE TABLE `tremote_command_target` (
`id` SERIAL,
`rcmd_id` bigint unsigned NOT NULL,
`id_agent` int(10) unsigned NOT NULL,
`utimestamp` int(20) unsigned NOT NULL default 0,
`stdout` text,
`stderr` text,
`errorlevel` int(10) unsigned NOT NULL default 0,
PRIMARY KEY (`id`),
FOREIGN KEY (`rcmd_id`) REFERENCES `tremote_command`(`id`)
ON UPDATE CASCADE ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- Extra tnetwork_component -- Extra tnetwork_component
INSERT INTO `tnetwork_component` (`id_nc`, `name`, `description`, `id_group`, `type`, `max`, `min`, `module_interval`, `tcp_port`, `tcp_send`, `tcp_rcv`, `snmp_community`, `snmp_oid`, `id_module_group`, `id_modulo`, `id_plugin`, `plugin_user`, `plugin_pass`, `plugin_parameter`, `max_timeout`, `max_retries`, `history_data`, `min_warning`, `max_warning`, `max_critical`, `str_warning`, `min_ff_event`, `min_critical`, `custom_string_2`, `str_critical`, `custom_integer_1`, `custom_string_1`, `post_process`, `custom_string_3`, `wizard_level`, `custom_integer_2`, `critical_instructions`, `unit`, `unknown_instructions`, `macros`, `warning_inverse`, `warning_instructions`, `tags`, `critical_inverse`, `module_macros`, `id_category`, `min_ff_event_warning`, `disabled_types_event`, `ff_type`, `min_ff_event_normal`, `dynamic_interval`, `min_ff_event_critical`, `dynamic_min`, `each_ff`, `dynamic_two_tailed`, `dynamic_max`, `dynamic_next`) VALUES (786,'N.&#x20;total&#x20;processes','Number&#x20;of&#x20;running&#x20;processes&#x20;in&#x20;a&#x20;Windows&#x20;system.',11,34,0,0,300,0,'tasklist&#x20;/NH&#x20;|&#x20;findstr&#x20;/c&#x20;/v&#x20;&quot;&quot;','','','',6,2,0,'','','',0,0,1,0.00,0.00,'',0.00,0.00,'',0,'','windows','',0,0,0.000000000000000,'','nowizard','','','','',0,0,0,'','{\"going_unknown\":1}','',0,0,0,0,0,0,0,0,0,0); INSERT INTO `tnetwork_component` (`id_nc`, `name`, `description`, `id_group`, `type`, `max`, `min`, `module_interval`, `tcp_port`, `tcp_send`, `tcp_rcv`, `snmp_community`, `snmp_oid`, `id_module_group`, `id_modulo`, `id_plugin`, `plugin_user`, `plugin_pass`, `plugin_parameter`, `max_timeout`, `max_retries`, `history_data`, `min_warning`, `max_warning`, `max_critical`, `str_warning`, `min_ff_event`, `min_critical`, `custom_string_2`, `str_critical`, `custom_integer_1`, `custom_string_1`, `post_process`, `custom_string_3`, `wizard_level`, `custom_integer_2`, `critical_instructions`, `unit`, `unknown_instructions`, `macros`, `warning_inverse`, `warning_instructions`, `tags`, `critical_inverse`, `module_macros`, `id_category`, `min_ff_event_warning`, `disabled_types_event`, `ff_type`, `min_ff_event_normal`, `dynamic_interval`, `min_ff_event_critical`, `dynamic_min`, `each_ff`, `dynamic_two_tailed`, `dynamic_max`, `dynamic_next`) VALUES (786,'N.&#x20;total&#x20;processes','Number&#x20;of&#x20;running&#x20;processes&#x20;in&#x20;a&#x20;Windows&#x20;system.',11,34,0,0,300,0,'tasklist&#x20;/NH&#x20;|&#x20;findstr&#x20;/c&#x20;/v&#x20;&quot;&quot;','','','',6,2,0,'','','',0,0,1,0.00,0.00,'',0.00,0.00,'',0,'','windows','',0,0,0.000000000000000,'','nowizard','','','','',0,0,0,'','{\"going_unknown\":1}','',0,0,0,0,0,0,0,0,0,0);
INSERT INTO `tnetwork_component` (`id_nc`, `name`, `description`, `id_group`, `type`, `max`, `min`, `module_interval`, `tcp_port`, `tcp_send`, `tcp_rcv`, `snmp_community`, `snmp_oid`, `id_module_group`, `id_modulo`, `id_plugin`, `plugin_user`, `plugin_pass`, `plugin_parameter`, `max_timeout`, `max_retries`, `history_data`, `min_warning`, `max_warning`, `max_critical`, `str_warning`, `min_ff_event`, `min_critical`, `custom_string_2`, `str_critical`, `custom_integer_1`, `custom_string_1`, `post_process`, `custom_string_3`, `wizard_level`, `custom_integer_2`, `critical_instructions`, `unit`, `unknown_instructions`, `macros`, `warning_inverse`, `warning_instructions`, `tags`, `critical_inverse`, `module_macros`, `id_category`, `min_ff_event_warning`, `disabled_types_event`, `ff_type`, `min_ff_event_normal`, `dynamic_interval`, `min_ff_event_critical`, `dynamic_min`, `each_ff`, `dynamic_two_tailed`, `dynamic_max`, `dynamic_next`) VALUES (787,'Free&#x20;space&#x20;in&#x20;C:','Free&#x20;space&#x20;available&#x20;in&#x20;C:',11,34,0,0,300,0,'powershell&#x20;$obj=&#40;Get-WmiObject&#x20;-class&#x20;&quot;Win32_LogicalDisk&quot;&#x20;-namespace&#x20;&quot;root&#92;CIMV2&quot;&#41;&#x20;;&#x20;$obj.FreeSpace&#x20;*&#x20;100&#x20;/$obj.Size','','','',4,2,0,'','','',0,0,1,0.00,0.00,'',0.00,0.00,'',0,'','windows','',0,0,0.000000000000000,'%','nowizard','','','','',0,0,0,'','{\"going_unknown\":1}','',0,0,0,0,0,0,0,0,0,0); INSERT INTO `tnetwork_component` (`id_nc`, `name`, `description`, `id_group`, `type`, `max`, `min`, `module_interval`, `tcp_port`, `tcp_send`, `tcp_rcv`, `snmp_community`, `snmp_oid`, `id_module_group`, `id_modulo`, `id_plugin`, `plugin_user`, `plugin_pass`, `plugin_parameter`, `max_timeout`, `max_retries`, `history_data`, `min_warning`, `max_warning`, `max_critical`, `str_warning`, `min_ff_event`, `min_critical`, `custom_string_2`, `str_critical`, `custom_integer_1`, `custom_string_1`, `post_process`, `custom_string_3`, `wizard_level`, `custom_integer_2`, `critical_instructions`, `unit`, `unknown_instructions`, `macros`, `warning_inverse`, `warning_instructions`, `tags`, `critical_inverse`, `module_macros`, `id_category`, `min_ff_event_warning`, `disabled_types_event`, `ff_type`, `min_ff_event_normal`, `dynamic_interval`, `min_ff_event_critical`, `dynamic_min`, `each_ff`, `dynamic_two_tailed`, `dynamic_max`, `dynamic_next`) VALUES (787,'Free&#x20;space&#x20;in&#x20;C:','Free&#x20;space&#x20;available&#x20;in&#x20;C:',11,34,0,0,300,0,'powershell&#x20;$obj=&#40;Get-WmiObject&#x20;-class&#x20;&quot;Win32_LogicalDisk&quot;&#x20;-namespace&#x20;&quot;root&#92;CIMV2&quot;&#41;&#x20;;&#x20;$obj.FreeSpace&#x20;*&#x20;100&#x20;/$obj.Size','','','',4,2,0,'','','',0,0,1,0.00,0.00,'',0.00,0.00,'',0,'','windows','',0,0,0.000000000000000,'%','nowizard','','','','',0,0,0,'','{\"going_unknown\":1}','',0,0,0,0,0,0,0,0,0,0);

View File

@ -33,13 +33,13 @@ if (! check_acl($config['id_user'], 0, 'PM')) {
exit; exit;
} }
ui_require_css_file('firts_task'); ui_require_css_file('first_task');
ui_print_info_message(['no_close' => true, 'message' => __('There are no HA clusters defined yet.') ]); ui_print_info_message(['no_close' => true, 'message' => __('There are no HA clusters defined yet.') ]);
?> ?>
<div class="new_task_cluster"> <div class="new_task_cluster">
<div class="image_task_cluster"> <div class="image_task_cluster">
<?php echo html_print_image('images/firts_task/slave-mode.png', true, ['title' => __('Clusters')]); ?> <?php echo html_print_image('images/first_task/slave-mode.png', true, ['title' => __('Clusters')]); ?>
</div> </div>
<div class="text_task_cluster"> <div class="text_task_cluster">
<h3> <?php echo __('PANDORA FMS DB CLUSTER'); ?></h3> <h3> <?php echo __('PANDORA FMS DB CLUSTER'); ?></h3>

View File

@ -24,7 +24,7 @@ if (! check_acl($config['id_user'], 0, 'AR') && ! check_acl($config['id_user'],
return; return;
} }
ui_require_css_file('firts_task'); ui_require_css_file('first_task');
?> ?>
<?php <?php
ui_print_info_message(['no_close' => true, 'message' => __('There are no clusters defined yet.') ]); ui_print_info_message(['no_close' => true, 'message' => __('There are no clusters defined yet.') ]);
@ -32,7 +32,7 @@ ui_print_info_message(['no_close' => true, 'message' => __('There are no cluster
<div class="new_task_cluster"> <div class="new_task_cluster">
<div class="image_task_cluster"> <div class="image_task_cluster">
<?php echo html_print_image('images/firts_task/icono-cluster-activo.png', true, ['title' => __('Clusters')]); ?> <?php echo html_print_image('images/first_task/icono-cluster-activo.png', true, ['title' => __('Clusters')]); ?>
</div> </div>
<div class="text_task_cluster"> <div class="text_task_cluster">
<h3> <?php echo __('Create Cluster'); ?></h3> <h3> <?php echo __('Create Cluster'); ?></h3>

View File

@ -13,7 +13,7 @@
// GNU General Public License for more details. // GNU General Public License for more details.
global $config; global $config;
check_login(); check_login();
ui_require_css_file('firts_task'); ui_require_css_file('first_task');
?> ?>
<?php ui_print_info_message(['no_close' => true, 'message' => __('There are no collections defined yet.') ]); ?> <?php ui_print_info_message(['no_close' => true, 'message' => __('There are no collections defined yet.') ]); ?>

View File

@ -13,7 +13,7 @@
// GNU General Public License for more details. // GNU General Public License for more details.
global $config; global $config;
check_login(); check_login();
ui_require_css_file('firts_task'); ui_require_css_file('first_task');
?> ?>
<?php <?php
ui_print_info_message(['no_close' => true, 'message' => __('There are no custom fields defined yet.') ]); ui_print_info_message(['no_close' => true, 'message' => __('There are no custom fields defined yet.') ]);
@ -21,7 +21,7 @@ ui_print_info_message(['no_close' => true, 'message' => __('There are no custom
<div class="new_task"> <div class="new_task">
<div class="image_task"> <div class="image_task">
<?php echo html_print_image('images/firts_task/icono_grande_reconserver.png', true, ['title' => __('Custom Fields')]); ?> <?php echo html_print_image('images/first_task/icono_grande_reconserver.png', true, ['title' => __('Custom Fields')]); ?>
</div> </div>
<div class="text_task"> <div class="text_task">
<h3> <?php echo __('Create Custom Fields'); ?></h3><p id="description_task"> <h3> <?php echo __('Create Custom Fields'); ?></h3><p id="description_task">

View File

@ -13,7 +13,7 @@
// GNU General Public License for more details. // GNU General Public License for more details.
global $config; global $config;
check_login(); check_login();
ui_require_css_file('firts_task'); ui_require_css_file('first_task');
?> ?>
<?php <?php
ui_print_info_message(['no_close' => true, 'message' => __('There are no custom graphs defined yet.') ]); ui_print_info_message(['no_close' => true, 'message' => __('There are no custom graphs defined yet.') ]);
@ -21,7 +21,7 @@ ui_print_info_message(['no_close' => true, 'message' => __('There are no custom
<div class="new_task"> <div class="new_task">
<div class="image_task"> <div class="image_task">
<?php echo html_print_image('images/firts_task/icono_grande_custom_reporting.png', true, ['title' => __('Custom Graphs')]); ?> <?php echo html_print_image('images/first_task/icono_grande_custom_reporting.png', true, ['title' => __('Custom Graphs')]); ?>
</div> </div>
<div class="text_task"> <div class="text_task">
<h3> <?php echo __('Create Custom Graph'); ?></h3><p id="description_task"> <h3> <?php echo __('Create Custom Graph'); ?></h3><p id="description_task">

View File

@ -13,13 +13,13 @@
// GNU General Public License for more details. // GNU General Public License for more details.
global $config; global $config;
check_login(); check_login();
ui_require_css_file('firts_task'); ui_require_css_file('first_task');
?> ?>
<?php ui_print_info_message(['no_close' => true, 'message' => __('There are no custom fields defined yet.') ]); ?> <?php ui_print_info_message(['no_close' => true, 'message' => __('There are no custom fields defined yet.') ]); ?>
<div class="new_task"> <div class="new_task">
<div class="image_task"> <div class="image_task">
<?php echo html_print_image('images/firts_task/icono_grande_reconserver.png', true, ['title' => __('Fields Manager')]); ?> <?php echo html_print_image('images/first_task/icono_grande_reconserver.png', true, ['title' => __('Fields Manager')]); ?>
</div> </div>
<div class="text_task"> <div class="text_task">
<h3> <?php echo __('Create Fields Manager'); ?></h3><p id="description_task"> <h3> <?php echo __('Create Fields Manager'); ?></h3><p id="description_task">

View File

@ -15,7 +15,7 @@ global $config;
global $incident_w; global $incident_w;
global $incident_m; global $incident_m;
check_login(); check_login();
ui_require_css_file('firts_task'); ui_require_css_file('first_task');
?> ?>
<?php <?php
ui_print_info_message(['no_close' => true, 'message' => __('There are no incidents defined yet.') ]); ui_print_info_message(['no_close' => true, 'message' => __('There are no incidents defined yet.') ]);
@ -25,7 +25,7 @@ if ($incident_w || $incident_m) {
<div class="new_task"> <div class="new_task">
<div class="image_task"> <div class="image_task">
<?php echo html_print_image('images/firts_task/icono_grande_incidencia.png', true, ['title' => __('Incidents')]); ?> <?php echo html_print_image('images/first_task/icono_grande_incidencia.png', true, ['title' => __('Incidents')]); ?>
</div> </div>
<div class="text_task"> <div class="text_task">
<h3> <?php echo __('Create Incidents'); ?></h3><p id="description_task"> <h3> <?php echo __('Create Incidents'); ?></h3><p id="description_task">

View File

@ -15,7 +15,7 @@ global $config;
global $vconsoles_write; global $vconsoles_write;
global $vconsoles_manage; global $vconsoles_manage;
check_login(); check_login();
ui_require_css_file('firts_task'); ui_require_css_file('first_task');
ui_print_info_message( ui_print_info_message(
[ [
@ -28,7 +28,7 @@ if ($vconsoles_write || $vconsoles_manage) {
<div class="new_task"> <div class="new_task">
<div class="image_task"> <div class="image_task">
<?php echo html_print_image('images/firts_task/icono_grande_visualconsole.png', true, ['title' => __('Visual Console')]); ?> <?php echo html_print_image('images/first_task/icono_grande_visualconsole.png', true, ['title' => __('Visual Console')]); ?>
</div> </div>
<div class="text_task"> <div class="text_task">
<h3> <?php echo __('Create Visual Console'); ?></h3><p id="description_task"> <h3> <?php echo __('Create Visual Console'); ?></h3><p id="description_task">

View File

@ -13,7 +13,7 @@
// GNU General Public License for more details. // GNU General Public License for more details.
global $config; global $config;
check_login(); check_login();
ui_require_css_file('firts_task'); ui_require_css_file('first_task');
?> ?>
<?php <?php
ui_print_info_message(['no_close' => true, 'message' => __('There are no network map defined yet.') ]); ui_print_info_message(['no_close' => true, 'message' => __('There are no network map defined yet.') ]);
@ -23,7 +23,7 @@ $networkmap_types = networkmap_get_types($strict_user);
<div class="new_task"> <div class="new_task">
<div class="image_task"> <div class="image_task">
<?php echo html_print_image('images/firts_task/icono_grande_reconserver.png', true, ['title' => __('Network Map')]); ?> <?php echo html_print_image('images/first_task/icono_grande_reconserver.png', true, ['title' => __('Network Map')]); ?>
</div> </div>
<div class="text_task"> <div class="text_task">
<h3> <?php echo __('Create Network Map'); ?></h3><p id="description_task"> <h3> <?php echo __('Create Network Map'); ?></h3><p id="description_task">

View File

@ -0,0 +1,56 @@
<?php
/**
* Omnishell first task.
*
* @category Omnishell
* @package Pandora FMS
* @subpackage Enterprise
* @version 1.0.0
* @license See below
*
* ______ ___ _______ _______ ________
* | __ \.-----.--.--.--| |.-----.----.-----. | ___| | | __|
* | __/| _ | | _ || _ | _| _ | | ___| |__ |
* |___| |___._|__|__|_____||_____|__| |___._| |___| |__|_|__|_______|
*
* ============================================================================
* Copyright (c) 2007-2019 Artica Soluciones Tecnologicas, http://www.artica.es
* This code is NOT free software. This code is NOT licenced under GPL2 licence
* You cannnot redistribute it without written permission of copyright holder.
* ============================================================================
*/
global $config;
check_login();
ui_require_css_file('first_task');
?>
<?php ui_print_info_message(['no_close' => true, 'message' => __('There is no command defined yet.') ]); ?>
<div class="new_task">
<div class="image_task">
<?php echo html_print_image('images/first_task/omnishell.png', true, ['title' => __('Omnishell')]); ?>
</div>
<div class="text_task">
<h3> <?php echo __('Omnishell'); ?></h3><p id="description_task">
<?php
echo '<p>'.__(
'Omnishell is an enterprise feature which allows you to execute a structured command along any agent in your %s. The only requirement is to have remote configuration enabled in your agent.',
io_safe_output(get_product_name())
).'</p>';
echo '<p>'.__(
'You can execute any command on as many agents you need, and check the execution on all of them using the Omnishell Command View'
).'</p>';
?>
</p>
<?php
if (enterprise_installed()) {
?>
<form action="index.php?sec=gextensions&sec2=enterprise/tools/omnishell&page=1" method="post">
<input type="submit" class="button_task" value="<?php echo __('Define a command'); ?>" />
</form>
<?php
}
?>
</div>
</div>

View File

@ -13,13 +13,13 @@
// GNU General Public License for more details. // GNU General Public License for more details.
global $config; global $config;
check_login(); check_login();
ui_require_css_file('firts_task'); ui_require_css_file('first_task');
?> ?>
<?php ui_print_info_message(['no_close' => true, 'message' => __('There are no planned downtime defined yet.') ]); ?> <?php ui_print_info_message(['no_close' => true, 'message' => __('There are no planned downtime defined yet.') ]); ?>
<div class="new_task"> <div class="new_task">
<div class="image_task"> <div class="image_task">
<?php echo html_print_image('images/firts_task/icono_grande_visualconsole.png', true, ['title' => __('Planned Downtime')]); ?> <?php echo html_print_image('images/first_task/icono_grande_visualconsole.png', true, ['title' => __('Planned Downtime')]); ?>
</div> </div>
<div class="text_task"> <div class="text_task">
<h3> <?php echo __('Create Planned Downtime'); ?></h3><p id="description_task"> <h3> <?php echo __('Create Planned Downtime'); ?></h3><p id="description_task">

View File

@ -13,13 +13,13 @@
// GNU General Public License for more details. // GNU General Public License for more details.
global $config; global $config;
check_login(); check_login();
ui_require_css_file('firts_task'); ui_require_css_file('first_task');
?> ?>
<?php ui_print_info_message(['no_close' => true, 'message' => __('There are no discovery tasks defined yet.') ]); ?> <?php ui_print_info_message(['no_close' => true, 'message' => __('There are no discovery tasks defined yet.') ]); ?>
<div class="new_task"> <div class="new_task">
<div class="image_task"> <div class="image_task">
<?php echo html_print_image('images/firts_task/icono_grande_reconserver.png', true, ['title' => __('Discovery server')]); ?> <?php echo html_print_image('images/first_task/icono_grande_reconserver.png', true, ['title' => __('Discovery server')]); ?>
</div> </div>
<div class="text_task"> <div class="text_task">
<h3> <?php echo __('Create Discovery Task'); ?></h3><p id="description_task"> <h3> <?php echo __('Create Discovery Task'); ?></h3><p id="description_task">

View File

@ -15,14 +15,14 @@ global $config;
global $agent_w; global $agent_w;
check_login(); check_login();
ui_require_css_file('firts_task'); ui_require_css_file('first_task');
?> ?>
<?php ui_print_info_message(['no_close' => true, 'message' => __('There are no services defined yet.') ]); ?> <?php ui_print_info_message(['no_close' => true, 'message' => __('There are no services defined yet.') ]); ?>
<?php if ($agent_w) { ?> <?php if ($agent_w) { ?>
<div class="new_task"> <div class="new_task">
<div class="image_task"> <div class="image_task">
<?php echo html_print_image('images/firts_task/icono_grande_servicios.png', true, ['title' => __('Services')]); ?> <?php echo html_print_image('images/first_task/icono_grande_servicios.png', true, ['title' => __('Services')]); ?>
</div> </div>
<div class="text_task"> <div class="text_task">
<h3> <?php echo __('Create Services'); ?></h3><p id="description_task"> <h3> <?php echo __('Create Services'); ?></h3><p id="description_task">

View File

@ -13,13 +13,13 @@
// GNU General Public License for more details. // GNU General Public License for more details.
global $config; global $config;
check_login(); check_login();
ui_require_css_file('firts_task'); ui_require_css_file('first_task');
?> ?>
<?php ui_print_info_message(['no_close' => true, 'message' => __('There are no SNMP filter defined yet.') ]); ?> <?php ui_print_info_message(['no_close' => true, 'message' => __('There are no SNMP filter defined yet.') ]); ?>
<div class="new_task"> <div class="new_task">
<div class="image_task"> <div class="image_task">
<?php echo html_print_image('images/firts_task/icono_grande_reconserver.png', true, ['title' => __('SNMP Filter')]); ?> <?php echo html_print_image('images/first_task/icono_grande_reconserver.png', true, ['title' => __('SNMP Filter')]); ?>
</div> </div>
<div class="text_task"> <div class="text_task">
<h3> <?php echo __('Create SNMP Filter'); ?></h3><p id="description_task"> <h3> <?php echo __('Create SNMP Filter'); ?></h3><p id="description_task">

View File

@ -13,13 +13,13 @@
// GNU General Public License for more details. // GNU General Public License for more details.
global $config; global $config;
check_login(); check_login();
ui_require_css_file('firts_task'); ui_require_css_file('first_task');
?> ?>
<?php ui_print_info_message(['no_close' => true, 'message' => __('There are no tags defined yet.') ]); ?> <?php ui_print_info_message(['no_close' => true, 'message' => __('There are no tags defined yet.') ]); ?>
<div class="new_task"> <div class="new_task">
<div class="image_task"> <div class="image_task">
<?php echo html_print_image('images/firts_task/icono_grande_gestiondetags.png', true, ['title' => __('Tags')]); ?> <?php echo html_print_image('images/first_task/icono_grande_gestiondetags.png', true, ['title' => __('Tags')]); ?>
</div> </div>
<div class="text_task"> <div class="text_task">
<h3> <?php echo __('Create Tags'); ?></h3><p id="description_task"> <h3> <?php echo __('Create Tags'); ?></h3><p id="description_task">

View File

@ -15,7 +15,7 @@ global $config;
global $networkmaps_write; global $networkmaps_write;
global $networkmaps_manage; global $networkmaps_manage;
check_login(); check_login();
ui_require_css_file('firts_task'); ui_require_css_file('first_task');
?> ?>
<?php <?php
ui_print_info_message(['no_close' => true, 'message' => __('There are no transactions defined yet.') ]); ui_print_info_message(['no_close' => true, 'message' => __('There are no transactions defined yet.') ]);
@ -25,7 +25,7 @@ if ($networkmaps_write || $networkmaps_manage) {
<div class="new_task"> <div class="new_task">
<div class="image_task"> <div class="image_task">
<?php echo html_print_image('images/firts_task/icono_grande_topology.png', true, ['title' => __('Transactions')]); ?> <?php echo html_print_image('images/first_task/icono_grande_topology.png', true, ['title' => __('Transactions')]); ?>
</div> </div>
<div class="text_task"> <div class="text_task">
<h3> <?php echo __('Create Transactions'); ?></h3><p id="description_task"> <h3> <?php echo __('Create Transactions'); ?></h3><p id="description_task">

View File

@ -126,7 +126,7 @@ if ($fields) {
$table->size[3] = '8%'; $table->size[3] = '8%';
$table->data = []; $table->data = [];
} else { } else {
include_once $config['homedir'].'/general/firts_task/fields_manager.php'; include_once $config['homedir'].'/general/first_task/fields_manager.php';
return; return;
} }

View File

@ -352,7 +352,7 @@ if (!empty($groups)) {
// No downtimes cause the user has not anyone. // No downtimes cause the user has not anyone.
if (!$downtimes && !$filter_performed) { if (!$downtimes && !$filter_performed) {
include_once $config['homedir'].'/general/firts_task/planned_downtime.php'; include_once $config['homedir'].'/general/first_task/planned_downtime.php';
} }
// No downtimes cause the user performed a search. // No downtimes cause the user performed a search.
else if (!$downtimes) { else if (!$downtimes) {

View File

@ -346,6 +346,8 @@ if (check_acl($config['id_user'], 0, 'PM') || check_acl($config['id_user'], 0, '
$sub['godmode/setup/links']['id'] = 'Links'; $sub['godmode/setup/links']['id'] = 'Links';
$sub['tools/diagnostics']['text'] = __('Diagnostic info'); $sub['tools/diagnostics']['text'] = __('Diagnostic info');
$sub['tools/diagnostics']['id'] = 'Diagnostic info'; $sub['tools/diagnostics']['id'] = 'Diagnostic info';
enterprise_hook('omnishell');
$sub['godmode/setup/news']['text'] = __('Site news'); $sub['godmode/setup/news']['text'] = __('Site news');
$sub['godmode/setup/news']['id'] = 'Site news'; $sub['godmode/setup/news']['id'] = 'Site news';
$sub['godmode/setup/file_manager']['text'] = __('File manager'); $sub['godmode/setup/file_manager']['text'] = __('File manager');

View File

@ -337,7 +337,7 @@ $table_aux = new stdClass();
echo '</div>'; echo '</div>';
} else { } else {
include_once $config['homedir'].'/general/firts_task/custom_graphs.php'; include_once $config['homedir'].'/general/first_task/custom_graphs.php';
} }
?> ?>

View File

@ -395,7 +395,7 @@ if ($own_info['is_admin'] || $vconsoles_read) {
if (!$maps && !is_metaconsole()) { if (!$maps && !is_metaconsole()) {
$total = count(visual_map_get_user_layouts($config['id_user'], false, false, false)); $total = count(visual_map_get_user_layouts($config['id_user'], false, false, false));
if (!$total) { if (!$total) {
include_once $config['homedir'].'/general/firts_task/map_builder.php'; include_once $config['homedir'].'/general/first_task/map_builder.php';
} else { } else {
ui_print_info_message( ui_print_info_message(
[ [

View File

@ -154,7 +154,7 @@ foreach ($servers as $server) {
if ($server['type'] == 'recon') { if ($server['type'] == 'recon') {
$data[8] .= '<a href="'.ui_get_full_url('index.php?sec=gservers&sec2=godmode/servers/discovery&wiz=tasklist').'">'; $data[8] .= '<a href="'.ui_get_full_url('index.php?sec=gservers&sec2=godmode/servers/discovery&wiz=tasklist').'">';
$data[8] .= html_print_image( $data[8] .= html_print_image(
'images/firts_task/icono_grande_reconserver.png', 'images/first_task/icono_grande_reconserver.png',
true, true,
[ [
'title' => __('Manage Discovery tasks'), 'title' => __('Manage Discovery tasks'),

View File

@ -304,7 +304,7 @@ if (!empty($result)) {
} else if ($filter_performed) { } else if ($filter_performed) {
echo $filter_form; echo $filter_form;
} else { } else {
include $config['homedir'].'/general/firts_task/tags.php'; include $config['homedir'].'/general/first_task/tags.php';
return; return;
} }
} }

View File

@ -145,7 +145,7 @@ class DiscoveryTaskList extends Wizard
$ret2 = $this->showList(); $ret2 = $this->showList();
if ($ret === false && $ret2 === false) { if ($ret === false && $ret2 === false) {
include_once $config['homedir'].'/general/firts_task/recon_view.php'; include_once $config['homedir'].'/general/first_task/recon_view.php';
} else { } else {
$form = [ $form = [
'form' => [ 'form' => [

View File

@ -436,11 +436,15 @@ class Wizard
* *
* @param array $input Definition of target block to be printed. * @param array $input Definition of target block to be printed.
* @param boolean $return Return as string or direct output. * @param boolean $return Return as string or direct output.
* @param boolean $direct Avoid encapsulation if input print is direct.
* *
* @return string HTML content. * @return string HTML content.
*/ */
public function printBlock(array $input, bool $return=false, bool $not_direct=false) public function printBlock(
{ array $input,
bool $return=false,
bool $direct=false
) {
$output = ''; $output = '';
if ($input['hidden'] == 1) { if ($input['hidden'] == 1) {
$class = ' hidden'; $class = ' hidden';
@ -453,7 +457,7 @@ class Wizard
} }
if (is_array($input['block_content']) === true) { if (is_array($input['block_content']) === true) {
$not_direct = (bool) $input['direct']; $direct = (bool) $input['direct'];
// Print independent block of inputs. // Print independent block of inputs.
$output .= '<li id="li-'.$input['block_id'].'" class="'.$class.'">'; $output .= '<li id="li-'.$input['block_id'].'" class="'.$class.'">';
@ -462,17 +466,21 @@ class Wizard
$output .= '<'.$input['wrapper'].' id="'.$input['block_id'].'" class="'.$class.'">'; $output .= '<'.$input['wrapper'].' id="'.$input['block_id'].'" class="'.$class.'">';
} }
if (!$not_direct) { if (!$direct) {
// Avoid encapsulation if input is direct => 1. // Avoid encapsulation if input is direct => 1.
$output .= '<ul class="wizard '.$input['block_class'].'">'; $output .= '<ul class="wizard '.$input['block_class'].'">';
} }
foreach ($input['block_content'] as $input) { foreach ($input['block_content'] as $input) {
$output .= $this->printBlock($input, $return, (bool) $not_direct); $output .= $this->printBlock(
$input,
$return,
(bool) $direct
);
} }
// Close block. // Close block.
if (!$not_direct) { if (!$direct) {
$output .= '</ul>'; $output .= '</ul>';
} }
@ -483,7 +491,7 @@ class Wizard
$output .= '</li>'; $output .= '</li>';
} else { } else {
if ($input['arguments']['type'] != 'hidden') { if ($input['arguments']['type'] != 'hidden') {
if (!$not_direct) { if (!$direct) {
$output .= '<li id="'.$input['id'].'" class="'.$class.'">'; $output .= '<li id="'.$input['id'].'" class="'.$class.'">';
} }
@ -491,7 +499,7 @@ class Wizard
$output .= $this->printInput($input['arguments']); $output .= $this->printInput($input['arguments']);
// Allow dynamic content. // Allow dynamic content.
$output .= $input['extra']; $output .= $input['extra'];
if (!$not_direct) { if (!$direct) {
$output .= '</li>'; $output .= '</li>';
} }
} else { } else {
@ -806,8 +814,11 @@ class Wizard
$padding_left = isset($column['padding-left']) ? 'padding-left: '.$column['padding-left'].';' : 'padding-left: 0;'; $padding_left = isset($column['padding-left']) ? 'padding-left: '.$column['padding-left'].';' : 'padding-left: 0;';
$padding_right = isset($column['padding-right']) ? 'padding-right: '.$column['padding-right'].';' : 'padding-right: 0;'; $padding_right = isset($column['padding-right']) ? 'padding-right: '.$column['padding-right'].';' : 'padding-right: 0;';
$extra_styles = isset($column['style']) ? $column['style'] : ''; $extra_styles = isset($column['style']) ? $column['style'] : '';
$class = isset($column['class']) ? $column['class'] : '';
$output .= '<div style="'.$width.$padding_left.$padding_right.$extra_styles.'">'; $output .= '<div class="'.$class.'" ';
$output .= ' style="'.$width.$padding_left.$padding_right;
$output .= $extra_styles.'">';
foreach ($column['inputs'] as $input) { foreach ($column['inputs'] as $input) {
if (is_array($input)) { if (is_array($input)) {

View File

Before

Width:  |  Height:  |  Size: 3.9 KiB

After

Width:  |  Height:  |  Size: 3.9 KiB

View File

Before

Width:  |  Height:  |  Size: 2.6 KiB

After

Width:  |  Height:  |  Size: 2.6 KiB

View File

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 1.8 KiB

View File

Before

Width:  |  Height:  |  Size: 2.1 KiB

After

Width:  |  Height:  |  Size: 2.1 KiB

View File

Before

Width:  |  Height:  |  Size: 2.0 KiB

After

Width:  |  Height:  |  Size: 2.0 KiB

View File

Before

Width:  |  Height:  |  Size: 2.5 KiB

After

Width:  |  Height:  |  Size: 2.5 KiB

View File

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 1.7 KiB

View File

Before

Width:  |  Height:  |  Size: 2.4 KiB

After

Width:  |  Height:  |  Size: 2.4 KiB

View File

Before

Width:  |  Height:  |  Size: 2.5 KiB

After

Width:  |  Height:  |  Size: 2.5 KiB

View File

Before

Width:  |  Height:  |  Size: 2.5 KiB

After

Width:  |  Height:  |  Size: 2.5 KiB

View File

Before

Width:  |  Height:  |  Size: 2.7 KiB

After

Width:  |  Height:  |  Size: 2.7 KiB

View File

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 2.3 KiB

View File

Before

Width:  |  Height:  |  Size: 2.9 KiB

After

Width:  |  Height:  |  Size: 2.9 KiB

View File

Before

Width:  |  Height:  |  Size: 3.6 KiB

After

Width:  |  Height:  |  Size: 3.6 KiB

View File

Before

Width:  |  Height:  |  Size: 2.6 KiB

After

Width:  |  Height:  |  Size: 2.6 KiB

View File

Before

Width:  |  Height:  |  Size: 2.0 KiB

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

View File

Before

Width:  |  Height:  |  Size: 387 B

After

Width:  |  Height:  |  Size: 387 B

View File

Before

Width:  |  Height:  |  Size: 3.0 KiB

After

Width:  |  Height:  |  Size: 3.0 KiB

View File

@ -2911,6 +2911,130 @@ function ui_progress(
} }
/**
* Generates a progress bar CSS based.
* Requires css progress.css
*
* @param array $progress Progress.
* @param string $width Width.
* @param integer $height Height in 'em'.
* @param array $color status color.
* @param boolean $return Return or paint (if false).
* @param boolean $text Text to be displayed,by default progress %.
* @param array $ajax Ajax: [ 'page' => 'page', 'data' => 'data' ] Sample:
* [
* 'page' => 'operation/agentes/ver_agente', Target page.
* 'interval' => 100 / $agent["intervalo"], Ask every interval seconds.
* 'data' => [ Data to be sent to target page.
* 'id_agente' => $id_agente,
* 'refresh_contact' => 1,
* ],
* ].
*
* @return string HTML code.
*/
function ui_progress_extend(
$progress,
$width='100%',
$height='2.5',
$color='#82b92e',
$return=true,
$text='',
$ajax=false
) {
if (!$progress['total']) {
$progress = 0;
}
$totalW = ($progress['total'] * 100);
if ($totalW > 100) {
$totalW = 100;
}
if ($totalW < 0) {
$totalW = 0;
}
if (empty($text)) {
$text = $totalW.'%';
}
$badW = (($progress['bad'] * 100 ) / $progress['total']);
$goodW = (($progress['good'] * 100 ) / $progress['total']);
$unknownW = (($progress['unknown'] * 100 ) / $progress['total']);
ui_require_css_file('progress');
$output .= '<div class="progress_main" data-label="total"';
$output .= '" style="width: '.$totalW.'%;display:flex; height: '.$height.'em;">';
$output .= '<div id="unknow_div" onmouseover="Mouseover()" class="progress_main text_over" data-label="Pending"';
$output .= '" style="width: '.$unknownW.'%; height: '.$height.'em; background-color: '.COL_UNKNOWN.'; "></div>';
$output .= '<div class="progress_main" data-label="Success"';
$output .= '" style="width: '.$goodW.'%; height: '.$height.'em; background-color: '.COL_NORMAL.';"></div>';
$output .= '<div class="progress_main" data-label="Error"';
$output .= '" style="width: '.$badW.'%; height: '.$height.'em; background-color: '.COL_CRITICAL.';"></div>';
$output .= '</div>';
if ($ajax !== false && is_array($ajax)) {
$output .= '<script type="text/javascript">
$(document).ready(function() {
function
document.getElementById("#unknow_div").onmouseover = function() {
document.getElementById("#unknow_div").append( $( "<span> ***</span>" ) );
}
}
setInterval(() => {
last = $(".progress_main").attr("data-label").split(" ")[0]*1;
width = $(".progress").width() / $(".progress").parent().width() * 100;
width_interval = '.$ajax['interval'].';
if (last % 10 == 0) {
$.post({
url: "'.ui_get_full_url('ajax.php', false, false, false).'",
data: {';
if (is_array($ajax['data'])) {
foreach ($ajax['data'] as $token => $value) {
$output .= '
'.$token.':"'.$value.'",';
}
}
$output .= '
page: "'.$ajax['page'].'"
},
success: function(data) {
try {
val = JSON.parse(data);
$(".progress_main").attr("data-label", val["last_contact"]+" s");
$(".progress").width(val["progress"]+"%");
} catch (e) {
console.error(e);
$(".progress_text").attr("data-label", (last -1) + " s");
if (width < 100) {
$(".progress").width((width+width_interval) + "%");
}
}
}
});
} else {
$(".progress_main").attr("data-label", (last -1) + " s");
if (width < 100) {
$(".progress").width((width+width_interval) + "%");
}
}
}, 1000);
});
</script>';
}
if (!$return) {
echo $output;
}
return $output;
}
/** /**
* Generate needed code to print a datatables jquery plugin. * Generate needed code to print a datatables jquery plugin.
* *

View File

@ -1885,12 +1885,35 @@ function load_modal(settings) {
} }
data.append("page", settings.onshow.page); data.append("page", settings.onshow.page);
data.append("method", settings.onshow.method); data.append("method", settings.onshow.method);
if (settings.onshow.extradata != undefined) {
data.append("extradata", JSON.stringify(settings.onshow.extradata));
}
if (settings.target == undefined) {
var uniq = uniqId();
var div = document.createElement("div");
div.id = "div-modal-" + uniq;
div.style.display = "none";
document.getElementById("main").append(div);
var id_modal_target = "#div-modal-" + uniq;
settings.target = $(id_modal_target);
}
var width = 630; var width = 630;
if (settings.onshow.width) { if (settings.onshow.width) {
width = settings.onshow.width; width = settings.onshow.width;
} }
if (settings.modal.overlay == undefined) {
settings.modal.overlay = {
opacity: 0.5,
background: "black"
};
}
settings.target.html("Loading modal..."); settings.target.html("Loading modal...");
settings.target settings.target
.dialog({ .dialog({
@ -2081,14 +2104,16 @@ function load_modal(settings) {
modal: true, modal: true,
title: settings.modal.title, title: settings.modal.title,
width: width, width: width,
overlay: { overlay: settings.modal.overlay,
opacity: 0.5,
background: "black"
},
buttons: required_buttons, buttons: required_buttons,
closeOnEscape: false, closeOnEscape: false,
open: function() { open: function() {
$(".ui-dialog-titlebar-close").hide(); $(".ui-dialog-titlebar-close").hide();
},
close: function() {
if (id_modal_target != undefined) {
$(id_modal_target).remove();
}
} }
}); });
}, },
@ -2100,13 +2125,7 @@ function load_modal(settings) {
//Function that shows a dialog box to confirm closures of generic manners. The modal id is random //Function that shows a dialog box to confirm closures of generic manners. The modal id is random
function confirmDialog(settings) { function confirmDialog(settings) {
var randomStr = var randomStr = uniqId();
Math.random()
.toString(36)
.substring(2, 15) +
Math.random()
.toString(36)
.substring(2, 15);
$("body").append( $("body").append(
'<div id="confirm_' + randomStr + '">' + settings.message + "</div>" '<div id="confirm_' + randomStr + '">' + settings.message + "</div>"
@ -2142,6 +2161,18 @@ function confirmDialog(settings) {
.show(); .show();
} }
function uniqId() {
var randomStr =
Math.random()
.toString(36)
.substring(2, 15) +
Math.random()
.toString(36)
.substring(2, 15);
return randomStr;
}
/** /**
* Function to show modal with message Validation. * Function to show modal with message Validation.
* *

View File

@ -31,7 +31,7 @@ li.discovery > a label {
} }
div.data_container > label { div.data_container > label {
font-family: "lato-bolder", "Open Sans", sans-serif; font-family: "lato", "Open Sans", sans-serif;
font-weight: lighter; font-weight: lighter;
} }

View File

@ -1,5 +1,11 @@
.new_task p,
.new_task div {
font-family: "lato-lighter", "Open Sans", sans-serif;
font-weight: lighter;
}
.new_task { .new_task {
margin-top: 30px; margin-top: 30px;
min-width: 600px;
left: 20px; left: 20px;
width: 60%; width: 60%;
height: 300px; height: 300px;
@ -30,6 +36,7 @@ div.new_task_cluster > div {
.image_task { .image_task {
width: 20%; width: 20%;
min-width: 175px;
height: 100%; height: 100%;
float: left; float: left;
} }
@ -47,7 +54,7 @@ div.new_task_cluster > div {
.text_task { .text_task {
width: 70%; width: 70%;
float: right; float: left;
height: 100%; height: 100%;
padding-right: 25px; padding-right: 25px;
} }

View File

@ -0,0 +1,477 @@
.edit_yaml {
margin-left: 39px;
margin-top: 10px;
margin-bottom: 10px;
}
.margin_button {
margin-right: 5px;
}
.container-target {
display: flex;
flex-flow: row wrap;
}
.element-target {
width: 20px;
margin: 2px;
height: 20px;
}
.status-normal {
background-color: #add570;
}
.status-critical {
background-color: #e3485e;
}
.status-notinit {
background-color: #8bbbdd;
}
.container-msg-target-modal {
max-height: 400px;
overflow: initial;
padding-right: 20px;
padding-left: 20px;
}
.container-msg-target-modal p {
font-family: "lato-lighter", "Open Sans", sans-serif;
margin-bottom: 20px;
font-size: 10pt;
}
span.failed {
color: #fb4444;
font-weight: bolder;
}
span.success {
color: #82b92f;
font-weight: bolder;
}
.container-msg-target-modal pre {
font-family: monospace;
padding: 1em;
white-space: pre-wrap;
background-color: #efefef;
color: #565656;
font-size: 1.2em;
border: 2px solid #ddd;
border-radius: 5px;
}
.container-msg-target-modal p img {
margin-right: 0.3em;
height: 1.3em;
}
ul.wizard li > textarea {
height: 5em;
}
.label_select {
font-family: "lato-lighter", "Open Sans", sans-serif;
font-weight: bolder;
}
.divided select {
width: 100%;
}
.inline {
display: flex;
flex-direction: row;
flex-wrap: nowrap;
justify-content: space-between;
align-content: center;
align-items: center;
}
.inline label:first-child {
width: 250px;
vertical-align: top;
display: inline-block;
}
.inline label:nth-child(3) {
margin-right: 1em;
margin-left: 1em;
}
.inline select {
margin-right: 1em;
}
.middle {
align-self: center;
}
.edit_discovery_info {
padding-top: 0;
}
ul.wizard {
width: 100%;
}
.filter_column {
display: flex;
flex-direction: row;
flex-wrap: wrap;
justify-content: space-between;
align-content: center;
}
.filter_column .edit_discovery_input {
flex-grow: 1;
width: 100%;
display: flex;
flex-direction: row;
flex-wrap: nowrap;
justify-content: space-between;
align-content: baseline;
margin-left: 2em;
}
.filter_column .edit_discovery_input .label_select {
display: inline;
margin: 0;
}
.filter_column .edit_discovery_input select {
flex-grow: 1;
margin-left: 2em;
}
.wizard li {
display: flex;
}
/*
* Discovery css global
*/
ul.bigbuttonlist {
min-height: 200px;
}
li.discovery {
display: inline-block;
float: left;
width: 250px;
margin: 15px;
padding-bottom: 50px;
}
li.discovery > a {
text-decoration: none;
color: #333;
}
li.discovery > a:hover {
color: #000;
}
li.discovery img {
height: 90px;
}
li.discovery > a label {
cursor: pointer;
}
div.data_container > label {
font-family: "lato", "Open Sans", sans-serif;
font-weight: lighter;
}
div.data_container {
width: 100%;
height: 100%;
text-align: center;
padding-top: 30px;
padding-bottom: 30px;
}
div.data_container:hover {
box-shadow: 2px 2px 10px #ddd;
}
/*
* TODO: This may be at hostdevices.css
*/
.texto {
height: auto;
text-align: center;
}
h1.wizard {
padding: 0;
margin: 0;
}
h1.wizard a {
margin-left: -20px;
}
h1.wizard a:hover {
color: #fff;
}
#text_wizard {
font-weight: bolder;
text-decoration: none;
font-size: 24px;
}
div.arrow_box {
display: inline-block;
position: relative;
color: #888;
padding: 1.3em;
margin-left: 20px;
margin-bottom: 10px;
padding-left: 3em;
}
.arrow_box.selected {
background: #424242;
color: #ccc;
}
.arrow_box:after {
left: 0%;
border-left-color: white;
border-width: 20px;
margin-top: -20px;
}
div.arrow_box:before {
left: 100%;
border-left-color: #ccc;
border-width: 20px;
margin-top: -20px;
}
.arrow_box.selected:before {
border-left-color: #424242;
}
.arrow_box.selected:hover {
color: #fff;
}
.arrow_box:hover {
color: #000;
}
/*
* Breadcrum
*/
#menu_tab_frame_view_bc {
display: flex;
justify-content: space-between;
border-bottom: 2px solid #82b92e;
max-height: 70px;
min-height: 55px;
width: 100%;
padding-right: 0px;
margin-left: 0px;
margin-bottom: 20px;
height: 55px;
box-sizing: border-box;
background-color: #fafafa;
border-top-right-radius: 7px;
border-top-left-radius: 7px;
box-shadow: 0px 0px 2px rgba(0, 0, 0, 0.1);
}
#menu_tab_frame_view_bc .breadcrumbs_container {
align-self: flex-start;
}
.breadcrumbs_container {
padding-top: 4px;
text-indent: 0.25em;
padding-left: 2.5em;
}
.breadcrumb_link {
color: #848484;
font-size: 10pt;
font-family: "lato-bolder", "Open Sans", sans-serif;
text-decoration: none;
}
span.breadcrumb_link {
color: #d0d0d0;
font-size: 12pt;
}
.breadcrumb_link.selected {
color: #95b750;
}
.breadcrumb_link.selected:hover {
color: #95b750;
}
.breadcrumb_link:hover {
color: #95b750;
}
/*
* Discovery forms structure
*/
form.discovery * {
font-size: 10pt;
}
form.discovery .label_select b {
font-family: "lato", "Open Sans", sans-serif;
font-weight: bolder;
}
.edit_discovery_info {
display: flex;
align-items: flex-start;
padding-top: 25px;
}
.edit_discovery_input {
align-items: center;
margin-bottom: 25px;
}
/*
* Discovery text inputs
*/
.discovery_label_hint {
display: flex;
}
label {
color: #343434;
font-weight: bold;
}
.discovery_full_width_input {
width: 100%;
}
li > input[type="text"],
li > input[type="email"],
li > input[type="password"],
li > input[type="email"],
.discovery_text_input > input[type="password"],
.discovery_text_input > input[type="text"],
#interval_manual > input[type="text"] {
background-color: transparent;
border: none;
border-radius: 0;
border-bottom: 1px solid #ccc;
font-family: "lato-bolder", "Open Sans", sans-serif;
font-weight: lighter;
padding: 0px 0px 2px 0px;
box-sizing: border-box;
margin-bottom: 4px;
}
#interval_manual > input[type="text"] {
width: 50px;
margin-left: 10px;
margin-right: 10px;
}
.discovery_list_input {
width: 100%;
border: 1px solid #cbcbcb;
overflow-y: auto;
}
.discovery_list_input option {
text-align: left;
}
.discovery_list_input option:checked {
background: #1aab8e -webkit-linear-gradient(bottom, #7db742 0%, #7db742 100%);
color: #fff;
}
.discovery_textarea_input {
background-color: #fbfbfb;
padding-left: 10px;
width: 100%;
height: 100px;
max-height: 100px;
max-width: 100%;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
resize: none;
}
a.tip {
margin-left: 8px;
}
.inline_switch > label {
float: right;
}
.discovery_interval_select_width {
width: 90%;
}
a.ext_link {
margin-left: 1em;
font-size: 8pt;
}
div.ui-tooltip.ui-corner-all.ui-widget-shadow.ui-widget.ui-widget-content.uitooltip {
background: grey;
opacity: 0.9;
border-radius: 4px;
box-shadow: 6px 5px 9px -9px black;
padding: 6px;
}
.ui-tooltip-content {
background: transparent;
color: #fff;
font-weight: bold;
font-family: "lato-lighter", "Open Sans", sans-serif;
letter-spacing: 0.03pt;
font-size: 8pt;
}
.arrow {
width: 70px;
height: 16px;
overflow: hidden;
position: absolute;
left: 50%;
margin-left: -35px;
bottom: -16px;
}
.arrow.top {
top: -16px;
bottom: auto;
}
.arrow.left {
left: 50%;
}
.arrow:after {
background: grey;
content: "";
position: absolute;
left: 20px;
top: -20px;
width: 25px;
height: 25px;
box-shadow: 6px 5px 9px -9px black;
-webkit-transform: rotate(45deg);
-ms-transform: rotate(45deg);
transform: rotate(45deg);
}
.arrow.top:after {
bottom: -20px;
top: auto;
}

View File

@ -5698,7 +5698,7 @@ div#status_pie {
align-items: center; align-items: center;
flex-wrap: wrap; flex-wrap: wrap;
padding: 1em; padding: 1em;
min-width: fit-content; min-width: 100%;
} }
.white_table_graph_content { .white_table_graph_content {

View File

@ -372,7 +372,7 @@ if ($count_total >= 1) {
} }
if ($count_total < 1) { if ($count_total < 1) {
include_once $config['homedir'].'/general/firts_task/incidents.php'; include_once $config['homedir'].'/general/first_task/incidents.php';
} else { } else {
// TOTAL incidents // TOTAL incidents
$url = 'index.php?sec=workspace&amp;sec2=operation/incidents/incident'; $url = 'index.php?sec=workspace&amp;sec2=operation/incidents/incident';

View File

@ -36,7 +36,7 @@ if ($servers === false) {
$recon_task = db_get_all_rows_sql('SELECT * FROM trecon_task'); $recon_task = db_get_all_rows_sql('SELECT * FROM trecon_task');
if ($recon_task === false) { if ($recon_task === false) {
ui_print_page_header(__('Recon View'), 'images/op_recon.png', false, '', false); ui_print_page_header(__('Recon View'), 'images/op_recon.png', false, '', false);
include_once $config['homedir'].'/general/firts_task/recon_view.php'; include_once $config['homedir'].'/general/first_task/recon_view.php';
return; return;
} else { } else {
include_once $config['homedir'].'/include/functions_graph.php'; include_once $config['homedir'].'/include/functions_graph.php';

View File

@ -3658,3 +3658,35 @@ CREATE TABLE `tdeployment_hosts` (
FOREIGN KEY (`target_agent_version_id`) REFERENCES `tagent_repository`(`id`) FOREIGN KEY (`target_agent_version_id`) REFERENCES `tagent_repository`(`id`)
ON UPDATE CASCADE ON DELETE SET NULL ON UPDATE CASCADE ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8; ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- ----------------------------------------------------------------------
-- Table `tremote_command`
-- ----------------------------------------------------------------------
CREATE TABLE `tremote_command` (
`id` SERIAL,
`name` varchar(150) NOT NULL,
`timeout` int(10) unsigned NOT NULL default 30,
`retries` int(10) unsigned NOT NULL default 3,
`preconditions` text,
`script` text,
`postconditions` text,
`utimestamp` int(20) unsigned NOT NULL default 0,
`id_group` int(10) unsigned NOT NULL default 0,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- ----------------------------------------------------------------------
-- Table `tremote_command_target`
-- ----------------------------------------------------------------------
CREATE TABLE `tremote_command_target` (
`id` SERIAL,
`rcmd_id` bigint unsigned NOT NULL,
`id_agent` int(10) unsigned NOT NULL,
`utimestamp` int(20) unsigned NOT NULL default 0,
`stdout` text,
`stderr` text,
`errorlevel` int(10) unsigned NOT NULL default 0,
PRIMARY KEY (`id`),
FOREIGN KEY (`rcmd_id`) REFERENCES `tremote_command`(`id`)
ON UPDATE CASCADE ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

View File

@ -109,10 +109,10 @@ INSERT INTO `tconfig` (`token`, `value`) VALUES
('custom_report_front_logo', 'images/pandora_logo_white.jpg'), ('custom_report_front_logo', 'images/pandora_logo_white.jpg'),
('custom_report_front_header', ''), ('custom_report_front_header', ''),
('custom_report_front_footer', ''), ('custom_report_front_footer', ''),
('MR', 32), ('MR', 33),
('identification_reminder', 1), ('identification_reminder', 1),
('identification_reminder_timestamp', 0), ('identification_reminder_timestamp', 0),
('current_package_enterprise', '740'), ('current_package_enterprise', '741'),
('post_process_custom_values', '{"0.00000038580247":"Seconds&#x20;to&#x20;months","0.00000165343915":"Seconds&#x20;to&#x20;weeks","0.00001157407407":"Seconds&#x20;to&#x20;days","0.01666666666667":"Seconds&#x20;to&#x20;minutes","0.00000000093132":"Bytes&#x20;to&#x20;Gigabytes","0.00000095367432":"Bytes&#x20;to&#x20;Megabytes","0.0009765625":"Bytes&#x20;to&#x20;Kilobytes","0.00000001653439":"Timeticks&#x20;to&#x20;weeks","0.00000011574074":"Timeticks&#x20;to&#x20;days"}'), ('post_process_custom_values', '{"0.00000038580247":"Seconds&#x20;to&#x20;months","0.00000165343915":"Seconds&#x20;to&#x20;weeks","0.00001157407407":"Seconds&#x20;to&#x20;days","0.01666666666667":"Seconds&#x20;to&#x20;minutes","0.00000000093132":"Bytes&#x20;to&#x20;Gigabytes","0.00000095367432":"Bytes&#x20;to&#x20;Megabytes","0.0009765625":"Bytes&#x20;to&#x20;Kilobytes","0.00000001653439":"Timeticks&#x20;to&#x20;weeks","0.00000011574074":"Timeticks&#x20;to&#x20;days"}'),
('custom_docs_logo', 'default_docs.png'), ('custom_docs_logo', 'default_docs.png'),
('custom_support_logo', 'default_support.png'), ('custom_support_logo', 'default_support.png'),

View File

@ -80,7 +80,9 @@ then
mkdir -p temp_package/var/spool/pandora/data_in/netflow mkdir -p temp_package/var/spool/pandora/data_in/netflow
chmod 770 temp_package/var/spool/pandora/data_in/netflow chmod 770 temp_package/var/spool/pandora/data_in/netflow
mkdir -p temp_package/var/spool/pandora/data_in/trans mkdir -p temp_package/var/spool/pandora/data_in/trans
chmod 770 temp_package/var/spool/pandora/data_in/trans chmod 770 temp_package/var/spool/pandora/data_in/trans
mkdir -p temp_package/var/spool/pandora/data_in/commands
chmod 770 temp_package/var/spool/pandora/data_in/commands
mkdir -p temp_package/var/log/pandora/ mkdir -p temp_package/var/log/pandora/
chmod 754 temp_package/var/log/pandora/ chmod 754 temp_package/var/log/pandora/
mkdir -p temp_package/usr/share/pandora_server/conf/ mkdir -p temp_package/usr/share/pandora_server/conf/

View File

@ -21,7 +21,7 @@ daemon 1
# insecure 0 # insecure 0
# Filters (regexp:dir;regexp:dir...) # Filters (regexp:dir;regexp:dir...)
filters .*\.conf:conf;.*\.md5:md5;.*\.zip:collections;.*\.lock:trans filters .*\.conf:conf;.*\.md5:md5;.*\.zip:collections;.*\.lock:trans;.*\.rcmd:commands
# [-m] Maximum file size allowed by the server in bytes # [-m] Maximum file size allowed by the server in bytes
#max_size 2000000 #max_size 2000000

View File

@ -602,8 +602,12 @@ sub process_xml_data ($$$$$) {
# Process events # Process events
process_events_dataserver($pa_config, $data, $agent_id, $group_id, $dbh); process_events_dataserver($pa_config, $data, $agent_id, $group_id, $dbh);
# Process disovery modules # Process discovery modules
enterprise_hook('process_discovery_data', [$pa_config, $data, $server_id, $dbh]); enterprise_hook('process_discovery_data', [$pa_config, $data, $server_id, $dbh]);
# Process command responses
enterprise_hook('process_rcmd_report', [$pa_config, $data, $server_id, $dbh, $agent_id, $timestamp]);
} }
########################################################################## ##########################################################################

View File

@ -54,6 +54,8 @@ mkdir -p $RPM_BUILD_ROOT%{_localstatedir}/spool/pandora/data_in/conf
mkdir -p $RPM_BUILD_ROOT%{_localstatedir}/spool/pandora/data_in/md5 mkdir -p $RPM_BUILD_ROOT%{_localstatedir}/spool/pandora/data_in/md5
mkdir -p $RPM_BUILD_ROOT%{_localstatedir}/spool/pandora/data_in/collections mkdir -p $RPM_BUILD_ROOT%{_localstatedir}/spool/pandora/data_in/collections
mkdir -p $RPM_BUILD_ROOT%{_localstatedir}/spool/pandora/data_in/netflow mkdir -p $RPM_BUILD_ROOT%{_localstatedir}/spool/pandora/data_in/netflow
mkdir -p $RPM_BUILD_ROOT%{_localstatedir}/spool/pandora/data_in/trans
mkdir -p $RPM_BUILD_ROOT%{_localstatedir}/spool/pandora/data_in/commands
mkdir -p $RPM_BUILD_ROOT%{_localstatedir}/log/pandora/ mkdir -p $RPM_BUILD_ROOT%{_localstatedir}/log/pandora/
mkdir -p $RPM_BUILD_ROOT%{prefix}/pandora_server/conf/ mkdir -p $RPM_BUILD_ROOT%{prefix}/pandora_server/conf/
mkdir -p $RPM_BUILD_ROOT%{_mandir}/man1/ mkdir -p $RPM_BUILD_ROOT%{_mandir}/man1/
@ -195,3 +197,5 @@ exit 0
%{_localstatedir}/spool/pandora/data_in/collections %{_localstatedir}/spool/pandora/data_in/collections
%{_localstatedir}/spool/pandora/data_in/conf %{_localstatedir}/spool/pandora/data_in/conf
%{_localstatedir}/spool/pandora/data_in/netflow %{_localstatedir}/spool/pandora/data_in/netflow
%{_localstatedir}/spool/pandora/data_in/trans
%{_localstatedir}/spool/pandora/data_in/commands

View File

@ -61,6 +61,7 @@ mkdir -p $RPM_BUILD_ROOT/var/spool/pandora/data_in/md5
mkdir -p $RPM_BUILD_ROOT/var/spool/pandora/data_in/collections mkdir -p $RPM_BUILD_ROOT/var/spool/pandora/data_in/collections
mkdir -p $RPM_BUILD_ROOT/var/spool/pandora/data_in/netflow mkdir -p $RPM_BUILD_ROOT/var/spool/pandora/data_in/netflow
mkdir -p $RPM_BUILD_ROOT/var/spool/pandora/data_in/trans mkdir -p $RPM_BUILD_ROOT/var/spool/pandora/data_in/trans
mkdir -p $RPM_BUILD_ROOT/var/spool/pandora/data_in/commands
mkdir -p $RPM_BUILD_ROOT/var/log/pandora/ mkdir -p $RPM_BUILD_ROOT/var/log/pandora/
mkdir -p $RPM_BUILD_ROOT%{prefix}/pandora_server/conf/ mkdir -p $RPM_BUILD_ROOT%{prefix}/pandora_server/conf/
mkdir -p $RPM_BUILD_ROOT%{prefix}/tentacle/conf/ mkdir -p $RPM_BUILD_ROOT%{prefix}/tentacle/conf/
@ -198,6 +199,7 @@ rm -Rf /usr/share/man/man1/tentacle_server.1.gz
/var/spool/pandora/data_in/netflow /var/spool/pandora/data_in/netflow
/var/spool/pandora/data_in/conf /var/spool/pandora/data_in/conf
/var/spool/pandora/data_in/trans /var/spool/pandora/data_in/trans
/var/spool/pandora/data_in/commands
%defattr(-,pandora,root,750) %defattr(-,pandora,root,750)
/etc/pandora /etc/pandora

View File

@ -315,6 +315,8 @@ install () {
chmod 2770 $DESTDIR$PANDORA_SPOOL/data_in/netflow chmod 2770 $DESTDIR$PANDORA_SPOOL/data_in/netflow
mkdir $DESTDIR$PANDORA_SPOOL/data_in/trans 2> /dev/null mkdir $DESTDIR$PANDORA_SPOOL/data_in/trans 2> /dev/null
chmod 2770 $DESTDIR$PANDORA_SPOOL/data_in/trans chmod 2770 $DESTDIR$PANDORA_SPOOL/data_in/trans
mkdir $DESTDIR$PANDORA_SPOOL/data_in/commands 2> /dev/null
chmod 2770 $DESTDIR$PANDORA_SPOOL/data_in/commands
mkdir -p $DESTDIR$PANDORA_LOG 2> /dev/null mkdir -p $DESTDIR$PANDORA_LOG 2> /dev/null
chown -R pandora $DESTDIR$PANDORA_LOG 2> /dev/null chown -R pandora $DESTDIR$PANDORA_LOG 2> /dev/null
chmod 2774 $DESTDIR$PANDORA_LOG 2> /dev/null chmod 2774 $DESTDIR$PANDORA_LOG 2> /dev/null