Store version-check file in the configured data-directory

This also fixes what I think is a bug.
It also un-exports everything.

I have questions.
This commit is contained in:
Travis Turner 2023-02-13 15:36:32 -06:00
parent 5c74b64722
commit 6d69510d95
No known key found for this signature in database
GPG key ID: 3FB5CF5C97A37B30
2 changed files with 33 additions and 32 deletions

View file

@ -604,11 +604,12 @@ func (s *Server) Open() error {
log.Println(errors.Wrap(err, "logging startup"))
}
// Do version check in. This is in a goroutine so that we don't block server startup if the server endpoint is down/having issues.
// Do version check in. This is in a goroutine so that we don't block server
// startup if the server endpoint is down/having issues.
go func() {
s.logger.Printf("Beginning featurebase version check-in")
vc := VersionChecker{URL: "https://analytics.featurebase.com/v2/featurebase/metrics"}
resp, err := vc.CheckIn()
vc := newVersionChecker(s.cluster.Path, "https://analytics.featurebase.com/v2/featurebase/metrics")
resp, err := vc.checkIn()
if err != nil {
s.logger.Errorf("doing version checkin. Error was %s", err)
return

View file

@ -6,25 +6,31 @@ import (
"io"
"net/http"
"os"
"path/filepath"
"strings"
"github.com/google/uuid"
)
type VersionChecker struct {
URL string
const (
versionCheckerFilename = ".client_id.txt"
)
type versionChecker struct {
path string
url string
}
func NewVersionChecker(endpoint string) *VersionChecker {
v := VersionChecker{
URL: endpoint,
func newVersionChecker(path, endpoint string) *versionChecker {
v := versionChecker{
path: path,
url: endpoint,
}
return &v
}
func (v *VersionChecker) CheckIn() (*VerCheckResponse, error) {
id, err := v.WriteClientUUID()
func (v *versionChecker) checkIn() (*verCheckResponse, error) {
id, err := v.writeClientUUID()
if err != nil {
return nil, err
}
@ -38,60 +44,54 @@ func (v *VersionChecker) CheckIn() (*VerCheckResponse, error) {
if err != nil {
return nil, err
}
wReq := bytes.NewReader(req)
var jsonResp verCheckResponse
r, err := http.Post(v.url, "application/json", wReq)
if err != nil {
return nil, err
}
var json_resp VerCheckResponse
r, err := http.Post(v.URL, "application/json", wReq)
if err != nil {
return nil, err
}
data, err := io.ReadAll(r.Body)
if err != nil {
return nil, err
}
err = json.Unmarshal(data, &json_resp)
err = json.Unmarshal(data, &jsonResp)
if err != nil {
return nil, err
}
return &json_resp, nil
return &jsonResp, nil
}
func (v *VersionChecker) GenerateClientUUID() (string, error) {
func (v *versionChecker) generateClientUUID() (string, error) {
clientUUID := uuid.New()
cleanedUUID := strings.Replace(clientUUID.String(), "-", "", -1)
return cleanedUUID, nil
}
func (v *VersionChecker) WriteClientUUID() (string, error) {
filename := ".client_id.txt"
_, err := os.Stat(filename)
if err != nil {
func (v *versionChecker) writeClientUUID() (string, error) {
filename := filepath.Join(v.path, versionCheckerFilename)
if _, err := os.Stat(filename); err != nil {
if os.IsNotExist(err) {
fh, err := os.Create(filename)
if err != nil {
return "", err
}
defer fh.Close()
id, err := v.GenerateClientUUID()
id, err := v.generateClientUUID()
if err != nil {
return "", err
}
_, err = fh.WriteString(id)
if err != nil {
if _, err := fh.WriteString(id); err != nil {
return "", err
}
return "", err
return id, nil
} else {
return "", err
}
@ -102,15 +102,15 @@ func (v *VersionChecker) WriteClientUUID() (string, error) {
return "", err
}
defer fh.Close()
buf, err := os.ReadFile(filename)
buf, err := os.ReadFile(filename)
if err != nil {
return "", err
}
return string(buf), nil
return string(buf), nil
}
type VerCheckResponse struct {
type verCheckResponse struct {
Version string `json:"latest_version"`
}