diff --git a/pg_stat_monitor--1.0.sql b/pg_stat_monitor--1.0.sql index 98a81c8..4582644 100644 --- a/pg_stat_monitor--1.0.sql +++ b/pg_stat_monitor--1.0.sql @@ -136,7 +136,8 @@ CREATE VIEW pg_stat_monitor AS SELECT (string_to_array(resp_calls, ',')) resp_calls, cpu_user_time, cpu_sys_time -FROM pg_stat_monitor(TRUE), pg_database WHERE dbid = oid; +FROM pg_stat_monitor(TRUE), pg_database WHERE dbid = oid +ORDER BY bucket_start_time; CREATE FUNCTION decode_error_level(elevel int) RETURNS text diff --git a/pg_stat_monitor.c b/pg_stat_monitor.c index b54812b..b394819 100644 --- a/pg_stat_monitor.c +++ b/pg_stat_monitor.c @@ -1104,6 +1104,18 @@ pg_stat_monitor_internal(FunctionCallInfo fcinfo, Counters tmp; double stddev; int64 queryid = entry->key.queryid; + struct tm tm; + time_t bucket_t,current_t; + double diff_t; + + memset(&tm, 0, sizeof(tm)); + strptime(pgss->bucket_start_time[entry->key.bucket_id], "%Y-%m-%d %H:%M:%S", &tm); + bucket_t = mktime(&tm); + + time(¤t_t); + diff_t = difftime(current_t, bucket_t); + if (diff_t > (PGSM_BUCKET_TIME * PGSM_MAX_BUCKETS)) + continue; memset(values, 0, sizeof(values)); memset(nulls, 0, sizeof(nulls)); @@ -1273,7 +1285,8 @@ get_next_wbucket(pgssSharedState *pgss) sec = lt->tm_sec - (lt->tm_sec % PGSM_BUCKET_TIME); if (sec < 0) sec = 0; - snprintf(pgss->bucket_start_time[bucket_id], sizeof(pgss->bucket_start_time[bucket_id]), "%02d-%02d-%04d %02d:%02d:%02d", lt->tm_mday, lt->tm_mon + 1, lt->tm_year + 1900, lt->tm_hour, lt->tm_min, sec); + snprintf(pgss->bucket_start_time[bucket_id], sizeof(pgss->bucket_start_time[bucket_id]), + "%04d-%02d-%02d %02d:%02d:%02d", lt->tm_year + 1900, lt->tm_mon + 1, lt->tm_mday, lt->tm_hour, lt->tm_min, sec); return bucket_id; } return pgss->current_wbucket;