common

package
v1.4.1 Latest Latest
Warning

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

Go to latest
Published: Nov 7, 2019 License: Apache-2.0, Apache-2.0, Apache-2.0 Imports: 19 Imported by: 0

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

View Source
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

View Source
var (
	Zero256 = Word256{0}
	One256  = Word256{1}
)
View Source
var Fmt = fmt.Sprintf
View Source
var (
	GoPath = os.Getenv("GOPATH")
)

Functions

func Arr

func Arr(items ...interface{}) []interface{}

func Black

func Black(args ...interface{}) string

func Blue

func Blue(args ...interface{}) string

func Connect

func Connect(protoAddr string) (net.Conn, error)

protoAddr: e.g. "tcp://127.0.0.1:8080" or "unix:///tmp/test.sock"

func Cyan

func Cyan(args ...interface{}) string

func EnsureDir

func EnsureDir(dir string, mode os.FileMode) error

func Exit

func Exit(s string)

func ExpUint64

func ExpUint64(a, b uint64) uint64

func FileExists

func FileExists(filePath string) bool

func Fingerprint

func Fingerprint(slice []byte) []byte

func GetInt64BE

func GetInt64BE(src []byte) int64

func GetInt64LE

func GetInt64LE(src []byte) int64

func GetUint64BE

func GetUint64BE(src []byte) uint64

func GetUint64LE

func GetUint64LE(src []byte) uint64

func Green

func Green(args ...interface{}) string

func Int64FromWord256

func Int64FromWord256(word Word256) int64

func IsZeros

func IsZeros(slice []byte) bool

func LeftPadBytes

func LeftPadBytes(slice []byte, l int) []byte

func LeftPadString

func LeftPadString(s string, totalLength int) string

func Magenta

func Magenta(args ...interface{}) string

func MaxInt

func MaxInt(a, b int) int

func MaxInt16

func MaxInt16(a, b int16) int16

func MaxInt32

func MaxInt32(a, b int32) int32

func MaxInt64

func MaxInt64(a, b int64) int64

func MaxInt8

func MaxInt8(a, b int8) int8

func MaxUint

func MaxUint(a, b uint) uint

func MaxUint16

func MaxUint16(a, b uint16) uint16

func MaxUint32

func MaxUint32(a, b uint32) uint32

func MaxUint64

func MaxUint64(a, b uint64) uint64

func MaxUint8

func MaxUint8(a, b uint8) uint8

func MinInt

func MinInt(a, b int) int

func MinInt16

func MinInt16(a, b int16) int16

func MinInt32

func MinInt32(a, b int32) int32

func MinInt64

func MinInt64(a, b int64) int64

func MinInt8

func MinInt8(a, b int8) int8

func MinUint

func MinUint(a, b uint) uint

func MinUint16

func MinUint16(a, b uint16) uint16

func MinUint32

func MinUint32(a, b uint32) uint32

func MinUint64

func MinUint64(a, b uint64) uint64

func MinUint8

func MinUint8(a, b uint8) uint8

func MustReadFile

func MustReadFile(filePath string) []byte

func MustWriteFile

func MustWriteFile(filePath string, contents []byte, mode os.FileMode)

func MutateByteSlice

func MutateByteSlice(bytez []byte) []byte

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 PanicQ

func PanicQ(v interface{})

For those times when we're not sure if we should panic

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 Parallel

func Parallel(tasks ...func())

func Prompt

func Prompt(prompt string, defaultValue string) (string, error)

func PutInt64BE

func PutInt64BE(dest []byte, i int64)

func PutInt64LE

func PutInt64LE(dest []byte, i int64)

func PutUint64BE

func PutUint64BE(dest []byte, i uint64)

func PutUint64LE

func PutUint64LE(dest []byte, i uint64)

func RandBytes

func RandBytes(n int) []byte

func RandFloat32

func RandFloat32() float32

func RandInt

func RandInt() int

func RandInt16

func RandInt16() int16

func RandInt32

func RandInt32() int32

func RandInt64

func RandInt64() int64

func RandStr

func RandStr(length int) string

Constructs an alphanumeric string of given length.

func RandTime

func RandTime() time.Time

func RandUint

func RandUint() uint

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 ReadFile

func ReadFile(filePath string) ([]byte, error)

func Red

func Red(args ...interface{}) string

func RightPadBytes

func RightPadBytes(slice []byte, l int) []byte

func RightPadString

func RightPadString(s string, totalLength int) string

func SanitizeHex

func SanitizeHex(hex string) string

SanitizeHex trim the prefix '0x'|'0X' if present

func SearchUint64s

func SearchUint64s(a []uint64, x uint64) int

func Tempdir

func Tempdir(prefix string) (*os.File, string)

func Tempfile

func Tempfile(prefix string) (*os.File, string)

func TrapSignal

func TrapSignal(cb func())

func TrimmedString

func TrimmedString(b []byte) string

func Tuple256Split

func Tuple256Split(t Tuple256) (Word256, Word256)

func Uint64FromWord256

func Uint64FromWord256(word Word256) uint64

func White

func White(args ...interface{}) string

func WriteFile

func WriteFile(filePath string, contents []byte, mode os.FileMode) error

func WriteFileAtomic

func WriteFileAtomic(filePath string, newBytes []byte, mode os.FileMode) error

Writes to newBytes to filePath. Guaranteed not to lose *both* oldBytes and newBytes, (assuming that the OS is perfect)

func Yellow

