Index: go/src/infra/gae/libs/gae/filters/count/tq.go |
diff --git a/go/src/infra/gae/libs/gae/filters/count/tq.go b/go/src/infra/gae/libs/gae/filters/count/tq.go |
new file mode 100644 |
index 0000000000000000000000000000000000000000..eee25b42179bc0c37f299f9e8767b964ea5ed882 |
--- /dev/null |
+++ b/go/src/infra/gae/libs/gae/filters/count/tq.go |
@@ -0,0 +1,81 @@ |
+// Copyright 2015 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+package count |
+ |
+import ( |
+ "golang.org/x/net/context" |
+ |
+ "infra/gae/libs/gae" |
+) |
+ |
+// TQCounter is the counter object for the TaskQueue service. |
+type TQCounter struct { |
+ Add Entry |
+ Delete Entry |
+ AddMulti Entry |
+ DeleteMulti Entry |
+ Lease Entry |
+ LeaseByTag Entry |
+ ModifyLease Entry |
+ Purge Entry |
+ QueueStats Entry |
+} |
+ |
+type tqCounter struct { |
+ c *TQCounter |
+ |
+ tq gae.TaskQueue |
+} |
+ |
+var _ gae.TaskQueue = (*tqCounter)(nil) |
+ |
+func (t *tqCounter) Add(task *gae.TQTask, queueName string) (*gae.TQTask, error) { |
+ ret, err := t.tq.Add(task, queueName) |
+ return ret, t.c.Add.up(err) |
+} |
+ |
+func (t *tqCounter) Delete(task *gae.TQTask, queueName string) error { |
+ return t.c.Delete.up(t.tq.Delete(task, queueName)) |
+} |
+ |
+func (t *tqCounter) AddMulti(tasks []*gae.TQTask, queueName string) ([]*gae.TQTask, error) { |
+ ret, err := t.tq.AddMulti(tasks, queueName) |
+ return ret, t.c.AddMulti.up(err) |
+} |
+ |
+func (t *tqCounter) DeleteMulti(tasks []*gae.TQTask, queueName string) error { |
+ return t.c.DeleteMulti.up(t.tq.DeleteMulti(tasks, queueName)) |
+} |
+ |
+func (t *tqCounter) Lease(maxTasks int, queueName string, leaseTime int) ([]*gae.TQTask, error) { |
+ ret, err := t.tq.Lease(maxTasks, queueName, leaseTime) |
+ return ret, t.c.Lease.up(err) |
+} |
+ |
+func (t *tqCounter) LeaseByTag(maxTasks int, queueName string, leaseTime int, tag string) ([]*gae.TQTask, error) { |
+ ret, err := t.tq.LeaseByTag(maxTasks, queueName, leaseTime, tag) |
+ return ret, t.c.LeaseByTag.up(err) |
+} |
+ |
+func (t *tqCounter) ModifyLease(task *gae.TQTask, queueName string, leaseTime int) error { |
+ return t.c.ModifyLease.up(t.tq.ModifyLease(task, queueName, leaseTime)) |
+} |
+ |
+func (t *tqCounter) Purge(queueName string) error { |
+ return t.c.Purge.up(t.tq.Purge(queueName)) |
+} |
+ |
+func (t *tqCounter) QueueStats(queueNames []string) ([]gae.TQStatistics, error) { |
+ ret, err := t.tq.QueueStats(queueNames) |
+ return ret, t.c.QueueStats.up(err) |
+} |
+ |
+// FilterTQ installs a counter TaskQueue filter in the context. |
+func FilterTQ(c context.Context) (context.Context, *TQCounter) { |
+ state := &TQCounter{} |
+ return gae.AddTQFilters(c, func(ic context.Context, tq gae.TaskQueue) gae.TaskQueue { |
+ return &tqCounter{state, tq} |
+ }), state |
+} |