driftctl/pkg/telemetry/telemetry.go

55 lines
1.2 KiB
Go

package telemetry
import (
"bytes"
"encoding/json"
"net/http"
"runtime"
"github.com/cloudskiff/driftctl/pkg/analyser"
"github.com/cloudskiff/driftctl/pkg/version"
"github.com/sirupsen/logrus"
)
type telemetry struct {
Version string `json:"version"`
Os string `json:"os"`
Arch string `json:"arch"`
TotalResources int `json:"total_resources"`
TotalManaged int `json:"total_managed"`
Duration uint `json:"duration"`
}
func SendTelemetry(analysis *analyser.Analysis) {
if analysis == nil {
return
}
t := telemetry{
Version: version.Current(),
Os: runtime.GOOS,
Arch: runtime.GOARCH,
TotalResources: analysis.Summary().TotalResources,
TotalManaged: analysis.Summary().TotalManaged,
Duration: uint(analysis.Duration.Seconds() + 0.5),
}
body, err := json.Marshal(t)
if err != nil {
logrus.Debug(err)
return
}
client := &http.Client{}
req, _ := http.NewRequest("POST", "https://2lvzgmrf2e.execute-api.eu-west-3.amazonaws.com/telemetry", bytes.NewReader(body))
req.Header.Set("Content-Type", "application/json")
_, err = client.Do(req)
if err != nil {
logrus.Debugf("Unable to send telemetry data: %+v", err)
return
}
}