Skip to content

Instantly share code, notes, and snippets.

@nipuntalukdar
Created November 27, 2017 12:41
Show Gist options
  • Select an option

  • Save nipuntalukdar/d19e7374db26e54dbc4ef7fe00082b80 to your computer and use it in GitHub Desktop.

Select an option

Save nipuntalukdar/d19e7374db26e54dbc4ef7fe00082b80 to your computer and use it in GitHub Desktop.
package main
import (
"fmt"
"time"
"github.com/go-kit/kit/log"
"github.com/prometheus/tsdb"
"github.com/prometheus/tsdb/labels"
)
type myLog struct {
}
func (l *myLog) Log(keyvals ...interface{}) error {
out := ""
for _, a := range keyvals {
out += fmt.Sprintf(" %v", a)
}
fmt.Printf("LOG: %s\n", out)
return nil
}
func readDb() {
var l log.Logger
l = &myLog{}
db, err := tsdb.Open("testdb", l, nil, tsdb.DefaultOptions)
if err != nil {
fmt.Printf("%v\n", err)
return
}
querier, err := db.Querier(int64(0), time.Now().Unix()*1000)
if err != nil {
fmt.Printf("%v\n", err)
return
}
s, err := querier.Select(labels.NewEqualMatcher("a", "b"))
if err != nil {
fmt.Printf("%v\n", err)
return
}
defer querier.Close()
i := 0
for s.Next() {
series := s.At()
it := series.Iterator()
for it.Next() {
i++
}
}
fmt.Printf("Sample read %d\n", i)
}
func readDbP(db *tsdb.DB) {
querier, err := db.Querier(int64(0), time.Now().Unix()*1000)
if err != nil {
fmt.Printf("%v\n", err)
return
}
s, err := querier.Select(labels.NewEqualMatcher("a", "b"))
if err != nil {
fmt.Printf("%v\n", err)
return
}
defer querier.Close()
i := 0
for s.Next() {
series := s.At()
it := series.Iterator()
for it.Next() {
i++
}
}
fmt.Printf("Sample read %d\n", i)
}
func main() {
var l log.Logger
l = &myLog{}
db, err := tsdb.Open("testdb", l, nil, tsdb.DefaultOptions)
if err != nil {
fmt.Printf("%v\n", err)
}
app := db.Appender()
for i := 0; i < 10; i++ {
t := time.Now().UnixNano() / 1000000
_, err = app.Add(labels.Labels{{"a", "b"}, {"c", "d"}}, t, 0)
if err != nil {
fmt.Printf("Error is %v\n", err)
}
time.Sleep(2 * time.Millisecond)
}
for i := 0; i < 10; i++ {
t := time.Now().UnixNano() / 1000000
_, err = app.Add(labels.Labels{{"addr", "127.0.0.1"}, {"env", "prod"}}, t, 0)
if err != nil {
fmt.Printf("Error is %v\n", err)
}
time.Sleep(2 * time.Millisecond)
}
err = app.Commit()
if err != nil {
fmt.Printf("%v\n", err)
}
if err != nil {
panic(err)
}
time.Sleep(6 * time.Millisecond)
fmt.Printf("Read using the same db object that used for appending data\n")
readDbP(db)
db.Close()
fmt.Printf("Read using a fresh db object\n")
readDb()
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment