任务或传感器的操作是用于执行一个或多个操作的 SQL 语句或例程。
如果操作中仅包含单个操作,SQL 语句很有用。 如果操作中包含多个操作,使用 C 或 Java™ 编写的存储过程或用户定义的例程很有用。操作存储在 ph_task 表的 tk_execute 列中。
请在任务或传感器操作中使用以下变量:
DELETE FROM command_history WHERE cmd_exec_time < ( SELECT CURRENT - value::INTERVAL DAY to SECOND FROM ph_threshold WHERE name = 'COMMAND HISTORY RETENTION' )
INSERT INTO mon_vps SELECT $DATA_SEQ_ID, vpid, num_ready, class, usecs_user, usecs_sys FROM sysmaster:sysvplst
/*
**************************************************************
* Create a function that will find all users that have
* been idle for the specified time. Call the SQL admin API to
* terminate those users. Create an alert to track which
* users have been terminated.
**************************************************************
*/
CREATE FUNCTION idle_timeout( task_id INT, task_seq INT)
RETURNING INTEGER
DEFINE time_allowed INTEGER;
DEFINE sys_hostname CHAR(16);
DEFINE sys_username CHAR(257);
DEFINE sys_sid INTEGER;
DEFINE rc INTEGER;
{*** Get the maximum amount of time to be idle ***}
SELECT value::integer
INTO time_allowed
FROM ph_threshold
WHERE name = "IDLE TIMEOUT";
{*** Find all users who are idle longer than the threshold ***}
FOREACH SELECT admin("onmode","z",A.sid), A.username, A.sid, hostname
INTO rc, sys_username, sys_sid, sys_hostname
FROM sysmaster:sysrstcb A , sysmaster:systcblst B,
sysmaster:sysscblst C
WHERE A.tid = B.tid
AND C.sid = A.sid
AND lower(name) in ("sqlexec")
AND CURRENT - DBINFO("utc_to_datetime",last_run_time) > time_allowed UNITS MINUTE
AND lower(A.username) NOT IN( "gbasedbt", "root")
{*** If a user is successfully terminated, log ***}
{*** the information into the alert table. ***}
IF rc > 0 THEN
INSERT INTO ph_alert
(
ID, alert_task_id,alert_task_seq,
alert_type, alert_color,
alert_state,
alert_object_type, alert_object_name,
alert_message,
alert_action
) VALUES (
0,task_id, task_seq,
"INFO", "GREEN",
"ADDRESSED",
"USER","TIMEOUT",
"User "||TRIM(sys_username)||"@"||TRIM(sys_hostname)||
" sid("||sys_sid||")"||
" terminated due to idle timeout.",
NULL
);
END IF
END FOREACH;
RETURN 0;
END FUNCTION;