checkpoint

package module
Version: v0.5.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jan 24, 2019 License: MPL-2.0 Imports: 20 Imported by: 684

README

Go Checkpoint Client

Checkpoint is an internal service at Hashicorp that we use to check version information, broadcast security bulletins, etc.

We understand that software making remote calls over the internet for any reason can be undesirable. Because of this, Checkpoint can be disabled in all of our software that includes it. You can view the source of this client to see that we're not sending any private information.

Each Hashicorp application has it's specific configuration option to disable checkpoint calls, but the CHECKPOINT_DISABLE makes the underlying checkpoint component itself disabled. For example in the case of packer:

CHECKPOINT_DISABLE=1 packer build 

Note: This repository is probably useless outside of internal HashiCorp use. It is open source for disclosure and because our open source projects must be able to link to it.

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func CheckInterval

func CheckInterval(p *CheckParams, interval time.Duration, cb func(*CheckResponse, error)) chan struct{}

CheckInterval is used to check for a response on a given interval duration. The interval is not exact, and checks are randomized to prevent a thundering herd. However, it is expected that on average one check is performed per interval. The returned channel may be closed to stop background checks.

func Report

func Report(ctx context.Context, r *ReportParams) error

Report sends telemetry information to checkpoint

func ReportRequest

func ReportRequest(r *ReportParams) (*http.Request, error)

ReportRequest creates a request object for making a report

Types

type CheckAlert

type CheckAlert struct {
	ID      int    `json:"id"`
	Date    int    `json:"date"`
	Message string `json:"message"`
	URL     string `json:"url"`
	Level   string `json:"level"`
}

CheckAlert is a single alert message from a check request.

These never have to be manually constructed, and are typically populated into a CheckResponse as a result of the Check request.

type CheckParams

type CheckParams struct {
	// Product and version are used to lookup the correct product and
	// alerts for the proper version. The version is also used to perform
	// a version check.
	Product string
	Version string

	// Arch and OS are used to filter alerts potentially only to things
	// affecting a specific os/arch combination. If these aren't specified,
	// they'll be automatically filled in.
	Arch string
	OS   string

	// Signature is some random signature that should be stored and used
	// as a cookie-like value. This ensures that alerts aren't repeated.
	// If the signature is changed, repeat alerts may be sent down. The
	// signature should NOT be anything identifiable to a user (such as
	// a MAC address). It should be random.
	//
	// If SignatureFile is given, then the signature will be read from this
	// file. If the file doesn't exist, then a random signature will
	// automatically be generated and stored here. SignatureFile will be
	// ignored if Signature is given.
	Signature     string
	SignatureFile string

	// CacheFile, if specified, will cache the result of a check. The
	// duration of the cache is specified by CacheDuration, and defaults
	// to 48 hours if not specified. If the CacheFile is newer than the
	// CacheDuration, than the Check will short-circuit and use those
	// results.
	//
	// If the CacheFile directory doesn't exist, it will be created with
	// permissions 0755.
	CacheFile     string
	CacheDuration time.Duration

	// Force, if true, will force the check even if CHECKPOINT_DISABLE
	// is set. Within HashiCorp products, this is ONLY USED when the user
	// specifically requests it. This is never automatically done without
	// the user's consent.
	Force bool
}

CheckParams are the parameters for configuring a check request.

type CheckResponse

type CheckResponse struct {
	Product             string        `json:"product"`
	CurrentVersion      string        `json:"current_version"`
	CurrentReleaseDate  int           `json:"current_release_date"`
	CurrentDownloadURL  string        `json:"current_download_url"`
	CurrentChangelogURL string        `json:"current_changelog_url"`
	ProjectWebsite      string        `json:"project_website"`
	Outdated            bool          `json:"outdated"`
	Alerts              []*CheckAlert `json:"alerts"`
}

CheckResponse is the response for a check request.

func Check

func Check(p *CheckParams) (*CheckResponse, error)

Check checks for alerts and new version information.

type ReportParams

type ReportParams struct {
	// Signature is some random signature that should be stored and used
	// as a cookie-like value. This ensures that alerts aren't repeated.
	// If the signature is changed, repeat alerts may be sent down. The
	// signature should NOT be anything identifiable to a user (such as
	// a MAC address). It should be random.
	//
	// If SignatureFile is given, then the signature will be read from this
	// file. If the file doesn't exist, then a random signature will
	// automatically be generated and stored here. SignatureFile will be
	// ignored if Signature is given.
	Signature     string `json:"signature"`
	SignatureFile string `json:"-"`

	StartTime     time.Time   `json:"start_time"`
	EndTime       time.Time   `json:"end_time"`
	Arch          string      `json:"arch"`
	OS            string      `json:"os"`
	Payload       interface{} `json:"payload,omitempty"`
	Product       string      `json:"product"`
	RunID         string      `json:"run_id"`
	SchemaVersion string      `json:"schema_version"`
	Version       string      `json:"version"`
}

ReportParams are the parameters for configuring a telemetry report.

type VersionsParams

type VersionsParams struct {
	// Service is used to lookup the correct service.
	Service string

	// Product is used to filter the version contraints.
	Product string

	// Force, if true, will force the check even if CHECKPOINT_DISABLE
	// is set. Within HashiCorp products, this is ONLY USED when the user
	// specifically requests it. This is never automatically done without
	// the user's consent.
	Force bool
}

VersionsParams are the parameters for a versions request.

type VersionsResponse

type VersionsResponse struct {
	Service   string   `json:"service"`
	Product   string   `json:"product"`
	Minimum   string   `json:"minimum"`
	Maximum   string   `json:"maximum"`
	Excluding []string `json:"excluding"`
}

VersionsResponse is the response for a versions request.

func Versions

func Versions(p *VersionsParams) (*VersionsResponse, error)

Versions returns the version constrains for a given service and product.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL