Documentation ¶
Index ¶
- Variables
- func FirstNotEmpty(v ...string) string
- func FormatBytes[T int | int16 | int32 | int64 | uint | uint16 | uint32 | uint64](b T) string
- func MustInt(v string) int
- func RandomString(n int) string
- func ScanReader(r io.Reader, callback func(line []byte)) error
- func TrimIPSuffix(s string) string
- type Atomic
- type AtomicBool
- type AtomicString
- type Information
- type Locker
- type Rate
- type SinkName
- type SinkPool
- type System
Constants ¶
This section is empty.
Variables ¶
var ErrLockerLocked = errors.Sentinel("locker: cannot acquire lock, already locked")
var Version = "develop"
Functions ¶
func FirstNotEmpty ¶
FirstNotEmpty returns the first string passed in that is not an empty value.
func FormatBytes ¶
func RandomString ¶
RandomString generates a random string of alpha-numeric characters using a pseudo-random number generator. The output of this function IS NOT cryptographically secure, it is used solely for generating random strings outside a security context.
func ScanReader ¶
ScanReader reads up to 64KB of line from the reader and emits that value over the websocket. If a line exceeds that size, it is truncated and only that amount is sent over.
func TrimIPSuffix ¶
TrimIPSuffix removes the internal port value from an IP address to ensure we're only ever working directly with the IP address.
Types ¶
type Atomic ¶
type Atomic[T any] struct { // contains filtered or unexported fields }
func (*Atomic[T]) MarshalJSON ¶
MarshalJSON marshals the Atomic[T] value into JSON.
func (*Atomic[T]) Store ¶
func (a *Atomic[T]) Store(v T)
Store stores the string value passed atomically.
func (*Atomic[T]) UnmarshalJSON ¶
UnmarshalJSON unmarshals the JSON value into the Atomic[T] value.
type AtomicBool ¶
type AtomicBool struct {
// contains filtered or unexported fields
}
func NewAtomicBool ¶
func NewAtomicBool(v bool) *AtomicBool
func (*AtomicBool) Load ¶
func (ab *AtomicBool) Load() bool
func (*AtomicBool) MarshalJSON ¶
func (ab *AtomicBool) MarshalJSON() ([]byte, error)
func (*AtomicBool) Store ¶
func (ab *AtomicBool) Store(v bool)
func (*AtomicBool) SwapIf ¶
func (ab *AtomicBool) SwapIf(v bool) bool
SwapIf stores the value "v" if the current value stored in the AtomicBool is the opposite boolean value. If successfully swapped, the response is "true", otherwise "false" is returned.
func (*AtomicBool) UnmarshalJSON ¶
func (ab *AtomicBool) UnmarshalJSON(b []byte) error
type AtomicString ¶
type AtomicString struct {
// contains filtered or unexported fields
}
AtomicString allows for reading/writing to a given struct field without having to worry about a potential race condition scenario. Under the hood it uses a simple sync.RWMutex to control access to the value.
func NewAtomicString ¶
func NewAtomicString(v string) *AtomicString
func (*AtomicString) Load ¶
func (as *AtomicString) Load() string
Load loads the string value and returns it.
func (*AtomicString) MarshalJSON ¶
func (as *AtomicString) MarshalJSON() ([]byte, error)
func (*AtomicString) Store ¶
func (as *AtomicString) Store(v string)
Store stores the string value passed atomically.
func (*AtomicString) UnmarshalJSON ¶
func (as *AtomicString) UnmarshalJSON(b []byte) error
type Information ¶
func GetSystemInformation ¶
func GetSystemInformation() (*Information, error)
type Locker ¶
type Locker struct {
// contains filtered or unexported fields
}
func (*Locker) Acquire ¶
Acquire will acquire the power lock if it is not currently locked. If it is already locked, acquire will fail to acquire the lock, and will return false.
func (*Locker) Destroy ¶
func (l *Locker) Destroy()
Destroy cleans up the power locker by closing the channel.
func (*Locker) IsLocked ¶
IsLocked returns the current state of the locker channel. If there is currently a value in the channel, it is assumed to be locked.
type Rate ¶
type Rate struct {
// contains filtered or unexported fields
}
Rate defines a rate limiter of n items (limit) per duration of time.
type SinkPool ¶
type SinkPool struct {
// contains filtered or unexported fields
}
SinkPool represents a pool with sinks.
func NewSinkPool ¶
func NewSinkPool() *SinkPool
NewSinkPool returns a new empty SinkPool. A sink pool generally lives with a server instance for its full lifetime.
func (*SinkPool) Destroy ¶
func (p *SinkPool) Destroy()
Destroy destroys the pool by removing and closing all sinks and destroying all of the channels that are present.
func (*SinkPool) Off ¶
Off removes a given channel from the sink pool. If no matching sink is found this function is a no-op. If a matching channel is found, it will be removed.
func (*SinkPool) Push ¶
Push sends a given message to each of the channels registered in the pool. This will use a Ring Buffer channel in order to avoid blocking the channel sends, and attempt to push though the most recent messages in the queue in favor of the oldest messages.
If the channel becomes full and isn't being drained fast enough, this function will remove the oldest message in the channel, and then push the message that it got onto the end, effectively making the channel a rolling buffer.
There is a potential for data to be lost when passing it through this function, but only in instances where the channel buffer is full and the channel is not drained fast enough, in which case dropping messages is most likely the best option anyways. This uses waitgroups to allow every channel to attempt its send concurrently thus making the total blocking time of this function "O(1)" instead of "O(n)".