func pushSeries(l *lua.State, name string) { series, _, err := aggregations.GetSeries(name) if err != nil { lua.Errorf(l, "%s", err.Error()) panic("unreachable") } l.NewTable() for name, fn := range seriesFunctions { l.PushGoFunction(fn(series)) l.SetField(-2, name) } }
func parseTraditionalRequest(remoteAddress string, line []string, errorChannel chan error) error { seriesName := line[0] value, err := strconv.ParseFloat(line[1], 64) if err != nil { return gotelemetry.NewErrorWithFormat( 400, "Graphite => [%s] Invalid value %s: %s", nil, remoteAddress, line[1], err.Error(), ) } timestamp, err := strconv.ParseInt(line[2], 10, 64) if err != nil { return gotelemetry.NewErrorWithFormat( 400, "Graphite => [%s] Invalid timestamp %s: %s", nil, remoteAddress, line[2], err.Error(), ) } series, isCreated, err := aggregations.GetSeries(seriesName) if err != nil { return gotelemetry.NewErrorWithFormat( 500, "Graphite => [%s] Unable to get series %s: %s", nil, remoteAddress, seriesName, err.Error(), ) } if isCreated { errorChannel <- gotelemetry.NewLogError("Graphite => Started receiving graphite data for '%s'", seriesName) } ts := time.Unix(timestamp, 0) if err := series.Push(&ts, value); err != nil { return gotelemetry.NewErrorWithFormat( 500, "Graphite => [%s] Unable to push value %f with timestamp %s to series %s: %s", nil, remoteAddress, value, ts, seriesName, err.Error(), ) } errorChannel <- gotelemetry.NewDebugError( "Graphite => [%s] Pushed value %f to series %s at time %s", remoteAddress, value, seriesName, ts, ) return nil }