Created
June 25, 2019 21:23
-
-
Save DazWilkin/0716e59a489c4e4f84ebf39275c4d133 to your computer and use it in GitHub Desktop.
Particle, OpenCensus & MicroK8s
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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