1/* 2** Zabbix 3** Copyright (C) 2001-2021 Zabbix SIA 4** 5** This program is free software; you can redistribute it and/or modify 6** it under the terms of the GNU General Public License as published by 7** the Free Software Foundation; either version 2 of the License, or 8** (at your option) any later version. 9** 10** This program is distributed in the hope that it will be useful, 11** but WITHOUT ANY WARRANTY; without even the implied warranty of 12** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13** GNU General Public License for more details. 14** 15** You should have received a copy of the GNU General Public License 16** along with this program; if not, write to the Free Software 17** Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 18**/ 19 20package postgres 21 22import ( 23 "context" 24 "errors" 25 26 "github.com/jackc/pgx/v4" 27 "zabbix.com/pkg/zbxerr" 28) 29 30// bgwriterHandler executes select with statistics from pg_stat_bgwriter 31// and returns JSON if all is OK or nil otherwise. 32func bgwriterHandler(ctx context.Context, conn PostgresClient, 33 _ string, _ map[string]string, _ ...string) (interface{}, error) { 34 var bgwriterJSON string 35 36 query := ` 37 SELECT row_to_json (T) 38 FROM ( 39 SELECT 40 checkpoints_timed 41 , checkpoints_req 42 , checkpoint_write_time 43 , checkpoint_sync_time 44 , buffers_checkpoint 45 , buffers_clean 46 , maxwritten_clean 47 , buffers_backend 48 , buffers_backend_fsync 49 , buffers_alloc 50 FROM pg_catalog.pg_stat_bgwriter 51 ) T ;` 52 53 row, err := conn.QueryRow(ctx, query) 54 if err != nil { 55 return nil, zbxerr.ErrorCannotFetchData.Wrap(err) 56 } 57 58 err = row.Scan(&bgwriterJSON) 59 if err != nil { 60 if errors.Is(err, pgx.ErrNoRows) { 61 return nil, zbxerr.ErrorEmptyResult.Wrap(err) 62 } 63 64 return nil, zbxerr.ErrorCannotFetchData.Wrap(err) 65 } 66 67 return bgwriterJSON, nil 68} 69