Merge branch 'ent-9662-second-round' of brutus.artica.es:artica/pandorafms into ent-9662-second-round

This commit is contained in:
Jonathan 2023-03-31 09:52:06 +02:00
commit 4aaddf063c
47 changed files with 1397 additions and 456 deletions

View File

@ -1,5 +1,5 @@
package: pandorafms-agent-unix
Version: 7.0NG.770-230330
Version: 7.0NG.770-230331
Architecture: all
Priority: optional
Section: admin

View File

@ -14,7 +14,7 @@
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
pandora_version="7.0NG.770-230330"
pandora_version="7.0NG.770-230331"
echo "Test if you has the tools for to make the packages."
whereis dpkg-deb | cut -d":" -f2 | grep dpkg-deb > /dev/null

View File

@ -1023,7 +1023,7 @@ my $Sem = undef;
my $ThreadSem = undef;
use constant AGENT_VERSION => '7.0NG.770';
use constant AGENT_BUILD => '230330';
use constant AGENT_BUILD => '230331';
# Agent log default file size maximum and instances
use constant DEFAULT_MAX_LOG_SIZE => 600000;

View File

@ -4,7 +4,7 @@
%global __os_install_post %{nil}
%define name pandorafms_agent_linux
%define version 7.0NG.770
%define release 230330
%define release 230331
Summary: Pandora FMS Linux agent, PERL version
Name: %{name}

View File

@ -4,7 +4,7 @@
%global __os_install_post %{nil}
%define name pandorafms_agent_linux
%define version 7.0NG.770
%define release 230330
%define release 230331
Summary: Pandora FMS Linux agent, PERL version
Name: %{name}

View File

@ -10,7 +10,7 @@
# **********************************************************************
PI_VERSION="7.0NG.770"
PI_BUILD="230330"
PI_BUILD="230331"
OS_NAME=`uname -s`
FORCE=0

View File

@ -186,7 +186,7 @@ UpgradeApplicationID
{}
Version
{230330}
{230331}
ViewReadme
{Yes}

View File

@ -30,7 +30,7 @@ using namespace Pandora;
using namespace Pandora_Strutils;
#define PATH_SIZE _MAX_PATH+1
#define PANDORA_VERSION ("7.0NG.770 Build 230330")
#define PANDORA_VERSION ("7.0NG.770 Build 230331")
string pandora_path;
string pandora_dir;

View File

@ -11,7 +11,7 @@ BEGIN
VALUE "LegalCopyright", "Artica ST"
VALUE "OriginalFilename", "PandoraAgent.exe"
VALUE "ProductName", "Pandora FMS Windows Agent"
VALUE "ProductVersion", "(7.0NG.770(Build 230330))"
VALUE "ProductVersion", "(7.0NG.770(Build 230331))"
VALUE "FileVersion", "1.0.0.0"
END
END

View File

@ -1,5 +1,5 @@
package: pandorafms-console
Version: 7.0NG.770-230330
Version: 7.0NG.770-230331
Architecture: all
Priority: optional
Section: admin

View File

@ -14,7 +14,7 @@
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
pandora_version="7.0NG.770-230330"
pandora_version="7.0NG.770-230331"
package_pear=0
package_pandora=1

View File

@ -1,4 +1,5 @@
<?php
/**
* Lateral Main Menu.
*
@ -233,13 +234,16 @@ echo '</div>';
const id_selected = '<?php echo $menu1_selected; ?>';
if (id_selected != '') {
var menuType_val = localStorage.getItem("menuType");
if (menuType_val === 'classic') {
const closedMenuId = localStorage.getItem("closedMenuId");
if (menuType_val === 'classic' &&
(closedMenuId === '' || `icon_${id_selected}` !== closedMenuId)
) {
$(`ul#subicon_${id_selected}`).show();
// Arrow.
$(`#icon_${id_selected}`).children().first().children().last().removeClass('arrow_menu_down');
$(`#icon_${id_selected}`).children().first().children().last().addClass('arrow_menu_up');
}
// Arrow.
$(`#icon_${id_selected}`).children().first().children().last().removeClass('arrow_menu_down');
$(`#icon_${id_selected}`).children().first().children().last().addClass('arrow_menu_up');
// Span.
$(`#icon_${id_selected}`).children().first().children().eq(1).addClass('span_selected');
@ -272,11 +276,11 @@ echo '</div>';
table_hover = $(this);
handsIn = 1;
openTime = new Date().getTime();
$("ul#sub"+table_hover[0].id).show();
$("ul#sub" + table_hover[0].id).show();
get_menu_items(table_hover);
if (typeof(table_noHover) != 'undefined') {
if ("ul#sub"+table_hover[0].id != "ul#sub"+table_noHover[0].id ) {
$("ul#sub"+table_noHover[0].id).hide();
if ("ul#sub" + table_hover[0].id != "ul#sub" + table_noHover[0].id) {
$("ul#sub" + table_noHover[0].id).hide();
}
}
}
@ -287,9 +291,9 @@ echo '</div>';
handsIn = 0;
setTimeout(function() {
opened = new Date().getTime() - openTime;
if(opened > 2500 && handsIn == 0) {
if (opened > 2500 && handsIn == 0) {
openTime = 4000;
$("ul#sub"+table_noHover[0].id).hide();
$("ul#sub" + table_noHover[0].id).hide();
}
}, 2500);
}
@ -301,10 +305,10 @@ echo '</div>';
table_hover2 = $(this);
handsIn2 = 1;
openTime2 = new Date().getTime();
$("#sub"+table_hover2[0].id).show();
if( typeof(table_noHover2) != 'undefined') {
if ( "ul#sub"+table_hover2[0].id != "ul#sub"+table_noHover2[0].id ) {
$("ul#sub"+table_noHover2[0].id).hide();
$("#sub" + table_hover2[0].id).show();
if (typeof(table_noHover2) != 'undefined') {
if ("ul#sub" + table_hover2[0].id != "ul#sub" + table_noHover2[0].id) {
$("ul#sub" + table_noHover2[0].id).hide();
}
}
}
@ -314,10 +318,10 @@ echo '</div>';
table_noHover2 = table_hover2;
handsIn2 = 0;
setTimeout(function() {
opened = new Date().getTime() - openTime2;
if(opened >= 3000 && handsIn2 == 0) {
opened = new Date().getTime() - openTime2;
if (opened >= 3000 && handsIn2 == 0) {
openTime2 = 4000;
$("ul#sub"+table_hover2[0].id).hide();
$("ul#sub" + table_hover2[0].id).hide();
}
}, 3500);
}
@ -328,12 +332,12 @@ echo '</div>';
if (!click_display && menuType_val === 'collapsed') {
openTime = 4000;
if( typeof(table_hover) != 'undefined') {
$("ul#sub"+table_hover[0].id).hide();
if (typeof(table_hover) != 'undefined') {
$("ul#sub" + table_hover[0].id).hide();
}
if( typeof(table_hover2) != 'undefined') {
$("ul#sub"+table_hover2[0].id).hide();
if (typeof(table_hover2) != 'undefined') {
$("ul#sub" + table_hover2[0].id).hide();
}
}
});
@ -350,14 +354,22 @@ echo '</div>';
}
var menuType_val = localStorage.getItem("menuType");
const closedMenuId = localStorage.getItem("closedMenuId");
if (classes.includes('selected') === true) {
if (classes.includes('selected') === true
&& (closedMenuId === '' || closedMenuId !== id)
) {
if (menuType_val === 'collapsed' && $(`ul#sub${id}`).is(':hidden')) {
$(`ul#sub${id}`).show();
get_menu_items(table_hover);
} else {
$(`#${id}`).removeClass('selected');
$(`ul#sub${id}`).hide();
const liSelected = $(`ul#sub${id}`).find('.selected');
if (liSelected.length > 0) {
localStorage.setItem("closedMenuId", id);
}
// Arrow.
table_hover.children().first().children().last().removeClass('arrow_menu_up');
table_hover.children().first().children().last().addClass('arrow_menu_down');
@ -376,6 +388,12 @@ echo '</div>';
} else {
$(`ul#sub${id}`).show();
$(`#${id}`).addClass('selected');
const liSelected = $(`ul#sub${id}`).find('.selected');
if (liSelected.length > 0) {
localStorage.setItem("closedMenuId", '');
}
// Arrow.
$(this).children().last().removeClass('arrow_menu_down');
$(this).children().last().addClass('arrow_menu_up');
@ -415,7 +433,7 @@ echo '</div>';
}
});
$('.sub_subMenu').click(function (event) {
$('.sub_subMenu').click(function(event) {
event.stopPropagation();
});
@ -432,10 +450,10 @@ echo '</div>';
var index = item.index();
var top_submenu = menu_calculate_top(index, item_height);
top_submenu = top_submenu+'px';
$('#'+id_submenu+' ul.submenu').css('position', 'fixed');
$('#'+id_submenu+' ul.submenu').css('top', top_submenu);
$('#'+id_submenu+' ul.submenu').css('left', '60px');
top_submenu = top_submenu + 'px';
$('#' + id_submenu + ' ul.submenu').css('position', 'fixed');
$('#' + id_submenu + ' ul.submenu').css('top', top_submenu);
$('#' + id_submenu + ' ul.submenu').css('left', '60px');
}
@ -456,4 +474,4 @@ echo '</div>';
return height_logo + height_tabs + padding_menu + height_position;
}
});
</script>
</script>

View File

@ -39,7 +39,6 @@ if (!empty($news)) {
// Prints news dialog template
echo '<div id="news_dialog" class="invisible">';
echo '<div class="parent_new_dialog_tmplt">';
echo '<span id="new_text"></span>';
echo '<span id="new_author"></span>';
@ -48,14 +47,22 @@ echo '<div id="news_dialog" class="invisible">';
echo '<div id="div_btn_new_dialog">';
echo '<div class="float-right w20p">';
html_print_submit_button('Ok', 'hide-news-help', false, 'class="ui-button-dialog ui-widget ui-state-default ui-corner-all ui-button-text-only sub ok w100px";"');
html_print_submit_button(
'Ok',
'hide-news-help',
false,
[
'mode' => 'ui-widget ok mini',
'icon' => 'wand',
]
);
echo '</div>';
echo '</div>';
echo '</div>';
echo '</div>';
echo '</div>';
ui_require_javascript_file('encode_decode_base64');
?>
ui_require_javascript_file('encode_decode_base64');
?>
<script type="text/javascript" language="javascript">
/* <![CDATA[ */
@ -82,22 +89,22 @@ $(document).ready (function () {
width: 630,
title: news[inew].subject,
overlay: {
opacity: 0.5,
background: "black"
}
opacity: 0.5,
background: "black"
}
});
$('.ui-dialog-titlebar-close').hide();
}
}
$("#submit-hide-news-help").click (function () {
$("#button-hide-news-help").click (function () {
$("#news_dialog" ).dialog('close');
inew++;
show_new ();
show_new();
});
show_new ();
show_new();
}
});

