mirror of
https://github.com/minio/minio.git
synced 2025-11-11 06:20:14 -05:00
Migrate to golang1.5 release with GO15VENDOREXPERIMENT=1 enabled
This commit is contained in:
30
vendor/github.com/facebookgo/stats/license
generated
vendored
Normal file
30
vendor/github.com/facebookgo/stats/license
generated
vendored
Normal file
@@ -0,0 +1,30 @@
|
||||
BSD License
|
||||
|
||||
For stats software
|
||||
|
||||
Copyright (c) 2015, Facebook, Inc. All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without modification,
|
||||
are permitted provided that the following conditions are met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright notice, this
|
||||
list of conditions and the following disclaimer.
|
||||
|
||||
* Redistributions in binary form must reproduce the above copyright notice,
|
||||
this list of conditions and the following disclaimer in the documentation
|
||||
and/or other materials provided with the distribution.
|
||||
|
||||
* Neither the name Facebook nor the names of its contributors may be used to
|
||||
endorse or promote products derived from this software without specific
|
||||
prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
33
vendor/github.com/facebookgo/stats/patents
generated
vendored
Normal file
33
vendor/github.com/facebookgo/stats/patents
generated
vendored
Normal file
@@ -0,0 +1,33 @@
|
||||
Additional Grant of Patent Rights Version 2
|
||||
|
||||
"Software" means the stats software distributed by Facebook, Inc.
|
||||
|
||||
Facebook, Inc. ("Facebook") hereby grants to each recipient of the Software
|
||||
("you") a perpetual, worldwide, royalty-free, non-exclusive, irrevocable
|
||||
(subject to the termination provision below) license under any Necessary
|
||||
Claims, to make, have made, use, sell, offer to sell, import, and otherwise
|
||||
transfer the Software. For avoidance of doubt, no license is granted under
|
||||
Facebook’s rights in any patent claims that are infringed by (i) modifications
|
||||
to the Software made by you or any third party or (ii) the Software in
|
||||
combination with any software or other technology.
|
||||
|
||||
The license granted hereunder will terminate, automatically and without notice,
|
||||
if you (or any of your subsidiaries, corporate affiliates or agents) initiate
|
||||
directly or indirectly, or take a direct financial interest in, any Patent
|
||||
Assertion: (i) against Facebook or any of its subsidiaries or corporate
|
||||
affiliates, (ii) against any party if such Patent Assertion arises in whole or
|
||||
in part from any software, technology, product or service of Facebook or any of
|
||||
its subsidiaries or corporate affiliates, or (iii) against any party relating
|
||||
to the Software. Notwithstanding the foregoing, if Facebook or any of its
|
||||
subsidiaries or corporate affiliates files a lawsuit alleging patent
|
||||
infringement against you in the first instance, and you respond by filing a
|
||||
patent infringement counterclaim in that lawsuit against that party that is
|
||||
unrelated to the Software, the license granted hereunder will not terminate
|
||||
under section (i) of this paragraph due to such counterclaim.
|
||||
|
||||
A "Necessary Claim" is a claim of a patent owned by Facebook that is
|
||||
necessarily infringed by the Software standing alone.
|
||||
|
||||
A "Patent Assertion" is any lawsuit or other action alleging direct, indirect,
|
||||
or contributory infringement or inducement to infringe any patent, including a
|
||||
cross-claim or counterclaim.
|
||||
4
vendor/github.com/facebookgo/stats/readme.md
generated
vendored
Normal file
4
vendor/github.com/facebookgo/stats/readme.md
generated
vendored
Normal file
@@ -0,0 +1,4 @@
|
||||
stats [](https://travis-ci.org/facebookgo/stats)
|
||||
=====
|
||||
|
||||
Documentation: https://godoc.org/github.com/facebookgo/stats
|
||||
166
vendor/github.com/facebookgo/stats/stats.go
generated
vendored
Normal file
166
vendor/github.com/facebookgo/stats/stats.go
generated
vendored
Normal file
@@ -0,0 +1,166 @@
|
||||
// Package stats defines a lightweight interface for collecting statistics. It
|
||||
// doesn't provide an implementation, just the shared interface.
|
||||
package stats
|
||||
|
||||
// Client provides methods to collection statistics.
|
||||
type Client interface {
|
||||
// BumpAvg bumps the average for the given key.
|
||||
BumpAvg(key string, val float64)
|
||||
|
||||
// BumpSum bumps the sum for the given key.
|
||||
BumpSum(key string, val float64)
|
||||
|
||||
// BumpHistogram bumps the histogram for the given key.
|
||||
BumpHistogram(key string, val float64)
|
||||
|
||||
// BumpTime is a special version of BumpHistogram which is specialized for
|
||||
// timers. Calling it starts the timer, and it returns a value on which End()
|
||||
// can be called to indicate finishing the timer. A convenient way of
|
||||
// recording the duration of a function is calling it like such at the top of
|
||||
// the function:
|
||||
//
|
||||
// defer s.BumpTime("my.function").End()
|
||||
BumpTime(key string) interface {
|
||||
End()
|
||||
}
|
||||
}
|
||||
|
||||
// PrefixClient adds multiple keys for the same value, with each prefix
|
||||
// added to the key and calls the underlying client.
|
||||
func PrefixClient(prefixes []string, client Client) Client {
|
||||
return &prefixClient{
|
||||
Prefixes: prefixes,
|
||||
Client: client,
|
||||
}
|
||||
}
|
||||
|
||||
type prefixClient struct {
|
||||
Prefixes []string
|
||||
Client Client
|
||||
}
|
||||
|
||||
func (p *prefixClient) BumpAvg(key string, val float64) {
|
||||
for _, prefix := range p.Prefixes {
|
||||
p.Client.BumpAvg(prefix+key, val)
|
||||
}
|
||||
}
|
||||
|
||||
func (p *prefixClient) BumpSum(key string, val float64) {
|
||||
for _, prefix := range p.Prefixes {
|
||||
p.Client.BumpSum(prefix+key, val)
|
||||
}
|
||||
}
|
||||
|
||||
func (p *prefixClient) BumpHistogram(key string, val float64) {
|
||||
for _, prefix := range p.Prefixes {
|
||||
p.Client.BumpHistogram(prefix+key, val)
|
||||
}
|
||||
}
|
||||
|
||||
func (p *prefixClient) BumpTime(key string) interface {
|
||||
End()
|
||||
} {
|
||||
var m multiEnder
|
||||
for _, prefix := range p.Prefixes {
|
||||
m = append(m, p.Client.BumpTime(prefix+key))
|
||||
}
|
||||
return m
|
||||
}
|
||||
|
||||
// multiEnder combines many enders together.
|
||||
type multiEnder []interface {
|
||||
End()
|
||||
}
|
||||
|
||||
func (m multiEnder) End() {
|
||||
for _, e := range m {
|
||||
e.End()
|
||||
}
|
||||
}
|
||||
|
||||
// HookClient is useful for testing. It provides optional hooks for each
|
||||
// expected method in the interface, which if provided will be called. If a
|
||||
// hook is not provided, it will be ignored.
|
||||
type HookClient struct {
|
||||
BumpAvgHook func(key string, val float64)
|
||||
BumpSumHook func(key string, val float64)
|
||||
BumpHistogramHook func(key string, val float64)
|
||||
BumpTimeHook func(key string) interface {
|
||||
End()
|
||||
}
|
||||
}
|
||||
|
||||
// BumpAvg will call BumpAvgHook if defined.
|
||||
func (c *HookClient) BumpAvg(key string, val float64) {
|
||||
if c.BumpAvgHook != nil {
|
||||
c.BumpAvgHook(key, val)
|
||||
}
|
||||
}
|
||||
|
||||
// BumpSum will call BumpSumHook if defined.
|
||||
func (c *HookClient) BumpSum(key string, val float64) {
|
||||
if c.BumpSumHook != nil {
|
||||
c.BumpSumHook(key, val)
|
||||
}
|
||||
}
|
||||
|
||||
// BumpHistogram will call BumpHistogramHook if defined.
|
||||
func (c *HookClient) BumpHistogram(key string, val float64) {
|
||||
if c.BumpHistogramHook != nil {
|
||||
c.BumpHistogramHook(key, val)
|
||||
}
|
||||
}
|
||||
|
||||
// BumpTime will call BumpTimeHook if defined.
|
||||
func (c *HookClient) BumpTime(key string) interface {
|
||||
End()
|
||||
} {
|
||||
if c.BumpTimeHook != nil {
|
||||
return c.BumpTimeHook(key)
|
||||
}
|
||||
return NoOpEnd
|
||||
}
|
||||
|
||||
type noOpEnd struct{}
|
||||
|
||||
func (n noOpEnd) End() {}
|
||||
|
||||
// NoOpEnd provides a dummy value for use in tests as valid return value for
|
||||
// BumpTime().
|
||||
var NoOpEnd = noOpEnd{}
|
||||
|
||||
// BumpAvg calls BumpAvg on the Client if it isn't nil. This is useful when a
|
||||
// component has an optional stats.Client.
|
||||
func BumpAvg(c Client, key string, val float64) {
|
||||
if c != nil {
|
||||
c.BumpAvg(key, val)
|
||||
}
|
||||
}
|
||||
|
||||
// BumpSum calls BumpSum on the Client if it isn't nil. This is useful when a
|
||||
// component has an optional stats.Client.
|
||||
func BumpSum(c Client, key string, val float64) {
|
||||
if c != nil {
|
||||
c.BumpSum(key, val)
|
||||
}
|
||||
}
|
||||
|
||||
// BumpHistogram calls BumpHistogram on the Client if it isn't nil. This is
|
||||
// useful when a component has an optional stats.Client.
|
||||
func BumpHistogram(c Client, key string, val float64) {
|
||||
if c != nil {
|
||||
c.BumpHistogram(key, val)
|
||||
}
|
||||
}
|
||||
|
||||
// BumpTime calls BumpTime on the Client if it isn't nil. If the Client is nil
|
||||
// it still returns a valid return value which will be a no-op. This is useful
|
||||
// when a component has an optional stats.Client.
|
||||
func BumpTime(c Client, key string) interface {
|
||||
End()
|
||||
} {
|
||||
if c != nil {
|
||||
return c.BumpTime(key)
|
||||
}
|
||||
return NoOpEnd
|
||||
}
|
||||
77
vendor/github.com/facebookgo/stats/stats_test.go
generated
vendored
Normal file
77
vendor/github.com/facebookgo/stats/stats_test.go
generated
vendored
Normal file
@@ -0,0 +1,77 @@
|
||||
package stats_test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/facebookgo/ensure"
|
||||
"github.com/facebookgo/stats"
|
||||
)
|
||||
|
||||
// Ensure calling End works even when a BumpTimeHook isn't provided.
|
||||
func TestHookClientBumpTime(t *testing.T) {
|
||||
(&stats.HookClient{}).BumpTime("foo").End()
|
||||
}
|
||||
|
||||
func TestPrefixClient(t *testing.T) {
|
||||
const (
|
||||
prefix1 = "prefix1"
|
||||
prefix2 = "prefix2"
|
||||
avgKey = "avg"
|
||||
avgVal = float64(1)
|
||||
sumKey = "sum"
|
||||
sumVal = float64(2)
|
||||
histogramKey = "histogram"
|
||||
histogramVal = float64(3)
|
||||
timeKey = "time"
|
||||
)
|
||||
|
||||
var keys []string
|
||||
hc := &stats.HookClient{
|
||||
BumpAvgHook: func(key string, val float64) {
|
||||
keys = append(keys, key)
|
||||
ensure.DeepEqual(t, val, avgVal)
|
||||
},
|
||||
BumpSumHook: func(key string, val float64) {
|
||||
keys = append(keys, key)
|
||||
ensure.DeepEqual(t, val, sumVal)
|
||||
},
|
||||
BumpHistogramHook: func(key string, val float64) {
|
||||
keys = append(keys, key)
|
||||
ensure.DeepEqual(t, val, histogramVal)
|
||||
},
|
||||
BumpTimeHook: func(key string) interface {
|
||||
End()
|
||||
} {
|
||||
return multiEnderTest{
|
||||
EndHook: func() {
|
||||
keys = append(keys, key)
|
||||
},
|
||||
}
|
||||
},
|
||||
}
|
||||
|
||||
pc := stats.PrefixClient([]string{prefix1, prefix2}, hc)
|
||||
pc.BumpAvg(avgKey, avgVal)
|
||||
pc.BumpSum(sumKey, sumVal)
|
||||
pc.BumpHistogram(histogramKey, histogramVal)
|
||||
pc.BumpTime(timeKey).End()
|
||||
|
||||
ensure.SameElements(t, keys, []string{
|
||||
prefix1 + avgKey,
|
||||
prefix1 + sumKey,
|
||||
prefix1 + histogramKey,
|
||||
prefix1 + timeKey,
|
||||
prefix2 + avgKey,
|
||||
prefix2 + sumKey,
|
||||
prefix2 + histogramKey,
|
||||
prefix2 + timeKey,
|
||||
})
|
||||
}
|
||||
|
||||
type multiEnderTest struct {
|
||||
EndHook func()
|
||||
}
|
||||
|
||||
func (e multiEnderTest) End() {
|
||||
e.EndHook()
|
||||
}
|
||||
Reference in New Issue
Block a user