summaryrefslogtreecommitdiffstats
path: root/frontends/php/include
diff options
context:
space:
mode:
authorartem <artem@97f52cf1-0a1b-0410-bd0e-c28be96e8082>2007-08-07 13:02:04 +0000
committerartem <artem@97f52cf1-0a1b-0410-bd0e-c28be96e8082>2007-08-07 13:02:04 +0000
commitdcba4c3b5d26a86254193d400b94cbbb5350a36f (patch)
tree4ae922c8fb41486fae6d5f87e46cc1a42724c1c3 /frontends/php/include
parent70dc374848df3a1f8e43b5fd43905909e893a873 (diff)
downloadzabbix-dcba4c3b5d26a86254193d400b94cbbb5350a36f.tar.gz
zabbix-dcba4c3b5d26a86254193d400b94cbbb5350a36f.tar.xz
zabbix-dcba4c3b5d26a86254193d400b94cbbb5350a36f.zip
- merged rev. 4515:4518 of branches/1.4.2/ (Artem) [fixed SLA problem on IT Services change, better performance on IT Service update]
git-svn-id: svn://svn.zabbix.com/trunk@4519 97f52cf1-0a1b-0410-bd0e-c28be96e8082
Diffstat (limited to 'frontends/php/include')
-rw-r--r--frontends/php/include/services.inc.php26
1 files changed, 19 insertions, 7 deletions
diff --git a/frontends/php/include/services.inc.php b/frontends/php/include/services.inc.php
index f0c14362..5ed6d872 100644
--- a/frontends/php/include/services.inc.php
+++ b/frontends/php/include/services.inc.php
@@ -193,7 +193,10 @@
if(!$result=DBexecute($sql)) return $result;
$sql="DELETE FROM services WHERE serviceid=$serviceid";
- if(!$result=DBexecute($sql)) return $result;
+ if(!$result=DBexecute($sql)) return $result;
+
+ $sql="DELETE FROM service_alarms WHERE serviceid=$serviceid";
+ if(!$result=DBexecute($sql)) return $result;
update_services_status_all();
@@ -771,10 +774,8 @@ function update_services_rec($serviceid){
else if((SERVICE_ALGORITHM_MAX == $algorithm) || (SERVICE_ALGORITHM_MIN == $algorithm)){
$status = get_service_status($serviceupid,$algorithm);
-
- $now=time();
- add_service_alarm($serviceupid,$status,$now);
+ add_service_alarm($serviceupid,$status,time());
DBexecute('UPDATE services SET status='.$status.' WHERE serviceid='.$serviceupid);
}
else{
@@ -811,9 +812,12 @@ function update_services_rec($serviceid){
function update_services($triggerid, $status){
DBexecute('UPDATE services SET status='.$status.' WHERE triggerid='.$triggerid);
- $result = DBselect('SELECT serviceid FROM services WHERE triggerid='.$triggerid);
+ $result = DBselect('SELECT serviceid,algorithm FROM services WHERE triggerid='.$triggerid);
while(($rows=DBfetch($result))){
+ $status = get_service_status($rows['serviceid'],$rows['algorithm']);
+ add_service_alarm($rows['serviceid'],$status,time());
+
update_services_rec($rows['serviceid']);
}
}
@@ -835,19 +839,27 @@ function update_services_status_all(){
clear_parents_from_trigger();
- $result = DBselect('SELECT s.serviceid,s.algorithm,s.triggerid FROM services as s ');
+ $result = DBselect('SELECT s.serviceid,s.algorithm,s.triggerid '.
+ ' FROM services as s '.
+ ' WHERE s.serviceid NOT IN (select distinct sl.serviceupid from services_links as sl)');
while($rows=DBfetch($result)){
$status = get_service_status($rows['serviceid'],$rows['algorithm'],$rows['triggerid']);
DBexecute('UPDATE services SET status = '.$status.' WHERE serviceid='.$rows['serviceid']);
+
+ add_service_alarm($rows['serviceid'],$status,time());
}
- $result = DBselect('SELECT sl.servicedownid as serviceid FROM services_links as sl GROUP BY sl.serviceupid');
+ $result = DBselect('SELECT MAX(sl.servicedownid) as serviceid, sl.serviceupid '.
+ ' FROM services_links AS sl '.
+ ' WHERE sl.servicedownid NOT IN (select distinct sl.serviceupid from services_links as sl) '.
+ ' GROUP BY sl.serviceupid');
while($rows=DBfetch($result)){
update_services_rec($rows['serviceid']);
}
}
+
/******************************************************************************
* *
* Comments: !!! Don't forget sync code with C !!! *