boinc/rboinc/monitoring/monitoring_status.sql

168 lines
4.0 KiB
SQL

-- $Id$
-- mon_status stored procedure.
-- Monitoring for "gridstatus" operation. Returns currently running
-- WUs for a given user. Can be run on demand from the command line,
-- no cron is involved.
-- Input arguments: scientist name
-- Output: a resultset containing the current job statuses
DELIMITER $$
DROP PROCEDURE IF EXISTS mon_status$$
CREATE PROCEDURE mon_status (in scientistname varchar(100))
BEGIN
--
-- monitoring interval to and from
set @ut=unix_timestamp();
set @tfrom=@ut-30*3600*24; -- 1 week
-- 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');
set @begin=@ut-30*3600*24;
set @who=scientistname;
drop table if exists tmp_status;
create temporary table tmp_status (
id int(11) not null auto_increment,
grp_sent timestamp null default null,
grp_name varchar(100),
cur_unsent int(11) ,
cur_inprogress int(11) ,
per_successful int(11) ,
per_unsuccessful int(11) ,
per_credits int(11) ,
range_priority varchar(11) ,
primary key (id),
unique key grp (grp_name)
) ENGINE=InnoDB;
-- Create rows for today's monitoring
insert into tmp_status (grp_name,grp_sent)
select mon_groupof(name) agrp, from_unixtime(min(create_time)) from result
where create_time>@begin
and mon_submitterof(name) like @who
group by agrp;
-- in progress
create temporary table tmp_inprogress
select count(*) inpro, mon_groupof(name) grp from result
where server_state=4
and create_time>@begin
and mon_submitterof(name) like @who
group by grp;
update tmp_status,tmp_inprogress as tmp
set tmp_status.cur_inprogress=tmp.inpro
where tmp_status.grp_name=grp;
drop table tmp_inprogress;
-- unsent
create temporary table tmp_uns
select count(*) uns, mon_groupof(name) grp from result
where server_state=2
and create_time>@begin
and mon_submitterof(name) like @who
group by grp;
update tmp_status,tmp_uns as tmp
set tmp_status.cur_unsent=tmp.uns
where tmp_status.grp_name=grp;
drop table tmp_uns;
-- day success
create temporary table tmp_suc
select count(*) suc, mon_groupof(name) grp from result
where validate_state=1
and received_time>@tfrom
and mon_submitterof(name) like @who
group by grp;
update tmp_status,tmp_suc as tmp
set tmp_status.per_successful=tmp.suc
where tmp_status.grp_name=grp;
drop table tmp_suc;
-- day success
create temporary table tmp_uns
select count(*) uns, mon_groupof(name) grp from result
where validate_state=2
and received_time>@tfrom
and mon_submitterof(name) like @who
group by grp;
update tmp_status,tmp_uns as tmp
set tmp_status.per_unsuccessful=tmp.uns
where tmp_status.grp_name=grp;
drop table tmp_uns;
-- day credits
create temporary table tmp_cr
select sum(granted_credit) credits, mon_groupof(name) grp from result
where validate_state=1
and received_time>@tfrom
and mon_submitterof(name) like @who
group by grp;
update tmp_status,tmp_cr as tmp
set tmp_status.per_credits=tmp.credits
where tmp_status.grp_name=grp;
drop table tmp_cr;
-- avg priority
create temporary table tmp_pri
select concat(min(priority),'-',max(priority)) pr, mon_groupof(name) grp from workunit
where assimilate_state=0
and mon_submitterof(name) like @who
group by grp;
update tmp_status,tmp_pri as tmp
set tmp_status.range_priority=tmp.pr
where tmp_status.grp_name=grp;
drop table tmp_pri;
select * from tmp_status order by grp_sent;
-- select grp_sent, grp_name, cur_unsent unsent,
-- cur_inprogress in_prog, per_successful success,
-- per_unsuccessful unsuccess, per_credits credits,
-- range_priority priority
-- from tmp_status order by grp_sent;
END$$
DELIMITER ;