func writeToPostgres(bucket *store.Bucket) error { tx, err := pg.Begin() if err != nil { return err } err = bucket.Get() if err != nil { return err } vals := string(encoding.EncodeArray(bucket.Vals, '{', '}', ',')) row := tx.QueryRow(` SELECT id FROM buckets WHERE token = $1 AND measure = $2 AND source = $3 AND time = $4`, bucket.Key.Token, bucket.Key.Name, bucket.Key.Source, bucket.Key.Time) var id sql.NullInt64 row.Scan(&id) if id.Valid { _, err = tx.Exec("UPDATE buckets SET vals = $1::FLOAT8[] WHERE id = $2", vals, id) if err != nil { tx.Rollback() return err } } else { _, err = tx.Exec(` INSERT INTO buckets(token, measure, source, time, vals) VALUES($1, $2, $3, $4, $5::FLOAT8[])`, bucket.Key.Token, bucket.Key.Name, bucket.Key.Source, bucket.Key.Time, vals) if err != nil { tx.Rollback() return err } } err = tx.Commit() if err != nil { return err } return nil }
func convert(b *store.Bucket, lms chan<- *LM) { err := b.Get() if err != nil { fmt.Printf("error=%s\n", err) return } if len(b.Vals) == 0 { fmt.Printf("at=bucket-no-vals bucket=%s\n", b.Key.Name) return } fmt.Printf("at=librato_outlet.process.bucket minute=%d name=%q\n", b.Key.Time.Minute(), b.Key.Name) k := b.Key lms <- &LM{Token: k.Token, Time: ft(k.Time), Source: k.Source, Name: k.Name + ".last", Val: ff(b.Last())} lms <- &LM{Token: k.Token, Time: ft(k.Time), Source: k.Source, Name: k.Name + ".min", Val: ff(b.Min())} lms <- &LM{Token: k.Token, Time: ft(k.Time), Source: k.Source, Name: k.Name + ".max", Val: ff(b.Max())} lms <- &LM{Token: k.Token, Time: ft(k.Time), Source: k.Source, Name: k.Name + ".mean", Val: ff(b.Mean())} lms <- &LM{Token: k.Token, Time: ft(k.Time), Source: k.Source, Name: k.Name + ".median", Val: ff(b.Median())} lms <- &LM{Token: k.Token, Time: ft(k.Time), Source: k.Source, Name: k.Name + ".perc95", Val: ff(b.P95())} lms <- &LM{Token: k.Token, Time: ft(k.Time), Source: k.Source, Name: k.Name + ".perc99", Val: ff(b.P99())} lms <- &LM{Token: k.Token, Time: ft(k.Time), Source: k.Source, Name: k.Name + ".count", Val: fi(b.Count())} lms <- &LM{Token: k.Token, Time: ft(k.Time), Source: k.Source, Name: k.Name + ".sum", Val: ff(b.Sum())} }