本文整理汇总了Golang中appengine/taskqueue.NewPOSTTask函数的典型用法代码示例。如果您正苦于以下问题:Golang NewPOSTTask函数的具体用法?Golang NewPOSTTask怎么用?Golang NewPOSTTask使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了NewPOSTTask函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: UpdateFeeds
func UpdateFeeds(c mpg.Context, w http.ResponseWriter, r *http.Request) {
gn := goon.FromContext(c)
q := datastore.NewQuery(gn.Key(&Feed{}).Kind()).KeysOnly()
q = q.Filter("n <=", time.Now())
retry, _ := strconv.Atoi(r.FormValue("retry"))
c.Errorf("retry: %v", retry)
//* iterator
it := gn.Run(q)
i := 0
done := false
for {
k, err := it.Next(nil)
if err == datastore.Done {
done = true
break
} else if err != nil {
c.Errorf("next error: %v", err.Error())
break
}
t := taskqueue.NewPOSTTask(routeUrl("update-feed"), url.Values{
"feed": {k.StringID()},
})
if _, err := taskqueue.Add(c, t, "update-feed"); err != nil {
c.Errorf("taskqueue error: %v", err.Error())
}
i++
}
c.Infof("updating %d feeds", i)
fmt.Fprintf(w, "updating %d feeds", i)
if !done {
time.Sleep(time.Second * time.Duration(i) / 50) // sleep about the time it'll take to process them
t := taskqueue.NewPOSTTask("/tasks/update-feeds", url.Values{
"retry": {strconv.Itoa(retry + 1)},
})
if _, err := taskqueue.Add(c, t, "update-feeds"); err != nil {
c.Errorf("taskqueue update feeds error: %v", err.Error())
}
c.Errorf("ran update again")
fmt.Fprintf(w, "\nran update again")
}
//*/
/* get all
q = q.Limit(1000)
keys, _ := gn.GetAll(q, nil)
for _, k := range keys {
t := taskqueue.NewPOSTTask(routeUrl("update-feed"), url.Values{
"feed": {k.StringID()},
})
if _, err := taskqueue.Add(c, t, "update-feed"); err != nil {
c.Errorf("taskqueue error: %v", err.Error())
}
}
c.Infof("updating %d feeds", len(keys))
fmt.Fprintf(w, "updating %d feeds", len(keys))
//*/
}
示例2: TestTasks
func TestTasks(t *testing.T) {
c, err := NewContext(&Options{TaskQueues: []string{"testQueue"}})
if err != nil {
t.Fatalf("NewContext: %v", err)
}
defer c.Close()
task := taskqueue.NewPOSTTask("/post", map[string][]string{})
_, err = taskqueue.Add(c, task, "testQueue")
if err != nil {
t.Fatalf("Could not add task to queue")
}
stats, err := taskqueue.QueueStats(c, []string{"testQueue"}, 0) // fetch all of them
if err != nil {
t.Fatalf("Could not get taskqueue statistics")
}
t.Logf("TaskStatistics = %#v", stats)
if len(stats) == 0 {
t.Fatalf("Queue statistics are empty")
} else if stats[0].Tasks != 1 {
t.Fatalf("Could not find the task we just added")
}
err = taskqueue.Purge(c, "testQueue")
if err != nil {
t.Fatalf("Could not purge the queue")
}
stats, err = taskqueue.QueueStats(c, []string{"testQueue"}, 0) // fetch all of them
if len(stats) == 0 {
t.Fatalf("Queue statistics are empty")
}
if stats[0].Tasks != 0 {
t.Fatalf("Purge command not successful")
}
tasks := []*taskqueue.Task{
taskqueue.NewPOSTTask("/post1", map[string][]string{}),
taskqueue.NewPOSTTask("/post2", map[string][]string{}),
}
_, err = taskqueue.AddMulti(c, tasks, "testQueue")
if err != nil {
t.Fatalf("Could not add bulk tasklist to queue")
}
stats, err = taskqueue.QueueStats(c, []string{"testQueue"}, 0) // fetch all of them
if err != nil {
t.Fatalf("Could not get taskqueue statistics")
}
if len(stats) == 0 {
t.Fatalf("Could not find the tasks we just added")
} else if stats[0].Tasks != 2 {
t.Fatalf("Could not find the tasks we just added")
}
}
示例3: scanHandler
// Look for new flights that we should add to our database. Invoked by cron.
func scanHandler(w http.ResponseWriter, r *http.Request) {
c := appengine.NewContext(r)
if db, err1 := fdb24.NewFlightDBFr24(urlfetch.Client(c)); err1 != nil {
c.Errorf(" /mdb/scan: newdb: %v", err1)
http.Error(w, err1.Error(), http.StatusInternalServerError)
} else {
if flights, err2 := db.LookupList(sfo.KBoxSFO120K); err2 != nil {
c.Errorf(" /mdb/scan: lookup: %v", err2)
http.Error(w, err2.Error(), http.StatusInternalServerError)
} else {
set := ftype.FIFOSet{}
if err3 := loadFIFOSet(c, &set); err3 != nil {
c.Errorf(" /mdb/scan: loadcache: %v", err3)
http.Error(w, err3.Error(), http.StatusInternalServerError)
}
new := set.FindNew(flights)
if err4 := saveFIFOSet(c, set); err4 != nil {
c.Errorf(" /mdb/scan: savecache: %v", err4)
http.Error(w, err4.Error(), http.StatusInternalServerError)
}
// Enqueue the new flights
n := 1000
for i, fs := range new {
if i >= n {
break
}
if fsStr, err5 := fs.Base64Encode(); err5 != nil {
http.Error(w, err5.Error(), http.StatusInternalServerError)
return
} else {
url := fmt.Sprintf("/fdb/addflight?deb=%s", fs.F.UniqueIdentifier())
t := taskqueue.NewPOSTTask(url, map[string][]string{
"flightsnapshot": {fsStr},
})
// We could be smarter about this.
t.Delay = time.Minute * 45
if _, err6 := taskqueue.Add(c, t, "addflight"); err6 != nil {
c.Errorf(" /mdb/scan: enqueue: %v", err6)
http.Error(w, err6.Error(), http.StatusInternalServerError)
return
}
}
}
var params = map[string]interface{}{
"New": new,
"Flights": flights,
}
if err7 := templates.ExecuteTemplate(w, "fdb-scan", params); err7 != nil {
http.Error(w, err7.Error(), http.StatusInternalServerError)
}
}
}
}
示例4: upgradeHandler
// Grab all users, and enqueue them for batch processing
func upgradeHandler(w http.ResponseWriter, r *http.Request) {
c := appengine.NewContext(r)
cdb := ComplaintDB{C: c, Memcache: false}
var cps = []types.ComplainerProfile{}
cps, err := cdb.GetAllProfiles()
if err != nil {
c.Errorf("upgradeHandler: getallprofiles: %v", err)
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
for _, cp := range cps {
b64 := ""
if b64, err = cp.Base64Encode(); err != nil {
c.Errorf("upgradeHandler: profile encode:", err)
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
t := taskqueue.NewPOSTTask("/batch/upgradeuser", map[string][]string{
"profile": {b64},
})
if _, err := taskqueue.Add(c, t, "batch"); err != nil {
c.Errorf("upgradeHandler: enqueue: %v", err)
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
}
c.Infof("enqueued %d batch", len(cps))
w.Write([]byte(fmt.Sprintf("OK, enqueued %d", len(cps))))
}
示例5: del
func del(w http.ResponseWriter, r *http.Request) {
c := appengine.NewContext(r)
t := taskqueue.NewPOSTTask("/worker", nil)
if _, err := taskqueue.Add(c, t, ""); err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
}
}
示例6: cron
func cron(w http.ResponseWriter, r *http.Request) {
c := appengine.NewContext(r)
q := datastore.NewQuery("asin")
for t := q.Run(c); ; {
var x Asin
_, err := t.Next(&x)
if err == datastore.Done {
break
}
if err != nil {
return
}
task := taskqueue.NewPOSTTask("/task/fetching", url.Values{
"asin": {x.Name},
})
if !appengine.IsDevAppServer() {
host := backendName + "." + appengine.DefaultVersionHostname(c)
task.Header.Set("Host", host)
}
if _, err := taskqueue.Add(c, task, ""); err != nil {
c.Errorf("add fetching task: %v", err)
http.Error(w, "Error: couldn't schedule fetching task", 500)
return
}
fmt.Fprintf(w, "OK")
}
}
示例7: addCurriculo
func addCurriculo(c appengine.Context, r render.Render, req *http.Request) {
curriculo := new(Curriculo)
decoder := json.NewDecoder(req.Body)
err := decoder.Decode(&curriculo)
if err != nil {
log.Println(err)
r.JSON(http.StatusInternalServerError, err.Error())
return
}
key := datastore.NewKey(c, "Curriculo", curriculo.Email, 0, nil)
_, err = datastore.Put(c, key, curriculo)
if err != nil {
log.Println(err)
r.JSON(http.StatusInternalServerError, err.Error())
return
}
t := taskqueue.NewPOSTTask("/matcher/curriculos", map[string][]string{
"curriculo": {curriculo.Email},
})
if _, err := taskqueue.Add(c, t, ""); err != nil {
log.Println(err)
r.JSON(http.StatusInternalServerError, err.Error())
return
}
r.JSON(http.StatusOK, "success")
}
示例8: UpdateFeeds
func UpdateFeeds(c mpg.Context, w http.ResponseWriter, r *http.Request) {
gn := goon.FromContext(c)
q := datastore.NewQuery(gn.Key(&Feed{}).Kind()).KeysOnly()
q = q.Filter("n <=", time.Now()).Limit(3000)
it := gn.Run(q)
i := 0
for {
k, err := it.Next(nil)
if err == datastore.Done {
break
} else if err != nil {
c.Errorf("next error: %v", err.Error())
break
}
t := taskqueue.NewPOSTTask(routeUrl("update-feed"), url.Values{
"feed": {k.StringID()},
})
if _, err := taskqueue.Add(c, t, "update-feed"); err != nil {
c.Errorf("taskqueue error: %v", err.Error())
}
i++
}
c.Infof("updating %d feeds", i)
fmt.Fprintf(w, "updating %d feeds", i)
}
示例9: collectUrls
func collectUrls(w http.ResponseWriter, r *http.Request) {
c := appengine.NewContext(r)
url := "http://catoverflow.com/api/query?offset=0&limit=1000"
client := urlfetch.Client(c)
resp, err := client.Get(url)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
//Split the body by new lines to get the url for each image.
s := string(body)
urls := strings.Fields(s)
for _, u := range urls {
t := taskqueue.NewPOSTTask("/worker", map[string][]string{"url": {u}})
if _, err := taskqueue.Add(c, t, ""); err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
}
}
示例10: batchCouch
func batchCouch(c appengine.Context, w http.ResponseWriter, r *http.Request) {
keys := []string{}
z, err := gzip.NewReader(r.Body)
maybePanic(err)
d := json.NewDecoder(z)
maybePanic(d.Decode(&keys))
c.Infof("Got %v keys to couch", len(keys))
wg := sync.WaitGroup{}
ch := make(chan string)
for i := 0; i < 8; i++ {
wg.Add(1)
go func() {
defer wg.Done()
for kstr := range ch {
err := postToCouchCommon(c, kstr, true)
if err != nil {
c.Errorf("Error on %v: %v", kstr, err)
taskqueue.Add(c, taskqueue.NewPOSTTask("/couchit",
url.Values{"key": []string{kstr}}), "couchit")
}
}
}()
}
for _, kstr := range keys {
ch <- kstr
}
close(ch)
wg.Wait()
w.WriteHeader(204)
}
示例11: backfill
func backfill(w http.ResponseWriter, r *http.Request, _ httprouter.Params) {
c := appengine.NewContext(r)
index, err := search.Open(xkcdIndex)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
current, _ := GetCurrent(c)
for i := 1; i <= current.Num; i++ {
// xcdc returns 404 with issue 404
if i == 404 {
continue
}
comicNum := strconv.Itoa(i)
force := r.FormValue("force")
if force != "yes" {
var s ComicSearch
err := index.Get(c, comicNum, &s)
if err == nil {
continue
}
}
t := taskqueue.NewPOSTTask("/index", map[string][]string{"id": {comicNum}})
if _, err := taskqueue.Add(c, t, ""); err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
}
}
示例12: UpdateFeeds
func UpdateFeeds(c mpg.Context, w http.ResponseWriter, r *http.Request) {
q := datastore.NewQuery("F").KeysOnly().Filter("n <=", time.Now())
q = q.Limit(10 * 60 * 2) // 10/s queue, 2 min cron
it := q.Run(appengine.Timeout(c, time.Minute))
tc := make(chan *taskqueue.Task)
done := make(chan bool)
i := 0
u := routeUrl("update-feed")
go taskSender(c, "update-feed", tc, done)
for {
k, err := it.Next(nil)
if err == datastore.Done {
break
} else if err != nil {
c.Errorf("next error: %v", err.Error())
break
}
tc <- taskqueue.NewPOSTTask(u, url.Values{
"feed": {k.StringID()},
})
i++
}
close(tc)
<-done
c.Infof("updating %d feeds", i)
}
示例13: send
// send uses the Channel API to send the provided message in JSON-encoded form
// to the client identified by clientID.
//
// Channels created with one version of an app (eg, the default frontend)
// cannot be sent on from another version (eg, a backend). This is a limitation
// of the Channel API that should be fixed at some point.
// The send function creates a task that runs on the frontend (where the
// channel was created). The task handler makes the channel.Send API call.
func send(c appengine.Context, clientID string, m Message) {
if clientID == "" {
c.Debugf("no channel; skipping message send")
return
}
switch {
case m.TilesDone:
c.Debugf("tiles done")
case m.ZipDone:
c.Debugf("zip done")
default:
c.Debugf("%d tiles", len(m.IDs))
}
b, err := json.Marshal(m)
if err != nil {
panic(err)
}
task := taskqueue.NewPOSTTask("/send", url.Values{
"clientID": {clientID},
"msg": {string(b)},
})
host := appengine.DefaultVersionHostname(c)
task.Header.Set("Host", host)
if _, err := taskqueue.Add(c, task, sendQueue); err != nil {
c.Errorf("add send task failed: %v", err)
}
}
示例14: queuePush
func queuePush(w http.ResponseWriter, r *http.Request, mx map[string]interface{}) {
lg, b := loghttp.BuffLoggerUniversal(w, r)
_ = b
c := appengine.NewContext(r)
m := map[string][]string{"counter_name": []string{nscStringKey}}
t := taskqueue.NewPOSTTask("/_ah/namespaced-counters/queue-pop", m)
taskqueue.Add(c, t, "")
c, err := appengine.Namespace(c, altNamespace)
lg(err)
taskqueue.Add(c, t, "")
io.WriteString(w, "tasks enqueued\n")
io.WriteString(w, "\ncounter values now: \n")
readBothNamespaces(w, r, mx)
io.WriteString(w, "\n\n...sleeping... \n")
time.Sleep(time.Duration(400) * time.Millisecond)
readBothNamespaces(w, r, mx)
}
示例15: addTaskClientGroupPut
// addTaskClientGroupPut receives a list of ClientGroups to put into datastore
// and stores it temporarily into memcache. It then submits the key as a
// taskqueue task.
func addTaskClientGroupPut(c appengine.Context, dateStr string, cgs []ClientGroup) {
// Create unique key for memcache
key := cgMemcachePutKey()
// Store CGs into memcache
item := &memcache.Item{
Key: key,
Object: cgs,
}
if err := memcache.Gob.Set(c, item); err != nil {
c.Errorf("rtt.addTaskClientGroupPut:memcache.Set: %s", err)
return
}
// Submit taskqueue task
values := make(url.Values)
values.Add(FormKeyPutKey, key)
values.Add(FormKeyImportDate, dateStr)
task := taskqueue.NewPOSTTask(URLTaskImportPut, values)
_, err := taskqueue.Add(c, task, TaskQueueNameImportPut)
if err != nil {
c.Errorf("rtt.addTaskClientGroupPut:taskqueue.Add: %s", err)
return
}
}