mirror of
https://github.com/cwinfo/matterbridge.git
synced 2025-07-07 18:14:03 +00:00
Use mattermost v5 module (#1192)
This commit is contained in:
73
vendor/go.uber.org/zap/zapcore/encoder.go
generated
vendored
73
vendor/go.uber.org/zap/zapcore/encoder.go
generated
vendored
@ -31,6 +31,9 @@ import (
|
||||
// behavior.
|
||||
const DefaultLineEnding = "\n"
|
||||
|
||||
// OmitKey defines the key to use when callers want to remove a key from log output.
|
||||
const OmitKey = ""
|
||||
|
||||
// A LevelEncoder serializes a Level to a primitive type.
|
||||
type LevelEncoder func(Level, PrimitiveArrayEncoder)
|
||||
|
||||
@ -109,17 +112,58 @@ func EpochNanosTimeEncoder(t time.Time, enc PrimitiveArrayEncoder) {
|
||||
enc.AppendInt64(t.UnixNano())
|
||||
}
|
||||
|
||||
// ISO8601TimeEncoder serializes a time.Time to an ISO8601-formatted string
|
||||
// with millisecond precision.
|
||||
func ISO8601TimeEncoder(t time.Time, enc PrimitiveArrayEncoder) {
|
||||
enc.AppendString(t.Format("2006-01-02T15:04:05.000Z0700"))
|
||||
func encodeTimeLayout(t time.Time, layout string, enc PrimitiveArrayEncoder) {
|
||||
type appendTimeEncoder interface {
|
||||
AppendTimeLayout(time.Time, string)
|
||||
}
|
||||
|
||||
if enc, ok := enc.(appendTimeEncoder); ok {
|
||||
enc.AppendTimeLayout(t, layout)
|
||||
return
|
||||
}
|
||||
|
||||
enc.AppendString(t.Format(layout))
|
||||
}
|
||||
|
||||
// UnmarshalText unmarshals text to a TimeEncoder. "iso8601" and "ISO8601" are
|
||||
// unmarshaled to ISO8601TimeEncoder, "millis" is unmarshaled to
|
||||
// EpochMillisTimeEncoder, and anything else is unmarshaled to EpochTimeEncoder.
|
||||
// ISO8601TimeEncoder serializes a time.Time to an ISO8601-formatted string
|
||||
// with millisecond precision.
|
||||
//
|
||||
// If enc supports AppendTimeLayout(t time.Time,layout string), it's used
|
||||
// instead of appending a pre-formatted string value.
|
||||
func ISO8601TimeEncoder(t time.Time, enc PrimitiveArrayEncoder) {
|
||||
encodeTimeLayout(t, "2006-01-02T15:04:05.000Z0700", enc)
|
||||
}
|
||||
|
||||
// RFC3339TimeEncoder serializes a time.Time to an RFC3339-formatted string.
|
||||
//
|
||||
// If enc supports AppendTimeLayout(t time.Time,layout string), it's used
|
||||
// instead of appending a pre-formatted string value.
|
||||
func RFC3339TimeEncoder(t time.Time, enc PrimitiveArrayEncoder) {
|
||||
encodeTimeLayout(t, time.RFC3339, enc)
|
||||
}
|
||||
|
||||
// RFC3339NanoTimeEncoder serializes a time.Time to an RFC3339-formatted string
|
||||
// with nanosecond precision.
|
||||
//
|
||||
// If enc supports AppendTimeLayout(t time.Time,layout string), it's used
|
||||
// instead of appending a pre-formatted string value.
|
||||
func RFC3339NanoTimeEncoder(t time.Time, enc PrimitiveArrayEncoder) {
|
||||
encodeTimeLayout(t, time.RFC3339Nano, enc)
|
||||
}
|
||||
|
||||
// UnmarshalText unmarshals text to a TimeEncoder.
|
||||
// "rfc3339nano" and "RFC3339Nano" are unmarshaled to RFC3339NanoTimeEncoder.
|
||||
// "rfc3339" and "RFC3339" are unmarshaled to RFC3339TimeEncoder.
|
||||
// "iso8601" and "ISO8601" are unmarshaled to ISO8601TimeEncoder.
|
||||
// "millis" is unmarshaled to EpochMillisTimeEncoder.
|
||||
// "nanos" is unmarshaled to EpochNanosEncoder.
|
||||
// Anything else is unmarshaled to EpochTimeEncoder.
|
||||
func (e *TimeEncoder) UnmarshalText(text []byte) error {
|
||||
switch string(text) {
|
||||
case "rfc3339nano", "RFC3339Nano":
|
||||
*e = RFC3339NanoTimeEncoder
|
||||
case "rfc3339", "RFC3339":
|
||||
*e = RFC3339TimeEncoder
|
||||
case "iso8601", "ISO8601":
|
||||
*e = ISO8601TimeEncoder
|
||||
case "millis":
|
||||
@ -146,6 +190,12 @@ func NanosDurationEncoder(d time.Duration, enc PrimitiveArrayEncoder) {
|
||||
enc.AppendInt64(int64(d))
|
||||
}
|
||||
|
||||
// MillisDurationEncoder serializes a time.Duration to an integer number of
|
||||
// milliseconds elapsed.
|
||||
func MillisDurationEncoder(d time.Duration, enc PrimitiveArrayEncoder) {
|
||||
enc.AppendInt64(d.Nanoseconds() / 1e6)
|
||||
}
|
||||
|
||||
// StringDurationEncoder serializes a time.Duration using its built-in String
|
||||
// method.
|
||||
func StringDurationEncoder(d time.Duration, enc PrimitiveArrayEncoder) {
|
||||
@ -161,6 +211,8 @@ func (e *DurationEncoder) UnmarshalText(text []byte) error {
|
||||
*e = StringDurationEncoder
|
||||
case "nanos":
|
||||
*e = NanosDurationEncoder
|
||||
case "ms":
|
||||
*e = MillisDurationEncoder
|
||||
default:
|
||||
*e = SecondsDurationEncoder
|
||||
}
|
||||
@ -272,8 +324,8 @@ type ObjectEncoder interface {
|
||||
AddUint8(key string, value uint8)
|
||||
AddUintptr(key string, value uintptr)
|
||||
|
||||
// AddReflected uses reflection to serialize arbitrary objects, so it's slow
|
||||
// and allocation-heavy.
|
||||
// AddReflected uses reflection to serialize arbitrary objects, so it can be
|
||||
// slow and allocation-heavy.
|
||||
AddReflected(key string, value interface{}) error
|
||||
// OpenNamespace opens an isolated namespace where all subsequent fields will
|
||||
// be added. Applications can use namespaces to prevent key collisions when
|
||||
@ -343,6 +395,7 @@ type Encoder interface {
|
||||
Clone() Encoder
|
||||
|
||||
// EncodeEntry encodes an entry and fields, along with any accumulated
|
||||
// context, into a byte buffer and returns it.
|
||||
// context, into a byte buffer and returns it. Any fields that are empty,
|
||||
// including fields on the `Entry` type, should be omitted.
|
||||
EncodeEntry(Entry, []Field) (*buffer.Buffer, error)
|
||||
}
|
||||
|
3
vendor/go.uber.org/zap/zapcore/entry.go
generated
vendored
3
vendor/go.uber.org/zap/zapcore/entry.go
generated
vendored
@ -136,7 +136,8 @@ func (ec EntryCaller) TrimmedPath() string {
|
||||
|
||||
// An Entry represents a complete log message. The entry's structured context
|
||||
// is already serialized, but the log level, time, message, and call site
|
||||
// information are available for inspection and modification.
|
||||
// information are available for inspection and modification. Any fields left
|
||||
// empty will be omitted when encoding.
|
||||
//
|
||||
// Entries are pooled, so any functions that accept them MUST be careful not to
|
||||
// retain references to them.
|
||||
|
5
vendor/go.uber.org/zap/zapcore/error.go
generated
vendored
5
vendor/go.uber.org/zap/zapcore/error.go
generated
vendored
@ -66,11 +66,6 @@ type errorGroup interface {
|
||||
Errors() []error
|
||||
}
|
||||
|
||||
type causer interface {
|
||||
// Provides access to the error that caused this error.
|
||||
Cause() error
|
||||
}
|
||||
|
||||
// Note that errArry and errArrayElem are very similar to the version
|
||||
// implemented in the top-level error.go file. We can't re-use this because
|
||||
// that would require exporting errArray as part of the zapcore API.
|
||||
|
7
vendor/go.uber.org/zap/zapcore/field.go
generated
vendored
7
vendor/go.uber.org/zap/zapcore/field.go
generated
vendored
@ -65,8 +65,11 @@ const (
|
||||
Int8Type
|
||||
// StringType indicates that the field carries a string.
|
||||
StringType
|
||||
// TimeType indicates that the field carries a time.Time.
|
||||
// TimeType indicates that the field carries a time.Time that is
|
||||
// representable by a UnixNano() stored as an int64.
|
||||
TimeType
|
||||
// TimeFullType indicates that the field carries a time.Time stored as-is.
|
||||
TimeFullType
|
||||
// Uint64Type indicates that the field carries a uint64.
|
||||
Uint64Type
|
||||
// Uint32Type indicates that the field carries a uint32.
|
||||
@ -145,6 +148,8 @@ func (f Field) AddTo(enc ObjectEncoder) {
|
||||
// Fall back to UTC if location is nil.
|
||||
enc.AddTime(f.Key, time.Unix(0, f.Integer))
|
||||
}
|
||||
case TimeFullType:
|
||||
enc.AddTime(f.Key, f.Interface.(time.Time))
|
||||
case Uint64Type:
|
||||
enc.AddUint64(f.Key, uint64(f.Integer))
|
||||
case Uint32Type:
|
||||
|
66
vendor/go.uber.org/zap/zapcore/increase_level.go
generated
vendored
Normal file
66
vendor/go.uber.org/zap/zapcore/increase_level.go
generated
vendored
Normal file
@ -0,0 +1,66 @@
|
||||
// Copyright (c) 2020 Uber Technologies, Inc.
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
// THE SOFTWARE.
|
||||
|
||||
package zapcore
|
||||
|
||||
import "fmt"
|
||||
|
||||
type levelFilterCore struct {
|
||||
core Core
|
||||
level LevelEnabler
|
||||
}
|
||||
|
||||
// NewIncreaseLevelCore creates a core that can be used to increase the level of
|
||||
// an existing Core. It cannot be used to decrease the logging level, as it acts
|
||||
// as a filter before calling the underlying core. If level decreases the log level,
|
||||
// an error is returned.
|
||||
func NewIncreaseLevelCore(core Core, level LevelEnabler) (Core, error) {
|
||||
for l := _maxLevel; l >= _minLevel; l-- {
|
||||
if !core.Enabled(l) && level.Enabled(l) {
|
||||
return nil, fmt.Errorf("invalid increase level, as level %q is allowed by increased level, but not by existing core", l)
|
||||
}
|
||||
}
|
||||
|
||||
return &levelFilterCore{core, level}, nil
|
||||
}
|
||||
|
||||
func (c *levelFilterCore) Enabled(lvl Level) bool {
|
||||
return c.level.Enabled(lvl)
|
||||
}
|
||||
|
||||
func (c *levelFilterCore) With(fields []Field) Core {
|
||||
return &levelFilterCore{c.core.With(fields), c.level}
|
||||
}
|
||||
|
||||
func (c *levelFilterCore) Check(ent Entry, ce *CheckedEntry) *CheckedEntry {
|
||||
if !c.Enabled(ent.Level) {
|
||||
return ce
|
||||
}
|
||||
|
||||
return c.core.Check(ent, ce)
|
||||
}
|
||||
|
||||
func (c *levelFilterCore) Write(ent Entry, fields []Field) error {
|
||||
return c.core.Write(ent, fields)
|
||||
}
|
||||
|
||||
func (c *levelFilterCore) Sync() error {
|
||||
return c.core.Sync()
|
||||
}
|
35
vendor/go.uber.org/zap/zapcore/json_encoder.go
generated
vendored
35
vendor/go.uber.org/zap/zapcore/json_encoder.go
generated
vendored
@ -145,15 +145,29 @@ func (enc *jsonEncoder) resetReflectBuf() {
|
||||
}
|
||||
}
|
||||
|
||||
func (enc *jsonEncoder) AddReflected(key string, obj interface{}) error {
|
||||
var nullLiteralBytes = []byte("null")
|
||||
|
||||
// Only invoke the standard JSON encoder if there is actually something to
|
||||
// encode; otherwise write JSON null literal directly.
|
||||
func (enc *jsonEncoder) encodeReflected(obj interface{}) ([]byte, error) {
|
||||
if obj == nil {
|
||||
return nullLiteralBytes, nil
|
||||
}
|
||||
enc.resetReflectBuf()
|
||||
err := enc.reflectEnc.Encode(obj)
|
||||
if err := enc.reflectEnc.Encode(obj); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
enc.reflectBuf.TrimNewline()
|
||||
return enc.reflectBuf.Bytes(), nil
|
||||
}
|
||||
|
||||
func (enc *jsonEncoder) AddReflected(key string, obj interface{}) error {
|
||||
valueBytes, err := enc.encodeReflected(obj)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
enc.reflectBuf.TrimNewline()
|
||||
enc.addKey(key)
|
||||
_, err = enc.buf.Write(enc.reflectBuf.Bytes())
|
||||
_, err = enc.buf.Write(valueBytes)
|
||||
return err
|
||||
}
|
||||
|
||||
@ -236,14 +250,12 @@ func (enc *jsonEncoder) AppendInt64(val int64) {
|
||||
}
|
||||
|
||||
func (enc *jsonEncoder) AppendReflected(val interface{}) error {
|
||||
enc.resetReflectBuf()
|
||||
err := enc.reflectEnc.Encode(val)
|
||||
valueBytes, err := enc.encodeReflected(val)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
enc.reflectBuf.TrimNewline()
|
||||
enc.addElementSeparator()
|
||||
_, err = enc.buf.Write(enc.reflectBuf.Bytes())
|
||||
_, err = enc.buf.Write(valueBytes)
|
||||
return err
|
||||
}
|
||||
|
||||
@ -254,6 +266,13 @@ func (enc *jsonEncoder) AppendString(val string) {
|
||||
enc.buf.AppendByte('"')
|
||||
}
|
||||
|
||||
func (enc *jsonEncoder) AppendTimeLayout(time time.Time, layout string) {
|
||||
enc.addElementSeparator()
|
||||
enc.buf.AppendByte('"')
|
||||
enc.buf.AppendTime(time, layout)
|
||||
enc.buf.AppendByte('"')
|
||||
}
|
||||
|
||||
func (enc *jsonEncoder) AppendTime(val time.Time) {
|
||||
cur := enc.buf.Len()
|
||||
enc.EncodeTime(val, enc)
|
||||
|
94
vendor/go.uber.org/zap/zapcore/sampler.go
generated
vendored
94
vendor/go.uber.org/zap/zapcore/sampler.go
generated
vendored
@ -81,17 +81,92 @@ func (c *counter) IncCheckReset(t time.Time, tick time.Duration) uint64 {
|
||||
return 1
|
||||
}
|
||||
|
||||
// SamplingDecision is a decision represented as a bit field made by sampler.
|
||||
// More decisions may be added in the future.
|
||||
type SamplingDecision uint32
|
||||
|
||||
const (
|
||||
// LogDropped indicates that the Sampler dropped a log entry.
|
||||
LogDropped SamplingDecision = 1 << iota
|
||||
// LogSampled indicates that the Sampler sampled a log entry.
|
||||
LogSampled
|
||||
)
|
||||
|
||||
// optionFunc wraps a func so it satisfies the SamplerOption interface.
|
||||
type optionFunc func(*sampler)
|
||||
|
||||
func (f optionFunc) apply(s *sampler) {
|
||||
f(s)
|
||||
}
|
||||
|
||||
// SamplerOption configures a Sampler.
|
||||
type SamplerOption interface {
|
||||
apply(*sampler)
|
||||
}
|
||||
|
||||
// nopSamplingHook is the default hook used by sampler.
|
||||
func nopSamplingHook(Entry, SamplingDecision) {}
|
||||
|
||||
// SamplerHook registers a function which will be called when Sampler makes a
|
||||
// decision.
|
||||
//
|
||||
// This hook may be used to get visibility into the performance of the sampler.
|
||||
// For example, use it to track metrics of dropped versus sampled logs.
|
||||
//
|
||||
// var dropped atomic.Int64
|
||||
// zapcore.SamplerHook(func(ent zapcore.Entry, dec zapcore.SamplingDecision) {
|
||||
// if dec&zapcore.LogDropped > 0 {
|
||||
// dropped.Inc()
|
||||
// }
|
||||
// })
|
||||
func SamplerHook(hook func(entry Entry, dec SamplingDecision)) SamplerOption {
|
||||
return optionFunc(func(s *sampler) {
|
||||
s.hook = hook
|
||||
})
|
||||
}
|
||||
|
||||
// NewSamplerWithOptions creates a Core that samples incoming entries, which
|
||||
// caps the CPU and I/O load of logging while attempting to preserve a
|
||||
// representative subset of your logs.
|
||||
//
|
||||
// Zap samples by logging the first N entries with a given level and message
|
||||
// each tick. If more Entries with the same level and message are seen during
|
||||
// the same interval, every Mth message is logged and the rest are dropped.
|
||||
//
|
||||
// Sampler can be configured to report sampling decisions with the SamplerHook
|
||||
// option.
|
||||
//
|
||||
// Keep in mind that zap's sampling implementation is optimized for speed over
|
||||
// absolute precision; under load, each tick may be slightly over- or
|
||||
// under-sampled.
|
||||
func NewSamplerWithOptions(core Core, tick time.Duration, first, thereafter int, opts ...SamplerOption) Core {
|
||||
s := &sampler{
|
||||
Core: core,
|
||||
tick: tick,
|
||||
counts: newCounters(),
|
||||
first: uint64(first),
|
||||
thereafter: uint64(thereafter),
|
||||
hook: nopSamplingHook,
|
||||
}
|
||||
for _, opt := range opts {
|
||||
opt.apply(s)
|
||||
}
|
||||
|
||||
return s
|
||||
}
|
||||
|
||||
type sampler struct {
|
||||
Core
|
||||
|
||||
counts *counters
|
||||
tick time.Duration
|
||||
first, thereafter uint64
|
||||
hook func(Entry, SamplingDecision)
|
||||
}
|
||||
|
||||
// NewSampler creates a Core that samples incoming entries, which caps the CPU
|
||||
// and I/O load of logging while attempting to preserve a representative subset
|
||||
// of your logs.
|
||||
// NewSampler creates a Core that samples incoming entries, which
|
||||
// caps the CPU and I/O load of logging while attempting to preserve a
|
||||
// representative subset of your logs.
|
||||
//
|
||||
// Zap samples by logging the first N entries with a given level and message
|
||||
// each tick. If more Entries with the same level and message are seen during
|
||||
@ -100,14 +175,10 @@ type sampler struct {
|
||||
// Keep in mind that zap's sampling implementation is optimized for speed over
|
||||
// absolute precision; under load, each tick may be slightly over- or
|
||||
// under-sampled.
|
||||
//
|
||||
// Deprecated: use NewSamplerWithOptions.
|
||||
func NewSampler(core Core, tick time.Duration, first, thereafter int) Core {
|
||||
return &sampler{
|
||||
Core: core,
|
||||
tick: tick,
|
||||
counts: newCounters(),
|
||||
first: uint64(first),
|
||||
thereafter: uint64(thereafter),
|
||||
}
|
||||
return NewSamplerWithOptions(core, tick, first, thereafter)
|
||||
}
|
||||
|
||||
func (s *sampler) With(fields []Field) Core {
|
||||
@ -117,6 +188,7 @@ func (s *sampler) With(fields []Field) Core {
|
||||
counts: s.counts,
|
||||
first: s.first,
|
||||
thereafter: s.thereafter,
|
||||
hook: s.hook,
|
||||
}
|
||||
}
|
||||
|
||||
@ -128,7 +200,9 @@ func (s *sampler) Check(ent Entry, ce *CheckedEntry) *CheckedEntry {
|
||||
counter := s.counts.get(ent.Level, ent.Message)
|
||||
n := counter.IncCheckReset(ent.Time, s.tick)
|
||||
if n > s.first && (n-s.first)%s.thereafter != 0 {
|
||||
s.hook(ent, LogDropped)
|
||||
return ce
|
||||
}
|
||||
s.hook(ent, LogSampled)
|
||||
return s.Core.Check(ent, ce)
|
||||
}
|
||||
|
Reference in New Issue
Block a user