summaryrefslogtreecommitdiffstats
path: root/vendor/gopkg.in/throttled/throttled.v1/store.go
diff options
context:
space:
mode:
authorChristopher Speller <crspeller@gmail.com>2016-05-12 15:08:58 -0400
committerChristopher Speller <crspeller@gmail.com>2016-05-12 16:37:29 -0400
commit84d2482ddbff9564c9ad75b2d30af66e3ddfd44d (patch)
tree8bfa567d2b6381f4a996ada2deff8a16aa85a3ac /vendor/gopkg.in/throttled/throttled.v1/store.go
parentd1efb66ad7b017f0fbfe6f0c20843b30f396e504 (diff)
downloadchat-84d2482ddbff9564c9ad75b2d30af66e3ddfd44d.tar.gz
chat-84d2482ddbff9564c9ad75b2d30af66e3ddfd44d.tar.bz2
chat-84d2482ddbff9564c9ad75b2d30af66e3ddfd44d.zip
Updating go depencancies. Switching to go1.6 vendoring (#2949)
Diffstat (limited to 'vendor/gopkg.in/throttled/throttled.v1/store.go')
-rw-r--r--vendor/gopkg.in/throttled/throttled.v1/store.go31
1 files changed, 31 insertions, 0 deletions
diff --git a/vendor/gopkg.in/throttled/throttled.v1/store.go b/vendor/gopkg.in/throttled/throttled.v1/store.go
new file mode 100644
index 000000000..760fe2b69
--- /dev/null
+++ b/vendor/gopkg.in/throttled/throttled.v1/store.go
@@ -0,0 +1,31 @@
+package throttled
+
+import (
+ "errors"
+ "time"
+)
+
+// The error returned if the key does not exist in the Store.
+var ErrNoSuchKey = errors.New("throttled: no such key")
+
+// Store is the interface to implement to store the RateLimit state (number
+// of requests per key, time-to-live or creation timestamp).
+type Store interface {
+ // Incr increments the count for the specified key and returns the new value along
+ // with the number of seconds remaining. It may return an error
+ // if the operation fails.
+ //
+ // The method may return ErrNoSuchKey if the key to increment does not exist,
+ // in which case Reset will be called to initialize the value.
+ Incr(string, time.Duration) (int, int, error)
+
+ // Reset resets the key to 1 with the specified window duration. It must create the
+ // key if it doesn't exist. It returns an error if it fails.
+ Reset(string, time.Duration) error
+}
+
+// RemainingSeconds is a helper function that returns the number of seconds
+// remaining from an absolute timestamp in UTC.
+func RemainingSeconds(ts time.Time, window time.Duration) int {
+ return int((window - time.Now().UTC().Sub(ts)).Seconds())
+}