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