任务或传感器的操作是用于执行一个或多个操作的 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;