internal/upload: don't skip all uploads on the first report failure

A single failure of createReport should not prevent the upload of other
reports. Fix this by logging and proceeding when there is a failure.

To test this failure, and to generally make it easier to exercise upload
bugs, make the following testing improvements:

- Add regtest.RunProgAsOf, which is like RunProg but sets CounterTime
  (newly exposed) to a time in the past.
- Add regtest.NewIncProgram for the common use case of a program that
  just increments counters and exits.
- Export CreateTestUploadConfig and CreateTestUploadServer.
- Have CreateTestUploadServer implement its own cleanup.
- Add a testWriter to echo upload logs to t.Log.

Together, these helpers make it relatively easy to write an ad-hoc
upload test using only the public counter and upload APIs.

For golang/go#65970

Change-Id: I9f54ad22a1f69cc6162ebe5628ad3287b89bbee1
Reviewed-on: https://go-review.googlesource.com/c/telemetry/+/584400
Auto-Submit: Robert Findley <rfindley@google.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Reviewed-by: Hyang-Ah Hana Kim <hyangah@gmail.com>
9 files changed
tree: a11e9427d133be7ea5fd06b201e8883040337f75
  1. cmd/
  2. config/
  3. counter/
  4. crashmonitor/
  5. godev/
  6. internal/
  7. upload/
  8. .dockerignore
  9. .eslintrc.json
  10. .gitattributes
  11. .gitignore
  12. .prettierrc.json
  13. .stylelintrc.json
  14. CONTRIBUTING.md
  15. doc.go
  16. go.mod
  17. go.sum
  18. LICENSE
  19. mode.go
  20. npm
  21. npx
  22. package-lock.json
  23. package.json
  24. PATENTS
  25. README.md
  26. start.go
  27. start_posix.go
  28. start_test.go
  29. start_windows.go
  30. tsconfig.json
  31. types_alias.go
README.md

Go Telemetry

This repository holds the Go Telemetry server code and libraries, used for hosting telemetry.go.dev and instrumenting Go toolchain programs with opt-in telemetry.

Warning: this repository is intended for use only in tools maintained by the Go team, including tools in the Go distribution and auxiliary tools like gopls or govulncheck. There are no compatibility guarantees for any of the packages here: public APIs will change in breaking ways as the telemetry integration is refined.

Notable Packages

Contributing

This repository uses Gerrit for code changes. To learn how to submit changes to this repository, see https://golang.org/doc/contribute.html.

The main issue tracker for the time repository is located at https://github.com/golang/go/issues. Prefix your issue with “x/telemetry:” in the subject line, so it is easy to find.

Linting & Formatting

This repository uses eslint to format TS files, stylelint to format CSS files, and prettier to format TS, CSS, Markdown, and YAML files.

See the style guides:

It is encouraged that all TS and CSS code be run through formatters before submitting a change. However, it is not a strict requirement enforced by CI.

Installing npm Dependencies:

  1. Install docker
  2. Run ./npm install

Run ESLint, Stylelint, & Prettier

./npm run all