system

package
v1.0.0-alpha.1 Latest Latest
Warning

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

Go to latest
Published: May 24, 2023 License: MIT Imports: 16 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var ErrLockerLocked = errors.Sentinel("locker: cannot acquire lock, already locked")
View Source
var Version = "develop"

Functions

func FirstNotEmpty

func FirstNotEmpty(v ...string) string

FirstNotEmpty returns the first string passed in that is not an empty value.

func FormatBytes

func FormatBytes[T int | int16 | int32 | int64 | uint | uint16 | uint32 | uint64](b T) string

func MustInt

func MustInt(v string) int

func RandomString

func RandomString(n int) string

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

func ScanReader(r io.Reader, callback func(line []byte)) error

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

func TrimIPSuffix(s string) string

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 NewAtomic

func NewAtomic[T any](v T) *Atomic[T]

func (*Atomic[T]) Load

func (a *Atomic[T]) Load() T

Load loads the string value and returns it.

func (*Atomic[T]) MarshalJSON

func (a *Atomic[T]) MarshalJSON() ([]byte, error)

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

func (a *Atomic[T]) UnmarshalJSON(b []byte) error

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

type Information struct {
	Version string `json:"version"`
	System  System `json:"system"`
}

func GetSystemInformation

func GetSystemInformation() (*Information, error)

type Locker

type Locker struct {
	// contains filtered or unexported fields
}

func NewLocker

func NewLocker() *Locker

NewLocker returns a new Locker instance.

func (*Locker) Acquire

func (l *Locker) Acquire() error

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

func (l *Locker) IsLocked() bool

IsLocked returns the current state of the locker channel. If there is currently a value in the channel, it is assumed to be locked.

func (*Locker) Release

func (l *Locker) Release()

Release will drain the locker channel so that we can properly re-acquire it at a later time. If the channel is not currently locked this function is a no-op and will immediately return.

func (*Locker) TryAcquire

func (l *Locker) TryAcquire(ctx context.Context) error

TryAcquire will attempt to acquire a power-lock until the context provided is canceled.

type Rate

type Rate struct {
	// contains filtered or unexported fields
}

Rate defines a rate limiter of n items (limit) per duration of time.

func NewRate

func NewRate(limit uint64, duration time.Duration) *Rate

func (*Rate) Reset

func (r *Rate) Reset()

Reset resets the internal state of the rate limiter back to zero.

func (*Rate) Try

func (r *Rate) Try() bool

Try returns true if under the rate limit defined, or false if the rate limit has been exceeded for the current duration.

type SinkName

type SinkName string

SinkName represents one of the registered sinks for a server.

const (
	// LogSink handles console output for game servers, including messages being
	// sent via Kuber to the console instance.
	LogSink SinkName = "log"
	// InstallSink handles installation output for a server.
	InstallSink SinkName = "install"
)

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

func (p *SinkPool) Off(c chan []byte)

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) On

func (p *SinkPool) On(c chan []byte)

On adds a channel to the sink pool instance.

func (*SinkPool) Push

func (p *SinkPool) Push(data []byte)

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)".

type System

type System struct {
	Architecture  string `json:"architecture"`
	CPUThreads    int    `json:"cpu_threads"`
	MemoryBytes   int64  `json:"memory_bytes"`
	KernelVersion string `json:"kernel_version"`
	OS            string `json:"os"`
	OSType        string `json:"os_type"`
}

Jump to

Keyboard shortcuts

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