mirror of https://github.com/BOINC/boinc.git
168 lines
4.0 KiB
MySQL
168 lines
4.0 KiB
MySQL
|
-- $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 ;
|