github.com/simpleiot/simpleiot@v0.18.3/cmd/point-size/main.go (about) 1 // test size of point encoding 2 package main 3 4 import ( 5 "fmt" 6 "log" 7 "time" 8 9 "github.com/simpleiot/simpleiot/data" 10 "google.golang.org/protobuf/proto" 11 ) 12 13 func main() { 14 sizeEncodedPoint := func(p data.Point) int { 15 pE, err := p.ToPb() 16 17 if err != nil { 18 log.Fatal("Error encoding: ", err) 19 } 20 21 buf, err := proto.Marshal(&pE) 22 23 if err != nil { 24 log.Fatal("Marshal error: ", err) 25 } 26 27 return len(buf) 28 } 29 30 p := data.Point{Type: "p"} 31 32 fmt.Printf("Simple: %+v -> %v bytes\n", p, sizeEncodedPoint(p)) 33 34 buf, _ := (&data.Points{p}).ToPb() 35 36 fmt.Printf("Add array: %+v -> %v bytes\n", p, len(buf)) 37 38 p = data.Point{Time: time.Now(), Type: "value", Value: 232.32} 39 fmt.Printf("Typical point: %+v -> %v bytes\n", p, sizeEncodedPoint(p)) 40 41 // 10 typical points in an array 42 var pArray data.Points 43 44 for i := 0; i < 10; i++ { 45 pArray = append(pArray, p) 46 } 47 48 pArrayBuf, _ := pArray.ToPb() 49 pArrayLen := len(pArrayBuf) 50 fmt.Printf("Size of 10 typical points: %v, per point: %v\n", pArrayLen, float64(pArrayLen)/10) 51 52 } 53 54 // This program outputs: 55 // Simple: T:p V:0.000 0001-01-01T00:00:00Z -> 16 bytes 56 // Add array: T:p V:0.000 0001-01-01T00:00:00Z -> 18 bytes 57 // Typical point: T:value V:232.320 2022-10-04T14:57:34-04:00 -> 26 bytes 58 // Size of 10 typical points: 280, per point: 28