common

package
v1.5.0 Latest Latest
Warning

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

Go to latest
Published: May 6, 2020 License: Apache-2.0, Apache-2.0, Apache-2.0 Imports: 20 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