From dcd8f1f6984d6109ea9864aae01ffbd45e70df73 Mon Sep 17 00:00:00 2001 From: Neel Patel Date: Thu, 23 May 2024 10:08:49 +0530 Subject: [PATCH] Update system_stats.control to 3.0 (#34) --- system_stats--2.0--3.0.sql | 1 + system_stats--3.0.sql | 219 +++++++++++++++++++++++++++++++++++++ system_stats.control | 2 +- 3 files changed, 221 insertions(+), 1 deletion(-) create mode 100644 system_stats--2.0--3.0.sql create mode 100644 system_stats--3.0.sql diff --git a/system_stats--2.0--3.0.sql b/system_stats--2.0--3.0.sql new file mode 100644 index 0000000..3daeb5b --- /dev/null +++ b/system_stats--2.0--3.0.sql @@ -0,0 +1 @@ +-- No function has changed diff --git a/system_stats--3.0.sql b/system_stats--3.0.sql new file mode 100644 index 0000000..fbb68bb --- /dev/null +++ b/system_stats--3.0.sql @@ -0,0 +1,219 @@ +/* system statistics extension */ + +-- complain if script is sourced in psql, rather than via CREATE EXTENSION +\echo Use "CREATE EXTENSION system_stats" to load this file. \quit + +-- role to be assigned while executing functions of system stats +-- before creating role, check the role exists or not. It may possible +-- that user want to create extension in multiple database of same server +DO $$ +BEGIN + IF NOT EXISTS (SELECT 1 FROM pg_roles WHERE rolname = 'monitor_system_stats') THEN + CREATE ROLE monitor_system_stats WITH + NOLOGIN + NOSUPERUSER + NOCREATEDB + NOCREATEROLE + INHERIT + NOREPLICATION + CONNECTION LIMIT -1; + END IF; +END +$$; + +-- Operating system information function +CREATE FUNCTION pg_sys_os_info( + OUT name text, + OUT version text, + OUT host_name text, + OUT domain_name text, + OUT handle_count int, + OUT process_count int, + OUT thread_count int, + OUT architecture text, + OUT last_bootup_time text, + OUT os_up_since_seconds int +) +RETURNS SETOF record +AS 'MODULE_PATHNAME' +LANGUAGE C; + +REVOKE ALL ON FUNCTION pg_sys_os_info() FROM PUBLIC; +GRANT EXECUTE ON FUNCTION pg_sys_os_info() TO monitor_system_stats; + +-- System CPU information function +CREATE FUNCTION pg_sys_cpu_info( + OUT vendor text, + OUT description text, + OUT model_name text, + OUT processor_type int, + OUT logical_processor int, + OUT physical_processor int, + OUT no_of_cores int, + OUT architecture text, + OUT clock_speed_hz int8, + OUT cpu_type text, + OUT cpu_family text, + OUT byte_order text, + OUT l1dcache_size int, + OUT l1icache_size int, + OUT l2cache_size int, + OUT l3cache_size int +) +RETURNS SETOF record +AS 'MODULE_PATHNAME' +LANGUAGE C; + +REVOKE ALL ON FUNCTION pg_sys_cpu_info() FROM PUBLIC; +GRANT EXECUTE ON FUNCTION pg_sys_cpu_info() TO monitor_system_stats; + +-- Memory information function +CREATE FUNCTION pg_sys_memory_info( + OUT total_memory int8, + OUT used_memory int8, + OUT free_memory int8, + OUT swap_total int8, + OUT swap_used int8, + OUT swap_free int8, + OUT cache_total int8, + OUT kernel_total int8, + OUT kernel_paged int8, + OUT kernel_non_paged int8, + OUT total_page_file int8, + OUT avail_page_file int8 +) +RETURNS SETOF record +AS 'MODULE_PATHNAME' +LANGUAGE C; + +REVOKE ALL ON FUNCTION pg_sys_memory_info() FROM PUBLIC; +GRANT EXECUTE ON FUNCTION pg_sys_memory_info() TO monitor_system_stats; + +-- Load average information function +CREATE FUNCTION pg_sys_load_avg_info( + OUT load_avg_one_minute float4, + OUT load_avg_five_minutes float4, + OUT load_avg_ten_minutes float4, + OUT load_avg_fifteen_minutes float4 +) +RETURNS SETOF record +AS 'MODULE_PATHNAME' +LANGUAGE C; + +REVOKE ALL ON FUNCTION pg_sys_load_avg_info() FROM PUBLIC; +GRANT EXECUTE ON FUNCTION pg_sys_load_avg_info() TO monitor_system_stats; + +-- network information function +CREATE FUNCTION pg_sys_network_info( + OUT interface_name text, + OUT ip_address text, + OUT tx_bytes int8, + OUT tx_packets int8, + OUT tx_errors int8, + OUT tx_dropped int8, + OUT rx_bytes int8, + OUT rx_packets int8, + OUT rx_errors int8, + OUT rx_dropped int8, + OUT link_speed_mbps int +) +RETURNS SETOF record +AS 'MODULE_PATHNAME' +LANGUAGE C; + +REVOKE ALL ON FUNCTION pg_sys_network_info() FROM PUBLIC; +GRANT EXECUTE ON FUNCTION pg_sys_network_info() TO monitor_system_stats; + +-- CPU and memory information by process id or name +CREATE FUNCTION pg_sys_cpu_memory_by_process( + OUT pid int, + OUT name text, + OUT running_since_seconds int8, + OUT cpu_usage float4, + OUT memory_usage float4, + OUT memory_bytes int8 +) +RETURNS SETOF record +AS 'MODULE_PATHNAME' +LANGUAGE C; + +REVOKE ALL ON FUNCTION pg_sys_cpu_memory_by_process() FROM PUBLIC; +GRANT EXECUTE ON FUNCTION pg_sys_cpu_memory_by_process() TO monitor_system_stats; + +-- Disk information function +CREATE FUNCTION pg_sys_disk_info( + OUT mount_point text, + OUT file_system text, + OUT drive_letter text, + OUT drive_type int, + OUT file_system_type text, + OUT total_space int8, + OUT used_space int8, + OUT free_space int8, + OUT total_inodes int8, + OUT used_inodes int8, + OUT free_inodes int8 +) +RETURNS SETOF record +AS 'MODULE_PATHNAME' +LANGUAGE C; + +REVOKE ALL ON FUNCTION pg_sys_disk_info() FROM PUBLIC; +GRANT EXECUTE ON FUNCTION pg_sys_disk_info() TO monitor_system_stats; + +-- process information function +CREATE FUNCTION pg_sys_process_info( + OUT total_processes int, + OUT running_processes int, + OUT sleeping_processes int, + OUT stopped_processes int, + OUT zombie_processes int +) +RETURNS SETOF record +AS 'MODULE_PATHNAME' +LANGUAGE C; + +REVOKE ALL ON FUNCTION pg_sys_process_info() FROM PUBLIC; +GRANT EXECUTE ON FUNCTION pg_sys_process_info() TO monitor_system_stats; + +-- CPU usage information function +-- This function will fetch the time spent in percentage by CPU in each mode +-- as described by arguments +CREATE FUNCTION pg_sys_cpu_usage_info( + OUT usermode_normal_process_percent float4, + OUT usermode_niced_process_percent float4, + OUT kernelmode_process_percent float4, + OUT idle_mode_percent float4, + OUT IO_completion_percent float4, + OUT servicing_irq_percent float4, + OUT servicing_softirq_percent float4, + OUT user_time_percent float4, + OUT processor_time_percent float4, + OUT privileged_time_percent float4, + OUT interrupt_time_percent float4 +) +RETURNS SETOF record +AS 'MODULE_PATHNAME' +LANGUAGE C; + +REVOKE ALL ON FUNCTION pg_sys_cpu_usage_info() FROM PUBLIC; +GRANT EXECUTE ON FUNCTION pg_sys_cpu_usage_info() TO monitor_system_stats; + +-- IO analysis information function +CREATE FUNCTION pg_sys_io_analysis_info( + OUT device_name text, + OUT total_reads int8, + OUT total_writes int8, + OUT read_bytes int8, + OUT write_bytes int8, + OUT read_time_ms int8, + OUT write_time_ms int8 +) +RETURNS SETOF record +AS 'MODULE_PATHNAME' +LANGUAGE C; + +REVOKE ALL ON FUNCTION pg_sys_io_analysis_info() FROM PUBLIC; +GRANT EXECUTE ON FUNCTION pg_sys_io_analysis_info() TO monitor_system_stats; + + diff --git a/system_stats.control b/system_stats.control index 6ea7a2b..97766f2 100644 --- a/system_stats.control +++ b/system_stats.control @@ -1,5 +1,5 @@ # system_stats extension comment = 'EnterpriseDB system statistics for PostgreSQL' -default_version = '2.0' +default_version = '3.0' module_pathname = '$libdir/system_stats' relocatable = true