@@ -20,15 +20,7 @@ import (
2020 "github.com/jackc/pgx/v5"
2121)
2222
23- func DBExecRead (ctx context.Context , conn db.PgxIface , sql string , args ... any ) (metrics.Measurements , error ) {
24- rows , err := conn .Query (ctx , sql , args ... )
25- if err == nil {
26- return pgx .CollectRows (rows , pgx .RowToMap )
27- }
28- return nil , err
29- }
30-
31- func DBExecReadByDbUniqueName (ctx context.Context , dbUnique string , sql string , args ... any ) (metrics.Measurements , error ) {
23+ func QueryMeasurements (ctx context.Context , dbUnique string , sql string , args ... any ) (metrics.Measurements , error ) {
3224 var conn db.PgxIface
3325 var md * sources.SourceConn
3426 var err error
@@ -50,9 +42,13 @@ func DBExecReadByDbUniqueName(ctx context.Context, dbUnique string, sql string,
5042 if err != nil {
5143 return nil , err
5244 }
53- return DBExecRead (ctx , tx , sql , args ... )
45+ conn = tx
46+ }
47+ rows , err := conn .Query (ctx , sql , args ... )
48+ if err == nil {
49+ return pgx .CollectRows (rows , pgx .RowToMap )
5450 }
55- return DBExecRead ( ctx , conn , sql , args ... )
51+ return nil , err
5652}
5753
5854const (
@@ -80,7 +76,7 @@ func DBGetSizeMB(ctx context.Context, dbUnique string) (int64, error) {
8076 if err != nil || (ver .ExecEnv != execEnvAzureSingle ) || (ver .ExecEnv == execEnvAzureSingle && ver .ApproxDBSizeB < 1e12 ) {
8177 log .GetLogger (ctx ).Debugf ("[%s] determining DB size ..." , dbUnique )
8278
83- data , err := DBExecReadByDbUniqueName (ctx , dbUnique , sqlDbSize ) // can take some time on ancient FS, use 300s stmt timeout
79+ data , err := QueryMeasurements (ctx , dbUnique , sqlDbSize ) // can take some time on ancient FS, use 300s stmt timeout
8480 if err != nil {
8581 log .GetLogger (ctx ).Errorf ("[%s] failed to determine DB size...cannot apply --min-db-size-mb flag. err: %v ..." , dbUnique , err )
8682 return 0 , err
217213 }
218214
219215 l .Debugf ("[%s] determining installed extensions info..." , md .Name )
220- data , err := DBExecReadByDbUniqueName (ctx , md .Name , sqlExtensions )
216+ data , err := QueryMeasurements (ctx , md .Name , sqlExtensions )
221217 if err != nil {
222218 l .Errorf ("[%s] failed to determine installed extensions info: %v" , md .Name , err )
223219 } else {
@@ -259,7 +255,7 @@ func DetectSprocChanges(ctx context.Context, dbUnique string, vme MonitoredDatab
259255 return changeCounts
260256 }
261257
262- data , err := DBExecReadByDbUniqueName (ctx , dbUnique , mvp .GetSQL (int (vme .Version )))
258+ data , err := QueryMeasurements (ctx , dbUnique , mvp .GetSQL (int (vme .Version )))
263259 if err != nil {
264260 log .GetLogger (ctx ).Error ("could not read sproc_hashes from monitored host: " , dbUnique , ", err:" , err )
265261 return changeCounts
@@ -343,7 +339,7 @@ func DetectTableChanges(ctx context.Context, dbUnique string, vme MonitoredDatab
343339 return changeCounts
344340 }
345341
346- data , err := DBExecReadByDbUniqueName (ctx , dbUnique , mvp .GetSQL (int (vme .Version )))
342+ data , err := QueryMeasurements (ctx , dbUnique , mvp .GetSQL (int (vme .Version )))
347343 if err != nil {
348344 log .GetLogger (ctx ).Error ("could not read table_hashes from monitored host:" , dbUnique , ", err:" , err )
349345 return changeCounts
@@ -427,7 +423,7 @@ func DetectIndexChanges(ctx context.Context, dbUnique string, vme MonitoredDatab
427423 return changeCounts
428424 }
429425
430- data , err := DBExecReadByDbUniqueName (ctx , dbUnique , mvp .GetSQL (int (vme .Version )))
426+ data , err := QueryMeasurements (ctx , dbUnique , mvp .GetSQL (int (vme .Version )))
431427 if err != nil {
432428 log .GetLogger (ctx ).Error ("could not read index_hashes from monitored host:" , dbUnique , ", err:" , err )
433429 return changeCounts
@@ -510,7 +506,7 @@ func DetectPrivilegeChanges(ctx context.Context, dbUnique string, vme MonitoredD
510506 }
511507
512508 // returns rows of: object_type, tag_role, tag_object, privilege_type
513- data , err := DBExecReadByDbUniqueName (ctx , dbUnique , mvp .GetSQL (int (vme .Version )))
509+ data , err := QueryMeasurements (ctx , dbUnique , mvp .GetSQL (int (vme .Version )))
514510 if err != nil {
515511 log .GetLogger (ctx ).Errorf ("[%s][%s] failed to fetch object privileges info: %v" , dbUnique , specialMetricChangeEvents , err )
516512 return changeCounts
@@ -591,7 +587,7 @@ func DetectConfigurationChanges(ctx context.Context, dbUnique string, vme Monito
591587 return changeCounts
592588 }
593589
594- data , err := DBExecReadByDbUniqueName (ctx , dbUnique , mvp .GetSQL (int (vme .Version )))
590+ data , err := QueryMeasurements (ctx , dbUnique , mvp .GetSQL (int (vme .Version )))
595591 if err != nil {
596592 log .GetLogger (ctx ).Errorf ("[%s][%s] could not read configuration_hashes from monitored host: %v" , dbUnique , specialMetricChangeEvents , err )
597593 return changeCounts
@@ -638,7 +634,8 @@ func DetectConfigurationChanges(ctx context.Context, dbUnique string, vme Monito
638634 return changeCounts
639635}
640636
641- func CheckForPGObjectChangesAndStore (ctx context.Context , dbUnique string , vme MonitoredDatabaseSettings , storageCh chan <- []metrics.MeasurementEnvelope , hostState map [string ]map [string ]string ) {
637+ func (r * Reaper ) CheckForPGObjectChangesAndStore (ctx context.Context , dbUnique string , vme MonitoredDatabaseSettings , hostState map [string ]map [string ]string ) {
638+ storageCh := r .measurementCh
642639 sprocCounts := DetectSprocChanges (ctx , dbUnique , vme , storageCh , hostState ) // TODO some of Detect*() code could be unified...
643640 tableCounts := DetectTableChanges (ctx , dbUnique , vme , storageCh , hostState )
644641 indexCounts := DetectIndexChanges (ctx , dbUnique , vme , storageCh , hostState )
@@ -691,7 +688,7 @@ func FetchMetricsPgpool(ctx context.Context, msg MetricFetchConfig, vme Monitore
691688
692689 for _ , sql := range sqlLines {
693690 if strings .HasPrefix (sql , "SHOW POOL_NODES" ) {
694- data , err := DBExecReadByDbUniqueName (ctx , msg .DBUniqueName , sql )
691+ data , err := QueryMeasurements (ctx , msg .DBUniqueName , sql )
695692 if err != nil {
696693 log .GetLogger (ctx ).Errorf ("[%s][%s] Could not fetch PgPool statistics: %v" , msg .DBUniqueName , msg .MetricName , err )
697694 return data , err
@@ -745,7 +742,7 @@ func FetchMetricsPgpool(ctx context.Context, msg MetricFetchConfig, vme Monitore
745742 continue
746743 }
747744
748- data , err := DBExecReadByDbUniqueName (ctx , msg .DBUniqueName , sql )
745+ data , err := QueryMeasurements (ctx , msg .DBUniqueName , sql )
749746 if err != nil {
750747 log .GetLogger (ctx ).Errorf ("[%s][%s] Could not fetch PgPool statistics: %v" , msg .DBUniqueName , msg .MetricName , err )
751748 continue
@@ -783,7 +780,7 @@ func TryCreateMissingExtensions(ctx context.Context, dbUnique string, extensionN
783780 extsCreated := make ([]string , 0 )
784781
785782 // For security reasons don't allow to execute random strings but check that it's an existing extension
786- data , err := DBExecReadByDbUniqueName (ctx , dbUnique , sqlAvailable )
783+ data , err := QueryMeasurements (ctx , dbUnique , sqlAvailable )
787784 if err != nil {
788785 log .GetLogger (ctx ).Infof ("[%s] Failed to get a list of available extensions: %v" , dbUnique , err )
789786 return extsCreated
@@ -803,7 +800,7 @@ func TryCreateMissingExtensions(ctx context.Context, dbUnique string, extensionN
803800 log .GetLogger (ctx ).Errorf ("[%s] Requested extension %s not available on instance, cannot try to create..." , dbUnique , extToCreate )
804801 } else {
805802 sqlCreateExt := `create extension ` + extToCreate
806- _ , err := DBExecReadByDbUniqueName (ctx , dbUnique , sqlCreateExt )
803+ _ , err := QueryMeasurements (ctx , dbUnique , sqlCreateExt )
807804 if err != nil {
808805 log .GetLogger (ctx ).Errorf ("[%s] Failed to create extension %s (based on --try-create-listed-exts-if-missing input): %v" , dbUnique , extToCreate , err )
809806 }
@@ -856,12 +853,12 @@ func TryCreateMetricsFetchingHelpers(ctx context.Context, md *sources.SourceConn
856853func GetGoPsutilDiskPG (ctx context.Context , dbUnique string ) (metrics.Measurements , error ) {
857854 sql := `select current_setting('data_directory') as dd, current_setting('log_directory') as ld, current_setting('server_version_num')::int as pgver`
858855 sqlTS := `select spcname::text as name, pg_catalog.pg_tablespace_location(oid) as location from pg_catalog.pg_tablespace where not spcname like any(array[E'pg\\_%'])`
859- data , err := DBExecReadByDbUniqueName (ctx , dbUnique , sql )
856+ data , err := QueryMeasurements (ctx , dbUnique , sql )
860857 if err != nil || len (data ) == 0 {
861858 log .GetLogger (ctx ).Errorf ("Failed to determine relevant PG disk paths via SQL: %v" , err )
862859 return nil , err
863860 }
864- dataTblsp , err := DBExecReadByDbUniqueName (ctx , dbUnique , sqlTS )
861+ dataTblsp , err := QueryMeasurements (ctx , dbUnique , sqlTS )
865862 if err != nil {
866863 log .GetLogger (ctx ).Infof ("Failed to determine relevant PG tablespace paths via SQL: %v" , err )
867864 }
0 commit comments