Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 // Package count contains 'counter' filters for all the gae services. This | 5 // Package count contains 'counter' filters for all the gae services. This |
| 6 // serves as a set of simple example filters, and also enables other filters | 6 // serves as a set of simple example filters, and also enables other filters |
| 7 // to test to see if certain underlying APIs are called when they should be | 7 // to test to see if certain underlying APIs are called when they should be |
| 8 // (e.g. for the datastore mcache filter, for example). | 8 // (e.g. for the datastore mcache filter, for example). |
| 9 package count | 9 package count |
| 10 | 10 |
| 11 import ( | 11 import ( |
| 12 "fmt" | |
| 12 "sync/atomic" | 13 "sync/atomic" |
| 13 ) | 14 ) |
| 14 | 15 |
| 16 type Counter struct { | |
| 17 value int64 | |
| 18 } | |
| 19 | |
| 20 func (c *Counter) increment() { | |
| 21 atomic.AddInt64(&c.value, 1) | |
|
iannucci
2015/08/22 01:00:56
as discussed offline, let's just change the curren
| |
| 22 } | |
| 23 | |
| 24 func (c *Counter) Get() int64 { | |
| 25 return atomic.LoadInt64(&c.value) | |
| 26 } | |
| 27 | |
| 15 // Entry is a success/fail pair for a single API method. It's returned | 28 // Entry is a success/fail pair for a single API method. It's returned |
| 16 // by the Counter interface. | 29 // by the Counter interface. |
| 17 type Entry struct { | 30 type Entry struct { |
| 18 » Successes int64 | 31 » Successes *Counter |
| 19 » Errors int64 | 32 » Errors *Counter |
| 33 } | |
| 34 | |
| 35 func (e *Entry) init() { | |
| 36 » e.Successes = &Counter{} | |
| 37 » e.Errors = &Counter{} | |
| 38 } | |
| 39 | |
| 40 func (e *Entry) String() string { | |
| 41 » return fmt.Sprintf("{Successes:%d, Errors:%d}", e.Successes.Get(), e.Err ors.Get()) | |
| 20 } | 42 } |
| 21 | 43 |
| 22 // Total is a convenience function for getting the total number of calls to | 44 // Total is a convenience function for getting the total number of calls to |
| 23 // this API. It's Successes+Errors. | 45 // this API. It's Successes+Errors. |
| 24 func (e Entry) Total() int64 { return e.Successes + e.Errors } | 46 func (e *Entry) Total() int64 { return e.Successes.Get() + e.Errors.Get() } |
| 25 | 47 |
| 26 func (e *Entry) up(errs ...error) error { | 48 func (e *Entry) up(errs ...error) error { |
| 27 err := error(nil) | 49 err := error(nil) |
| 28 if len(errs) > 0 { | 50 if len(errs) > 0 { |
| 29 err = errs[0] | 51 err = errs[0] |
| 30 } | 52 } |
| 31 if err == nil { | 53 if err == nil { |
| 32 » » atomic.AddInt64(&e.Successes, 1) | 54 » » e.Successes.increment() |
| 33 } else { | 55 } else { |
| 34 » » atomic.AddInt64(&e.Errors, 1) | 56 » » e.Errors.increment() |
| 35 } | 57 } |
| 36 return err | 58 return err |
| 37 } | 59 } |
| OLD | NEW |