func()

in hub/hub.go [101:141]


func (c *MetricHub) Receive(ctx echo.Context) error {
	t0 := time.Now()
	var (
		err    error
		parser expfmt.TextParser
	)

	parsedFamilies, err := parser.TextToMetricFamilies(ctx.Request().Body)
	if err != nil {
		return ctx.String(http.StatusBadRequest, fmt.Sprintf("error parsing metrics: %v", err))
	}
	parseTime.Set(time.Since(t0).Seconds())

	newDatapoints := 0
	for _, fam := range parsedFamilies {
		newDatapoints += len(fam.Metric)
	}

	// Check if new datapoints will exceed the specified limit
	if c.limit > 0 {
		if c.stats.currentCountDatapoints+newDatapoints > c.limit {
			errString := fmt.Sprintf("Not accepting push of size %d. Would overfill hub limit of %d. Current hub size: %d\n", newDatapoints, c.limit, c.stats.currentCountDatapoints)
			glog.Error(errString)
			return ctx.String(http.StatusNotAcceptable, errString)
		}
	}
	httpReceiveSizeDP.Set(float64(newDatapoints))
	httpReceiveSizeFam.Set(float64(len(parsedFamilies)))

	t2 := time.Now()
	c.hubMetrics(parsedFamilies)
	httpReceiveTime.Set(time.Since(t2).Seconds())

	c.stats.lastHTTPReceiveTime = time.Now().Unix()
	c.stats.lastHTTPReceiveSize = ctx.Request().ContentLength
	c.stats.lastHTTPReceiveNumFamilies = len(parsedFamilies)
	c.stats.currentCountDatapoints += newDatapoints
	hubSize.Set(float64(c.stats.currentCountDatapoints))

	return ctx.NoContent(http.StatusOK)
}