Skip to content

Instantly share code, notes, and snippets.

@DazWilkin
Created June 25, 2019 21:23
Show Gist options
  • Save DazWilkin/0716e59a489c4e4f84ebf39275c4d133 to your computer and use it in GitHub Desktop.
Save DazWilkin/0716e59a489c4e4f84ebf39275c4d133 to your computer and use it in GitHub Desktop.
Particle, OpenCensus & MicroK8s
package p
import (
"context"
"encoding/json"
"fmt"
"log"
"net/http"
"os"
"strconv"
"time"
"contrib.go.opencensus.io/exporter/ocagent"
"go.opencensus.io/stats"
"go.opencensus.io/stats/view"
"go.opencensus.io/tag"
)
type data struct {
Event string `json:"event"`
Data string `json:"data"`
Published string `json:"published_at"`
CoreID string `json:"coreid"`
}
var (
keyCoreID tag.Key
mPercent *stats.Float64Measure
)
func init() {
log.Println("init")
serviceName := os.Getenv("SERVICE_NAME")
if serviceName == "" {
serviceName = "particle"
}
log.Printf("Service: %s", serviceName)
agentEndpoint := os.Getenv("AGENT_ENDPOINT")
if agentEndpoint == "" {
log.Fatal("Requires AGENT_ENDPOINT environment variable")
}
log.Printf("OpenCensus Agent: %s", agentEndpoint)
oce, err := ocagent.NewExporter(
ocagent.WithInsecure(),
ocagent.WithAddress(agentEndpoint),
ocagent.WithServiceName(serviceName),
)
if err != nil {
log.Fatal(err)
}
// defer oce.Stop()
view.RegisterExporter(oce)
view.SetReportingPeriod(5 * time.Second)
// Defined at Package level
keyCoreID, _ = tag.NewKey("CoreID")
mPercent = stats.Float64("percent", "The percent value from the humidity sensor", "1")
views := []*view.View{
{
Name: "dist",
Description: "The percent values",
Measure: mPercent,
Aggregation: view.Distribution(10, 20, 30, 40, 50, 60, 70, 80, 90, 100),
TagKeys: []tag.Key{keyCoreID},
},
{
Name: "percent",
Description: "The percent values",
Measure: mPercent,
Aggregation: view.Count(),
TagKeys: []tag.Key{keyCoreID},
},
}
if err := view.Register(views...); err != nil {
log.Fatal(err)
}
}
// Percent is a Cloud Function | Handler
func Percent(w http.ResponseWriter, r *http.Request) {
log.Println("percent")
var d data
if err := json.NewDecoder(r.Body).Decode(&d); err != nil {
fmt.Fprint(w, err)
return
}
ctx, _ := tag.New(context.Background(),
tag.Upsert(keyCoreID, d.CoreID),
)
percent, err := strconv.ParseFloat(d.Data, 64)
if err != nil {
log.Fatal(err)
}
log.Printf("value: %f", percent)
stats.Record(ctx, mPercent.M(percent))
fmt.Fprint(w, "ok")
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment