本文整理汇总了Golang中appengine/taskqueue.Add函数的典型用法代码示例。如果您正苦于以下问题:Golang Add函数的具体用法?Golang Add怎么用?Golang Add使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了Add函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: 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)
}
示例2: asyncStoreStats
func asyncStoreStats(c appengine.Context, st Stats, uuid string) error {
buf := bytes.Buffer{}
e := gob.NewEncoder(&buf)
err := e.Encode(st)
if err != nil {
return err
}
cherr := make(chan error, 2)
go func() {
task := &taskqueue.Task{
Path: "/asyncStoreStats",
Payload: buf.Bytes(),
}
if uuid != "" {
task.Header = http.Header{uuidHeader: []string{uuid}}
}
_, err = taskqueue.Add(c, task, "asyncstore")
cherr <- err
}()
go func() {
task := &taskqueue.Task{
Path: "/asyncRollupRecent",
Payload: buf.Bytes(),
}
_, err = taskqueue.Add(c, task, "rolluprecent")
cherr <- err
}()
return anyErr(<-cherr, <-cherr)
}
示例3: 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))
//*/
}
示例4: saveConfHandler
func saveConfHandler(w io.Writer, r *http.Request, ctx appengine.Context, u *user.User) error {
c, err := confFromRequest(r)
if err != nil {
return fmt.Errorf("conf from request: %v", err)
}
err = datastore.RunInTransaction(ctx, func(ctx appengine.Context) error {
// Save the conference and generate the tickets
if err := c.Save(ctx); err != nil {
return fmt.Errorf("save conference: %v", err)
}
if err := c.CreateAndSaveTickets(ctx); err != nil {
return fmt.Errorf("generate tickets: %v", err)
}
// Announce the conference
a := conf.NewAnnouncement(fmt.Sprintf(
"A new conference has just been scheduled! %s in %s. Don't wait; book now!",
c.Name, c.City))
if err := a.Save(ctx); err != nil {
return fmt.Errorf("announce conference: %v", err)
}
// Queue a task to email interested users.
task := taskqueue.NewPOSTTask(
"/notifyinterestedusers",
url.Values{"conf_id": []string{c.ID()}},
)
if _, err = taskqueue.Add(ctx, task, ""); err != nil {
return fmt.Errorf("add task to default queue: %v", err)
}
// Queue a task to review the conference.
task = &taskqueue.Task{
Method: "PULL",
Payload: []byte(c.ID()),
}
task, err := taskqueue.Add(ctx, task, "review-conference-queue")
if err != nil {
return fmt.Errorf("add task to review queue: %v", err)
}
return nil
}, &datastore.TransactionOptions{XG: true})
if err != nil {
return err
}
return RedirectTo("/showtickets?conf_id=" + url.QueryEscape(c.ID()))
}
示例5: 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)
}
示例6: 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)
}
}
示例7: 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)
}
}
}
}
示例8: 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)
}
}
示例9: 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")
}
示例10: freshen
func freshen(c appengine.Context, key string) error {
s, ok := Sources[key]
if !ok {
return fmt.Errorf("%q not found", key)
}
item, err := memcache.Get(c, key+"_fresh")
if err == memcache.ErrCacheMiss {
return fetch(c, key)
} else if err != nil {
return err
}
fresh, err := strconv.ParseInt(string(item.Value), 10, 64)
if err != nil {
return err
}
if time.Now().Unix() < fresh+int64(s.Refresh.Seconds()) {
return nil
}
t := &taskqueue.Task{Path: "/fetch/" + key}
if _, err := taskqueue.Add(c, t, "fetch-"+key); err != nil {
return err
}
return nil
}
示例11: 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)
}
示例12: 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
}
}
示例13: resetTimer
// Insert a task to reset the running timer. Should be done in a transaction.
func resetTimer(c appengine.Context, owner string) error {
t := taskqueue.NewPOSTTask("/task/reset", url.Values{
"owner": []string{owner},
})
_, err := taskqueue.Add(c, t, "")
return err
}
示例14: 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
}
}
}
示例15: 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
}
}
}