#10730 Regular expresion inventory reports

This commit is contained in:
Jonathan 2023-04-13 10:42:37 +02:00
parent c8b6be3e92
commit 7d9fb5c77a
5 changed files with 88 additions and 43 deletions

View File

@ -117,6 +117,7 @@ $period = SECONDS_1DAY;
$search = ''; $search = '';
$full_text = 0; $full_text = 0;
$log_number = 1000; $log_number = 1000;
$inventory_regular_expression = '';
// Added support for projection graphs. // Added support for projection graphs.
$period_pg = SECONDS_5DAY; $period_pg = SECONDS_5DAY;
$projection_period = SECONDS_5DAY; $projection_period = SECONDS_5DAY;
@ -940,6 +941,7 @@ switch ($action) {
$inventory_modules = $es['inventory_modules']; $inventory_modules = $es['inventory_modules'];
$id_agents = $es['id_agents']; $id_agents = $es['id_agents'];
$recursion = $item['recursion']; $recursion = $item['recursion'];
$inventory_regular_expression = $es['inventory_regular_expression'];
$idAgent = $es['id_agents']; $idAgent = $es['id_agents'];
$idAgentModule = $inventory_modules; $idAgentModule = $inventory_modules;
@ -2196,6 +2198,15 @@ $class = 'databox filters';
</td> </td>
</tr> </tr>
<tr id="row_regular_expression" class="datos">
<td class="bolder"><?php echo __('Regular expression'); ?></td>
<td>
<?php
html_print_input_text('inventory_regular_expression', $inventory_regular_expression, '', false, 255, false, false, false, '', 'w50p');
?>
</td>
</tr>
<tr id="row_date" class="datos"> <tr id="row_date" class="datos">
<td class="bolder"><?php echo __('Date'); ?></td> <td class="bolder"><?php echo __('Date'); ?></td>
<td class="mx180px"> <td class="mx180px">
@ -6445,6 +6456,7 @@ function chooseType() {
$("#row_date").hide(); $("#row_date").hide();
$("#row_agent_multi").hide(); $("#row_agent_multi").hide();
$("#row_module_multi").hide(); $("#row_module_multi").hide();
$('#row_regular_expression').hide();
$("#row_event_graphs").hide(); $("#row_event_graphs").hide();
$("#row_event_graph_by_agent").hide(); $("#row_event_graph_by_agent").hide();
$("#row_event_graph_by_user").hide(); $("#row_event_graph_by_user").hide();
@ -7154,6 +7166,7 @@ function chooseType() {
$("#row_group").show(); $("#row_group").show();
$("#row_agent_multi").show(); $("#row_agent_multi").show();
$("#row_module_multi").show(); $("#row_module_multi").show();
$('#row_regular_expression').show();
$("#row_date").show(); $("#row_date").show();
$("#id_agents") $("#id_agents")

View File

@ -1756,6 +1756,7 @@ switch ($action) {
$es['inventory_modules'] = get_parameter( $es['inventory_modules'] = get_parameter(
'inventory_modules' 'inventory_modules'
); );
$es['inventory_regular_expression'] = get_parameter('inventory_regular_expression', '');
$description = get_parameter('description'); $description = get_parameter('description');
$values['external_source'] = json_encode($es); $values['external_source'] = json_encode($es);
$good_format = true; $good_format = true;
@ -2538,6 +2539,7 @@ switch ($action) {
$es['inventory_modules'] = get_parameter( $es['inventory_modules'] = get_parameter(
'inventory_modules' 'inventory_modules'
); );
$es['inventory_regular_expression'] = get_parameter('inventory_regular_expression', '');
$values['external_source'] = json_encode($es); $values['external_source'] = json_encode($es);
$good_format = true; $good_format = true;
break; break;

View File

@ -36,7 +36,8 @@ function inventory_get_data(
$return_mode=false, $return_mode=false,
$order_by_agent=false, $order_by_agent=false,
$node='', $node='',
$pagination_url_parameters=[] $pagination_url_parameters=[],
$regular_expression=''
) { ) {
global $config; global $config;
@ -268,7 +269,15 @@ function inventory_get_data(
$i++; $i++;
} }
$data[] = $temp_row; if ($regular_expression !== '') {
if (is_array(preg_grep('/'.$regular_expression.'/', $temp_row))) {
if (count(preg_grep('/'.$regular_expression.'/', $temp_row)) > 0) {
$data[] = $temp_row;
}
}
} else {
$data[] = $temp_row;
}
} }
} }

View File

@ -3170,6 +3170,7 @@ function reporting_inventory($report, $content, $type)
$date = $es['date']; $date = $es['date'];
$description = $content['description']; $description = $content['description'];
$inventory_regular_expression = $es['inventory_regular_expression'];
switch ($type) { switch ($type) {
case 'data': case 'data':
@ -3179,7 +3180,11 @@ function reporting_inventory($report, $content, $type)
$date, $date,
'', '',
false, false,
'csv' 'csv',
false,
'',
[],
$inventory_regular_expression
); );
break; break;
@ -3190,7 +3195,11 @@ function reporting_inventory($report, $content, $type)
$date, $date,
'', '',
false, false,
'hash' 'hash',
false,
'',
[],
$inventory_regular_expression
); );
break; break;
} }

