diff options
| author | artem <artem@97f52cf1-0a1b-0410-bd0e-c28be96e8082> | 2007-08-07 13:02:04 +0000 |
|---|---|---|
| committer | artem <artem@97f52cf1-0a1b-0410-bd0e-c28be96e8082> | 2007-08-07 13:02:04 +0000 |
| commit | dcba4c3b5d26a86254193d400b94cbbb5350a36f (patch) | |
| tree | 4ae922c8fb41486fae6d5f87e46cc1a42724c1c3 /frontends/php/include | |
| parent | 70dc374848df3a1f8e43b5fd43905909e893a873 (diff) | |
| download | zabbix-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.php | 26 |
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 !!! * |
