hydra

package
v0.3.1 Latest Latest
Warning

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

Go to latest
Published: Jan 9, 2020 License: Apache-2.0 Imports: 22 Imported by: 7

Documentation

Index

Constants

View Source
const (
	DefaultFluentdPort       = 24224
	DefaultFieldName         = "message"
	DefaultMaxBufferMessages = 1024 * 1024
	DefaultTimeKey           = "time"
)
View Source
const (
	OpenRetryInterval = 1 * time.Second
	SEEK_TAIL         = int64(-1)
	SEEK_HEAD         = int64(0)
	DEBUG             = false
)
View Source
const (
	ConvertTypeString = iota
	ConvertTypeInt
	ConvertTypeFloat
	ConvertTypeBool
)
View Source
const (
	MessageChannelBufferLen = 1
	MonitorChannelBufferLen = 256
	LineSeparatorStr        = "\n"
	LTSVColSeparatorStr     = "\t"
	LTSVDataSeparatorStr    = ":"
	StdinFilename           = "-"
)
View Source
const (
	DefaultMonitorPort = 24223
	DefaultMonitorHost = "localhost"
)
View Source
const (
	FlashInterval = 200 * time.Millisecond
)
View Source
const (
	TailInterval = 200 * time.Millisecond
)

Variables

View Source
var (
	TimeFormatApache = TimeFormat("02/Jan/2006:15:04:05 -0700")
	TimeFormatNginx  = TimeFormat("02/Jan/2006:15:04:05 -0700")
	TimeFormatSyslog = TimeFormat("Jan 02 15:04:05")
	TimeFormatUnix   = TimeFormat("unix")
	TimeEpoch        = time.Unix(0, 0)
)
View Source
var (
	RegexpApache      = regexp.MustCompile(`^(?P<host>[^ ]*) [^ ]* (?P<user>[^ ]*) \[(?P<time>[^\]]*)\] "(?P<method>\S+)(?: +(?P<path>[^\"]*?)(?: +\S*)?)?" (?P<code>[^ ]*) (?P<size>[^ ]*)(?: "(?P<referer>[^\"]*)" "(?P<agent>[^\"]*)")?$`)
	RegexpApacheError = regexp.MustCompile(`^\[[^ ]* (?P<time>[^\]]*)\] \[(?P<level>[^\]]*)\](?: \[pid (?P<pid>[^\]]*)\])?( \[client (?P<client>[^\]]*)\])? (?P<message>.*)$`)
	RegexpNginx       = regexp.MustCompile(`^(?P<remote>[^ ]*) (?P<host>[^ ]*) (?P<user>[^ ]*) \[(?P<time>[^\]]*)\] "(?P<method>\S+)(?: +(?P<path>[^\"]*?)(?: +\S*)?)?" (?P<code>[^ ]*) (?P<size>[^ ]*)(?: "(?P<referer>[^\"]*)" "(?P<agent>[^\"]*)")?$`)
	RegexpSyslog      = regexp.MustCompile(`(?P<time>[^ ]*\s*[^ ]* [^ ]*) (?P<host>[^ ]*) (?P<ident>[a-zA-Z0-9_\/\.\-]*)(?:\[(?P<pid>[0-9]+)\])?(?:[^\:]*\:)? *(?P<message>.*)$`)
)
View Source
var DefaultTimeFormat = TimeFormat(time.RFC3339)
View Source
var (
	LineSeparator = []byte{'\n'}
)
View Source
var (
	ReadBufferSize = 64 * 1024
)

Functions

func NewFluentRecordJSON added in v0.2.0

func NewFluentRecordJSON(key string, line []byte) *fluent.TinyFluentRecord

func NewFluentRecordLTSV added in v0.2.0

func NewFluentRecordLTSV(key string, line []byte) *fluent.TinyFluentRecord

func NewFluentRecordRegexp added in v0.2.0

func NewFluentRecordRegexp(key string, line []byte, r *Regexp) *fluent.TinyFluentRecord

func NewFluentRecordSet

func NewFluentRecordSet(tag, key string, format FileFormat, mod *RecordModifier, reg *Regexp, buffer []byte) *fluent.FluentRecordSet

func Rel2Abs

func Rel2Abs(filename string) (string, error)

Types

type BoolConverter added in v0.1.1

type BoolConverter int

func (BoolConverter) Convert added in v0.1.1

func (c BoolConverter) Convert(v string) (interface{}, error)

type Config

type Config struct {
	TagPrefix        string
	FieldName        string
	ReadBufferSize   int
	Servers          []*ConfigServer
	ServerRoundRobin bool
	Logs             []*ConfigLogfile
	Receiver         *ConfigReceiver
	Monitor          *ConfigMonitor
	SubSecondTime    bool
}

