| 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 // This file contains types which are mirrors/duplicates of the upstream SDK | |
| 6 // types. This exists so that users can depend solely on this wrapper library | |
| 7 // without necessarially needing an SDK implementation present. | |
| 8 // | |
| 9 // This was done (instead of type-aliasing from the github version of the SDK) | |
| 10 // because some of the types need to be tweaked (like Task.RetryOptions) to | |
| 11 // interact well with the wrapper, and the inconsistency of having some types | |
| 12 // defined by the gae package and others defined by the SDK was pretty awkward. | |
| 13 | |
| 14 package taskqueue | 5 package taskqueue |
| 15 | 6 |
| 16 import ( | 7 import ( |
| 17 "net/http" | 8 "net/http" |
| 9 "net/url" |
| 18 "time" | 10 "time" |
| 19 ) | 11 ) |
| 20 | 12 |
| 21 // Statistics represents statistics about a single task queue. | |
| 22 type Statistics struct { | |
| 23 Tasks int // may be an approximation | |
| 24 OldestETA time.Time // zero if there are no pending tasks | |
| 25 | |
| 26 Executed1Minute int // tasks executed in the last minute | |
| 27 InFlight int // tasks executing now | |
| 28 EnforcedRate float64 // requests per second | |
| 29 } | |
| 30 | |
| 31 // RetryOptions let you control whether to retry a task and the backoff interval
s between tries. | 13 // RetryOptions let you control whether to retry a task and the backoff interval
s between tries. |
| 32 type RetryOptions struct { | 14 type RetryOptions struct { |
| 33 // Number of tries/leases after which the task fails permanently and is
deleted. | 15 // Number of tries/leases after which the task fails permanently and is
deleted. |
| 34 // If AgeLimit is also set, both limits must be exceeded for the task to
fail permanently. | 16 // If AgeLimit is also set, both limits must be exceeded for the task to
fail permanently. |
| 35 RetryLimit int32 | 17 RetryLimit int32 |
| 36 | 18 |
| 37 // Maximum time allowed since the task's first try before the task fails
permanently and is deleted (only for push tasks). | 19 // Maximum time allowed since the task's first try before the task fails
permanently and is deleted (only for push tasks). |
| 38 // If RetryLimit is also set, both limits must be exceeded for the task
to fail permanently. | 20 // If RetryLimit is also set, both limits must be exceeded for the task
to fail permanently. |
| 39 AgeLimit time.Duration | 21 AgeLimit time.Duration |
| 40 | 22 |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 91 // The number of times the task has been dispatched or leased. | 73 // The number of times the task has been dispatched or leased. |
| 92 RetryCount int32 | 74 RetryCount int32 |
| 93 | 75 |
| 94 // Tag for the task. Only used when Method is PULL. | 76 // Tag for the task. Only used when Method is PULL. |
| 95 Tag string | 77 Tag string |
| 96 | 78 |
| 97 // Retry options for this task. May be nil. | 79 // Retry options for this task. May be nil. |
| 98 RetryOptions *RetryOptions | 80 RetryOptions *RetryOptions |
| 99 } | 81 } |
| 100 | 82 |
| 83 // NewPOSTTask creates a Task that will POST to a path with URL-encoded values. |
| 84 func NewPOSTTask(path string, params url.Values) *Task { |
| 85 h := make(http.Header) |
| 86 h.Set("Content-Type", "application/x-www-form-urlencoded") |
| 87 return &Task{ |
| 88 Path: path, |
| 89 Payload: []byte(params.Encode()), |
| 90 Header: h, |
| 91 Method: "POST", |
| 92 } |
| 93 } |
| 94 |
| 101 // Duplicate returns a deep copy of this Task. | 95 // Duplicate returns a deep copy of this Task. |
| 102 func (t *Task) Duplicate() *Task { | 96 func (t *Task) Duplicate() *Task { |
| 103 ret := *t | 97 ret := *t |
| 104 | 98 |
| 105 if len(t.Header) > 0 { | 99 if len(t.Header) > 0 { |
| 106 ret.Header = make(http.Header, len(t.Header)) | 100 ret.Header = make(http.Header, len(t.Header)) |
| 107 for k, vs := range t.Header { | 101 for k, vs := range t.Header { |
| 108 newVs := make([]string, len(vs)) | 102 newVs := make([]string, len(vs)) |
| 109 copy(newVs, vs) | 103 copy(newVs, vs) |
| 110 ret.Header[k] = newVs | 104 ret.Header[k] = newVs |
| 111 } | 105 } |
| 112 } | 106 } |
| 113 | 107 |
| 114 if len(t.Payload) > 0 { | 108 if len(t.Payload) > 0 { |
| 115 ret.Payload = make([]byte, len(t.Payload)) | 109 ret.Payload = make([]byte, len(t.Payload)) |
| 116 copy(ret.Payload, t.Payload) | 110 copy(ret.Payload, t.Payload) |
| 117 } | 111 } |
| 118 | 112 |
| 119 if t.RetryOptions != nil { | 113 if t.RetryOptions != nil { |
| 120 ret.RetryOptions = &RetryOptions{} | 114 ret.RetryOptions = &RetryOptions{} |
| 121 *ret.RetryOptions = *t.RetryOptions | 115 *ret.RetryOptions = *t.RetryOptions |
| 122 } | 116 } |
| 123 | 117 |
| 124 return &ret | 118 return &ret |
| 125 } | 119 } |
| OLD | NEW |