View File

@ -289,7 +289,7 @@ if ((isset($_GET['form_add'])) || (isset($_GET['form_edit']))) {
'text',
25,
100,
$text,
io_safe_output($text),
'',
true,
'w100p'
@ -442,9 +442,19 @@ ui_require_javascript_file('pandora');
dateFormat: "<?php echo DATE_FORMAT_JS; ?>",
changeMonth: true,
changeYear: true,
showAnim: "slideDown"});
showAnim: "slideDown"}
);
defineTinyMCE({"elements": "textarea_text",});
var added_config = {
"elements":"textarea_text",
"plugins": "preview, print, table, searchreplace, nonbreaking, xhtmlxtras, noneditable",
"theme_advanced_buttons1": "bold,italic,underline,|,justifyleft,justifycenter,justifyright,justifyfull,|,formatselect,fontselect,fontsizeselect",
"theme_advanced_buttons2": "search,replace,|,bullist,numlist,|,undo,redo,|,link,unlink,image,|,cleanup,code,preview,|,forecolor,backcolor",
"valid_children": "+body[style]",
"width": "90%",
}
defineTinyMCE(added_config);
$("#checkbox-expire").click(function() {
check_expire();

View File

@ -704,6 +704,17 @@ $table->data[$i][] = html_print_label_input_block(
)
);
$table->data[$i][] = html_print_label_input_block(
__('Check conexion interval'),
html_print_input_number(
[
'name' => 'check_conexion_interval',
'min' => 90,
'value' => $config['check_conexion_interval'],
]
)
);
echo '<form class="max_floating_element_size" id="form_setup" method="post" action="index.php?sec=gsetup&sec2=godmode/setup/setup&amp;section=general&amp;pure='.$config['pure'].'">';
echo '<fieldset class="margin-bottom-10">';

View File

@ -46,12 +46,8 @@ $table->data[0][] = html_print_label_input_block(
html_print_input_text('netflow_name_dir', $config['netflow_name_dir'], false, 50, 200, true)
);
$table->data[0][] = html_print_label_input_block(
__('Daemon interval'),
html_print_input_text('netflow_interval', $config['netflow_interval'], false, 50, 200, true)
);
$table->data[1][] = html_print_label_input_block(
$table->data[0][] = html_print_label_input_block(
__('Daemon binary path'),
html_print_input_text('netflow_daemon', $config['netflow_daemon'], false, 50, 200, true)
);
@ -61,7 +57,7 @@ $table->data[1][] = html_print_label_input_block(
html_print_input_text('netflow_nfdump', $config['netflow_nfdump'], false, 50, 200, true)
);
$table->data[2][] = html_print_label_input_block(
$table->data[1][] = html_print_label_input_block(
__('Nfexpire binary path'),
html_print_input_text('netflow_nfexpire', $config['netflow_nfexpire'], false, 50, 200, true)
);
@ -71,7 +67,7 @@ $table->data[2][] = html_print_label_input_block(
html_print_input_text('netflow_max_resolution', $config['netflow_max_resolution'], false, 50, 200, true)
);
$table->data[3][] = html_print_label_input_block(
$table->data[2][] = html_print_label_input_block(
__('Disable custom live view filters'),
html_print_checkbox_switch('netflow_disable_custom_lvfilters', 1, $config['netflow_disable_custom_lvfilters'], true)
);
@ -82,7 +78,7 @@ $table->data[3][] = html_print_label_input_block(
);
$onclick = "if (!confirm('".__('Warning').'. '.__('IP address resolution can take a lot of time')."')) return false;";
$table->data[4][] = html_print_label_input_block(
$table->data[3][] = html_print_label_input_block(
__('Name resolution for IP address'),
html_print_checkbox_switch_extended('netflow_get_ip_hostname', 1, $config['netflow_get_ip_hostname'], false, $onclick, '', true)
);

View File

@ -764,10 +764,9 @@ html_print_table($userManagementTable);
$vcard_data = [];
$vcard_data['version'] = '3.0';
$vcard_data['firstName'] = $user_info['firstname'];
$vcard_data['lastName'] = $user_info['lastname'];
$vcard_data['middleName'] = ($user_info['middlename'] === '1') ? '' : $user_info['middlename'];
$vcard_data['nickname'] = $user_info['fullname'];
$vcard_data['firstName'] = $user_info['fullname'];
$vcard_data['lastName'] = '';
$vcard_data['middleName'] = '';
$vcard_data['workPhone'] = $user_info['phone'];
$vcard_data['email'] = $user_info['email'];
$vcard_data['organization'] = io_safe_output(get_product_name());

View File

@ -160,7 +160,7 @@ if ($load_filter_modal) {
true,
'',
false,
'margin-left:5px; width:'.$filter_id_width.';'
'width:'.$filter_id_width.';'
);
$table->rowclass[] = 'display-grid';
@ -169,8 +169,9 @@ if ($load_filter_modal) {
'load_filter',
false,
[
'class' => 'mini w25p',
'style' => 'margin-left: 73%',
'class' => 'mini w30p',
'icon' => 'load',
'style' => 'margin-left: 208px; width: 130px;',
'onclick' => 'load_filter_values();',
],
true
@ -189,7 +190,7 @@ function show_filter() {
draggable: true,
modal: false,
closeOnEscape: true,
width: 500
width: 380
});
}
@ -293,8 +294,9 @@ if ($save_filter_modal) {
'save_filter',
false,
[
'class' => 'mini w25p',
'style' => 'margin-left: 56%',
'class' => 'mini ',
'icon' => 'save',
'style' => 'margin-left: 175px; width: 125px;',
'onclick' => 'save_new_filter();',
],
true
@ -330,8 +332,9 @@ if ($save_filter_modal) {
'update_filter',
false,
[
'class' => 'mini w25p',
'style' => 'margin-left: 56%',
'class' => 'mini ',
'icon' => 'save',
'style' => 'margin-left: 155px; width: 145px;',
'onclick' => 'save_update_filter();',
],
true

View File

@ -20,7 +20,7 @@
/**
* Pandora build version and version
*/
$build_version = 'PC230330';
$build_version = 'PC230331';
$pandora_version = 'v7.0NG.770';
// Do not overwrite default timezone set if defined.

View File

@ -386,6 +386,10 @@ function config_update_config()
$error_update[] = __('Enable console report');
}
if (config_update_value('check_conexion_interval', get_parameter('check_conexion_interval'), true) === false) {
$error_update[] = __('Check conexion interval');
}
if (config_update_value('unique_ip', get_parameter('unique_ip'), true) === false) {
$error_update[] = __('Unique IP');
}
@ -1536,10 +1540,6 @@ function config_update_config()
}
}
if (config_update_value('netflow_interval', (int) get_parameter('netflow_interval'), true) === false) {
$error_update[] = __('Daemon interval');
}
if (config_update_value('netflow_daemon', get_parameter('netflow_daemon'), true) === false) {
$error_update[] = __('Daemon binary path');
}
@ -2359,6 +2359,10 @@ function config_process_config()
config_update_value('reporting_console_enable', 0);
}
if (!isset($config['check_conexion_interval'])) {
config_update_value('check_conexion_interval', 180);
}
if (!isset($config['elasticsearch_ip'])) {
config_update_value('elasticsearch_ip', '');
}
@ -2878,10 +2882,6 @@ function config_process_config()
config_update_value('netflow_path', $default);
}
if (!isset($config['netflow_interval'])) {
config_update_value('netflow_interval', SECONDS_10MINUTES);
}
if (!isset($config['netflow_daemon'])) {
config_update_value('netflow_daemon', '/usr/bin/nfcapd');
}

View File

@ -3628,6 +3628,11 @@ function ui_print_datatable(array $parameters)
$parameters['csv'] = 1;
}
$dom_elements = '"plfrtiB"';
if (isset($parameters['dom_elements'])) {
$dom_elements = '"'.$parameters['dom_elements'].'"';
}
$filter = '';
// Datatable filter.
if (isset($parameters['form']) && is_array($parameters['form'])) {
@ -3790,6 +3795,34 @@ function ui_print_datatable(array $parameters)
}
$table .= '</tr></thead>';
if (isset($parameters['data_element']) === true) {
$table .= '<tbody>';
foreach ($parameters['data_element'] as $row) {
$table .= '<tr>';
foreach ($row as $td_data) {
$table .= '<td>'.$td_data.'</td>';
}
$table .= '</tr>';
}
$table .= '</tbody>';
$js = '<script>
$.fn.dataTable.ext.classes.sPageButton = "pandora_pagination mini-pandora-pagination"
var table = $("#'.$table_id.'").DataTable({
"dom": "'.$parameters['dom_elements'].'"
});
$("div.spinner-fixed").hide();
$("table#'.$table_id.'").removeClass("invisible");
$("#'.$table_id.'_filter > label > input").addClass("mini-search-input");
if (table.page.info().pages == 1) {
$("#'.$table_id.'_paginate").hide();
}
</script>';
}
$table .= '</table>';
$pagination_class = 'pandora_pagination';
@ -3813,279 +3846,276 @@ function ui_print_datatable(array $parameters)
$export_columns = ',columns: \'th:not(:last-child)\'';
}
if (isset($parameters['ajax_url'])) {
$type_data = 'ajax: {
url: "'.ui_get_full_url('ajax.php', false, false, false).'",
type: "POST",
dataSrc: function (json) {
if($("#'.$form_id.'_search_bt") != undefined) {
$("#'.$form_id.'_loading").remove();
}
if (isset($parameters['data_element']) === false) {
if (isset($parameters['ajax_url'])) {
$type_data = 'ajax: {
url: "'.ui_get_full_url('ajax.php', false, false, false).'",
type: "POST",
dataSrc: function (json) {
if($("#'.$form_id.'_search_bt") != undefined) {
$("#'.$form_id.'_loading").remove();
}
if (json.error) {
console.error(json.error);
$("#error-'.$table_id.'").html(json.error);
$("#error-'.$table_id.'").dialog({
title: "Filter failed",
width: 630,
resizable: true,
draggable: true,
modal: false,
closeOnEscape: true,
buttons: {
"Ok" : function () {
$(this).dialog("close");
if (json.error) {
console.error(json.error);
$("#error-'.$table_id.'").html(json.error);
$("#error-'.$table_id.'").dialog({
title: "Filter failed",
width: 630,
resizable: true,
draggable: true,
modal: false,
closeOnEscape: true,
buttons: {
"Ok" : function () {
$(this).dialog("close");
}
}
}
}).parent().addClass("ui-state-error");
} else {';
}).parent().addClass("ui-state-error");
} else {';
if (isset($parameters['ajax_return_operation']) === true
&& empty($parameters['ajax_return_operation']) === false
&& isset($parameters['ajax_return_operation_function']) === true
&& empty($parameters['ajax_return_operation_function']) === false
) {
$type_data .= '
if (json.'.$parameters['ajax_return_operation'].' !== undefined) {
'.$parameters['ajax_return_operation_function'].'(json.'.$parameters['ajax_return_operation'].');
}
';
}
if (isset($parameters['ajax_return_operation']) === true
&& empty($parameters['ajax_return_operation']) === false
&& isset($parameters['ajax_return_operation_function']) === true
&& empty($parameters['ajax_return_operation_function']) === false
) {
$type_data .= '
if (json.'.$parameters['ajax_return_operation'].' !== undefined) {
'.$parameters['ajax_return_operation_function'].'(json.'.$parameters['ajax_return_operation'].');
}
';
}
if (isset($parameters['ajax_postprocess'])) {
$type_data .= '
if (json.data) {
json.data.forEach(function(item) {
'.$parameters['ajax_postprocess'].'
});
} else {
json.data = {};
}';
}
if (isset($parameters['ajax_postprocess'])) {
$type_data .= '
if (json.data) {
json.data.forEach(function(item) {
'.$parameters['ajax_postprocess'].'
return json.data;
}
},
data: function (data) {
if($("#button-'.$form_id.'_search_bt") != undefined) {
var loading = \''.html_print_image(
'images/spinner.gif',
true,
[
'id' => $form_id.'_loading',
'class' => 'loading-search-datatables-button',
]
).'\';
$("#button-'.$form_id.'_search_bt").parent().append(loading);
}
inputs = $("#'.$form_id.' :input");
values = {};
inputs.each(function() {
values[this.name] = $(this).val();
})
$.extend(data, {
filter: values,'."\n";
if (is_array($parameters['ajax_data'])) {
foreach ($parameters['ajax_data'] as $k => $v) {
$type_data .= $k.':'.json_encode($v).",\n";
}
}
$type_data .= 'page: "'.$parameters['ajax_url'].'"
});
} else {
json.data = {};
}';
return data;
}
},';
} else {
$type_data = 'data: '.json_encode($parameters['data_element']).',';
}
$type_data .= '
return json.data;
}
},
data: function (data) {
if($("#button-'.$form_id.'_search_bt") != undefined) {
var loading = \''.html_print_image(
'images/spinner.gif',
true,
[
'id' => $form_id.'_loading',
'class' => 'loading-search-datatables-button',
]
).'\';
$("#button-'.$form_id.'_search_bt").parent().append(loading);
}
$serverside = 'true';
if (isset($parameters['data_element'])) {
$serverside = 'false';
}
inputs = $("#'.$form_id.' :input");
// Javascript controller.
$js = '<script type="text/javascript">
$(document).ready(function(){
$.fn.dataTable.ext.errMode = "none";
$.fn.dataTable.ext.classes.sPageButton = "'.$pagination_class.'";
values = {};
inputs.each(function() {
values[this.name] = $(this).val();
})
var settings_datatable = {
drawCallback: function(settings) {';
$.extend(data, {
filter: values,'."\n";
if (!isset($parameters['data_element'])) {
$js .= 'if (dt_'.$table_id.'.page.info().pages > 1) {
$("#'.$table_id.'_wrapper > .dataTables_paginate.paging_simple_numbers").show()
} else {
$("#'.$table_id.'_wrapper > .dataTables_paginate.paging_simple_numbers").hide()
}';
}
if (is_array($parameters['ajax_data'])) {
foreach ($parameters['ajax_data'] as $k => $v) {
$type_data .= $k.':'.json_encode($v).",\n";
$js .= 'if ($("#'.$table_id.' tr td").length == 1) {
$(".datatable-msg-info-'.$table_id.'").show();
$(".datatable-msg-info-'.$table_id.'").removeClass(\'invisible_important\');
$("table#'.$table_id.'").hide();
$("div.dataTables_paginate").hide();
$("div.dataTables_info").hide();
$("div.dataTables_length").hide();
$("div.dt-buttons").hide();
if (dt_'.$table_id.'.page.info().pages > 1) {
$(".dataTables_paginate.paging_simple_numbers").show()
}
} else {
$(".datatable-msg-info-'.$table_id.'").hide();
$("table#'.$table_id.'").show();
$("div.dataTables_paginate").show();
$("div.dataTables_info").show();
$("div.dataTables_length").show();
$("div.dt-buttons").show();
if (dt_'.$table_id.'.page.info().pages == 1) {
$(".dataTables_paginate.paging_simple_numbers").hide()
}
}';
if (isset($parameters['drawCallback'])) {
$js .= $parameters['drawCallback'];
}
$searching = 'false';
if (isset($parameters['searching']) && $parameters['searching'] === true) {
$searching = 'true';
}
$ordering = 'true';
if (isset($parameters['ordering']) && $parameters['ordering'] === false) {
$ordering = 'false';
}
$js .= '},';
$languaje = substr(get_user_language(), 0, 2);
$js .= '
processing: true,
serverSide: '.$serverside.',
paging: '.$parameters['paging'].',
pageLength: '.$parameters['default_pagination'].',
searching: '.$searching.',
responsive: true,
dom: '.$dom_elements.',
language: {
url: "/pandora_console/include/javascript/i18n/dataTables.'.$languaje.'.json",
processing:"'.$processing.'",
zeroRecords:"'.$zeroRecords.'",
emptyTable:"'.$emptyTable.'",
},
buttons: '.$parameters['csv'].'== 1 ? [
{
extend: "csv",
text : "'.__('Export current page to CSV').'",
titleAttr: "'.__('Export current page to CSV').'",
title: "export_'.$parameters['id'].'_current_page_'.date('Y-m-d').'",
fieldSeparator: "'.$config['csv_divider'].'",
action: function ( e, dt, node, config ) {
blockResubmit(node);
// Call the default csvHtml5 action method to create the CSV file
$.fn.dataTable.ext.buttons.csvHtml5.action.call(this, e, dt, node, config);
},
exportOptions : {
modifier : {
// DataTables core
order : "current",
page : "All",
search : "applied"
}'.$export_columns.'
},
}
] : [],
lengthMenu: '.json_encode($pagination_options).',
columnDefs: [
{ className: "no-class", targets: "_all" },
{ bSortable: false, targets: '.$no_sortable_columns.' }
],
ordering: '.$ordering.',
initComplete: function(settings, json) {
// Move elements to table_action_buttons bar.
$(".action_buttons_right_content").html("<div class=\"pagination-child-div\"></div>");
$(".action_buttons_right_content").html("<div class=\"pagination-child-div\"></div>");
$(".action_buttons_right_content").html("<div class=\"pagination-child-div\"></div>");
$(".action_buttons_right_content").html("<div class=\"pagination-child-div\"></div>");
$(".pagination-child-div").append($("#'.$table_id.'_wrapper > .dataTables_paginate.paging_simple_numbers"));
$(".pagination-child-div").append($("#'.$table_id.'_wrapper > .dataTables_length"));
$(".pagination-child-div").append($("#'.$table_id.'_wrapper > .dt-buttons"));
$(".pagination-child-div").append($("#'.$table_id.'_wrapper > .dataTables_filter"));
$("div.spinner-fixed").hide();
},
columns: [';
foreach ($parameters['datacolumns'] as $data) {
if (is_array($data)) {
$js .= '{data : "'.$data['text'].'",className: "'.$data['class'].'"},';
} else {
$js .= '{data : "'.$data.'",className: "no-class"},';
}
}
$type_data .= 'page: "'.$parameters['ajax_url'].'"
});
$js .= '
],
order: [[ '.$order.' ]],';
$js .= $type_data;
$js .= '
};
return data;
}
},';
} else {
$type_data = 'data: '.json_encode($parameters['data_element']).',';
}
dt_'.$table_id.' = $("#'.$table_id.'").DataTable(settings_datatable);
$serverside = 'true';
if (isset($parameters['data_element'])) {
$serverside = 'false';
}
$("#button-'.$form_id.'_search_bt").click(function (){
dt_'.$table_id.'.draw().page(0)
});
';
// Javascript controller.
$js = '<script type="text/javascript">
$(document).ready(function(){
$.fn.dataTable.ext.errMode = "none";
$.fn.dataTable.ext.classes.sPageButton = "'.$pagination_class.'";
if (isset($parameters['caption']) === true
&& empty($parameters['caption']) === false
) {
$js .= '$("#'.$table_id.'").append("<caption>'.$parameters['caption'].'</caption>");';
$js .= '$(".datatables_thead_tr").css("height", 0);';
}
var settings_datatable = {
drawCallback: function(settings) {';
if (isset($parameters['csv']) === true) {
$js."'$('#".$table_id."').on( 'buttons-processing', function ( e, indicator ) {
if ( indicator ) {
console.log('a');
}
else {
console.log('b');
}";
}
if (!isset($parameters['data_element'])) {
$js .= 'if (dt_'.$table_id.'.page.info().pages > 1) {
$("#'.$table_id.'_wrapper > .dataTables_paginate.paging_simple_numbers").show()
} else {
$("#'.$table_id.'_wrapper > .dataTables_paginate.paging_simple_numbers").hide()
}';
}
$js .= 'if ($("#'.$table_id.' tr td").length == 1) {
$(".datatable-msg-info-'.$table_id.'").show();
$(".datatable-msg-info-'.$table_id.'").removeClass(\'invisible_important\');
$("table#'.$table_id.'").hide();
$("div.dataTables_paginate").hide();
$("div.dataTables_info").hide();
$js .= '$("table#'.$table_id.'").removeClass("invisible");
});';
$js .= '
$(function() {
$(document).on("preInit.dt", function (ev, settings) {
$("div.dataTables_length").hide();
$("div.dt-buttons").hide();
if (dt_'.$table_id.'.page.info().pages > 1) {
$(".dataTables_paginate.paging_simple_numbers").show()
}
} else {
$(".datatable-msg-info-'.$table_id.'").hide();
$("table#'.$table_id.'").show();
$("div.dataTables_paginate").show();
$("div.dataTables_info").show();
$("div.dataTables_length").show();
$("div.dt-buttons").show();
if (dt_'.$table_id.'.page.info().pages == 1) {
$(".dataTables_paginate.paging_simple_numbers").hide()
}
}';
if (isset($parameters['drawCallback'])) {
$js .= $parameters['drawCallback'];
}
$dom_elements = '"plfrtiB"';
if (isset($parameters['dom_elements'])) {
$dom_elements = '"'.$parameters['dom_elements'].'"';
}
$searching = 'false';
if (isset($parameters['searching']) && $parameters['searching'] === true) {
$searching = 'true';
}
$ordering = 'true';
if (isset($parameters['ordering']) && $parameters['ordering'] === false) {
$ordering = 'false';
}
$js .= '},';
$languaje = substr(get_user_language(), 0, 2);
$js .= '
processing: true,
serverSide: '.$serverside.',
paging: '.$parameters['paging'].',
pageLength: '.$parameters['default_pagination'].',
searching: '.$searching.',
responsive: true,
dom: '.$dom_elements.',
language: {
url: "/pandora_console/include/javascript/i18n/dataTables.'.$languaje.'.json",
processing:"'.$processing.'",
zeroRecords:"'.$zeroRecords.'",
emptyTable:"'.$emptyTable.'",
},
buttons: '.$parameters['csv'].'== 1 ? [
{
extend: "csv",
text : "'.__('Export current page to CSV').'",
titleAttr: "'.__('Export current page to CSV').'",
title: "export_'.$parameters['id'].'_current_page_'.date('Y-m-d').'",
fieldSeparator: "'.$config['csv_divider'].'",
action: function ( e, dt, node, config ) {
blockResubmit(node);
// Call the default csvHtml5 action method to create the CSV file
$.fn.dataTable.ext.buttons.csvHtml5.action.call(this, e, dt, node, config);
},
exportOptions : {
modifier : {
// DataTables core
order : "current",
page : "All",
search : "applied"
}'.$export_columns.'
},
}
] : [],
lengthMenu: '.json_encode($pagination_options).',
columnDefs: [
{ className: "no-class", targets: "_all" },
{ bSortable: false, targets: '.$no_sortable_columns.' }
],
ordering: '.$ordering.',
initComplete: function(settings, json) {
// Move elements to table_action_buttons bar.
$(".action_buttons_right_content").html("<div class=\"pagination-child-div\"></div>");
$(".action_buttons_right_content").html("<div class=\"pagination-child-div\"></div>");
$(".action_buttons_right_content").html("<div class=\"pagination-child-div\"></div>");
$(".action_buttons_right_content").html("<div class=\"pagination-child-div\"></div>");
$(".pagination-child-div").append($("#'.$table_id.'_wrapper > .dataTables_paginate.paging_simple_numbers"));
$(".pagination-child-div").append($("#'.$table_id.'_wrapper > .dataTables_length"));
$(".pagination-child-div").append($("#'.$table_id.'_wrapper > .dt-buttons"));
$(".pagination-child-div").append($("#'.$table_id.'_wrapper > .dataTables_filter"));
$("div.spinner-fixed").hide();
},
columns: [';
foreach ($parameters['datacolumns'] as $data) {
if (is_array($data)) {
$js .= '{data : "'.$data['text'].'",className: "'.$data['class'].'"},';
} else {
$js .= '{data : "'.$data.'",className: "no-class"},';
}
}
$js .= '
],
order: [[ '.$order.' ]],';
$js .= $type_data;
$js .= '
};
dt_'.$table_id.' = $("#'.$table_id.'").DataTable(settings_datatable);
$("#button-'.$form_id.'_search_bt").click(function (){
dt_'.$table_id.'.draw().page(0)
});
});
';
if (isset($parameters['caption']) === true
&& empty($parameters['caption']) === false
) {
$js .= '$("#'.$table_id.'").append("<caption>'.$parameters['caption'].'</caption>");';
$js .= '$(".datatables_thead_tr").css("height", 0);';
$js .= '</script>';
}
if (isset($parameters['csv']) === true) {
$js."'$('#".$table_id."').on( 'buttons-processing', function ( e, indicator ) {
if ( indicator ) {
console.log('a');
}
else {
console.log('b');
}";
}
$js .= '$("table#'.$table_id.'").removeClass("invisible");
});';
$js .= '
$(function() {
$(document).on("preInit.dt", function (ev, settings) {
$("div.dataTables_length").hide();
$("div.dt-buttons").hide();
});
});
';
$js .= '</script>';
// Order.
$info_msg_arr = [];
$info_msg_arr['message'] = $emptyTable;
@ -7076,7 +7106,7 @@ function ui_print_message_dialog($title, $text, $id='', $img='', $text_button=''
echo '<div id="message_dialog_'.$id.'" title="'.$title.'" style="'.$style.'">';
echo '<div class="content_dialog">';
echo '<div class="icon_message_dialog">';
echo html_print_image($img, true, ['alt' => $title, 'border' => 0]);
echo html_print_image($img, true, ['alt' => $title, 'border' => 0, 'class' => 'icon_connection_check']);
echo '</div>';
echo '<div class="content_message_dialog">';
echo '<div class="text_message_dialog">';

View File

@ -4,16 +4,17 @@
* Connection Check
* --------------------------------------
*/
checkConnection(1);
$(document).ready(function() {
checkConnection(get_php_value("check_conexion_interval"));
});
/**
* Performs connection tests every minutes and add connection listeners
* @param {integer} time in minutes
*/
function checkConnection(minutes) {
var cicle = minutes * 60 * 1000;
function checkConnection(seconds) {
var cicle = seconds * 1000;
var checkConnection = setInterval(handleConnection, cicle);
// Connection listeters.
@ -48,7 +49,7 @@ function handleConnection() {
// If test connection file is not found, do not show message.
if (err.status != 404) {
connected = false;
msg = err;
msg = err.statusText;
} else {
connected = true;
}

View File

@ -135,4 +135,6 @@ class Console extends Entity
);
}
}
}

View File

@ -453,6 +453,7 @@ class ModulesByStatus extends Widget
1000,
],
],
'dom_elements' => 'frtilp',
]
);
} catch (\Exception $e) {

View File

@ -11784,6 +11784,12 @@ span.help_icon_15px > img {
z-index: 1116 !important;
}
.icon_connection_check {
width: 65px !important;
height: 65px !important;
margin-top: 10px;
}
/* ==== Spinner ==== */
.spinner-fixed {
position: fixed;

View File

@ -816,10 +816,6 @@ div[id^="auto-os-"] > img {
height: 20px;
}
.dataTables_paginate {
margin-right: 10px;
}
.w22px {
width: 22px;
}
@ -838,3 +834,13 @@ td.FF-thresholds-pdd {
padding: 0px !important;
padding-left: 13px !important;
}
div.grid-stack-item-content a.pandora_pagination,
a.mini-pandora-pagination {
padding: 7px;
font-size: 9pt;
}
input.mini-search-input {
height: 30px;
}

View File

@ -1487,6 +1487,7 @@ echo html_print_div(
);
// Connection lost alert.
set_js_value('check_conexion_interval', $config['check_conexion_interval']);
ui_require_javascript_file('connection_check');
set_js_value('absolute_homeurl', ui_get_full_url(false, false, false, false));
$conn_title = __('Connection with server has been lost');

View File

@ -131,7 +131,7 @@
<div style='padding-bottom: 50px'>
<?php
$version = '7.0NG.770';
$build = '230330';
$build = '230331';
$banner = "v$version Build $build";
error_reporting(0);

View File

@ -434,35 +434,39 @@ if ($agent_view_page === true) {
);
}
if (((bool) check_acl($config['id_user'], $id_group, 'AW') === true || (bool) check_acl($config['id_user'], $id_group, 'LM') === true)) {
if ($agent_view_page === true) {
html_print_div(
[
'class' => 'action-buttons pdd_b_10px pdd_r_5px w100p',
'content' => html_print_submit_button(
if (is_metaconsole() === false) {
if (((bool) check_acl($config['id_user'], $id_group, 'AW') === true || (bool) check_acl($config['id_user'], $id_group, 'LM') === true)) {
if ($agent_view_page === true) {
html_print_div(
[
'class' => 'action-buttons pdd_b_10px pdd_r_5px w100p',
'content' => html_print_submit_button(
__('Validate'),
'alert_validate',
false,
[
'icon' => 'wand',
'mode' => 'secondary mini',
],
true
),
]
);
} else {
html_print_action_buttons(
html_print_submit_button(
__('Validate'),
'alert_validate',
false,
[
'icon' => 'wand',
'mode' => 'secondary mini',
],
[ 'icon' => 'wand' ],
true
),
]
);
} else {
html_print_action_buttons(
html_print_submit_button(
__('Validate'),
'alert_validate',
false,
[ 'icon' => 'wand' ],
true
),
['type' => 'form_action']
);
['type' => 'form_action']
);
}
}
} else {
html_print_action_buttons('');
}
$html_content = ob_get_clean();

View File

@ -3,7 +3,7 @@
#
%define name pandorafms_console
%define version 7.0NG.770
%define release 230330
%define release 230331
# User and Group under which Apache is running
%define httpd_name httpd

View File

@ -3,7 +3,7 @@
#
%define name pandorafms_console
%define version 7.0NG.770
%define release 230330
%define release 230331
# User and Group under which Apache is running
%define httpd_name httpd

View File

@ -3,7 +3,7 @@
#
%define name pandorafms_console
%define version 7.0NG.770
%define release 230330
%define release 230331
%define httpd_name httpd
# User and Group under which Apache is running
%define httpd_name apache2

View File

@ -51,16 +51,16 @@ INSERT INTO `tconfig` (`token`, `value`) VALUES
('show_lastalerts','1'),
('style','pandora'),
('graph_image_height', '250'),
('graph_color1', '#99dd00'),
('graph_color2', '#336600'),
('graph_color3', '#3399cc'),
('graph_color4', '#ff66cc'),
('graph_color5', '#CC0000'),
('graph_color6', '#0033FF'),
('graph_color7', '#ff6600'),
('graph_color8', '#330066'),
('graph_color9', '#ffff00'),
('graph_color10', '#99ffff'),
('graph_color1', '#1c7973'),
('graph_color2', '#82b92f'),
('graph_color3', '#e82a2a'),
('graph_color4', '#8577cf'),
('graph_color5', '#f5a623'),
('graph_color6', '#14524f'),
('graph_color7', '#024eff'),
('graph_color8', '#18c7c5'),
('graph_color9', '#ec7175'),
('graph_color10', '#c0ccdc'),
('trap2agent', '0'),
('date_format', 'F j, Y, g:i a'),
('event_view_hr', 8),
@ -118,10 +118,10 @@ INSERT INTO `tconfig` (`token`, `value`) VALUES
('custom_report_front_logo', 'images/pandora_logo_white.jpg'),
('custom_report_front_header', ''),
('custom_report_front_footer', ''),
('MR', 61),
('MR', 62),
('identification_reminder', 1),
('identification_reminder_timestamp', 0),
('current_package', 769),
('current_package', 770),
('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.00097656250000":"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_support_logo', 'default_support.png'),

View File

@ -623,7 +623,9 @@ class Manager
if ($server_update === false) {
$return['files'] = Client::checkOUMContent($file_path);
} else {
$return['files'] = Client::checkTGZContent($file_path);
// Commented line for memory limit problems.
// $return['files'] = Client::checkTGZContent($file_path);
$return['files'] = null;
}
if (session_status() !== PHP_SESSION_ACTIVE) {

View File

@ -172,18 +172,21 @@ function form_upload(url, auth, current_package) {
log_zone.html("<div>" + texts.uploadSuccess + "</div>");
log_zone.append("<div>" + texts.uploadMessage + "</div>");
log_zone.append("<div>" + texts.clickToStart + "</div>");
var file_list =
"<h2>" + texts.fileList + "</h2><div class='file_list'>";
if (res.files) {
res.files.forEach(function(e) {
file_list += "<div class='file_entry'>" + e + "</div>";
});
if (res.files !== null) {
var file_list =
"<h2>" + texts.fileList + "</h2><div class='file_list'>";
if (res.files) {
res.files.forEach(function(e) {
file_list += "<div class='file_entry'>" + e + "</div>";
});
}
file_list += "</div>";
log_zone.append(file_list);
}
file_list += "</div>";
log_zone.append(file_list);
// Show messages
$("#log_zone").slideDown(400, function() {
$("#log_zone").height(200);

View File

@ -1,5 +1,5 @@
package: pandorafms-server
Version: 7.0NG.770-230330
Version: 7.0NG.770-230331
Architecture: all
Priority: optional
Section: admin

View File

@ -14,7 +14,7 @@
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
pandora_version="7.0NG.770-230330"
pandora_version="7.0NG.770-230331"
package_cpan=0
package_pandora=1

View File

@ -0,0 +1,738 @@
#############################################################################
# Pandora FMS Server Parameters
# Pandora FMS, the Flexible Monitoring System.
# Version 7.0NG.769
# Licensed under GPL license v2,
# (c) 2003-2021 Artica Soluciones Tecnologicas
# http://www.pandorafms.com
# Please change it for your setup needs
#############################################################################
# Servername: Name of this server
# if not given, it takes hostname. It's preferable to setup one
# because machine name could change by some reason.
servername greystone_sec
# incomingdir: Defines directory where incoming data packets are stored
# You could set directory relative to base path or absolute, starting with /
incomingdir /var/spool/pandora/data_in
# log_file: Main logfile for pandora_server
# You could set file relative to base path or absolute, starting with /
log_file /var/log/pandora/pandora_server.log
# Log file for Pandora FMS SNMP console. Its generated by NetSNMP Trap daemon
# If you change it, please update the file /etc/logrotate.d/pandora_server accordingly.
snmp_logfile /var/log/pandora/pandora_snmptrap.log
# Error logfile: aux logfile for pandora_server errors (in Daemon mode)
# You could set file relative to base path or absolute, starting with /
errorlog_file /var/log/pandora/pandora_server.error
# daemon: Runs in daemon mode (background) if 1, if 0 runs in foreground
# this could be also configured on commandline with -D option
# daemon 1
# dbengine: mysql
dbengine mysql
# Database credentials. A VERY important configuration.
# This must be the same credentials used by your Pandora FMS Console
# but could be different if your console is not running in the same
# host than the server. Check your console setup in /include/config.php
# dbname: Database name (pandora by default)
dbname pandora
# dbuser: Database user name (pandora by default)
dbuser pandora
# dbpass: Database password
dbpass pandora
# dbhost: Database hostname or IP address
dbhost 127.0.0.1
# dbport: Database port number
# Default value depends on the dbengine (mysql: 3306)
#dbport 3306
# dbssl: Enable (1) or disable (0) SSL for the database connection.
dbssl 0
# dbsslcafile: Path to a file in PEM format that contains a list of trusted SSL certificate authorities.
# dbsslcafile
# dbsslcapath: Path to a directory that contains trusted SSL certificate authority certificates in PEM format.
# dbsslcapath
# verbosity: level of detail on errors/messages (0 default, 1 verbose, 2 debug.... 10 noisy)
# -v in command line (verbose) or -d (debug). Set this to 10 when try to locate problems and
# set to 1 or 3 on production enviroments.
verbosity 3
# Master Server priority. The running server with the highest master value will
# be the master. Ties are broken at random. If set to 0, this server will
# never become master.
master 0
# Activate Pandora SNMP console (depending on snmptrapd)
snmpconsole 0
# snmpconsole_threads: number of SNMP console threads for processing SNMP traps.
snmpconsole_threads 1
# If set to 1, traps from the same source will never be processed in parallel. 0 by default.
#snmpconsole_lock 0
# Time between consecutive reads of the SNMP log file in seconds. Defaults to server_threshold.
#snmpconsole_threshold 5
# Attempt to translate variable bindings when processing SNMP traps. 1 enabled, 0 disabled. 0 by default. (ENTERPRISE ONLY).
translate_variable_bindings 0
# Attempt to translate enterprise strings when processing SNMP traps. 1 enabled, 0 disabled. 1 by default. (ENTERPRISE ONLY).
translate_enterprise_strings 0
# snmptrapd will ignore authenticationFailure traps if set to 1.
snmp_ignore_authfailure 1
# snmptrapd will read the PDU source address instead of the agent-addr field is set to 1.
snmp_pdu_address 0
# Path to the snmp_trapd binary. If set to manual, the server will not attemp to start snmp_trapd.
#snmp_trapd manual
# SNMP Trap forwarding. Go to https://pandorafms.com/manual/ for more information.
#snmp_forward_trap 1
#snmp_forward_ip 192.168.1.145
#snmp_forward_version 1
#snmp_forward_secName
#snmp_forward_engineid
#snmp_forward_authProtocol
#snmp_forward_authPassword
#snmp_forward_privProtocol
#snmp_forward_privPassword
#snmp_forward_secLevel
#snmp_forward_community
# Activate (1) Pandora Network Server
networkserver 0
# Activate (1) Pandora Data Server
dataserver 0
# Enable (1) or disable (0) the Data Server smart queue, which gives priority
# to new data coming from agents at the expense of buffered XML files.
dataserver_smart_queue 1
# Activate (1) Pandora FMS Discovery server
discoveryserver 0
# Discovery SAP (PANDORA FMS ENTERPRISE ONLY)
# java /usr/bin/java
# Discovery SAP utils (PANDORA FMS ENTERPRISE ONLY)
# sap_utils /usr/share/pandora_server/util/recon_scripts/SAP
# Discovery Microsoft SQL ODBC driver (PANDORA FMS ENTERPRISE ONLY)
# mssql_driver ODBC Driver 17 for SQL Server
# pluginserver : 1 or 0. Set to 1 to activate plugin server with this setup
pluginserver 0
# Pandora FMS Plugin exec tool filepath (by default at /usr/bin)
plugin_exec /usr/bin/timeout
# predictionserver : 1 or 0. Set to 1 to activate prediction server with this setup
# DISABLED BY DEFAULT
predictionserver 0
# wmiserver : 1 or 0. Set to 1 to activate WMI server with this setup
# DISABLED BY DEFAULT
wmiserver 0
# Network timeout (in seconds) for timeout in network connections for Network agents
network_timeout 4
# Network timeout (in seconds) for timeout in remote execution commands (PANDORA FMS ENTERPRISE ONLY).
rcmd_timeout 10
# Pandora FMS remote execution commands timeout tool filepath (by default at /usr/bin)
rcmd_timeout_bin /usr/bin/timeout
# Remote execution modules, ssh_launcher extra option (PANDORA FMS ENTERPRISE ONLY).
ssh_launcher /usr/share/pandora_server/util/ssh_launcher.sh
# Server keepalive (in seconds)
server_keepalive 45
# Log server thread status to disk (always set to 0, except when debugging).
thread_log 0
# Server Threshold: defines number of seconds of main loop (in sec)
server_threshold 5
# Network threads: Do not set too high (~40). Each threads make a network module check.
network_threads 4
# icmp_checks x : defines number of pings for each icmp_proc module type. at least one of
# that ping should be 1 to report 1. Setting this to 1 will make all icmp montioring faster but
# with more probability of failure.
icmp_checks 1
# Number of ICMP packets to send per request.
icmp_packets 2
# tcp specific options :
# tcp_checks: number of tcp retries if first attempt fails.
# tcp_timeout: specific timeout for tcp connections
tcp_checks 1
tcp_timeout 10
# snmp specific options :
# snmp_checks: number of snmp request retries if first attempt fails.
# snmp_timeout: specific timeout for snmp request.
snmp_checks 1
snmp_timeout 4
# snmp_proc_deadresponse 1 (default): Return DOWN if cannot contact
# or receive NULL from a SNMP PROC module.
snmp_proc_deadresponse 1
# plugin_threads: Specify number of plugin server threads for processing plugin calls
plugin_threads 1
# plugin_timeout: Specify number of seconds calling plugin exec waiting for response
# after this time, call is aborted and result is "unknown".
plugin_timeout 12
# wmi_timeout : specific timeout for wmi request.
wmi_timeout 7
# wmi_threads: Specify number of WMI server threads for processing WMI remote calls
wmi_threads 1
# WMI client binary (wmic by default).
#wmi_client pandorawmic
# recon_threads. Each thread will scan a different scantask.
recon_threads 1
# dataserver_threads: Number of threads for data server (XML processing threads)
dataserver_threads 1
# mta_address: External Mailer (MTA) IP Address to be used by Pandora FMS internal email capabilities
# If not set, the MTA configuration specified in the Pandora FMS Console will be used.
#mta_address localhost
# mta_port, this is the mail server port (default 25)
#mta_port 25
# mta_user MTA User (if needed for auth, FQD or simple user, depending on your server)
#mta_user myuser@mydomain.com
# mta_pass MTA Pass (if needed for auth)
#mta_pass mypassword
# mta_auth MTA Auth system (if needed, it supports LOGIN, PLAIN, CRAM-MD5, DIGEST-MD)
#mta_auth LOGIN
# mta_from Email address that sends the mail, by default is pandora@localhost
# probably you need to change it to avoid problems with your antispam
#mta_from Pandora FMS <pandora@mydomain.com>
# SMTP encryption protocol (none, ssl, starttls)
#mta_encryption none
# Set 1 if want eMail deliver alert in separate mail (default).
# Set 0 if want eMail deliver shared mail by all destination.
mail_in_separate 1
# xprobe2: Optional package to detect OS types using advanced TCP/IP
# fingerprinting tecniques, much more accurates than stadard nmap.
# If not provided, nmap is used insted xprobe2
xprobe2 /usr/bin/xprobe2
# nmap: If provided, is used to detect OS type with recon server using
# advanded OS fingerprint technique. Xprobe2 gives more accurate results
# Nmap is also used to do TCP port scanning in detected host.
nmap /usr/bin/nmap
# Default path is /usr/sbin/fping for installation default in distro Centos , if you are installing in other distribution,
# you install fping in /usr/bin/fping and change the path in this line.
# Path to the fping binary. Used by the Enterprise ICMP Server.
fping /usr/sbin/fping
# fping /usr/bin/fping
# A value that specifies how aggressive nmap should be from 1 to 5. 1 means slower but more reliable, 5 means faster but less reliable. 2 by default.
nmap_timing_template 2
# Like nmap_timing_template, but applies to Satellite Server and Recon Server network scans. 3 by default.
recon_timing_template 3
# snmpget: Needed to do SNMP checks. By default is on /usr/bin/snmpget
snmpget /usr/bin/snmpget
# Location of the braa binary needed by the Enterprise SNMP Server
# /usr/bin/braa by default (PANDORA FMS ENTERPRISE ONLY).
braa /usr/bin/braa
# Number of retries before braa hands a module over to the Network Server (PANDORA FMS ENTERPRISE ONLY).
braa_retries 3
# Location of the pandorafsnmp binary needed by the Enterprise SNMP Server.
# /usr/bin/pandorafsnmp by default (PANDORA FMS ENTERPRISE ONLY).
fsnmp /usr/bin/pandorafsnmp
# Default group id for new agents created with Pandora FMS Data Server
# If this token is enabled and Agent is setup with a fixed group, server settings will override agent settings
# If this token is disabled and group is not provided in the agent, or provided group doesn't exist, agent data
# will be dropped. We use the Group ID #10 (Unknown) for a "valid" default value, please change as your own decision.
autocreate_group 10
# Works like autocreate_group, except the name of the group is specified (instead of its id). Do not set both.
#autocreate_group_name Unknown
# If set to 1, new agents will be added to the group specified by autocreate_group (the group specified by the agent will be used as fallback).
# If set to 0, new agents will be added to the group specified by the agent (the group specified by autocreate_group will be used as fallback).
autocreate_group_force 0
# Set to 1 if want to autocreate agents with Pandora FMS Data Server,
# set to 0 to disable (for security purposes, for example).
autocreate 1
# max_log_size: Specify max size of Pandora FMS server log file (1MB by default). If
# log file grows above this limit, is renamed to "pandora_server.log.0".
max_log_size 1048576
# max_log_generation: Specify max generation count (between 1 and 9) of Pandora FMS server log files.
max_log_generation 1
# max_queue_files (5000 by default)
# When server have more than max_queue_files in incoming directory, skips the read
# the directory to avoid filesystem overhead.
max_queue_files 5000
# If set to 0, the timestamp attribute in XML data files will be ignored and the system time will be used instead.
# use_xml_timestamp 1
# Pandora FMS will autorestart itself each XXX seconds, use this if you experience problems with
# shutting down threads, or other stability problems.
# auto_restart 86400
# Pandora FMS will restart after restart_delay seconds on critical errors.
restart 1
restart_delay 60
# More information about GIS Setup in /usr/share/pandora_server/util/gis.README
# Flag to activate GIS (positional information for agents and maps)
# by default it is desactivated
#activate_gis 0
# Radius of error in meters to consider two gis locations as the same location.
#location_error 50
# Recon reverse geolocation file. This is the database with the reverse
# geolocation information using MaxMind GPL GeoLiteCity.dat format).
# Comment it to disable the IP geolocation on agent creation.
#recon_reverse_geolocation_file /usr/local/share/GeoIP/GeoIPCity.dat
# Radius (in meters) of the circle in where the agents will be place randomly
# when finded by a recon task. Center of the circle is guessed
# by geolocating the IP.
#recon_location_scatter_radius 1000
# Pandora Server self-monitoring (embedded agent) (by default enabled)
self_monitoring 1
# Self monitoring interval (in seconds).
self_monitoring_interval 300
# Update parent from the agent xml
update_parent 1
#
#
# This enable realtime reverse geocoding using Google Maps public api.
# This requires internet access, and could have performance penalties processing GIS
# information due the connetion needed to resolve all GIS input.
# NOTE: If you dont pay the service to google, they will ban your IP in a few days.
# google_maps_description 1
# This enable realtime reverse geocoding using Openstreet Maps public api.
# This requires internet access, and could have performance penalties processing GIS
# information due the connetion needed to resolve all GIS input.
# You can alter the code to use a local (your own) openstreet maps server.
# openstreetmaps_description 1
# Enable (1) or disable (0) Pandora FMS Web Server/Goliat.
webserver 0
# Number of threads for the Web Server/Goliat.
web_threads 1
# Default timeout (in seconds) for web modules.
web_timeout 60
# Uncomment to perform web checks with LWP instead of CURL.
#web_engine lwp
# Enable (1) or disable (0) Pandora FMS Inventory Server.
inventoryserver 0
# Number of threads for the Inventory Server.
inventory_threads 1
# Enable (1) or disable (0) Pandora FMS Export Server (PANDORA FMS ENTERPRISE ONLY).
exportserver 0
# Number of threads for the Export Server (PANDORA FMS ENTERPRISE ONLY).
export_threads 1
# Enable (1) or disable (0) Pandora FMS Event Server (PANDORA FMS ENTERPRISE ONLY).
eventserver 0
# Enable (1) or disable (0) Pandora FMS Correlation Server (PANDORA FMS ENTERPRISE ONLY).
correlationserver 0
# Time in seconds to re-evaluate correlation alerts pool (PANDORA FMS ENTERPRISE ONLY).
correlation_threshold 30
# Correlated alerts, event window in seconds (3600 by default) (PANDORA FMS ENTERPRISE ONLY).
event_window 3600
# Correlated Alerts, log window in seconds (3600 by default) (PANDORA FMS ENTERPRISE ONLY).
log_window 3600
# Pre-load windows on start with available information. (PANDORA FMS ENTERPRISE ONLY).
#preload_windows 0
# Correlated Alerts, group cache ttl (in seconds). Set to 0 to disable. (PANDORA FMS ENTERPRISE ONLY).
#event_server_cache_ttl 10
# Log retrieving, items per request. (High values could make elasticsearch crash)
#elastic_query_size 10
# If set to 1, an alert will not be fired if the last event it generated is in 'in-process' status.
event_inhibit_alerts 0
# Enable (1) or disable (0) Pandora FMS Enterprise ICMP Server (PANDORA FMS ENTERPRISE ONLY).
# You need nmap 5.20 or higher in order to use this !
icmpserver 0
# Number of threads for the Enterprise ICMP Server (PANDORA FMS ENTERPRISE ONLY).
icmp_threads 4
# Enable (1) or disable (0) Pandora FMS Enterprise SNMP Server (PANDORA FMS ENTERPRISE ONLY).
# Check braa tool is running and operative.
snmpserver 0
# Number of threads for the Enterprise SNMP Server (PANDORA FMS ENTERPRISE ONLY).
snmp_threads 4
# Block size for block producer/consumer servers, that is, the number of modules
# per block (15 by default) (PANDORA FMS ENTERPRISE ONLY).
block_size 20
# If set to 1, process XML data files in a stack instead of a queue. 0 by default.
# WARNING: Incremental modules will not work properly if dataserver_lifo is set to 1!!!
dataserver_lifo 0
# If set to 1, the policy manager is enabled and the server is listening the policy queue.
# 0 by default (PANDORA FMS ENTERPRISE ONLY)
policy_manager 1
# If set to 1, new events validate older event for the same module. This will
# affect the performance of the server. This was the "normal behaviour" on previous (4.x) versions.
# disable only if you really know what you are doing !!.
event_auto_validation 1
# If defined, events generated by Pandora FMS will be written to the specified text file.
#event_file /var/log/pandora/pandora_events.txt
# Set the maximum number of traps that will be processed from a single source in a
# configured time interval.
snmp_storm_protection 25
# Time interval for snmp_storm protection (in seconds).
snmp_storm_timeout 10
# Silenced time period in seconds, when trap storm is detected
snmp_storm_silence_period 300
# Default texts for some events. The macros _module_ and _data_ are supported.
#text_going_down_normal Module '_module_' is going to NORMAL (_data_)
#text_going_up_critical Module '_module_' is going to CRITICAL (_data_)
#text_going_up_warning Module '_module_' is going to WARNING (_data_)
#text_going_down_warning Module '_module_' is going to WARNING (_data_)
#text_going_unknown Module '_module_' is going to UNKNOWN
# Events older that the specified time (in seconds) will be auto-validated. Set to 0 to disable this feature.
event_expiry_time 0
# Only events more recent than the specified time window (in seconds) will be auto-validated. This value must
# be greater than event_expiry_time.
#event_expiry_window 86400
# If set to 1, SNMP modules run by the Network Server will be claimed back by
# the SNMP Enterprise Server when pandora_db is run.
claim_back_snmp_modules 1
# If set to 1 asynchronous modules that do not receive data for twice their
# interval will become normal. Set to 0 to disable.
async_recovery 1
# Console API credentials.
# Required for some features like the module graphs macros.
# console_api_url: Api URL (http://localhost/pandora_console/include/api.php by default)
# console_api_url http://localhost/pandora_console/include/api.php
# console_api_pass: Api pass
# console_api_pass 1234
# Passphrase used to generate the key for password encryption (PANDORA FMS ENTERPRISE ONLY).
#encryption_passphrase passphrase
# Enable (1) or disable (0) events related to the unknown module status.
unknown_events 1
# Time interval (as a multiple of the module interval) before a module becomes unknown. Twice the module's interval by default.
#unknown_interval 2
# Number of unknown modules that will be processed per iteration.
unknown_block_size 1000
# Maximum executing time of an alert (in seconds)
global_alert_timeout 15
# If set to 1 allows PandoraFMS Server to be configured via the web console (PANDORA FMS ENTERPRISE ONLY).
remote_config 0
# Remote address to send the configuration file (PANDORA FMS ENTERPRISE ONLY).
remote_config_address localhost
# Remote port to send the configuration file (PANDORA FMS ENTERPRISE ONLY).
#remote_config_port 41121
# Extra options for the Tentacle client to send the configuration file (PANDORA FMS ENTERPRISE ONLY).
#remote_config_opts
# Module status change events will not be generated and module alerts will not
# be executed for the specified number of seconds since the server starts up.
warmup_event_interval 0
# Modules will not become unknown (so no unknown events will be generated) and
# keepalive modules will not be updated for the specified number of seconds
# since the server starts up.
warmup_unknown_interval 300
# Directory were additional enc files for the XML parser are located.
enc_dir /usr/share/pandora_server/enc/
# The number of times dynamic_min and dynamic_max will be recalculated per dynamic_interval.
# Go to https://pandorafms.com/manual/ for more information.
dynamic_updates 5
#dynamic_warning
#dynamic_constant
# Periodically update unknown modules (1), instead of only once (0). Periodic
# updates may affect server performance.
unknown_updates 0
# Enable (1) or disable (0) the Pandora FMS WUX Server (PANDORA FMS ENTERPRISE ONLY).
wuxserver 0
# Host of the Selenium Grid Server.
#wux_host localhost
# Port of the Selenium Grid Server.
#wux_port 4444
# Maximum timeout to connect to a target web site, also for communications with a Selenium Grid server.
#wux_webagent_timeout 15
# Force closing previous sessions on remote wux_host, only for Selenium Grid server 3.
#clean_wux_sessions 1
# Enable (1) or disable (0) the Pandora FMS Syslog Server (PANDORA FMS ENTERPRISE ONLY) disabled by default.
syslogserver 0
# Full path to syslog's output file (PANDORA FMS ENTERPRISE ONLY).
syslog_file /var/log/messages
# Number of threads for the Syslog Server (PANDORA FMS ENTERPRISE ONLY).
syslog_threads 2
# Maximum number of lines queued by the Syslog Server's producer on each run (PANDORA FMS ENTERPRISE ONLY).
syslog_max 65535
# Sync Server
#syncserver
# Port tentacle server
#sync_port 41121
# Sync certificate path of the authenticating CA
#sync_ca /home/cacert.pem
# Sync server certificate path
#sync_cert /home/tentaclecert.pem
# Sync server certificate private key path
#sync_key /home/tentaclekey.pem
# Sync number of attempts
#sync_retries 3
# Sync timeout
#sync_timeout 10
# Address
# sync_address
# Network manager configuration server (PANDORA FMS ENTERPRISE ONLY).
#ncmserver 0
# Threads for NCM server (PANDORA FMS ENTERPRISE ONLY).
ncmserver_threads 1
# NCM utility to avoid Net::SSH::Expect issues in multi-threaded environments.
ncm_ssh_utility /usr/share/pandora_server/util/ncm_ssh_extension
# Pandora FMS Daemon Watchdog execution interval in seconds (PANDORA FMS ENTERPRISE ONLY).
ha_interval 30
# Pandora FMS Daemon Watchdog monitoring interval in seconds. Must be a multiple of ha_interval (PANDORA FMS ENTERPRISE ONLY).
ha_monitoring_interval 60
# Enable (1) or disable (0) Pandora FMS Alert Server.
alertserver 0
# Pandora FMS Alert Server threads.
alertserver_threads 4
# Generate an hourly warning event if alert execution is being delayed more than alertserver_warn seconds.
alertserver_warn 180
# If set to 1, alerts are queued for the Pandora FMS Alert Server.If alertserver is set to 1, alerts are always queued.
alertserver_queue 0
# Pandora FMS HA MySQL cluster splitbrain auto-recovery (PANDORA FMS ENTERPRISE ONLY)
# IMPORTANT! Please understand and configure all settings from pandora_console/index.php?sec=gservers&sec2=enterprise/godmode/servers/HA_cluster&tab=setup
# before enable this feature.
#splitbrain_autofix 0
# Pandora FMS HA MySQL cluster splitbrain auto-recovery settings (PANDORA FMS ENTERPRISE ONLY)
# Maximum number of retries
#ha_max_splitbrain_retries 2
# Maximum number of retries to verify resync status.
#ha_max_resync_wait_retries 3
# Maximum number of seconds waiting while verifying resync status.
#ha_resync_sleep 10
# Enable (1) or disable (0) the Tentacle Server watchdog (enabled by default).
tentacle_service_watchdog 1
# Enable (1) or disable (0) the parameter of mysql ssl certification (mysql_ssl_verify_server_cert) (enabled by default).
verify_mysql_ssl_cert 1

View File

@ -46,7 +46,7 @@ our @EXPORT = qw(
# version: Defines actual version of Pandora Server for this module only
my $pandora_version = "7.0NG.770";
my $pandora_build = "230330";
my $pandora_build = "230331";
our $VERSION = $pandora_version." ".$pandora_build;
# Setup hash
@ -141,7 +141,7 @@ sub pandora_get_sharedconfig ($$) {
# Netflow configuration options
$pa_config->{"activate_netflow"} = pandora_get_tconfig_token ($dbh, 'activate_netflow', 0);
$pa_config->{"netflow_path"} = pandora_get_tconfig_token ($dbh, 'netflow_path', '/var/spool/pandora/data_in/netflow');
$pa_config->{"netflow_interval"} = pandora_get_tconfig_token ($dbh, 'netflow_interval', 300);
$pa_config->{"netflow_interval"} = pandora_get_tconfig_token ($dbh, 'netflow_interval', 3600);
$pa_config->{"netflow_daemon"} = pandora_get_tconfig_token ($dbh, 'netflow_daemon', '/usr/bin/nfcapd');
# Sflow configuration options

View File

@ -34,7 +34,7 @@ our @ISA = qw(Exporter);
# version: Defines actual version of Pandora Server for this module only
my $pandora_version = "7.0NG.770";
my $pandora_build = "230330";
my $pandora_build = "230331";
our $VERSION = $pandora_version." ".$pandora_build;
our %EXPORT_TAGS = ( 'all' => [ qw() ] );

View File

@ -4,7 +4,7 @@
%global __os_install_post %{nil}
%define name pandorafms_server
%define version 7.0NG.770
%define release 230330
%define release 230331
Summary: Pandora FMS Server
Name: %{name}

View File

@ -4,7 +4,7 @@
%global __os_install_post %{nil}
%define name pandorafms_server
%define version 7.0NG.770
%define release 230330
%define release 230331
Summary: Pandora FMS Server
Name: %{name}

View File

@ -9,7 +9,7 @@
# **********************************************************************
PI_VERSION="7.0NG.770"
PI_BUILD="230330"
PI_BUILD="230331"
MODE=$1
if [ $# -gt 1 ]; then
@ -26,6 +26,7 @@ PANDORA_SERVER=/etc/init.d/pandora_server
TENTACLE_SERVER=/etc/init.d/tentacle_serverd
PANDORA_CFG_FILE=$PANDORA_CFG_DIR/pandora_server.conf
PANDORA_CFG_FILE_DIST=conf/pandora_server.conf.new
PANDORA_CFG_FILE_DIST_SEC=conf/pandora_server_sec.conf.template
PANDORA_INIT_SCRIPT=util/pandora_server
TENTACLE_CFG_DIR=/etc/tentacle
TENTACLE_CFG_FILE=$TENTACLE_CFG_DIR/tentacle_server.conf
@ -350,6 +351,12 @@ install () {
chmod 770 $DESTDIR$PANDORA_CFG_FILE
fi
echo "Creating sec setup directory in $PANDORA_CFG_DIR/conf.d"
mkdir -p $DESTDIR$PANDORA_CFG_DIR/conf.d 2> /dev/null
echo cp $PANDORA_CFG_FILE_DIST_SEC $DESTDIR$PANDORA_CFG_DIR/conf.d/
cp $PANDORA_CFG_FILE_DIST_SEC $DESTDIR$PANDORA_CFG_DIR/conf.d/
echo "Installing Pandora Server manual"
[ -d $DESTDIR$MANDIR ] || mkdir -p $DESTDIR$MANDIR
cp man/man1/pandora_server.1.gz $DESTDIR$MANDIR

View File

@ -35,7 +35,7 @@ use PandoraFMS::Config;
use PandoraFMS::DB;
# version: define current version
my $version = "7.0NG.770 Build 230330";
my $version = "7.0NG.770 Build 230331";
# Pandora server configuration
my %conf;

View File

@ -217,7 +217,7 @@ sub ha_keep_pandora_running($$) {
if ($OSNAME eq "freebsd") {
$control_command = "status_server";
}
my $pid = `$Pandora_Service $control_command | awk '{print \$NF*1}' | tr -d '\.'`;
my $pid = `$Pandora_Service $control_command | grep -v /conf.d/ | awk '{print \$NF*1}' | tr -d '\.'`;
if ( ($pid > 0) && ($component_last_contact > 0)) {
# service running but not all components

View File

@ -36,7 +36,7 @@ use Encode::Locale;
Encode::Locale::decode_argv;
# version: define current version
my $version = "7.0NG.770 Build 230330";
my $version = "7.0NG.770 Build 230331";
# save program name for logging
my $progname = basename($0);

View File

@ -32,9 +32,11 @@ fi
# this script to another name, editing PANDORA_HOME to the new .conf
export PANDORA_HOME="/etc/pandora/pandora_server.conf"
export PANDORA_HOME_EXTRA="/etc/pandora/conf.d"
export PANDORA_DAEMON=/usr/bin/pandora_server
export PANDORA_HA=/usr/bin/pandora_ha
export PID_DIR=/var/run
declare -A SERVERS_NAMES
# Environment variables
if [ -f /etc/pandora/pandora_server.env ]; then
@ -94,6 +96,95 @@ function pidof_pandora_ha () {
echo $PANDORA_PID
}
function pidof_secondary_server () {
# $1 is mandatory to check secondary server conf file
# This sets COLUMNS to XXX chars, because if command is run
# in a "strech" term, ps aux don't report more than COLUMNS
# characters and this will not work.
COLUMNS=300
local conf_file=$1
SEC_PANDORA_PID=`ps aux | grep "$PANDORA_DAEMON" | grep "$conf_file" | grep -v grep | tail -1 | awk '{ print $2 }'`
echo $SEC_PANDORA_PID
}
function extra_confs () {
# Check server name, from primary conf file.
local primary_server_name=$(grep servername $PANDORA_HOME | grep -v '^#' | tail -1 | awk '{ print $2 }')
[ "$primary_server_name" ] || primary_server_name=$(hostname)
SERVERS_NAMES["$PANDORA_HOME"]=$primary_server_name
# Read all extra confs discarting .templates
if [[ -d $PANDORA_HOME_EXTRA ]]; then
local EXTRA_CONF=($(ls $PANDORA_HOME_EXTRA | grep .conf | grep -v .template))
else
return 0
fi
# Return 0 if no extra confs found
if [[ ${#EXTRA_CONF[@]} = 0 ]]; then
return 0
fi
# Loop all secondary servers confs
for conf in ${EXTRA_CONF[@]} ; do
tmp_server_name=$(grep servername $PANDORA_HOME_EXTRA/$conf | grep -v '^#' | tail -1 | awk '{ print $2 }')
SERVERS_NAMES["$PANDORA_HOME_EXTRA/$conf"]=$tmp_server_name
done
INCLUDE_EXTRA_CONFS=1
}
function check_extra_confs () {
[ "$1" ] || echo Error no defined conf found
local tmp_server_name=''
local mastery=''
tmp_server_name=$(grep servername $1 | grep -v '^#' | tail -1 | awk '{ print $2 }')
# Check servername
if [ "$tmp_server_name" == '' ]; then
echo "Error: The config file $1 has no sever name defined, servername is mandatory for secondary servers"
rc_exit
fi
if [ "$tmp_server_name" == "$SERVERS_NAMES[$PANDORA_HOME]" ]; then
echo "Error: The config file $1 has the same servername as the primary server, servername should be unique for secondary servers"
rc_exit
fi
# check other confs servernames (todo)
local _count=0
for name in ${!SERVERS_NAMES[@]}; do
[[ ${SERVERS_NAMES[$name]} == $tmp_server_name ]] && _count=`expr $_count + 1`
if [[ $_count -gt 1 ]] ; then
echo "Error: The config file $1 has the same servername as the another secondary server, servername should be unique for secondary servers"
rc_exit
fi
done
# Check mastery
mastery=$(grep master $1 | grep -v '^#' | tail -1 | awk '{ print $2 }')
if [[ $mastery -ne 0 ]]; then
echo "Error: The config file $1 has the same servername master value higer than 0, master should be disable for secondary servers"
rc_exit
fi
}
function server_status () {
local _couter=0
for key in ${!SERVERS_NAMES[@]}; do
unset SEC_PID
SEC_PID=$(pidof_secondary_server $key)
if [ -z "$SEC_PID" ] ; then
echo "${SERVERS_NAMES[$key]} ($key) Server is not running."
_couter=`expr $_couter + 1`
else
echo "${SERVERS_NAMES[$key]} ($key) Server is running with PID: $SEC_PID."
fi
done
[[ $_couter -gt 0 ]] && rc_failed 7 || rc_status -v
}
# Main script
@ -104,6 +195,8 @@ then
rc_exit
fi
extra_confs # check for config files
case "$1" in
start)
PANDORA_PID=`pidof_pandora_ha`
@ -166,78 +259,81 @@ case "$1" in
if [ -z "$PANDORA_PID" ]
then
echo "$PANDORA_RB_PRODUCT_NAME HA is not running."
rc_failed 7 # program is not running
server_status
rc_failed 7 # program is not running
else
echo "$PANDORA_RB_PRODUCT_NAME HA is running with PID $PANDORA_PID."
rc_status
server_status
rc_status -v
fi
;;
start-server)
PANDORA_PID=`pidof_pandora`
if [ ! -z "$PANDORA_PID" ]
then
echo "$PANDORA_RB_PRODUCT_NAME Server is currently running on this machine with PID ($PANDORA_PID)."
rc_exit # running start on a service already running
fi
_count=0
for key in ${!SERVERS_NAMES[@]}; do
[[ $key != "/etc/pandora/pandora_server.conf" ]] && check_extra_confs $key
unset SEC_PID
SEC_PID=$(pidof_secondary_server $key)
if [ ! -z "$SEC_PID" ] ; then
echo "${SERVERS_NAMES[$key]} ($key) Server is currently running on this machine with PID ($SEC_PID)."
continue
else
export PERL_LWP_SSL_VERIFY_HOSTNAME=0
$PANDORA_DAEMON $PANDORA_HOME -D
sleep 1
export PERL_LWP_SSL_VERIFY_HOSTNAME=0
$PANDORA_DAEMON $key -D
sleep 1
unset SEC_PID
SEC_PID=$(pidof_secondary_server $key)
if [ ! -z "$SEC_PID" ] ; then
echo "${SERVERS_NAMES[$key]} Server is now running with PID $SEC_PID"
else
echo "Cannot ${SERVERS_NAMES[$key]} start Server. Aborted."
echo "Check ${SERVERS_NAMES[$key]} log files at '/var/log/pandora/pandora_server.error' & 'pandora_server.log'"
_count=`expr $_count + 1`
fi
fi
done
PANDORA_PID=`pidof_pandora`
if [ ! -z "$PANDORA_PID" ]
then
echo "$PANDORA_RB_PRODUCT_NAME Server is now running with PID $PANDORA_PID"
if [[ _count -gt 0 ]]; then
rc_failed 7
else
rc_status -v
else
echo "Cannot start $PANDORA_RB_PRODUCT_NAME Server. Aborted."
echo "Check $PANDORA_RB_PRODUCT_NAME log files at '/var/log/pandora/pandora_server.error & pandora_server.log'"
rc_failed 7 # program is not running
fi
fi
;;
stop-server)
PANDORA_PID=`pidof_pandora`
if [ -z "$PANDORA_PID" ]
then
echo "$PANDORA_RB_PRODUCT_NAME Server is not running, cannot stop it."
rc_exit # running stop on a service already stopped or not running
else
echo "Stopping $PANDORA_RB_PRODUCT_NAME Server"
kill $PANDORA_PID > /dev/null 2>&1
COUNTER=0
while [ $COUNTER -lt $MAXWAIT ]
do
_PID=`pidof_pandora`
if [ "$_PID" != "$PANDORA_PID" ]
then
COUNTER=$MAXWAIT
fi
COUNTER=`expr $COUNTER + 1`
sleep 1
done
# Send a KILL -9 signal to process, if it's alive after 60secs, we need
# to be sure is really dead, and not pretending...
if [ "$_PID" = "$PANDORA_PID" ]
then
kill -9 $PANDORA_PID > /dev/null 2>&1
_couter=0
for key in ${!SERVERS_NAMES[@]}; do
unset PANDORA_PID
PANDORA_PID=$(pidof_secondary_server $key)
if [ -z "$PANDORA_PID" ] ; then
echo "${SERVERS_NAMES[$key]} ($key) Server is not running, cannot stop it."
else
echo "Stopping ${SERVERS_NAMES[$key]} ($key) Server"
kill $PANDORA_PID > /dev/null 2>&1
COUNTER=0
while [ $COUNTER -lt $MAXWAIT ]
do
_PID=$(pidof_secondary_server $key)
if [ "$_PID" != "$PANDORA_PID" ]
then
COUNTER=$MAXWAIT
fi
COUNTER=`expr $COUNTER + 1`
sleep 1
done
# Send a KILL -9 signal to process, if it's alive after 60secs, we need
# to be sure is really dead, and not pretending...
if [ "$_PID" = "$PANDORA_PID" ]
then
kill -9 $PANDORA_PID > /dev/null 2>&1
fi
fi
rc_status -v
fi
done
rc_status -v
;;
status-server)
PANDORA_PID=`pidof_pandora`
if [ -z "$PANDORA_PID" ]
then
echo "$PANDORA_RB_PRODUCT_NAME Server is not running."
rc_failed 7 # program is not running
else
echo "$PANDORA_RB_PRODUCT_NAME Server is running with PID $PANDORA_PID."
rc_status
fi
server_status
;;
force-reload-server|restart-server)
$0 stop-server