[Tags performance] Improve monitor detail (aka status_monitor)

This commit is contained in:
danielmaya 2018-09-27 12:46:45 +02:00
parent 79961b91d0
commit 631c38ca84
3 changed files with 60 additions and 58 deletions

View File

@ -723,47 +723,26 @@ function tags_get_acl_tags_module_condition($acltags, $modules_table = '') {
$condition = '';
$group_conditions = array();
$has_secondary = enterprise_hook('agents_is_using_secondary_groups');
// The acltags array contains the groups with the acl propagation applied
// after the changes done into the 'tags_get_user_groups_and_tags' function.
foreach ($acltags as $group_id => $group_tags) {
$tag_join = '';
if (!empty($group_tags)) {
$tag_join = sprintf('INNER JOIN ttag_module ttmc
ON tamc.id_agente_modulo = ttmc.id_agente_modulo
AND ttmc.id_tag IN (%s)',
is_array($group_tags) ? implode(',', $group_tags) : $group_tags);
$tag_join = sprintf('AND ttag_module.id_tag IN (%s)',is_array($group_tags) ? implode(',', $group_tags) : $group_tags);
if($has_secondary){
$agent_condition = sprintf('((tagente.id_grupo = %d OR tasg.id_group = %d) %s)',$group_id,$group_id,$tag_join);
} else {
$agent_condition = sprintf('((tagente.id_grupo = %d %s)',$group_id,$tag_join);
}
$group_conditions[] = $agent_condition;
}
// FIXME: Not properly way to increse performance
if(enterprise_hook('agents_is_using_secondary_groups')){
$agent_condition = sprintf('SELECT tamc.id_agente_modulo
FROM tagente_modulo tamc
%s
INNER JOIN tagente tac
ON tamc.id_agente = tac.id_agente
LEFT JOIN tagent_secondary_group tasg
ON tasg.id_agent = tac.id_agente
WHERE (tac.id_grupo = %d OR tasg.id_group = %d)',
$tag_join, $group_id, $group_id);
}
else{
$agent_condition = sprintf('SELECT tamc.id_agente_modulo
FROM tagente_modulo tamc
%s
INNER JOIN tagente tac
ON tamc.id_agente = tac.id_agente
AND tac.id_grupo = %d',
$tag_join, $group_id);
}
$sql_condition = sprintf('(%sid_agente_modulo IN (%s))', $modules_table, $agent_condition);
$group_conditions[] = $sql_condition;
$i++;
}
if (!empty($group_conditions))
if (!empty($group_conditions)) {
$condition = implode(' OR ', $group_conditions);
}
$condition = !empty($condition) ? "($condition)" : '';
return $condition;
@ -2446,7 +2425,7 @@ function tags_get_user_groups_and_tags ($id_user = false, $access = 'AR', $stric
$return = array();
foreach ($acls as $acl) {
$return[$acl["id_grupo"]] = $acl["tags"];
$return[$acl["id_grupo"]] = $acl["tags"][get_acl_column($access)];
}
return $return;

View File

@ -207,24 +207,27 @@ function groups_combine_acl($acl_group_a, $acl_group_b){
"vconsole_management" => 1,
"tags" => 1,
);
if ($acl_group_a['tags']) users_get_explode_tags($acl_group_a);
if ($acl_group_b['tags']) users_get_explode_tags($acl_group_b);
if (is_array($acl_group_a['tags']) && is_array($acl_group_b['tags'])) {
foreach ($acl_group_a['tags'] as $key => $value) {
$acl_group_b['tags'][$key] = implode(
',',
array_merge(
$value,
$acl_group_b['tags'][$key]
)
);
}
} else if (is_array($acl_group_a['tags'])) {
$acl_group_b['tags'] = $acl_group_a['tags'];
}
foreach ($acl_list as $acl => $aux) {
if($acl == "tags") {
// Mix tags
if (isset($acl_group_a[$acl]) && ($acl_group_a[$acl] != "")) {
if (isset($acl_group_b[$acl]) && ($acl_group_b[$acl] != "")) {
if ($acl_group_b[$acl] != ($acl_group_a[$acl])) {
$acl_group_b[$acl] = $acl_group_a[$acl] . "," . $acl_group_b[$acl];
}
}
else {
$acl_group_b[$acl] = $acl_group_a[$acl];
}
}
continue;
}
if($acl == "tags") continue;
// propagate ACL
$acl_group_b[$acl] = $acl_group_a[$acl] || $acl_group_b[$acl];
}
@ -1069,4 +1072,17 @@ function users_get_strict_mode_groups($id_user, $return_group_all) {
return $return_user_groups;
}
function users_get_explode_tags(&$group) {
if (is_array($group['tags'])) return;
$aux = explode(',', $group['tags']);
$group['tags'] = array();
$group['tags']['agent_view'] = ($group['agent_view']) ? $aux : array();
$group['tags']['agent_edit'] = ($group['agent_edit']) ? $aux : array();
$group['tags']['agent_disable'] = ($group['agent_disable']) ? $aux : array();
$group['tags']['event_view'] = ($group['event_view']) ? $aux : array();
$group['tags']['event_edit'] = ($group['event_edit']) ? $aux : array();
$group['tags']['event_management'] = ($group['event_management']) ? $aux : array();
}
?>

View File

@ -87,16 +87,25 @@ if ($id_module) {
enterprise_hook('open_meta_frame');
// Get Groups and profiles from user
$user_groups = implode (',', array_keys (users_get_groups ()));
$user_groups = implode (',', array_keys (users_get_groups (false,'AR',false)));
////////////////////////////////////
// Begin Build SQL sentences
$sql_from = ' FROM ttipo_modulo,tagente LEFT JOIN tagent_secondary_group tasg ON tagente.id_agente = tasg.id_agent, tagente_modulo, tagente_estado,tmodule ';
$sql_from = " FROM tagente_modulo
INNER JOIN tagente
ON tagente_modulo.id_agente = tagente.id_agente
LEFT JOIN tagent_secondary_group tasg
ON tagente.id_agente = tasg.id_agent
INNER JOIN tagente_estado
ON tagente_estado.id_agente_modulo = tagente_modulo.id_agente_modulo
INNER JOIN tmodule
ON tmodule.id_module = tagente_modulo.id_modulo
INNER JOIN ttipo_modulo
ON tagente_modulo.id_tipo_modulo = ttipo_modulo.id_tipo
LEFT JOIN ttag_module
ON tagente_modulo.id_agente_modulo = ttag_module.id_agente_modulo";
$sql_conditions_base = ' WHERE tagente.id_agente = tagente_modulo.id_agente
AND tagente_estado.id_agente_modulo = tagente_modulo.id_agente_modulo AND tagente_modulo.id_tipo_modulo = ttipo_modulo.id_tipo AND tmodule.id_module = tagente_modulo.id_modulo';
$sql_conditions = ' AND tagente.disabled = 0';
$sql_conditions = ' WHERE tagente.disabled = 0';
if (is_numeric($ag_group)) {
$id_ag_group = 0;
@ -261,8 +270,7 @@ if (!users_is_admin()) {
}
// Two modes of filter. All the filters and only ACLs filter
$sql_conditions_all = $sql_conditions_base . $sql_conditions . $sql_conditions_group . $sql_conditions_tags . $sql_conditions_custom_fields;
$sql_conditions_acl = $sql_conditions_base . $sql_conditions_group . $sql_conditions_tags . $sql_conditions_custom_fields;
$sql_conditions_all = $sql_conditions . $sql_conditions_group . $sql_conditions_tags . $sql_conditions_custom_fields;
// Get count to paginate
if (!defined('METACONSOLE'))
@ -337,8 +345,7 @@ $table->rowspan[0][6] = 2;
$table->data[0][6] = html_print_submit_button (__('Show'), 'uptbutton',
false, 'class="sub search" style="margin-top:0px;"',true);
$modules = array();
$modules = modules_get_modules_name ($sql_from , $sql_conditions_acl, is_metaconsole());
// TODO change for input text
$table->data[1][0] = __('Module name');
$table->data[1][1] = html_print_select (index_array ($modules, 'nombre', 'nombre'), 'ag_modulename',
$ag_modulename, '', __('All'), '', true, false, true, '', false, 'width: 150px;');