podman
46 строк · 958.0 Байт
1// Copyright © 2016 Steve Francia <spf@spf13.com>.
2//
3// Use of this source code is governed by an MIT-style
4// license that can be found in the LICENSE file.
5
6package jwalterweatherman
7
8import (
9"io"
10"sync/atomic"
11)
12
13// Counter is an io.Writer that increments a counter on Write.
14type Counter struct {
15count uint64
16}
17
18func (c *Counter) incr() {
19atomic.AddUint64(&c.count, 1)
20}
21
22// Reset resets the counter.
23func (c *Counter) Reset() {
24atomic.StoreUint64(&c.count, 0)
25}
26
27// Count returns the current count.
28func (c *Counter) Count() uint64 {
29return atomic.LoadUint64(&c.count)
30}
31
32func (c *Counter) Write(p []byte) (n int, err error) {
33c.incr()
34return len(p), nil
35}
36
37// LogCounter creates a LogListener that counts log statements >= the given threshold.
38func LogCounter(counter *Counter, t1 Threshold) LogListener {
39return func(t2 Threshold) io.Writer {
40if t2 < t1 {
41// Not interested in this threshold.
42return nil
43}
44return counter
45}
46}
47