mirror of
https://github.com/hanzoai/insights-go.git
synced 2026-09-30 22:46:12 +00:00
* intitial refactor: - Add Context-based graceful shutdown and drain phase for enqueued requests - Use buffered channels vs. mutex for concurrency mgmt. - Use atomic.Pointer vs. locks for FF mgmt - Use Callback ifc vs. lossy internal tracking for unit test result validation - Add new APIs mirroring current that accept caller's Context to control operation timeouts * expose batch submission timeout with default equiv to old hardcoded timeout * restructure event submission and batching pipeline * overhaul tests; implement new stress tests and address coverage gaps * parallelize tests where safe to do so (3x CI time savings!) * introduce faster pure Go JSON seralization library * more refactors: unit tests & benchmarks * DRY up shutdown req drain and prepareForSend serializer * use go-json in CLI utils too; remove redundant helpers * move error type to proper pkg * DRY up loop() and fix deadlock in old test case * normalize CI and Makefile test and benchmark target behavviors * more realistic feature flags benchmark * replace leaky time.After pattern with idiomatic safer Timers * internal queue size minimums decoupled from batch and worker configs * remove dead comments * fix test bug * update default http.Transport cfg to avoid conn pool as bottleneck; update batch enqueue limiting strategy and tests/benches * adjust stress test defaults to match prod * update flaky tests and rm stale file * make graceful shutdown timeout opt-in for now * fix tests that reverted to hold helper utils during rebase * fix flaky test due to overhead from -race detector now default in test flags * add more graceful shutdown test cases
65 lines
2.0 KiB
Go
65 lines
2.0 KiB
Go
package posthog
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
)
|
|
|
|
// Returned by the `NewWithConfig` function when the one of the configuration
|
|
// fields was set to an impossible value (like a negative duration).
|
|
type ConfigError struct {
|
|
|
|
// A human-readable message explaining why the configuration field's value
|
|
// is invalid.
|
|
Reason string
|
|
|
|
// The name of the configuration field that was carrying an invalid value.
|
|
Field string
|
|
|
|
// The value of the configuration field that caused the error.
|
|
Value interface{}
|
|
}
|
|
|
|
func (e ConfigError) Error() string {
|
|
return fmt.Sprintf("posthog.NewWithConfig: %s (posthog.Config.%s: %#v)", e.Reason, e.Field, e.Value)
|
|
}
|
|
|
|
// Instances of this type are used to represent errors returned when a field was
|
|
// no initialize properly in a structure passed as argument to one of the
|
|
// functions of this package.
|
|
type FieldError struct {
|
|
|
|
// The human-readable representation of the type of structure that wasn't
|
|
// initialized properly.
|
|
Type string
|
|
|
|
// The name of the field that wasn't properly initialized.
|
|
Name string
|
|
|
|
// The value of the field that wasn't properly initialized.
|
|
Value interface{}
|
|
}
|
|
|
|
func (e FieldError) Error() string {
|
|
return fmt.Sprintf("%s.%s: invalid field value: %#v", e.Type, e.Name, e.Value)
|
|
}
|
|
|
|
var (
|
|
// This error is returned by methods of the `Client` interface when they are
|
|
// called after the client was already closed.
|
|
ErrClosed = errors.New("the client was already closed")
|
|
|
|
// This error is used to notify the application that too many requests are
|
|
// already being sent and no more messages can be accepted.
|
|
ErrTooManyRequests = errors.New("too many requests are already in-flight")
|
|
|
|
// This error is used to notify the client callbacks that a message send
|
|
// failed because the JSON representation of a message exceeded the upper
|
|
// limit.
|
|
ErrMessageTooBig = errors.New("the message exceeds the maximum allowed size")
|
|
|
|
// ErrNoPersonalAPIKey is returned when one tries to use feature flags
|
|
// without specifying a PersonalAPIKey.
|
|
ErrNoPersonalAPIKey = errors.New("no PersonalAPIKey provided")
|
|
)
|