func NewConfigByArgs

func NewConfigByArgs(args []string, fieldName string, monitorAddr string) *Config

func ReadConfig

func ReadConfig(filename string) (*Config, error)

func (*Config) Restrict

func (c *Config) Restrict()

type ConfigLogfile

type ConfigLogfile struct {
	Tag        string
	File       string
	FieldName  string
	Format     FileFormat
	Regexp     *Regexp
	ConvertMap ConvertMap `toml:"Types"`
	TimeParse  bool
	TimeKey    string
	TimeFormat TimeFormat
}

func (*ConfigLogfile) IsStdin added in v0.2.0

func (cl *ConfigLogfile) IsStdin() bool

func (*ConfigLogfile) Restrict

func (cl *ConfigLogfile) Restrict(c *Config)

type ConfigMonitor added in v0.0.4

type ConfigMonitor struct {
	Host string
	Port int
}

func (*ConfigMonitor) Restrict added in v0.0.4

func (cr *ConfigMonitor) Restrict(c *Config)

type ConfigReceiver

type ConfigReceiver struct {
	Host              string
	Port              int
	MaxBufferMessages int
}

func (*ConfigReceiver) Restrict

func (cr *ConfigReceiver) Restrict(c *Config)

type ConfigServer

type ConfigServer struct {
	Host string
	Port int
}

func (*ConfigServer) Address

func (cs *ConfigServer) Address() string

func (*ConfigServer) Restrict

func (cs *ConfigServer) Restrict(c *Config)

type Context added in v0.2.0

type Context struct {
	MessageCh     chan *fluent.FluentRecordSet
	MonitorCh     chan Stat
	ControlCh     chan interface{}
	InputProcess  sync.WaitGroup
	OutputProcess sync.WaitGroup
	StartProcess  sync.WaitGroup
}

func NewContext added in v0.2.0

func NewContext() *Context

func Run added in v0.2.0

func Run(config *Config) *Context

func (*Context) RunProcess added in v0.2.0

func (c *Context) RunProcess(p Process)

func (*Context) Shutdown added in v0.2.0

func (c *Context) Shutdown()

type ConvertMap added in v0.0.9

type ConvertMap struct {
	TypeMap      map[string]ConvertType
	ConverterMap map[string]Converter
}

func NewConvertMap added in v0.0.9

func NewConvertMap(config string) ConvertMap

func (ConvertMap) ConvertTypes added in v0.1.1

func (c ConvertMap) ConvertTypes(data map[string]interface{})

func (*ConvertMap) UnmarshalText added in v0.0.9

func (c *ConvertMap) UnmarshalText(text []byte) error

type ConvertType added in v0.1.4

type ConvertType int

type Converter added in v0.0.9

type Converter interface {
	Convert(string) (interface{}, error)
}

type File

type File struct {
	*os.File
	Path     string
	Tag      string
	Position int64

	FieldName      string
	FileStat       *FileStat
	Format         FileFormat
	RecordModifier *RecordModifier
	Regexp         *Regexp
	// contains filtered or unexported fields
}

func (*File) UpdateStat added in v0.0.9

func (f *File) UpdateStat() *FileStat

type FileFormat added in v0.0.9

type FileFormat int
const (
	FormatNone FileFormat = iota
	FormatLTSV
	FormatJSON
	FormatRegexp
)

func (FileFormat) String added in v0.0.9

func (i FileFormat) String() string

func (*FileFormat) UnmarshalText added in v0.0.9

func (f *FileFormat) UnmarshalText(text []byte) error

type FileStat

type FileStat struct {
	Tag      string `json:"tag"`
	File     string `json:"-"`
	Position int64  `json:"position"`
	Error    string `json:"error"`
}

func (*FileStat) ApplyTo

func (s *FileStat) ApplyTo(ss *Stats)

type FloatConverter added in v0.1.1

type FloatConverter int

func (FloatConverter) Convert added in v0.1.1

func (c FloatConverter) Convert(v string) (interface{}, error)

type InForward

type InForward struct {
	Addr net.Addr
	// contains filtered or unexported fields
}

func NewInForward

func NewInForward(config *ConfigReceiver) (*InForward, error)

func (*InForward) Run

func (f *InForward) Run(c *Context)

type InTail

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

func NewInTail

func NewInTail(config *ConfigLogfile, watcher *Watcher) (*InTail, error)

func (*InTail) Run

func (t *InTail) Run(c *Context)

InTail follow the tail of file and post BulkMessage to channel.

