boinc/rboinc/monitoring/monitoring_compute.sql

103 lines
2.7 KiB
SQL

-- $Id$
-- Should be run from crontab. It will add a row in the "monitoring"
-- table with the results, for later retrieval from the "dailyreport"
-- script.
-- monitoring interval to and from
set @ut=unix_timestamp();
set @uf=@ut-3600*24; -- could be the second to latest monitor_time
-- date when the current naming conventions started
-- for later wus it is possible to reliably extract scientist names
set @begin=unix_timestamp('2009-06-01');
-- Create rows for today's monitoring
insert into monitoring (monitor_time,scientist)
select @ut monitor_time, mon_submitterof(name) sci from result
where create_time>@begin
group by sci;
-- in progress
create temporary table tmp_inprogress
select count(*) inpro, mon_submitterof(name) sci from result
where server_state=4
and create_time>@begin
group by sci;
update monitoring,tmp_inprogress as tmp
set monitoring.cur_inprogress=tmp.inpro
where monitoring.monitor_time=@ut
and monitoring.scientist=tmp.sci;
drop table tmp_inprogress;
-- unsent
create temporary table tmp_unsent
select count(*) unsent, mon_submitterof(name) sci from result
where server_state=2
and create_time>@begin
group by sci;
update monitoring,tmp_unsent as tmp
set monitoring.cur_unsent=tmp.unsent
where monitoring.monitor_time=@ut
and monitoring.scientist=tmp.sci;
drop table tmp_unsent;
-- day_successful
create temporary table tmp_suc
select count(*) suc, mon_submitterof(name) sci from result
where validate_state=1
and received_time between @uf and @ut
group by sci;
update monitoring,tmp_suc as tmp
set monitoring.day_successful=tmp.suc
where monitoring.monitor_time=@ut
and monitoring.scientist=tmp.sci;
drop table tmp_suc;
-- day_unsuccessful
create temporary table tmp_unsuc
select count(*) unsuc, mon_submitterof(name) sci from result
where validate_state=2
and received_time between @uf and @ut
group by sci;
update monitoring,tmp_unsuc as tmp
set monitoring.day_unsuccessful=tmp.unsuc
where monitoring.monitor_time=@ut
and monitoring.scientist=tmp.sci;
drop table tmp_unsuc;
-- day_credits
create temporary table tmp_cred
select sum(granted_credit) credits, mon_submitterof(name) sci from result
where validate_state=1
and received_time between @uf and @ut
group by sci;
update monitoring,tmp_cred as tmp
set monitoring.day_credits=tmp.credits
where monitoring.monitor_time=@ut
and monitoring.scientist=tmp.sci;
drop table tmp_cred;