Skip to content

Commit c11e4da

Browse files
committed
Refactoring plan fetch error handling, and other cleanups
1 parent bb47c19 commit c11e4da

2 files changed

Lines changed: 18 additions & 10 deletions

File tree

receiver/oracledbreceiver/scraper.go

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -984,7 +984,10 @@ func (s *oracleScraper) collectTopNMetricData(ctx context.Context, logs plog.Log
984984
hits = hits[:maxHitsSize]
985985

986986
hits = s.obfuscateCacheHits(hits)
987-
childAddressToPlanMap := s.getChildAddressToPlanMap(ctx, hits)
987+
childAddressToPlanMap, err := s.getChildAddressToPlanMap(ctx, hits)
988+
if err != nil {
989+
errs = append(errs, err)
990+
}
988991

989992
rb := s.setupResourceBuilder(s.lb.NewResourceBuilder())
990993

@@ -1225,10 +1228,10 @@ func (s *oracleScraper) obfuscateCacheHits(hits []queryMetricCacheHit) []queryMe
12251228
return obfuscatedHits
12261229
}
12271230

1228-
func (s *oracleScraper) getChildAddressToPlanMap(ctx context.Context, hits []queryMetricCacheHit) map[string][]metricRow {
1231+
func (s *oracleScraper) getChildAddressToPlanMap(ctx context.Context, hits []queryMetricCacheHit) (map[string][]metricRow, error) {
12291232
childAddressToPlanMap := map[string][]metricRow{}
12301233
if len(hits) == 0 {
1231-
return childAddressToPlanMap
1234+
return childAddressToPlanMap, nil
12321235
}
12331236

12341237
var childAddressSlice []any
@@ -1243,7 +1246,10 @@ func (s *oracleScraper) getChildAddressToPlanMap(ctx context.Context, hits []que
12431246

12441247
s.logger.Debug("Fetching execution plans")
12451248
s.oraclePlanDataClient = s.clientProviderFunc(s.db, sqlQuery, s.logger)
1246-
planData, _ := s.oraclePlanDataClient.metricRows(ctx, childAddressSlice...)
1249+
planData, err := s.oraclePlanDataClient.metricRows(ctx, childAddressSlice...)
1250+
if err != nil {
1251+
return childAddressToPlanMap, fmt.Errorf("failed to fetch Oracle execution plan data: %w", err)
1252+
}
12471253

12481254
for _, row := range planData {
12491255
currentChildAddress := row[childAddressAttr]
@@ -1257,7 +1263,7 @@ func (s *oracleScraper) getChildAddressToPlanMap(ctx context.Context, hits []que
12571263
}
12581264
}
12591265

1260-
return childAddressToPlanMap
1266+
return childAddressToPlanMap, nil
12611267
}
12621268

12631269
func (*oracleScraper) getTopNMetricNames() []string {

receiver/oracledbreceiver/scraper_test.go

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,8 @@ var cacheValue = map[string]int64{
120120
"PROCEDURE_EXECUTIONS": 200413,
121121
}
122122

123+
const SqlPlanTable = "V$SQL_PLAN_STATISTICS_ALL"
124+
123125
func TestScraper_Scrape(t *testing.T) {
124126
tests := []struct {
125127
name string
@@ -409,7 +411,7 @@ func TestScraper_ScrapeTopNLogs(t *testing.T) {
409411
{
410412
name: "valid collection",
411413
dbclientFn: func(_ *sql.DB, s string, _ *zap.Logger) dbClient {
412-
if strings.Contains(s, "V$SQL_PLAN_STATISTICS_ALL") {
414+
if strings.Contains(s, SqlPlanTable) {
413415
metricRowFile := readFile("oracleQueryPlanData.txt")
414416
unmarshalErr := json.Unmarshal(metricRowFile, &logRowData)
415417
if unmarshalErr == nil {
@@ -1004,7 +1006,7 @@ func TestTopNLogsDiscardedWhenExecutionCountUnchanged(t *testing.T) {
10041006
return nil, nil
10051007
},
10061008
clientProviderFunc: func(_ *sql.DB, s string, _ *zap.Logger) dbClient {
1007-
if strings.Contains(s, "V$SQL_PLAN_STATISTICS_ALL") {
1009+
if strings.Contains(s, SqlPlanTable) {
10081010
metricRowFile := readFile("oracleQueryPlanData.txt")
10091011
_ = json.Unmarshal(metricRowFile, &logRowData)
10101012
return &fakeDbClient{Responses: [][]metricRow{logRowData}}
@@ -1095,7 +1097,7 @@ func TestTopNLogsProcedureNameEmpty(t *testing.T) {
10951097
return nil, nil
10961098
},
10971099
clientProviderFunc: func(_ *sql.DB, s string, _ *zap.Logger) dbClient {
1098-
if strings.Contains(s, "V$SQL_PLAN_STATISTICS_ALL") {
1100+
if strings.Contains(s, SqlPlanTable) {
10991101
return &fakeDbClient{Responses: [][]metricRow{planData}}
11001102
}
11011103
return &fakeDbClient{Responses: [][]metricRow{metricsData}}
@@ -1145,7 +1147,7 @@ func TestScrapesTopNLogsOnlyWhenIntervalHasElapsed(t *testing.T) {
11451147
{
11461148
name: "valid collection",
11471149
dbclientFn: func(_ *sql.DB, s string, _ *zap.Logger) dbClient {
1148-
if strings.Contains(s, "V$SQL_PLAN_STATISTICS_ALL") {
1150+
if strings.Contains(s, SqlPlanTable) {
11491151
metricRowFile := readFile("oracleQueryPlanData.txt")
11501152
unmarshalErr := json.Unmarshal(metricRowFile, &logRowData)
11511153
if unmarshalErr == nil {
@@ -1279,7 +1281,7 @@ func TestObfuscateCacheHitsHandlesTruncatedSQL(t *testing.T) {
12791281
return nil, nil
12801282
},
12811283
clientProviderFunc: func(_ *sql.DB, s string, _ *zap.Logger) dbClient {
1282-
if strings.Contains(s, "V$SQL_PLAN_STATISTICS_ALL") {
1284+
if strings.Contains(s, SqlPlanTable) {
12831285
return &fakeDbClient{Responses: [][]metricRow{{}}}
12841286
}
12851287
return &fakeDbClient{Responses: [][]metricRow{metricsData}}

0 commit comments

Comments
 (0)