func()

in receiver/haproxyreceiver/scraper.go [40:257]


func (s *haproxyScraper) scrape(ctx context.Context) (pmetric.Metrics, error) {
	var records []map[string]string
	if u, notURLerr := url.Parse(s.cfg.Endpoint); notURLerr == nil && strings.HasPrefix(u.Scheme, "http") {
		resp, err := s.httpClient.Get(s.cfg.Endpoint + ";csv")
		if err != nil {
			return pmetric.NewMetrics(), err
		}
		defer resp.Body.Close()
		buf, err := io.ReadAll(resp.Body)
		if err != nil {
			return pmetric.NewMetrics(), err
		}
		records, err = s.readStats(buf)
		if err != nil {
			return pmetric.NewMetrics(), err
		}
	} else {
		var d net.Dialer
		c, err := d.DialContext(ctx, "unix", s.cfg.Endpoint)
		if err != nil {
			return pmetric.NewMetrics(), err
		}
		defer func(c net.Conn) {
			_ = c.Close()
		}(c)
		_, err = c.Write(showStatsCommand)
		if err != nil {
			return pmetric.NewMetrics(), err
		}
		buf, err := io.ReadAll(c)
		if err != nil {
			return pmetric.NewMetrics(), err
		}
		records, err = s.readStats(buf)
		if err != nil {
			return pmetric.NewMetrics(), fmt.Errorf("error reading stats: %w", err)
		}
	}

	var scrapeErrors []error

	now := pcommon.NewTimestampFromTime(time.Now())
	for _, record := range records {
		if record["scur"] != "" {
			if err := s.mb.RecordHaproxySessionsCountDataPoint(now, record["scur"]); err != nil {
				scrapeErrors = append(scrapeErrors, err)
			}
		}
		if record["conn_rate"] != "" {
			if err := s.mb.RecordHaproxyConnectionsRateDataPoint(now, record["conn_rate"]); err != nil {
				scrapeErrors = append(scrapeErrors, err)
			}
		}
		if record["conn_tot"] != "" {
			if err := s.mb.RecordHaproxyConnectionsTotalDataPoint(now, record["conn_tot"]); err != nil {
				scrapeErrors = append(scrapeErrors, err)
			}
		}
		if record["lbtot"] != "" {
			if err := s.mb.RecordHaproxyServerSelectedTotalDataPoint(now, record["lbtot"]); err != nil {
				scrapeErrors = append(scrapeErrors, err)
			}
		}
		if record["bin"] != "" {
			if err := s.mb.RecordHaproxyBytesInputDataPoint(now, record["bin"]); err != nil {
				scrapeErrors = append(scrapeErrors, err)
			}
		}
		if record["bout"] != "" {
			if err := s.mb.RecordHaproxyBytesOutputDataPoint(now, record["bout"]); err != nil {
				scrapeErrors = append(scrapeErrors, err)
			}
		}
		if record["cli_abrt"] != "" {
			if err := s.mb.RecordHaproxyClientsCanceledDataPoint(now, record["cli_abrt"]); err != nil {
				scrapeErrors = append(scrapeErrors, err)
			}
		}
		if record["comp_byp"] != "" {
			if err := s.mb.RecordHaproxyCompressionBypassDataPoint(now, record["comp_byp"]); err != nil {
				scrapeErrors = append(scrapeErrors, err)
			}
		}
		if record["comp_in"] != "" {
			if err := s.mb.RecordHaproxyCompressionInputDataPoint(now, record["comp_in"]); err != nil {
				scrapeErrors = append(scrapeErrors, err)
			}
		}
		if record["comp_out"] != "" {
			if err := s.mb.RecordHaproxyCompressionOutputDataPoint(now, record["comp_out"]); err != nil {
				scrapeErrors = append(scrapeErrors, err)
			}
		}
		if record["comp_rsp"] != "" {
			if err := s.mb.RecordHaproxyCompressionCountDataPoint(now, record["comp_rsp"]); err != nil {
				scrapeErrors = append(scrapeErrors, err)
			}
		}
		if record["dreq"] != "" {
			if err := s.mb.RecordHaproxyRequestsDeniedDataPoint(now, record["dreq"]); err != nil {
				scrapeErrors = append(scrapeErrors, err)
			}
		}
		if record["dresp"] != "" {
			if err := s.mb.RecordHaproxyResponsesDeniedDataPoint(now, record["dresp"]); err != nil {
				scrapeErrors = append(scrapeErrors, err)
			}
		}
		if record["downtime"] != "" {
			if err := s.mb.RecordHaproxyDowntimeDataPoint(now, record["downtime"]); err != nil {
				scrapeErrors = append(scrapeErrors, err)
			}
		}
		if record["econ"] != "" {
			if err := s.mb.RecordHaproxyConnectionsErrorsDataPoint(now, record["econ"]); err != nil {
				scrapeErrors = append(scrapeErrors, err)
			}
		}
		if record["ereq"] != "" {
			if err := s.mb.RecordHaproxyRequestsErrorsDataPoint(now, record["ereq"]); err != nil {
				scrapeErrors = append(scrapeErrors, err)
			}
		}
		if record["eresp"] != "" && record["srv_abrt"] != "" {
			aborts := record["srv_abrt"]
			eresp := record["eresp"]
			abortsVal, err2 := strconv.ParseInt(aborts, 10, 64)
			if err2 != nil {
				scrapeErrors = append(scrapeErrors, fmt.Errorf("failed to parse int64 for HaproxyResponsesErrors, value was %s: %w", aborts, err2))
			}
			erespVal, err2 := strconv.ParseInt(eresp, 10, 64)
			if err2 != nil {
				scrapeErrors = append(scrapeErrors, fmt.Errorf("failed to parse int64 for HaproxyResponsesErrors, value was %s: %w", eresp, err2))
			}
			s.mb.RecordHaproxyResponsesErrorsDataPoint(now, abortsVal+erespVal)
		}
		if record["chkfail"] != "" {
			if err := s.mb.RecordHaproxyFailedChecksDataPoint(now, record["chkfail"]); err != nil {
				scrapeErrors = append(scrapeErrors, err)
			}
		}
		if record["wredis"] != "" {
			if err := s.mb.RecordHaproxyRequestsRedispatchedDataPoint(now, record["wredis"]); err != nil {
				scrapeErrors = append(scrapeErrors, err)
			}
		}
		if record["hrsp_1xx"] != "" {
			if err := s.mb.RecordHaproxyRequestsTotalDataPoint(now, record["hrsp_1xx"], metadata.AttributeStatusCode1xx); err != nil {
				scrapeErrors = append(scrapeErrors, err)
			}
		}
		if record["hrsp_2xx"] != "" {
			if err := s.mb.RecordHaproxyRequestsTotalDataPoint(now, record["hrsp_2xx"], metadata.AttributeStatusCode2xx); err != nil {
				scrapeErrors = append(scrapeErrors, err)
			}
		}
		if record["hrsp_3xx"] != "" {
			if err := s.mb.RecordHaproxyRequestsTotalDataPoint(now, record["hrsp_3xx"], metadata.AttributeStatusCode3xx); err != nil {
				scrapeErrors = append(scrapeErrors, err)
			}
		}
		if record["hrsp_4xx"] != "" {
			if err := s.mb.RecordHaproxyRequestsTotalDataPoint(now, record["hrsp_4xx"], metadata.AttributeStatusCode4xx); err != nil {
				scrapeErrors = append(scrapeErrors, err)
			}
		}
		if record["hrsp_5xx"] != "" {
			if err := s.mb.RecordHaproxyRequestsTotalDataPoint(now, record["hrsp_5xx"], metadata.AttributeStatusCode5xx); err != nil {
				scrapeErrors = append(scrapeErrors, err)
			}
		}
		if record["hrsp_other"] != "" {
			if err := s.mb.RecordHaproxyRequestsTotalDataPoint(now, record["hrsp_other"], metadata.AttributeStatusCodeOther); err != nil {
				scrapeErrors = append(scrapeErrors, err)
			}
		}
		if record["wretr"] != "" {
			if err := s.mb.RecordHaproxyConnectionsRetriesDataPoint(now, record["wretr"]); err != nil {
				scrapeErrors = append(scrapeErrors, err)
			}
		}
		if record["stot"] != "" {
			if err := s.mb.RecordHaproxySessionsTotalDataPoint(now, record["stot"]); err != nil {
				scrapeErrors = append(scrapeErrors, err)
			}
		}
		if record["qcur"] != "" {
			if err := s.mb.RecordHaproxyRequestsQueuedDataPoint(now, record["qcur"]); err != nil {
				scrapeErrors = append(scrapeErrors, err)
			}
		}
		if record["req_rate"] != "" {
			if err := s.mb.RecordHaproxyRequestsRateDataPoint(now, record["req_rate"]); err != nil {
				scrapeErrors = append(scrapeErrors, err)
			}
		}
		if record["ttime"] != "" {
			if err := s.mb.RecordHaproxySessionsAverageDataPoint(now, record["ttime"]); err != nil {
				scrapeErrors = append(scrapeErrors, err)
			}
		}
		if record["rate"] != "" {
			if err := s.mb.RecordHaproxySessionsRateDataPoint(now, record["rate"]); err != nil {
				scrapeErrors = append(scrapeErrors, err)
			}
		}
		rb := s.mb.NewResourceBuilder()
		rb.SetHaproxyProxyName(record["pxname"])
		rb.SetHaproxyServiceName(record["svname"])
		rb.SetHaproxyAddr(s.cfg.Endpoint)
		s.mb.EmitForResource(metadata.WithResource(rb.Emit()))
	}

	if len(scrapeErrors) > 0 {
		return s.mb.Emit(), scrapererror.NewPartialScrapeError(multierr.Combine(scrapeErrors...), len(scrapeErrors))
	}
	return s.mb.Emit(), nil
}