sampler-fork/client/backend.go

103 lines
2.1 KiB
Go
Raw Normal View History

package client
2019-05-24 02:58:46 +00:00
import (
"bytes"
"encoding/json"
"errors"
2019-05-24 02:58:46 +00:00
"github.com/sqshq/sampler/metadata"
"io/ioutil"
2019-05-24 02:58:46 +00:00
"net/http"
)
2019-05-24 02:58:46 +00:00
const (
backendUrl = "http://localhost/api/v1"
installationPath = "/telemetry/installation"
statisticsPath = "/telemetry/statistics"
crashPath = "/telemetry/crash"
registrationPath = "/license/registration"
jsonContentType = "application/json"
2019-05-24 02:58:46 +00:00
)
// Backend client is used to verify license and to send telemetry reports
// for analyses (anonymous usage data statistics and crash reports)
2019-05-24 02:58:46 +00:00
type BackendClient struct {
client http.Client
}
func NewBackendClient() *BackendClient {
return &BackendClient{
client: http.Client{},
}
}
func (c *BackendClient) ReportInstallation(statistics *metadata.Statistics) {
buf := new(bytes.Buffer)
err := json.NewEncoder(buf).Encode(statistics)
if err != nil {
c.ReportCrash(err.Error(), statistics)
}
_, err = http.Post(backendUrl+installationPath, jsonContentType, buf)
if err != nil {
c.ReportCrash(err.Error(), statistics)
}
2019-05-24 02:58:46 +00:00
}
func (c *BackendClient) ReportUsageStatistics(error string, statistics *metadata.Statistics) {
2019-05-24 02:58:46 +00:00
// TODO
}
func (c *BackendClient) ReportCrash(error string, statistics *metadata.Statistics) {
req := struct {
Error string
Statistics *metadata.Statistics
}{
error,
statistics,
}
buf := new(bytes.Buffer)
err := json.NewEncoder(buf).Encode(req)
if err != nil {
return
}
_, _ = http.Post(backendUrl+crashPath, jsonContentType, buf)
}
func (c *BackendClient) RegisterLicenseKey(licenseKey string, statistics *metadata.Statistics) (*metadata.License, error) {
req := struct {
LicenseKey string
Statistics *metadata.Statistics
}{
licenseKey,
statistics,
}
buf := new(bytes.Buffer)
err := json.NewEncoder(buf).Encode(req)
if err != nil {
c.ReportCrash(err.Error(), statistics)
}
response, err := http.Post(
backendUrl+registrationPath, jsonContentType, buf)
if err != nil {
return nil, err
}
if response.StatusCode != 200 {
body, _ := ioutil.ReadAll(response.Body)
return nil, errors.New(string(body))
}
var license metadata.License
json.NewDecoder(response.Body).Decode(&license)
return &license, nil
}