本文整理汇总了Golang中appengine.Context.Errorf方法的典型用法代码示例。如果您正苦于以下问题:Golang Context.Errorf方法的具体用法?Golang Context.Errorf怎么用?Golang Context.Errorf使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类appengine.Context
的用法示例。
在下文中一共展示了Context.Errorf方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: DeleteArticlesWithinScope
func DeleteArticlesWithinScope(c appengine.Context, scope ArticleScope) error {
ancestorKey, err := scope.key(c)
if err != nil {
return err
}
batchWriter := NewBatchWriter(c, BatchDelete)
q := datastore.NewQuery("Article").Ancestor(ancestorKey).KeysOnly()
for t := q.Run(c); ; {
articleKey, err := t.Next(nil)
if err == datastore.Done {
break
} else if err != nil {
return err
}
if err := batchWriter.EnqueueKey(articleKey); err != nil {
c.Errorf("Error queueing article for batch delete: %s", err)
return err
}
}
if err := batchWriter.Flush(); err != nil {
c.Errorf("Error flushing batch queue: %s", err)
return err
}
return nil
}
示例2: searchGroup
func searchGroup(name string, c appengine.Context) (key *datastore.Key, group *Group, err error) {
var v []Group
// Initial variables
key = nil
group = nil
err = nil
// Query
f := datastore.NewQuery(GroupKind)
f = f.Filter("Name=", name)
k, err := f.GetAll(c, &v)
if err != nil {
c.Errorf("%s in getting data from datastore\n", err)
err = errors.New("Datastore is temporary unavailable")
return
}
if k == nil || len(k) == 0 {
return
}
key = k[0]
group = &v[0]
return
}
示例3: addLogo
func addLogo(profilePtr *image.Image, logo string, context appengine.Context) []byte {
profileImage := *profilePtr
destImage := image.NewRGBA(profileImage.Bounds())
draw.Draw(destImage, destImage.Bounds(), profileImage, image.ZP, draw.Src)
if logoImages, ok := THELOGOIMAGES[logo]; ok {
randi := rand.Intn(len(logoImages))
logoImage := logoImages[randi]
offset := image.Pt(5, 5)
if strings.HasPrefix(logo, "NLD-") {
offset = image.Pt(0, 0)
}
start := profileImage.Bounds().Size()
start = start.Sub(offset)
start = start.Sub(logoImage.Bounds().Size())
bounds := image.Rectangle{start, start.Add(logoImage.Bounds().Size())}
draw.Draw(destImage, bounds, logoImage, image.ZP, draw.Over)
} else {
context.Errorf("Cannot load logoimage for %s", logo)
}
buffer := new(bytes.Buffer)
err := png.Encode(buffer, destImage)
check(err, context)
return buffer.Bytes()
}
示例4: writeEncoded
func writeEncoded(c appengine.Context, w http.ResponseWriter, data interface{}) {
newEncoder := bencode.NewEncoder(w)
if err := newEncoder.Encode(data); err != nil {
c.Errorf("Failed to encode data: %s", err)
writeInternalError(w)
}
}
示例5: count_uv_pv
func count_uv_pv(c appengine.Context, mins int) (uv int, pv int) {
count := 0
uniq := make(map[string]bool)
query := &log.Query{
AppLogs: true,
StartTime: time.Now().Add(time.Duration(-1*mins) * time.Minute),
Versions: []string{"1"},
}
for results := query.Run(c); ; {
record, err := results.Next()
if err == log.Done {
break
}
if err != nil {
c.Errorf("Failed to retrieve next log: %v", err)
}
if len(record.AppLogs) > 0 && strings.Index(record.Combined, "GET "+config.URL_BEACON) > 0 {
zcookie := record.AppLogs[0].Message
if zcookie != "" {
count++
uniq[zcookie] = true
}
}
}
uv = len(uniq)
pv = count
return
}
示例6: HandleEvent
func HandleEvent(tags *event.EventHeaderTags, ev event.Event, ctx appengine.Context, sender EventSendService) error {
res, err := handleRecvEvent(tags, ev, ctx)
if nil != err {
ctx.Errorf("Failed to handle event[%d:%d] for reason:%v", ev.GetType(), ev.GetVersion(), err)
return err
}
if nil == res {
var empty bytes.Buffer
sender.Send(&empty)
return nil
}
res.SetHash(ev.GetHash())
compressType := Cfg.CompressType
if httpres, ok := res.(*event.HTTPResponseEvent); ok {
v := httpres.GetHeader("Content-Type")
if len(v) > 0 && Cfg.CompressType != event.COMPRESSOR_NONE {
if isContentTypeInCompressFilter(v) {
compressType = event.COMPRESSOR_NONE
}
}
}
x := new(event.CompressEvent)
x.SetHash(ev.GetHash())
x.CompressType = compressType
x.Ev = res
y := new(event.EncryptEvent)
y.SetHash(ev.GetHash())
y.EncryptType = Cfg.EncryptType
y.Ev = x
var buf bytes.Buffer
tags.Encode(&buf)
event.EncodeEvent(&buf, y)
sender.Send(&buf)
return nil
}
示例7: load
func load(c appengine.Context, id string) (*Group, error) {
group := &Group{}
_, err := memcache.JSON.Get(c, id, group)
if err == nil {
return group, nil
}
if err != memcache.ErrCacheMiss {
c.Errorf("memcache get %q: %v", id, err)
}
group, err = fetch(c, id)
if err != nil {
return nil, err
}
item := &memcache.Item{
Key: id,
Object: group,
Expiration: time.Hour,
}
err = memcache.JSON.Set(c, item)
if err != nil {
c.Errorf("memcache set %q: %v", id, err)
}
return group, nil
}
示例8: GetAllClassesFromProds
func GetAllClassesFromProds(c appengine.Context) []T {
c.Infof("GetAllClassesFromProds: Enter")
const cacheKey_product_classes = "product_classes"
var item_list []T
_, err := memcache.JSON.Get(c, cacheKey_product_classes, &item_list)
if err != nil {
//Memcache failed to extract the list.
c.Infof("GetAllClassesFromProds: Unable to retrieve list from Memcache: %v", err)
item_list = datastoreGetAllClassesFromProds(c)
memcache_item := &memcache.Item{
Key: cacheKey_product_classes,
Object: item_list,
Expiration: oneDay,
}
//Store into Memcache
// Add the item to the memcache, if the key does not already exist
if err := memcache.JSON.Set(c, memcache_item); err == memcache.ErrNotStored {
c.Infof("item with key %q already exists", memcache_item.Key)
} else if err != nil {
c.Errorf("error adding item: %v", err)
} else {
c.Infof("got stored as json ")
}
}
return item_list
}
示例9: update
func update(ctxt appengine.Context, kind string, data interface{}) error {
updaters.RLock()
up := updaters.m[kind]
updaters.RUnlock()
t := reflect.TypeOf(data)
dv, _ := strconv.Atoi(t.Elem().Field(0).Tag.Get("dataversion"))
if dv == 0 {
return nil
}
v := reflect.ValueOf(data)
v.Elem().Field(0).SetInt(int64(dv))
for _, fv := range up {
if fv.Type().In(0) != t {
return fmt.Errorf("type mismatch for data kind %q: cannot apply updater %s to %T", kind, fv.Type(), data)
}
rv := fv.Call([]reflect.Value{v})
if len(rv) > 0 {
err := rv[0].Interface().(error)
if err != nil {
ctxt.Errorf("applying updater: %v", err)
return fmt.Errorf("applying updater: %v", err)
}
}
}
return nil
}
示例10: Send
func (r *Room) Send(c appengine.Context, message string) error {
var clients []Client
_, err := memcache.JSON.Get(c, r.Name, &clients)
if err != nil && err != memcache.ErrCacheMiss {
return err
}
if err == memcache.ErrCacheMiss {
q := datastore.NewQuery("Client").Ancestor(r.Key(c))
_, err = q.GetAll(c, &clients)
if err != nil {
return err
}
err = memcache.JSON.Set(c, &memcache.Item{
Key: r.Name, Object: clients,
})
if err != nil {
return err
}
}
for _, client := range clients {
err = channel.Send(c, client.ClientID, message)
if err != nil {
c.Errorf("sending %q: %v", message, err)
}
}
return nil
}
示例11: PutInBlobstore
func PutInBlobstore(c appengine.Context, toStore interface{}) (appengine.BlobKey, error) {
//TODO: check capabilities
var k appengine.BlobKey
var data bytes.Buffer
enc := gob.NewEncoder(&data)
err := enc.Encode(toStore)
if err != nil {
c.Errorf("Datastore - PutInBlobstore - error 1 - %s", err)
return k, err
}
w, err := blobstore.Create(c, "application/octet-stream")
if err != nil {
c.Errorf("Datastore - PutInBlobstore - error 2 - %s", err)
return k, err
}
_, err = w.Write(data.Bytes())
if err != nil {
c.Errorf("Datastore - PutInBlobstore - error 3 - %s", err)
return k, err
}
err = w.Close()
if err != nil {
c.Errorf("Datastore - PutInBlobstore - error 4 - %s", err)
return k, err
}
k, err = w.Key()
if err != nil {
c.Errorf("Datastore - PutInBlobstore - error 5 - %s", err)
}
return k, err
}
示例12: unregisterUser
func unregisterUser(addr string, c appengine.Context) {
q := datastore.NewQuery(USER_MODEL).
Filter("Email =", addr).
KeysOnly()
keys, err := q.GetAll(c, nil)
if err != nil {
c.Errorf("Cound not query the model for %s: %v", addr, err)
return
}
if len(keys) == 0 {
c.Infof("No such user to unregister: %s", addr)
return
}
for i := range keys {
datastore.Delete(c, keys[i])
}
c.Infof("Removed user %s", addr)
msg := &gaeMail.Message{
Sender: "[email protected]",
To: []string{addr},
Subject: "Email unregistered",
Body: "user " + addr + " has been unregistered",
}
gaeMail.Send(c, msg)
}
示例13: sendSubscription
func sendSubscription(addr string, c appengine.Context) {
code := getSubCode()
msg := &gaeMail.Message{
Sender: "[email protected]",
To: []string{addr},
Subject: "confirm " + code,
Body: "Reply without changing subject",
}
if err := gaeMail.Send(c, msg); err != nil {
c.Errorf("Couldn't send email to %s for %s: %v", addr, code, err)
}
// XXXX if successful, register the code as (email, code, 0 (retry)) tuple.
confirmation := Confirmation{
Email: addr,
Code: code,
Retry: 0,
}
_, err := datastore.Put(c,
datastore.NewIncompleteKey(c, CONFIRM_MODEL, nil),
&confirmation)
if err != nil {
c.Errorf("Couldn't write confirmation code for %s, %s: %v", addr, code, err)
return
}
c.Infof("Wrote confirmation successfully for %s, %s", addr, code)
}
示例14: 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)
}
}
示例15: TriggerBatchProcessing
func TriggerBatchProcessing(c appengine.Context, article ArticleId) error {
// Instead of submitting a task to match incoming bids, resulting in one task per bid,
// we collect bids for up to two seconds and batch-process them afterwards.
semaphoreKey := "semaphore-" + string(article)
if semaphore, err := memcache.Increment(c, semaphoreKey, 1, 0); err != nil {
return err
} else if semaphore >= 2 {
c.Infof("Batch processing already triggered for article %v", article)
memcache.IncrementExisting(c, semaphoreKey, -1)
return nil
} else {
time.Sleep(1 * time.Second)
c.Infof("Starting batch processing...")
memcache.IncrementExisting(c, semaphoreKey, -1)
time_before := time.Now()
matchingErr := MatchIncomingBids(c, article)
time_after := time.Now()
duration := time_after.Sub(time_before)
if duration > 1000*time.Millisecond {
c.Errorf("Batch processing finished after %v. Limit exceeded!", duration)
} else if duration > 500*time.Millisecond {
c.Warningf("Batch processing finished after %v. Limit in danger.", duration)
} else {
c.Infof("Batch processing finished after %v.", duration)
}
return matchingErr
}
}