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)
}