adding in logging
This commit is contained in:
31
vendor/go.uber.org/zap/internal/bufferpool/bufferpool.go
generated
vendored
Normal file
31
vendor/go.uber.org/zap/internal/bufferpool/bufferpool.go
generated
vendored
Normal file
@@ -0,0 +1,31 @@
|
||||
// Copyright (c) 2016 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 bufferpool houses zap's shared internal buffer pool. Third-party
|
||||
// packages can recreate the same functionality with buffers.NewPool.
|
||||
package bufferpool
|
||||
|
||||
import "go.uber.org/zap/buffer"
|
||||
|
||||
var (
|
||||
_pool = buffer.NewPool()
|
||||
// Get retrieves a buffer from the pool, creating one if necessary.
|
||||
Get = _pool.Get
|
||||
)
|
||||
44
vendor/go.uber.org/zap/internal/color/color.go
generated
vendored
Normal file
44
vendor/go.uber.org/zap/internal/color/color.go
generated
vendored
Normal file
@@ -0,0 +1,44 @@
|
||||
// Copyright (c) 2016 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 color adds coloring functionality for TTY output.
|
||||
package color
|
||||
|
||||
import "fmt"
|
||||
|
||||
// Foreground colors.
|
||||
const (
|
||||
Black Color = iota + 30
|
||||
Red
|
||||
Green
|
||||
Yellow
|
||||
Blue
|
||||
Magenta
|
||||
Cyan
|
||||
White
|
||||
)
|
||||
|
||||
// Color represents a text color.
|
||||
type Color uint8
|
||||
|
||||
// Add adds the coloring to the given string.
|
||||
func (c Color) Add(s string) string {
|
||||
return fmt.Sprintf("\x1b[%dm%s\x1b[0m", uint8(c), s)
|
||||
}
|
||||
36
vendor/go.uber.org/zap/internal/color/color_test.go
generated
vendored
Normal file
36
vendor/go.uber.org/zap/internal/color/color_test.go
generated
vendored
Normal file
@@ -0,0 +1,36 @@
|
||||
// Copyright (c) 2016 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 color
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
)
|
||||
|
||||
func TestColorFormatting(t *testing.T) {
|
||||
assert.Equal(
|
||||
t,
|
||||
"\x1b[31mfoo\x1b[0m",
|
||||
Red.Add("foo"),
|
||||
"Unexpected colored output.",
|
||||
)
|
||||
}
|
||||
64
vendor/go.uber.org/zap/internal/exit/exit.go
generated
vendored
Normal file
64
vendor/go.uber.org/zap/internal/exit/exit.go
generated
vendored
Normal file
@@ -0,0 +1,64 @@
|
||||
// Copyright (c) 2016 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 exit provides stubs so that unit tests can exercise code that calls
|
||||
// os.Exit(1).
|
||||
package exit
|
||||
|
||||
import "os"
|
||||
|
||||
var real = func() { os.Exit(1) }
|
||||
|
||||
// Exit normally terminates the process by calling os.Exit(1). If the package
|
||||
// is stubbed, it instead records a call in the testing spy.
|
||||
func Exit() {
|
||||
real()
|
||||
}
|
||||
|
||||
// A StubbedExit is a testing fake for os.Exit.
|
||||
type StubbedExit struct {
|
||||
Exited bool
|
||||
prev func()
|
||||
}
|
||||
|
||||
// Stub substitutes a fake for the call to os.Exit(1).
|
||||
func Stub() *StubbedExit {
|
||||
s := &StubbedExit{prev: real}
|
||||
real = s.exit
|
||||
return s
|
||||
}
|
||||
|
||||
// WithStub runs the supplied function with Exit stubbed. It returns the stub
|
||||
// used, so that users can test whether the process would have crashed.
|
||||
func WithStub(f func()) *StubbedExit {
|
||||
s := Stub()
|
||||
defer s.Unstub()
|
||||
f()
|
||||
return s
|
||||
}
|
||||
|
||||
// Unstub restores the previous exit function.
|
||||
func (se *StubbedExit) Unstub() {
|
||||
real = se.prev
|
||||
}
|
||||
|
||||
func (se *StubbedExit) exit() {
|
||||
se.Exited = true
|
||||
}
|
||||
42
vendor/go.uber.org/zap/internal/exit/exit_test.go
generated
vendored
Normal file
42
vendor/go.uber.org/zap/internal/exit/exit_test.go
generated
vendored
Normal file
@@ -0,0 +1,42 @@
|
||||
// Copyright (c) 2016 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 exit
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
)
|
||||
|
||||
func TestStub(t *testing.T) {
|
||||
tests := []struct {
|
||||
f func()
|
||||
want bool
|
||||
}{
|
||||
{Exit, true},
|
||||
{func() {}, false},
|
||||
}
|
||||
|
||||
for _, tt := range tests {
|
||||
s := WithStub(tt.f)
|
||||
assert.Equal(t, tt.want, s.Exited, "Stub captured unexpected exit value.")
|
||||
}
|
||||
}
|
||||
203
vendor/go.uber.org/zap/internal/readme/readme.go
generated
vendored
Normal file
203
vendor/go.uber.org/zap/internal/readme/readme.go
generated
vendored
Normal file
@@ -0,0 +1,203 @@
|
||||
// Copyright (c) 2016 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 main
|
||||
|
||||
import (
|
||||
"flag"
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"log"
|
||||
"os"
|
||||
"os/exec"
|
||||
"sort"
|
||||
"strconv"
|
||||
"strings"
|
||||
"text/template"
|
||||
"time"
|
||||
)
|
||||
|
||||
var (
|
||||
libraryNameToMarkdownName = map[string]string{
|
||||
"Zap": ":zap: zap",
|
||||
"Zap.Sugar": ":zap: zap (sugared)",
|
||||
"stdlib.Println": "standard library",
|
||||
"sirupsen/logrus": "logrus",
|
||||
"go-kit/kit/log": "go-kit",
|
||||
"inconshreveable/log15": "log15",
|
||||
"apex/log": "apex/log",
|
||||
"go.pedge.io/lion": "lion",
|
||||
}
|
||||
)
|
||||
|
||||
func main() {
|
||||
flag.Parse()
|
||||
if err := do(); err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
}
|
||||
|
||||
func do() error {
|
||||
tmplData, err := getTmplData()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
data, err := ioutil.ReadAll(os.Stdin)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
t, err := template.New("tmpl").Parse(string(data))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if err := t.Execute(os.Stdout, tmplData); err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func getTmplData() (*tmplData, error) {
|
||||
tmplData := &tmplData{}
|
||||
rows, err := getBenchmarkRows("BenchmarkAddingFields")
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
tmplData.BenchmarkAddingFields = rows
|
||||
rows, err = getBenchmarkRows("BenchmarkAccumulatedContext")
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
tmplData.BenchmarkAccumulatedContext = rows
|
||||
rows, err = getBenchmarkRows("BenchmarkWithoutFields")
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
tmplData.BenchmarkWithoutFields = rows
|
||||
return tmplData, nil
|
||||
}
|
||||
|
||||
func getBenchmarkRows(benchmarkName string) (string, error) {
|
||||
benchmarkOutput, err := getBenchmarkOutput(benchmarkName)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
var benchmarkRows []*benchmarkRow
|
||||
for libraryName := range libraryNameToMarkdownName {
|
||||
benchmarkRow, err := getBenchmarkRow(benchmarkOutput, benchmarkName, libraryName)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
if benchmarkRow == nil {
|
||||
continue
|
||||
}
|
||||
benchmarkRows = append(benchmarkRows, benchmarkRow)
|
||||
}
|
||||
sort.Sort(benchmarkRowsByTime(benchmarkRows))
|
||||
rows := []string{
|
||||
"| Package | Time | Bytes Allocated | Objects Allocated |",
|
||||
"| :--- | :---: | :---: | :---: |",
|
||||
}
|
||||
for _, benchmarkRow := range benchmarkRows {
|
||||
rows = append(rows, benchmarkRow.String())
|
||||
}
|
||||
return strings.Join(rows, "\n"), nil
|
||||
}
|
||||
|
||||
func getBenchmarkRow(input []string, benchmarkName string, libraryName string) (*benchmarkRow, error) {
|
||||
line, err := findUniqueSubstring(input, fmt.Sprintf("%s/%s-", benchmarkName, libraryName))
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if line == "" {
|
||||
return nil, nil
|
||||
}
|
||||
split := strings.Split(line, "\t")
|
||||
if len(split) < 5 {
|
||||
return nil, fmt.Errorf("unknown benchmark line: %s", line)
|
||||
}
|
||||
duration, err := time.ParseDuration(strings.Replace(strings.TrimSuffix(strings.TrimSpace(split[2]), "/op"), " ", "", -1))
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
allocatedBytes, err := strconv.Atoi(strings.TrimSuffix(strings.TrimSpace(split[3]), " B/op"))
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
allocatedObjects, err := strconv.Atoi(strings.TrimSuffix(strings.TrimSpace(split[4]), " allocs/op"))
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &benchmarkRow{
|
||||
libraryNameToMarkdownName[libraryName],
|
||||
duration,
|
||||
allocatedBytes,
|
||||
allocatedObjects,
|
||||
}, nil
|
||||
}
|
||||
|
||||
func findUniqueSubstring(input []string, substring string) (string, error) {
|
||||
var output string
|
||||
for _, line := range input {
|
||||
if strings.Contains(line, substring) {
|
||||
if output != "" {
|
||||
return "", fmt.Errorf("input has duplicate substring %s", substring)
|
||||
}
|
||||
output = line
|
||||
}
|
||||
}
|
||||
return output, nil
|
||||
}
|
||||
|
||||
func getBenchmarkOutput(benchmarkName string) ([]string, error) {
|
||||
return getOutput("go", "test", fmt.Sprintf("-bench=%s", benchmarkName), "-benchmem", "./benchmarks")
|
||||
}
|
||||
|
||||
func getOutput(name string, arg ...string) ([]string, error) {
|
||||
output, err := exec.Command(name, arg...).CombinedOutput()
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("error running %s %s: %v\n%s", name, strings.Join(arg, " "), err, string(output))
|
||||
}
|
||||
return strings.Split(string(output), "\n"), nil
|
||||
}
|
||||
|
||||
type tmplData struct {
|
||||
BenchmarkAddingFields string
|
||||
BenchmarkAccumulatedContext string
|
||||
BenchmarkWithoutFields string
|
||||
}
|
||||
|
||||
type benchmarkRow struct {
|
||||
Name string
|
||||
Time time.Duration
|
||||
AllocatedBytes int
|
||||
AllocatedObjects int
|
||||
}
|
||||
|
||||
func (b *benchmarkRow) String() string {
|
||||
return fmt.Sprintf("| %s | %d ns/op | %d B/op | %d allocs/op |", b.Name, b.Time.Nanoseconds(), b.AllocatedBytes, b.AllocatedObjects)
|
||||
}
|
||||
|
||||
type benchmarkRowsByTime []*benchmarkRow
|
||||
|
||||
func (b benchmarkRowsByTime) Len() int { return len(b) }
|
||||
func (b benchmarkRowsByTime) Swap(i, j int) { b[i], b[j] = b[j], b[i] }
|
||||
func (b benchmarkRowsByTime) Less(i, j int) bool {
|
||||
return b[i].Time.Nanoseconds() < b[j].Time.Nanoseconds()
|
||||
}
|
||||
Reference in New Issue
Block a user