mirror of
https://github.com/pandorafms/pandorafms.git
synced 2025-07-31 01:35:36 +02:00
2013-03-19 Ramon Novoa <rnovoa@artica.es>
* lib/PandoraFMS/Core.pm, bin/pandora_server, util/pandora_db.pl: Added support for on-demand module status calculation. git-svn-id: https://svn.code.sf.net/p/pandora/code/trunk@7865 c3f86ba8-e40f-0410-aaad-9ba5e7f4b01f
This commit is contained in:
parent
19cbf66a03
commit
a0f9483cfd
@ -1,3 +1,10 @@
|
|||||||
|
2013-03-19 Ramon Novoa <rnovoa@artica.es>
|
||||||
|
|
||||||
|
* lib/PandoraFMS/Core.pm,
|
||||||
|
bin/pandora_server,
|
||||||
|
util/pandora_db.pl: Added support for on-demand module status
|
||||||
|
calculation.
|
||||||
|
|
||||||
2013-03-15 Sancho Lerena <slerena@artica.es>
|
2013-03-15 Sancho Lerena <slerena@artica.es>
|
||||||
|
|
||||||
* util/pandora_database_check.pl: added to trunk repo. Tool to
|
* util/pandora_database_check.pl: added to trunk repo. Tool to
|
||||||
|
@ -81,20 +81,6 @@ sub pandora_startup () {
|
|||||||
pandora_get_sharedconfig (\%Config, $DBH);
|
pandora_get_sharedconfig (\%Config, $DBH);
|
||||||
|
|
||||||
pandora_audit (\%Config, 'Pandora FMS Server Daemon starting', 'SYSTEM', 'System', $DBH);
|
pandora_audit (\%Config, 'Pandora FMS Server Daemon starting', 'SYSTEM', 'System', $DBH);
|
||||||
|
|
||||||
# Update module status count
|
|
||||||
print_message (\%Config, " [*] Updating module status count.\n", 1);
|
|
||||||
my @agents = get_db_rows ($DBH, 'SELECT id_agente FROM tagente');
|
|
||||||
foreach my $agent (@agents) {
|
|
||||||
my $agent_id = $agent->{'id_agente'};
|
|
||||||
db_do ($DBH, 'UPDATE tagente SET normal_count=(SELECT COUNT(*) FROM tagente_estado WHERE id_agente=' . $agent_id . ' AND estado=0 AND id_agente_modulo IN (SELECT id_agente_modulo FROM tagente_modulo WHERE disabled=0)),
|
|
||||||
critical_count=(SELECT COUNT(*) FROM tagente_estado WHERE id_agente=' . $agent_id . ' AND estado=1 AND id_agente_modulo IN (SELECT id_agente_modulo FROM tagente_modulo WHERE disabled=0)),
|
|
||||||
warning_count=(SELECT COUNT(*) FROM tagente_estado WHERE id_agente=' . $agent_id . ' AND estado=2 AND id_agente_modulo IN (SELECT id_agente_modulo FROM tagente_modulo WHERE disabled=0)),
|
|
||||||
unknown_count=(SELECT COUNT(*) FROM tagente_estado WHERE id_agente=' . $agent_id . ' AND estado=3 AND id_agente_modulo IN (SELECT id_agente_modulo FROM tagente_modulo WHERE disabled=0)),
|
|
||||||
notinit_count=(SELECT COUNT(*) FROM tagente_estado WHERE id_agente=' . $agent_id . ' AND estado=4 AND id_agente_modulo IN (SELECT id_agente_modulo FROM tagente_modulo WHERE disabled=0)),
|
|
||||||
total_count=(SELECT COUNT(*) FROM tagente_estado WHERE id_agente=' . $agent_id . ' AND id_agente_modulo IN (SELECT id_agente_modulo FROM tagente_modulo WHERE disabled=0))
|
|
||||||
WHERE id_agente = ' . $agent_id);
|
|
||||||
}
|
|
||||||
|
|
||||||
# Load servers
|
# Load servers
|
||||||
pandora_reset_server (\%Config, $DBH);
|
pandora_reset_server (\%Config, $DBH);
|
||||||
@ -323,7 +309,22 @@ while (1) {
|
|||||||
# ---------------------------------------------
|
# ---------------------------------------------
|
||||||
# Tasks executed only each Server Threshold x 30 secs, for low-priority tasks
|
# Tasks executed only each Server Threshold x 30 secs, for low-priority tasks
|
||||||
if (($counter % 30) == 0) {
|
if (($counter % 30) == 0) {
|
||||||
|
|
||||||
|
# Update module status and fired alert counts
|
||||||
|
my @agents = get_db_rows ($DBH, 'SELECT id_agente, nombre, update_module_count, update_alert_count FROM tagente WHERE disabled = 0 AND (update_module_count=1 OR update_alert_count=1)');
|
||||||
|
foreach my $agent (@agents) {
|
||||||
|
print_message (\%Config, " [*] Updating module status and alert fired counts for agent" . $agent->{'nombre'}, 1);
|
||||||
|
|
||||||
|
if ($agent->{'update_module_count'} == 1) {
|
||||||
|
pandora_update_agent_module_count ($DBH, $agent->{'id_agente'});
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($agent->{'update_alert_count'} == 1) {
|
||||||
|
pandora_update_agent_alert_count ($DBH, $agent->{'id_agente'});
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
# Keepalive module control.(very DB intensive, not run frecuently
|
# Keepalive module control.(very DB intensive, not run frecuently
|
||||||
pandora_module_keep_alive_nd (\%Config, $DBH);
|
pandora_module_keep_alive_nd (\%Config, $DBH);
|
||||||
|
|
||||||
|
@ -179,6 +179,8 @@ our @EXPORT = qw(
|
|||||||
pandora_set_event_storm_protection
|
pandora_set_event_storm_protection
|
||||||
pandora_update_agent
|
pandora_update_agent
|
||||||
pandora_update_agent_address
|
pandora_update_agent_address
|
||||||
|
pandora_update_agent_alert_count
|
||||||
|
pandora_update_agent_module_count
|
||||||
pandora_update_config_token
|
pandora_update_config_token
|
||||||
pandora_update_gis_data
|
pandora_update_gis_data
|
||||||
pandora_update_module_on_error
|
pandora_update_module_on_error
|
||||||
@ -367,7 +369,7 @@ sub pandora_evaluate_alert ($$$$$$$;$$$) {
|
|||||||
|
|
||||||
# Update fired alert when cesead or recover
|
# Update fired alert when cesead or recover
|
||||||
if(defined ($agent) && ($status == 3 || $status == 4)) {
|
if(defined ($agent) && ($status == 3 || $status == 4)) {
|
||||||
db_do ($dbh, 'UPDATE tagente SET fired_count=fired_count-1 WHERE id_agente=?', $agent->{'id_agente'});
|
pandora_mark_agent_for_alert_update ($dbh, $agent->{'id_agente'});
|
||||||
}
|
}
|
||||||
|
|
||||||
# Check for valid data
|
# Check for valid data
|
||||||
@ -447,7 +449,7 @@ sub pandora_evaluate_alert ($$$$$$$;$$$) {
|
|||||||
# Update fired alert first time
|
# Update fired alert first time
|
||||||
# (if is fist time after ceased it was decreased previously and will be compensated)
|
# (if is fist time after ceased it was decreased previously and will be compensated)
|
||||||
if(defined ($agent)) {
|
if(defined ($agent)) {
|
||||||
db_do ($dbh, 'UPDATE tagente SET fired_count=fired_count+1 WHERE id_agente=?', $agent->{'id_agente'});
|
pandora_mark_agent_for_alert_update ($dbh, $agent->{'id_agente'});
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0; #Launch the alert
|
return 0; #Launch the alert
|
||||||
@ -1035,9 +1037,9 @@ sub pandora_process_module ($$$$$$$$$;$) {
|
|||||||
$status = $new_status;
|
$status = $new_status;
|
||||||
|
|
||||||
# Update module status count
|
# Update module status count
|
||||||
update_module_status_count ($dbh, $agent, $status, $last_status);
|
pandora_mark_agent_for_module_update ($dbh, $agent->{'id_agente'});
|
||||||
}
|
}
|
||||||
# Set unknown modules to normal even if min_ff_event is set
|
# Set not-init modules to normal even if min_ff_event is not matched the first time they receive data
|
||||||
elsif ($status == 4) {
|
elsif ($status == 4) {
|
||||||
$new_status = 0;
|
$new_status = 0;
|
||||||
|
|
||||||
@ -1045,7 +1047,7 @@ sub pandora_process_module ($$$$$$$$$;$) {
|
|||||||
$status = $new_status;
|
$status = $new_status;
|
||||||
|
|
||||||
# Update module status count
|
# Update module status count
|
||||||
update_module_status_count ($dbh, $agent, $status, $last_status);
|
pandora_mark_agent_for_module_update ($dbh, $agent->{'id_agente'});
|
||||||
}
|
}
|
||||||
|
|
||||||
$last_status = $new_status;
|
$last_status = $new_status;
|
||||||
@ -2220,22 +2222,7 @@ sub pandora_delete_module ($$;$) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
# Update module status count
|
# Update module status count
|
||||||
if ($module->{'utimestamp'} == 0) {
|
pandora_mark_agent_for_module_update ($dbh, $module->{'id_agente'});
|
||||||
db_do ($dbh, 'UPDATE tagente SET notinit_count=notinit_count-1 WHERE id_agente=' . $module->{'id_agente'});
|
|
||||||
}
|
|
||||||
elsif ($module->{'estado'} == 0) {
|
|
||||||
db_do ($dbh, 'UPDATE tagente SET normal_count=normal_count-1 WHERE id_agente=' . $module->{'id_agente'});
|
|
||||||
}
|
|
||||||
elsif ($module->{'estado'} == 1) {
|
|
||||||
db_do ($dbh, 'UPDATE tagente SET critical_count=critical_count-1 WHERE id_agente=' . $module->{'id_agente'});
|
|
||||||
}
|
|
||||||
elsif ($module->{'estado'} == 2) {
|
|
||||||
db_do ($dbh, 'UPDATE tagente SET warning_count=warning_count-1 WHERE id_agente=' . $module->{'id_agente'});
|
|
||||||
}
|
|
||||||
elsif ($module->{'estado'} == 3) {
|
|
||||||
db_do ($dbh, 'UPDATE tagente SET unknown_count=unknown_count-1 WHERE id_agente=' . $module->{'id_agente'});
|
|
||||||
}
|
|
||||||
db_do ($dbh, 'UPDATE tagente SET total_count=total_count-1 WHERE id_agente=' . $module->{'id_agente'});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
##########################################################################
|
##########################################################################
|
||||||
@ -2300,14 +2287,7 @@ sub pandora_create_module_from_hash ($$$) {
|
|||||||
db_do ($dbh, 'INSERT INTO tagente_estado (id_agente_modulo, id_agente, estado, last_status, last_known_status, last_try) VALUES (?, ?, ?, ?, ?, \'1970-01-01 00:00:00\')', $module_id, $parameters->{'id_agente'}, $status, $status, $status);
|
db_do ($dbh, 'INSERT INTO tagente_estado (id_agente_modulo, id_agente, estado, last_status, last_known_status, last_try) VALUES (?, ?, ?, ?, ?, \'1970-01-01 00:00:00\')', $module_id, $parameters->{'id_agente'}, $status, $status, $status);
|
||||||
|
|
||||||
# Update the module status count. When the module is created disabled dont do it
|
# Update the module status count. When the module is created disabled dont do it
|
||||||
if(!defined($parameters->{'disabled'}) || $parameters->{'disabled'} == 0) {
|
pandora_mark_agent_for_module_update ($dbh, $parameters->{'id_agente'});
|
||||||
if ($status == 4) {
|
|
||||||
db_do ($dbh, 'UPDATE tagente SET total_count=total_count+1, notinit_count=notinit_count+1 WHERE id_agente=?', $parameters->{'id_agente'});
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
db_do ($dbh, 'UPDATE tagente SET total_count=total_count+1, normal_count=normal_count+1 WHERE id_agente=?', $parameters->{'id_agente'});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return $module_id;
|
return $module_id;
|
||||||
}
|
}
|
||||||
@ -3801,7 +3781,7 @@ sub pandora_module_unknown ($$) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
# Update module status count
|
# Update module status count
|
||||||
update_module_status_count ($dbh, $agent, 0, $module->{'estado'});
|
pandora_mark_agent_for_module_update ($dbh, $agent, 0, $module->{'estado'});
|
||||||
|
|
||||||
# Generate alerts
|
# Generate alerts
|
||||||
if (pandora_inhibit_alerts ($pa_config, $agent, $dbh, 0) == 0) {
|
if (pandora_inhibit_alerts ($pa_config, $agent, $dbh, 0) == 0) {
|
||||||
@ -3831,7 +3811,7 @@ sub pandora_module_unknown ($$) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
# Update module status count
|
# Update module status count
|
||||||
update_module_status_count ($dbh, $agent, 3, $module->{'estado'});
|
pandora_mark_agent_for_module_update ($dbh, $agent, 3, $module->{'estado'});
|
||||||
|
|
||||||
# Generate alerts
|
# Generate alerts
|
||||||
if (pandora_inhibit_alerts ($pa_config, $agent, $dbh, 0) == 0) {
|
if (pandora_inhibit_alerts ($pa_config, $agent, $dbh, 0) == 0) {
|
||||||
@ -3905,41 +3885,23 @@ sub pandora_get_module_url_tags ($$$) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
##########################################################################
|
##########################################################################
|
||||||
# Update the module status count of an agent.
|
# Mark an agent for module status count update.
|
||||||
##########################################################################
|
##########################################################################
|
||||||
sub update_module_status_count ($$$$) {
|
sub pandora_mark_agent_for_module_update ($$) {
|
||||||
my ($dbh, $agent, $new_status, $last_status) = @_;
|
my ($dbh, $agent_id) = @_;
|
||||||
|
|
||||||
# Substract the previous status
|
|
||||||
my $query_sub = '';
|
|
||||||
if ($last_status == 0) {
|
|
||||||
$query_sub .= 'normal_count=normal_count-1';
|
|
||||||
} elsif ($last_status == 1) {
|
|
||||||
$query_sub .= 'critical_count=critical_count-1';
|
|
||||||
} elsif ($last_status == 2) {
|
|
||||||
$query_sub .= 'warning_count=warning_count-1';
|
|
||||||
} elsif ($last_status == 3) {
|
|
||||||
$query_sub .= 'unknown_count=unknown_count-1';
|
|
||||||
} elsif ($last_status == 4) {
|
|
||||||
$query_sub .= 'notinit_count=notinit_count-1';
|
|
||||||
}
|
|
||||||
|
|
||||||
# Add the new status
|
|
||||||
my $query_add = '';
|
|
||||||
if ($new_status == 0) {
|
|
||||||
$query_add .= 'normal_count=normal_count+1';
|
|
||||||
} elsif ($new_status == 1) {
|
|
||||||
$query_add .= 'critical_count=critical_count+1';
|
|
||||||
} elsif ($new_status == 2) {
|
|
||||||
$query_add .= 'warning_count=warning_count+1';
|
|
||||||
} elsif ($new_status == 3) {
|
|
||||||
$query_add .= 'unknown_count=unknown_count+1';
|
|
||||||
} elsif ($new_status == 4) {
|
|
||||||
$query_add .= 'notinit_count=notinit_count+1';
|
|
||||||
}
|
|
||||||
|
|
||||||
# Update the status count
|
# Update the status count
|
||||||
db_do ($dbh, "UPDATE tagente SET $query_sub, $query_add WHERE id_agente=?", $agent->{'id_agente'});
|
db_do ($dbh, "UPDATE tagente SET update_module_count=1 WHERE id_agente=?", $agent_id);
|
||||||
|
}
|
||||||
|
|
||||||
|
##########################################################################
|
||||||
|
# Mark an agent for fired alert count update.
|
||||||
|
##########################################################################
|
||||||
|
sub pandora_mark_agent_for_alert_update ($$) {
|
||||||
|
my ($dbh, $agent_id) = @_;
|
||||||
|
|
||||||
|
# Update the status count
|
||||||
|
db_do ($dbh, "UPDATE tagente SET update_alert_count=1 WHERE id_agente=?", $agent_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
##########################################################################
|
##########################################################################
|
||||||
@ -3949,6 +3911,49 @@ sub pandora_set_event_storm_protection ($) {
|
|||||||
$EventStormProtection = shift;
|
$EventStormProtection = shift;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
##########################################################################
|
||||||
|
# Update the module status count of an agent.
|
||||||
|
##########################################################################
|
||||||
|
sub pandora_update_agent_count ($$) {
|
||||||
|
my ($dbh, $agent_id) = @_;
|
||||||
|
|
||||||
|
db_do ($dbh, 'UPDATE tagente SET update_module_count=0,
|
||||||
|
normal_count=(SELECT COUNT(*) FROM tagente_modulo, tagente_estado WHERE tagente_modulo.id_agente_modulo=tagente_estado.id_agente_modulo AND tagente_modulo.id_agente=' . $agent_id . ' AND estado=0),
|
||||||
|
critical_count=(SELECT COUNT(*) FROM tagente_modulo, tagente_estado WHERE tagente_modulo.id_agente_modulo=tagente_estado.id_agente_modulo AND tagente_modulo.id_agente=' . $agent_id . ' AND estado=1),
|
||||||
|
warning_count=(SELECT COUNT(*) FROM tagente_modulo, tagente_estado WHERE tagente_modulo.id_agente_modulo=tagente_estado.id_agente_modulo AND tagente_modulo.id_agente=' . $agent_id . ' AND estado=2),
|
||||||
|
unknown_count=(SELECT COUNT(*) FROM tagente_modulo, tagente_estado WHERE tagente_modulo.id_agente_modulo=tagente_estado.id_agente_modulo AND tagente_modulo.id_agente=' . $agent_id . ' AND estado=3),
|
||||||
|
notinit_count=(SELECT COUNT(*) FROM tagente_modulo, tagente_estado WHERE tagente_modulo.id_agente_modulo=tagente_estado.id_agente_modulo AND tagente_modulo.id_agente=' . $agent_id . ' AND estado=4),
|
||||||
|
total_count=(SELECT COUNT(*) FROM tagente_modulo, tagente_estado WHERE tagente_modulo.id_agente_modulo=tagente_estado.id_agente_modulo AND tagente_modulo.id_agente=' . $agent_id .
|
||||||
|
') WHERE id_agente = ' . $agent_id);
|
||||||
|
}
|
||||||
|
|
||||||
|
##########################################################################
|
||||||
|
# Update the module status count of an agent.
|
||||||
|
##########################################################################
|
||||||
|
sub pandora_update_agent_module_count ($$) {
|
||||||
|
my ($dbh, $agent_id) = @_;
|
||||||
|
|
||||||
|
db_do ($dbh, 'UPDATE tagente SET update_module_count=0,
|
||||||
|
normal_count=(SELECT COUNT(*) FROM tagente_modulo, tagente_estado WHERE tagente_modulo.id_agente_modulo=tagente_estado.id_agente_modulo AND tagente_modulo.id_agente=' . $agent_id . ' AND estado=0),
|
||||||
|
critical_count=(SELECT COUNT(*) FROM tagente_modulo, tagente_estado WHERE tagente_modulo.id_agente_modulo=tagente_estado.id_agente_modulo AND tagente_modulo.id_agente=' . $agent_id . ' AND estado=1),
|
||||||
|
warning_count=(SELECT COUNT(*) FROM tagente_modulo, tagente_estado WHERE tagente_modulo.id_agente_modulo=tagente_estado.id_agente_modulo AND tagente_modulo.id_agente=' . $agent_id . ' AND estado=2),
|
||||||
|
unknown_count=(SELECT COUNT(*) FROM tagente_modulo, tagente_estado WHERE tagente_modulo.id_agente_modulo=tagente_estado.id_agente_modulo AND tagente_modulo.id_agente=' . $agent_id . ' AND estado=3),
|
||||||
|
notinit_count=(SELECT COUNT(*) FROM tagente_modulo, tagente_estado WHERE tagente_modulo.id_agente_modulo=tagente_estado.id_agente_modulo AND tagente_modulo.id_agente=' . $agent_id . ' AND estado=4),
|
||||||
|
total_count=(SELECT COUNT(*) FROM tagente_modulo, tagente_estado WHERE tagente_modulo.id_agente_modulo=tagente_estado.id_agente_modulo AND tagente_modulo.id_agente=' . $agent_id .
|
||||||
|
') WHERE id_agente = ' . $agent_id);
|
||||||
|
}
|
||||||
|
|
||||||
|
##########################################################################
|
||||||
|
# Update the fired alert count of an agent.
|
||||||
|
##########################################################################
|
||||||
|
sub pandora_update_agent_alert_count ($$) {
|
||||||
|
my ($dbh, $agent_id) = @_;
|
||||||
|
|
||||||
|
db_do ($dbh, 'UPDATE tagente SET update_alert_count=0,
|
||||||
|
fired_count=(SELECT COUNT(*) FROM tagente_modulo, talert_template_modules WHERE tagente_modulo.id_agente_modulo=talert_template_modules.id_agent_module AND talert_template_modules.disabled=0 AND times_fired>0 AND id_agente=' . $agent_id .
|
||||||
|
') WHERE id_agente = ' . $agent_id);
|
||||||
|
}
|
||||||
|
|
||||||
# End of function declaration
|
# End of function declaration
|
||||||
# End of defined Code
|
# End of defined Code
|
||||||
|
|
||||||
|
@ -688,21 +688,6 @@ sub pandora_checkdb_consistency {
|
|||||||
db_do ($dbh, 'DELETE FROM tagente_estado WHERE id_agente_modulo = ?', $id_agente_modulo);
|
db_do ($dbh, 'DELETE FROM tagente_estado WHERE id_agente_modulo = ?', $id_agente_modulo);
|
||||||
print "[CHECKDB] Deleting non-existing module $id_agente_modulo in state table \n";
|
print "[CHECKDB] Deleting non-existing module $id_agente_modulo in state table \n";
|
||||||
}
|
}
|
||||||
|
|
||||||
print "[CHECKDB] Checking module status count... \n";
|
|
||||||
#my @agents = get_db_rows ($dbh, 'SELECT id_agente FROM tagente WHERE normal_count+warning_count+critical_count+unknown_count+notinit_count<>total_count');
|
|
||||||
# Try to update module status count for all agents. Further performance tests need to be done.
|
|
||||||
my @agents = get_db_rows ($dbh, 'SELECT id_agente FROM tagente');
|
|
||||||
foreach my $agent (@agents) {
|
|
||||||
my $id_agente = $agent->{'id_agente'};
|
|
||||||
db_do ($dbh, 'UPDATE tagente SET normal_count=(SELECT COUNT(*) FROM tagente_estado WHERE id_agente=' . $id_agente . ' AND estado=0 AND id_agente_modulo IN (SELECT id_agente_modulo FROM tagente_modulo WHERE disabled=0)),
|
|
||||||
critical_count=(SELECT COUNT(*) FROM tagente_estado WHERE id_agente=' . $id_agente . ' AND estado=1 AND id_agente_modulo IN (SELECT id_agente_modulo FROM tagente_modulo WHERE disabled=0)),
|
|
||||||
warning_count=(SELECT COUNT(*) FROM tagente_estado WHERE id_agente=' . $id_agente . ' AND estado=2 AND id_agente_modulo IN (SELECT id_agente_modulo FROM tagente_modulo WHERE disabled=0)),
|
|
||||||
unknown_count=(SELECT COUNT(*) FROM tagente_estado WHERE id_agente=' . $id_agente . ' AND estado=3 AND id_agente_modulo IN (SELECT id_agente_modulo FROM tagente_modulo WHERE disabled=0)),
|
|
||||||
notinit_count=(SELECT COUNT(*) FROM tagente_estado WHERE id_agente=' . $id_agente . ' AND estado=4 AND id_agente_modulo IN (SELECT id_agente_modulo FROM tagente_modulo WHERE disabled=0)),
|
|
||||||
total_count=(SELECT COUNT(*) FROM tagente_estado WHERE id_agente=' . $id_agente . ' AND id_agente_modulo IN (SELECT id_agente_modulo FROM tagente_modulo WHERE disabled=0))
|
|
||||||
WHERE id_agente = ' . $id_agente);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
##############################################################################
|
##############################################################################
|
||||||
|
Loading…
x
Reference in New Issue
Block a user