func Yellow(args ...interface{}) string

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

func (bs *BaseService) IsRunning() bool

Implements Service

func (*BaseService) OnReset

func (bs *BaseService) OnReset() error

Implements Service

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

func (bs *BaseService) Reset() (bool, error)

Implements Service

func (*BaseService) Start

func (bs *BaseService) Start() (bool, error)

Implements Servce

func (*BaseService) Stop

func (bs *BaseService) Stop() bool

Implements Service

func (*BaseService) String

func (bs *BaseService) String() string

Implements Servce

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

func NewBitArray(bits int) *BitArray

There is no BitArray whose Size is 0. Use nil instead.

func (*BitArray) And

func (bA *BitArray) And(o *BitArray) *BitArray

Returns a BitArray of smaller bit size.

func (*BitArray) Bytes

func (bA *BitArray) Bytes() []byte

func (*BitArray) Copy

func (bA *BitArray) Copy() *BitArray

func (*BitArray) GetIndex

func (bA *BitArray) GetIndex(i int) bool

NOTE: behavior is undefined if i >= bA.Bits

func (*BitArray) IsEmpty

func (bA *BitArray) IsEmpty() bool

func (*BitArray) IsFull

func (bA *BitArray) IsFull() bool

func (*BitArray) Not

func (bA *BitArray) Not() *BitArray

func (*BitArray) Or

func (bA *BitArray) Or(o *BitArray) *BitArray

Returns a BitArray of larger bits size.

func (*BitArray) PickRandom

func (bA *BitArray) PickRandom() (int, bool)

func (*BitArray) SetIndex

func (bA *BitArray) SetIndex(i int, v bool) bool

NOTE: behavior is undefined if i >= bA.Bits

func (*BitArray) Size

func (bA *BitArray) Size() int

func (*BitArray) String

func (bA *BitArray) String() string

func (*BitArray) StringIndented

func (bA *BitArray) StringIndented(indent string) string

func (*BitArray) Sub

func (bA *BitArray) Sub(o *BitArray) *BitArray

func (*BitArray) Update

func (bA *BitArray) Update(o *BitArray)

NOTE: other bitarray o is not locked when reading, so if necessary, caller must copy or lock o prior to calling Update. If bA is nil, does nothing.

type BufferCloser

type BufferCloser struct {
	bytes.Buffer
	Closed bool
}

NOTE: Not goroutine safe

func NewBufferCloser

func NewBufferCloser(buf []byte) *BufferCloser

func (*BufferCloser) Close

func (bc *BufferCloser) Close() error

func (*BufferCloser) Write

func (bc *BufferCloser) Write(p []byte) (n int, err error)

func (*BufferCloser) WriteByte

func (bc *BufferCloser) WriteByte(c byte) error

func (*BufferCloser) WriteRune

func (bc *BufferCloser) WriteRune(r rune) (n int, err 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

func NewCMap

func NewCMap() *CMap

func (*CMap) Clear

func (cm *CMap) Clear()

func (*CMap) Delete

func (cm *CMap) Delete(key string)

func (*CMap) Get

func (cm *CMap) Get(key string) interface{}

func (*CMap) Has

func (cm *CMap) Has(key string) bool

func (*CMap) Set

func (cm *CMap) Set(key string, value interface{})

func (*CMap) Size

func (cm *CMap) Size() int

func (*CMap) Values

func (cm *CMap) Values() []interface{}

type Comparable

type Comparable interface {
	Less(o interface{}) bool
}

type Heap

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

func NewHeap

func NewHeap() *Heap

func (*Heap) Len

func (h *Heap) Len() int64

func (*Heap) Peek

func (h *Heap) Peek() interface{}

func (*Heap) Pop

func (h *Heap) Pop() interface{}

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

func (*PrefixedReader) Read

func (pr *PrefixedReader) Read(p []byte) (n int, err error)

type QuitService

type QuitService struct {
	BaseService
}

func NewQuitService

func NewQuitService(name string, impl Service) *QuitService

type RepeatTimer

type RepeatTimer struct {
	Ch chan time.Time
	// contains filtered or unexported fields
}

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

func (t *RepeatTimer) Reset()

Wait the duration again before firing.

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 Service

type Service interface {
	Start() (bool, error)
	OnStart() error

	Stop() bool
	OnStop()

	Reset() (bool, error)
	OnReset() error

	IsRunning() bool

	String() string
}

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 Tuple256

type Tuple256 struct {
	First  Word256
	Second Word256
}

func (Tuple256) Compare

func (tuple Tuple256) Compare(other Tuple256) int

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

func Int64ToWord256

func Int64ToWord256(i int64) Word256

func LeftPadWord256

func LeftPadWord256(bz []byte) (word Word256)

func RightPadWord256

func RightPadWord256(bz []byte) (word Word256)

func Uint64ToWord256

func Uint64ToWord256(i uint64) Word256

func (Word256) Bytes

func (w Word256) Bytes() []byte

func (Word256) Compare

func (w Word256) Compare(other Word256) int

func (Word256) Copy

func (w Word256) Copy() Word256

func (Word256) IsZero

func (w Word256) IsZero() bool

func (Word256) Postfix

func (w Word256) Postfix(n int) []byte

func (Word256) Prefix

func (w Word256) Prefix(n int) []byte

func (Word256) String

func (w Word256) String() string

func (Word256) TrimmedString

func (w Word256) TrimmedString() string

Jump to

Keyboard shortcuts

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