Documentation ¶
Overview ¶
Classical-inheritance-style service declarations. Services can be started, then stopped, then optionally restarted. Users can override the OnStart/OnStop methods. By default, these methods are guaranteed to be called at most once. A call to Reset will panic, unless OnReset is overwritten, allowing OnStart/OnStop to be called again. Caller must ensure that Start() and Stop() are not called concurrently. It is ok to call Stop() without calling Start() first. Services cannot be re-started unless OnReset is overwritten to allow it.
Typical usage:
type FooService struct { BaseService // private fields }
func NewFooService() *FooService { fs := &FooService{ // init } fs.BaseService = *NewBaseService(log, "FooService", fs) return fs }
func (fs *FooService) OnStart() error { fs.BaseService.OnStart() // Always call the overridden method. // initialize private fields // start subroutines, etc. }
func (fs *FooService) OnStop() error { fs.BaseService.OnStop() // Always call the overridden method. // close/destroy private fields // stop subroutines, etc. }
Index ¶
- Constants
- Variables
- func Arr(items ...interface{}) []interface{}
- func Black(args ...interface{}) string
- func Blue(args ...interface{}) string
- func Connect(protoAddr string) (net.Conn, error)
- func Cyan(args ...interface{}) string
- func EnsureDir(dir string, mode os.FileMode) error
- func Exit(s string)
- func ExpUint64(a, b uint64) uint64
- func FileExists(filePath string) bool
- func Fingerprint(slice []byte) []byte
- func GetInt64BE(src []byte) int64
- func GetInt64LE(src []byte) int64
- func GetUint64BE(src []byte) uint64
- func GetUint64LE(src []byte) uint64
- func Green(args ...interface{}) string
- func Int64FromWord256(word Word256) int64
- func IsZeros(slice []byte) bool
- func LeftPadBytes(slice []byte, l int) []byte
- func LeftPadString(s string, totalLength int) string
- func Magenta(args ...interface{}) string
- func MaxInt(a, b int) int
- func MaxInt16(a, b int16) int16
- func MaxInt32(a, b int32) int32
- func MaxInt64(a, b int64) int64
- func MaxInt8(a, b int8) int8
- func MaxUint(a, b uint) uint
- func MaxUint16(a, b uint16) uint16
- func MaxUint32(a, b uint32) uint32
- func MaxUint64(a, b uint64) uint64
- func MaxUint8(a, b uint8) uint8
- func MinInt(a, b int) int
- func MinInt16(a, b int16) int16
- func MinInt32(a, b int32) int32
- func MinInt64(a, b int64) int64
- func MinInt8(a, b int8) int8
- func MinUint(a, b uint) uint
- func MinUint16(a, b uint16) uint16
- func MinUint32(a, b uint32) uint32
- func MinUint64(a, b uint64) uint64
- func MinUint8(a, b uint8) uint8
- func MustReadFile(filePath string) []byte
- func MustWriteFile(filePath string, contents []byte, mode os.FileMode)
- func MutateByteSlice(bytez []byte) []byte
- func PanicConsensus(v interface{})
- func PanicCrisis(v interface{})
- func PanicQ(v interface{})
- func PanicSanity(v interface{})
- func Parallel(tasks ...func())
- func Prompt(prompt string, defaultValue string) (string, error)
- func PutInt64BE(dest []byte, i int64)
- func PutInt64LE(dest []byte, i int64)
- func PutUint64BE(dest []byte, i uint64)
- func PutUint64LE(dest []byte, i uint64)
- func RandBytes(n int) []byte
- func RandFloat32() float32
- func RandInt() int
- func RandInt16() int16
- func RandInt32() int32
- func RandInt64() int64
- func RandStr(length int) string
- func RandTime() time.Time
- func RandUint() uint
- func RandUint16() uint16
- func RandUint16Exp() uint16
- func RandUint32() uint32
- func RandUint32Exp() uint32
- func RandUint64() uint64
- func RandUint64Exp() uint64
- func ReadFile(filePath string) ([]byte, error)
- func Red(args ...interface{}) string
- func RightPadBytes(slice []byte, l int) []byte
- func RightPadString(s string, totalLength int) string
- func SanitizeHex(hex string) string
- func SearchUint64s(a []uint64, x uint64) int
- func Tempdir(prefix string) (*os.File, string)
- func Tempfile(prefix string) (*os.File, string)
- func TrapSignal(cb func())
- func TrimmedString(b []byte) string
- func Tuple256Split(t Tuple256) (Word256, Word256)
- func Uint64FromWord256(word Word256) uint64
- func White(args ...interface{}) string
- func WriteFile(filePath string, contents []byte, mode os.FileMode) error
- func WriteFileAtomic(filePath string, newBytes []byte, mode os.FileMode) error
- func Yellow(args ...interface{}) string
- type BaseService
- func (bs *BaseService) IsRunning() bool
- func (bs *BaseService) OnReset() error
- func (bs *BaseService) OnStart() error
- func (bs *BaseService) OnStop()
- func (bs *BaseService) Reset() (bool, error)
- func (bs *BaseService) Start() (bool, error)
- func (bs *BaseService) Stop() bool
- func (bs *BaseService) String() string
- func (bs *BaseService) Wait()
- type BitArray
- func (bA *BitArray) And(o *BitArray) *BitArray
- func (bA *BitArray) Bytes() []byte
- func (bA *BitArray) Copy() *BitArray
- func (bA *BitArray) GetIndex(i int) bool
- func (bA *BitArray) IsEmpty() bool
- func (bA *BitArray) IsFull() bool
- func (bA *BitArray) Not() *BitArray
- func (bA *BitArray) Or(o *BitArray) *BitArray
- func (bA *BitArray) PickRandom() (int, bool)
- func (bA *BitArray) SetIndex(i int, v bool) bool
- func (bA *BitArray) Size() int
- func (bA *BitArray) String() string
- func (bA *BitArray) StringIndented(indent string) string
- func (bA *BitArray) Sub(o *BitArray) *BitArray
- func (bA *BitArray) Update(o *BitArray)
- type BufferCloser
- type CMap
- type Comparable
- type Heap
- type PrefixedReader
- type QuitService
- type RepeatTimer
- type Service
- type StackError
- type ThrottleTimer
- type Tuple256
- type Tuple256Slice
- type Uint64Slice
- type Word256
Constants ¶
const ( ANSIReset = "\x1b[0m" ANSIBright = "\x1b[1m" ANSIDim = "\x1b[2m" ANSIUnderscore = "\x1b[4m" ANSIBlink = "\x1b[5m" ANSIReverse = "\x1b[7m" ANSIHidden = "\x1b[8m" ANSIFgBlack = "\x1b[30m" ANSIFgRed = "\x1b[31m" ANSIFgGreen = "\x1b[32m" ANSIFgYellow = "\x1b[33m" ANSIFgBlue = "\x1b[34m" ANSIFgMagenta = "\x1b[35m" ANSIFgCyan = "\x1b[36m" ANSIFgWhite = "\x1b[37m" ANSIBgBlack = "\x1b[40m" ANSIBgRed = "\x1b[41m" ANSIBgGreen = "\x1b[42m" ANSIBgYellow = "\x1b[43m" ANSIBgBlue = "\x1b[44m" ANSIBgMagenta = "\x1b[45m" ANSIBgCyan = "\x1b[46m" ANSIBgWhite = "\x1b[47m" )
Variables ¶
var ( Zero256 = Word256{0} One256 = Word256{1} )
var Fmt = fmt.Sprintf
var (
GoPath = os.Getenv("GOPATH")
)
Functions ¶
func FileExists ¶
func Fingerprint ¶
func GetInt64BE ¶
func GetInt64LE ¶
func GetUint64BE ¶
func GetUint64LE ¶
func Int64FromWord256 ¶
func LeftPadBytes ¶
func LeftPadString ¶
func MustReadFile ¶
func MutateByteSlice ¶
Contract: !bytes.Equal(input, output) && len(input) >= len(output)
func PanicConsensus ¶
func PanicConsensus(v interface{})
Indicates a failure of consensus. Someone was malicious or something has gone horribly wrong. These should really boot us into an "emergency-recover" mode
func PanicCrisis ¶
func PanicCrisis(v interface{})
A panic here means something has gone horribly wrong, in the form of data corruption or failure of the operating system. In a correct/healthy system, these should never fire. If they do, it's indicative of a much more serious problem.
func PanicSanity ¶
func PanicSanity(v interface{})
A panic resulting from a sanity check means there is a programmer error and some gaurantee is not satisfied.
func PutInt64BE ¶
func PutInt64LE ¶
func PutUint64BE ¶
func PutUint64LE ¶
func RandFloat32 ¶
func RandFloat32() float32
func RandUint16 ¶
func RandUint16() uint16
func RandUint16Exp ¶
func RandUint16Exp() uint16
Distributed pseudo-exponentially to test for various cases
func RandUint32 ¶
func RandUint32() uint32
func RandUint32Exp ¶
func RandUint32Exp() uint32
Distributed pseudo-exponentially to test for various cases
func RandUint64 ¶
func RandUint64() uint64
func RandUint64Exp ¶
func RandUint64Exp() uint64
Distributed pseudo-exponentially to test for various cases
func RightPadBytes ¶
func RightPadString ¶
func SanitizeHex ¶
SanitizeHex trim the prefix '0x'|'0X' if present
func SearchUint64s ¶
func TrapSignal ¶
func TrapSignal(cb func())
func TrimmedString ¶
func Tuple256Split ¶
func Uint64FromWord256 ¶
func WriteFileAtomic ¶
Writes to newBytes to filePath. Guaranteed not to lose *both* oldBytes and newBytes, (assuming that the OS is perfect)
Types ¶
type BaseService ¶
type BaseService struct { Quit chan struct{} // contains filtered or unexported fields }
func NewBaseService ¶
func NewBaseService(name string, impl Service) *BaseService
func (*BaseService) OnStart ¶
func (bs *BaseService) OnStart() error
Implements Service NOTE: Do not put anything in here, that way users don't need to call BaseService.OnStart()
func (*BaseService) OnStop ¶
func (bs *BaseService) OnStop()
Implements Service NOTE: Do not put anything in here, that way users don't need to call BaseService.OnStop()
func (*BaseService) Wait ¶
func (bs *BaseService) Wait()
type BitArray ¶
type BitArray struct { Bits int `json:"bits"` // NOTE: persisted via reflect, must be exported Elems []uint64 `json:"elems"` // NOTE: persisted via reflect, must be exported // contains filtered or unexported fields }
func NewBitArray ¶
There is no BitArray whose Size is 0. Use nil instead.
func (*BitArray) PickRandom ¶
func (*BitArray) StringIndented ¶
type BufferCloser ¶
NOTE: Not goroutine safe
func NewBufferCloser ¶
func NewBufferCloser(buf []byte) *BufferCloser
func (*BufferCloser) Close ¶
func (bc *BufferCloser) Close() error
func (*BufferCloser) WriteByte ¶
func (bc *BufferCloser) WriteByte(c byte) error
func (*BufferCloser) WriteString ¶
func (bc *BufferCloser) WriteString(s string) (n int, err error)
type CMap ¶
type CMap struct {
// contains filtered or unexported fields
}
CMap is a goroutine-safe map
type Comparable ¶
type Comparable interface {
Less(o interface{}) bool
}
type Heap ¶
type Heap struct {
// contains filtered or unexported fields
}
func (*Heap) Push ¶
func (h *Heap) Push(value interface{}, priority Comparable)
func (*Heap) Update ¶
func (h *Heap) Update(value interface{}, priority Comparable)
type PrefixedReader ¶
type PrefixedReader struct { Prefix []byte // contains filtered or unexported fields }
func NewPrefixedReader ¶
func NewPrefixedReader(prefix []byte, reader io.Reader) *PrefixedReader
type QuitService ¶
type QuitService struct {
BaseService
}
func NewQuitService ¶
func NewQuitService(name string, impl Service) *QuitService
type RepeatTimer ¶
RepeatTimer repeatedly sends a struct{}{} to .Ch after each "dur" period. It's good for keeping connections alive. A RepeatTimer must be Stop()'d or it will keep a goroutine alive.
func NewRepeatTimer ¶
func NewRepeatTimer(name string, dur time.Duration) *RepeatTimer
func (*RepeatTimer) Stop ¶
func (t *RepeatTimer) Stop() bool
For ease of .Stop()'ing services before .Start()'ing them, we ignore .Stop()'s on nil RepeatTimers.
type StackError ¶
type StackError struct { Err interface{} Stack []byte }
func (StackError) Error ¶
func (se StackError) Error() string
func (StackError) String ¶
func (se StackError) String() string
type ThrottleTimer ¶
type ThrottleTimer struct { Name string Ch chan struct{} // contains filtered or unexported fields }
ThrottleTimer fires an event at most "dur" after each .Set() call. If a short burst of .Set() calls happens, ThrottleTimer fires once. If a long continuous burst of .Set() calls happens, ThrottleTimer fires at most once every "dur".
func NewThrottleTimer ¶
func NewThrottleTimer(name string, dur time.Duration) *ThrottleTimer
func (*ThrottleTimer) Set ¶
func (t *ThrottleTimer) Set()
func (*ThrottleTimer) Stop ¶
func (t *ThrottleTimer) Stop() bool
For ease of .Stop()'ing services before .Start()'ing them, we ignore .Stop()'s on nil ThrottleTimers
func (*ThrottleTimer) Unset ¶
func (t *ThrottleTimer) Unset()
type Tuple256Slice ¶
type Tuple256Slice []Tuple256
func (Tuple256Slice) Len ¶
func (p Tuple256Slice) Len() int
func (Tuple256Slice) Less ¶
func (p Tuple256Slice) Less(i, j int) bool
func (Tuple256Slice) Sort ¶
func (p Tuple256Slice) Sort()
func (Tuple256Slice) Swap ¶
func (p Tuple256Slice) Swap(i, j int)
type Uint64Slice ¶
type Uint64Slice []uint64
func (Uint64Slice) Len ¶
func (p Uint64Slice) Len() int
func (Uint64Slice) Less ¶
func (p Uint64Slice) Less(i, j int) bool
func (Uint64Slice) Search ¶
func (p Uint64Slice) Search(x uint64) int
func (Uint64Slice) Sort ¶
func (p Uint64Slice) Sort()
func (Uint64Slice) Swap ¶
func (p Uint64Slice) Swap(i, j int)
type Word256 ¶
type Word256 [32]byte