View File

@ -1996,6 +1996,13 @@ function reporting_html_inventory($table, $item, $pdf=0)
&& is_array($type_modules) === true && is_array($type_modules) === true
) { ) {
foreach ($type_modules as $key_type_module => $type_module) { foreach ($type_modules as $key_type_module => $type_module) {
$print_table = true;
foreach ($type_module as $key => $module) {
if (count($module['data']) == 0) {
unset($type_module[$key]);
}
}
$table1 = new stdClass(); $table1 = new stdClass();
$table1->width = '99%'; $table1->width = '99%';
$table1->class = 'info_table'; $table1->class = 'info_table';
@ -2006,57 +2013,62 @@ function reporting_html_inventory($table, $item, $pdf=0)
if (isset($type_module) === true if (isset($type_module) === true
&& is_array($type_module) === true && is_array($type_module) === true
) { ) {
foreach ($type_module as $key_type => $module) { if (count($type_module) > 0) {
if (isset($module['data']) === true foreach ($type_module as $key_type => $module) {
&& is_array($module['data']) === true if (isset($module['data']) === true
) { && is_array($module['data']) === true
array_pop($module['data']); ) {
foreach ($module['data'] as $k_module => $v_module) { foreach ($module['data'] as $k_module => $v_module) {
$str_key = $key_type_module.'-'.$key_type.'-'.$k_module; $str_key = $key_type_module.'-'.$key_type.'-'.$k_module;
$table1->head[0] = __('Agent'); $table1->head[0] = __('Agent');
$table1->head[1] = __('Module'); $table1->head[1] = __('Module');
$table1->head[2] = __('Date'); $table1->head[2] = __('Date');
$table1->headstyle[0] = 'text-align: left'; $table1->headstyle[0] = 'text-align: left';
$table1->headstyle[1] = 'text-align: left'; $table1->headstyle[1] = 'text-align: left';
$table1->headstyle[2] = 'text-align: left'; $table1->headstyle[2] = 'text-align: left';
$table1->cellstyle[$str_key][0] = 'text-align: left;'; $table1->cellstyle[$str_key][0] = 'text-align: left;';
$table1->cellstyle[$str_key][1] = 'text-align: left;'; $table1->cellstyle[$str_key][1] = 'text-align: left;';
$table1->cellstyle[$str_key][2] = 'text-align: left;'; $table1->cellstyle[$str_key][2] = 'text-align: left;';
$table1->data[$str_key][0] = $module['agent_name']; $table1->data[$str_key][0] = $module['agent_name'];
$table1->data[$str_key][1] = $key_type_module; $table1->data[$str_key][1] = $key_type_module;
$dateModule = explode(' ', $module['timestamp']); $dateModule = explode(' ', $module['timestamp']);
$table1->data[$str_key][2] = $dateModule[0]; $table1->data[$str_key][2] = $dateModule[0];
if (isset($v_module) === true if (isset($v_module) === true
&& is_array($v_module) === true && is_array($v_module) === true
) { ) {
foreach ($v_module as $k => $v) { foreach ($v_module as $k => $v) {
$table1->head[$k] = $k; $table1->head[$k] = $k;
$table1->headstyle[$k] = 'text-align: left'; $table1->headstyle[$k] = 'text-align: left';
$table1->cellstyle[$str_key][$k] = 'text-align: left;'; $table1->cellstyle[$str_key][$k] = 'text-align: left;';
if ($pdf === 0) { if ($pdf === 0) {
$table1->data[$str_key][$k] = $v; $table1->data[$str_key][$k] = $v;
} else { } else {
// Workaround to prevent table columns from growing indefinitely in PDFs. // Workaround to prevent table columns from growing indefinitely in PDFs.
$table1->data[$str_key][$k] = preg_replace( $table1->data[$str_key][$k] = preg_replace(
'/([^\s]{30})(?=[^\s])/', '/([^\s]{30})(?=[^\s])/',
'$1'.'<br>', '$1'.'<br>',
$v $v
); );
}
} }
} }
} }
} }
} }
} else {
$print_table = false;
} }
} else {
$print_table = false;
} }
if ($pdf === 0) { if ($pdf === 0 && $print_table === true) {
$table->colspan[$key_type_module]['cell'] = 3; $table->colspan[$key_type_module]['cell'] = 3;
$table->data[$key_type_module]['cell'] = html_print_table( $table->data[$key_type_module]['cell'] = html_print_table(
$table1, $table1,
true true
); );
} else { } else if ($print_table === true) {
$return_pdf .= html_print_table( $return_pdf .= html_print_table(
$table1, $table1,
true true
@ -5988,7 +6000,7 @@ function reporting_get_events($data, $links=false)
$tooltip = ui_print_help_tip( $tooltip = ui_print_help_tip(
__( __(
"Event count corresponds to events within the last hour" 'Event count corresponds to events within the last hour'
), ),
true true
); );