func (*InTail) TailStdin added in v0.2.0

func (t *InTail) TailStdin(c *Context) error

type IntConverter added in v0.1.1

type IntConverter int

func (IntConverter) Convert added in v0.1.1

func (c IntConverter) Convert(v string) (interface{}, error)

type MessageQueue

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

func NewMessageQueue

func NewMessageQueue(maxMessages int) *MessageQueue

func (*MessageQueue) Dequeue

func (q *MessageQueue) Dequeue() (*fluent.FluentRecordSet, bool)

func (*MessageQueue) Enqueue

func (q *MessageQueue) Enqueue(recordSet *fluent.FluentRecordSet) int64

func (*MessageQueue) Len

func (q *MessageQueue) Len() int

type Monitor

type Monitor struct {
	Addr net.Addr
	// contains filtered or unexported fields
}

func NewMonitor

func NewMonitor(config *Config) (*Monitor, error)

func (*Monitor) Run

func (m *Monitor) Run(c *Context)

type OutForward

type OutForward struct {
	RoundRobin bool
	// contains filtered or unexported fields
}

func NewOutForward

func NewOutForward(configServers []*ConfigServer) (*OutForward, error)

OutForward ... recieve FluentRecordSet from channel, and send it to passed loggers until success.

func (*OutForward) Run

func (f *OutForward) Run(c *Context)

type Process added in v0.2.0

type Process interface {
	Run(*Context)
}

type ReceiverStat added in v0.0.2

type ReceiverStat struct {
	Address            string `json:"address"`
	Connections        int    `json:"-"`
	TotalConnections   int    `json:"total_connections"`
	CurrentConnections int    `json:"current_connections"`
	Messages           int64  `json:"messages"`
	Disposed           int64  `json:"disposed"`
	Buffered           int64  `json:"buffered"`
	MaxBufferMessages  int64  `json:"max_buffer_messages"`
}

func (*ReceiverStat) ApplyTo added in v0.0.2

func (s *ReceiverStat) ApplyTo(ss *Stats)

type RecordModifier added in v0.1.1

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

func (*RecordModifier) Modify added in v0.1.1

func (m *RecordModifier) Modify(r *fluent.TinyFluentRecord)

type Regexp added in v0.2.0

type Regexp struct {
	*regexp.Regexp
}

func (*Regexp) UnmarshalText added in v0.2.0

func (r *Regexp) UnmarshalText(text []byte) error

type SentStat

type SentStat struct {
	Tag      string `json:"-"`
	Messages int64  `json:"messages"`
	Bytes    int64  `json:"bytes"`
	Sents    int64  `json:"sents"`
}

func (*SentStat) ApplyTo

func (s *SentStat) ApplyTo(ss *Stats)

type ServerStat

type ServerStat struct {
	Index   int    `json:"-"`
	Address string `json:"address"`
	Alive   bool   `json:"alive"`
	Error   string `json:"error"`
}

func (*ServerStat) ApplyTo

func (s *ServerStat) ApplyTo(ss *Stats)

type Signal added in v0.2.0

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

func NewSignal added in v0.2.0

func NewSignal(message string) Signal

func (Signal) Error added in v0.2.0

func (s Signal) Error() string

func (Signal) Signal added in v0.2.0

func (s Signal) Signal()

func (Signal) String added in v0.2.0

func (s Signal) String() string

type Stat

type Stat interface {
	ApplyTo(*Stats)
}

type Stats

type Stats struct {
	Sent     map[string]*SentStat `json:"sent"`
	Files    map[string]*FileStat `json:"files"`
	Servers  []*ServerStat        `json:"servers"`
	Receiver *ReceiverStat        `json:"receiver"`
	// contains filtered or unexported fields
}

func (*Stats) Run

func (ss *Stats) Run(ch chan Stat)

func (*Stats) WriteJSON

func (ss *Stats) WriteJSON(w http.ResponseWriter)

type TimeConverter added in v0.1.1

type TimeConverter TimeFormat

func (TimeConverter) Convert added in v0.1.1

func (c TimeConverter) Convert(v string) (time.Time, error)

type TimeFormat added in v0.2.0

type TimeFormat string

func (*TimeFormat) UnmarshalText added in v0.2.0

func (t *TimeFormat) UnmarshalText(text []byte) error

type Watcher

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

func NewWatcher

func NewWatcher() (*Watcher, error)

func (*Watcher) Run

func (w *Watcher) Run(c *Context)

func (*Watcher) WatchFile

func (w *Watcher) WatchFile(filename string) (chan fsnotify.Event, error)

Jump to

Keyboard shortcuts

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