本文整理汇总了Golang中appengine.Context.Criticalf方法的典型用法代码示例。如果您正苦于以下问题:Golang Context.Criticalf方法的具体用法?Golang Context.Criticalf怎么用?Golang Context.Criticalf使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类appengine.Context
的用法示例。
在下文中一共展示了Context.Criticalf方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: Log
// Log is a helper function that logs the given message to appenging
// with the given priority. Accepted priorities are "debug", "info",
// "warn", "error", and "crit". Other values default to "error".
func Log(c appengine.Context, r *http.Request, priority string,
message string, params ...interface{}) {
message = fmt.Sprintf("[%s] [%s] [%s]: %s", r.RemoteAddr, r.Method,
r.URL, message)
switch priority {
case "debug":
c.Debugf(message, params...)
case "info":
c.Infof(message, params...)
case "warn":
c.Warningf(message, params...)
case "error":
c.Errorf(message, params...)
case "crit":
c.Criticalf(message, params...)
default:
c.Errorf(message, params...)
}
}
示例2: updateCacheTime
func updateCacheTime(c appengine.Context, seq int64) {
const key = rootMemcacheKey
bseq := []byte(strconv.FormatInt(seq, 10))
for tries := 0; tries < 10; tries++ {
item, err := memcache.Get(c, key)
if err != nil {
c.Infof("memcache.Get %q: %v", key, err)
err = memcache.Add(c, &memcache.Item{Key: key, Value: bseq})
if err == nil {
c.Infof("memcache.Add %q %q ok", key, bseq)
return
}
c.Infof("memcache.Add %q %q: %v", key, bseq, err)
}
v, err := strconv.ParseInt(string(item.Value), 10, 64)
if err != nil {
c.Criticalf("memcache.Get %q = %q (%v)", key, item.Value, err)
return
}
if v >= seq {
return
}
item.Value = bseq
err = memcache.CompareAndSwap(c, item)
if err == nil {
c.Infof("memcache.CAS %q %d->%d ok", key, v, seq)
return
}
c.Infof("memcache.CAS %q %d->%d: %v", key, v, seq, err)
}
c.Criticalf("repeatedly failed to update root key")
}
示例3: mailissue
func mailissue(ctxt appengine.Context, kind, key string) error {
ctxt.Infof("mailissue %s", key)
var cl CL
err := app.ReadData(ctxt, "CL", key, &cl)
if err != nil {
return nil // error already logged
}
if len(cl.NeedMailIssue) == 0 {
return nil
}
var mailed []string
for _, issue := range cl.NeedMailIssue {
err := postIssueComment(ctxt, issue, "CL https://codereview.appspot.com/"+cl.CL+" mentions this issue.")
if err != nil {
ctxt.Criticalf("posting to issue %v: %v", issue, err)
continue
}
mailed = append(mailed, issue)
}
err = app.Transaction(ctxt, func(ctxt appengine.Context) error {
var old CL
if err := app.ReadData(ctxt, "CL", key, &old); err != nil {
return err
}
old.MailedIssue = append(old.MailedIssue, mailed...)
return app.WriteData(ctxt, "CL", key, &old)
})
return err
}
示例4: AppEngineLogHandler
// AppEngineLogHandler sends logs to AppEngine.
// The record must contain the appengine request context.
func AppEngineLogHandler() log15.Handler {
logFormat := log15.JsonFormat()
return log15.FuncHandler(func(r *log15.Record) error {
var c appengine.Context
index := 0
for i, e := range r.Ctx {
if ct, ok := e.(appengine.Context); ok {
c = ct
index = i
break
}
}
if c == nil {
// not in the context of a request
return nil
}
r.Ctx = append(r.Ctx[:index-1], r.Ctx[index+1:]...)
log := string(logFormat.Format(r))
switch r.Lvl {
case log15.LvlCrit:
c.Criticalf(log)
case log15.LvlError:
c.Errorf(log)
case log15.LvlWarn:
c.Warningf(log)
case log15.LvlInfo:
c.Infof(log)
case log15.LvlDebug:
c.Debugf(log)
}
return nil
})
}
示例5: userHandler
// Handler to find all questions answered/being answered by the user in URL
func userHandler(w http.ResponseWriter, r *http.Request, c appengine.Context, user stackongo.User) {
userID, _ := strconv.Atoi(r.FormValue("id"))
query := userData{}
// Create and fill in a new webData struct
tempData := newWebData()
data.CacheLock.Lock()
// range through the question caches golang stackongo and add if the question contains the tag
tempData.Caches["unanswered"] = data.Caches["unanswered"]
if userQuery, ok := data.Users[userID]; ok {
query = userQuery
for cacheType, cache := range data.Users[userID].Caches {
if cacheType != "unanswered" {
tempData.Caches[cacheType] = cache
}
}
tempData.Qns = data.Qns
}
data.CacheLock.Unlock()
page := template.Must(template.ParseFiles("public/template.html"))
var userQuery = []string{
"user",
query.User_info.Display_name,
}
if err := page.Execute(w, writeResponse(user, tempData, c, userQuery)); err != nil {
c.Criticalf("%v", err.Error())
}
}
示例6: tagHandler
// Handler to find all questions with specific tags
func tagHandler(w http.ResponseWriter, r *http.Request, c appengine.Context, user stackongo.User) {
// Collect query
tag := r.FormValue("tagSearch")
// Create and fill in a new webData struct
tempData := newWebData()
data.CacheLock.Lock()
// range through the question caches golang stackongoand add if the question contains the tag
for cacheType, cache := range data.Caches {
for _, question := range cache {
if contains(question.Tags, tag) {
tempData.Caches[cacheType] = append(tempData.Caches[cacheType], question)
}
}
}
tempData.Qns = data.Qns
data.CacheLock.Unlock()
page := template.Must(template.ParseFiles("public/template.html"))
var tagQuery = []string{
"tag",
tag,
}
if err := page.Execute(w, writeResponse(user, tempData, c, tagQuery)); err != nil {
c.Criticalf("%v", err.Error())
}
}
示例7: viewTagsHandler
//This is the main tags page
//Should display a list of tags that are logged in the database
//User can either click on a tag to view any questions containing that tag or search by a specific tag
func viewTagsHandler(w http.ResponseWriter, r *http.Request, c appengine.Context, user stackongo.User) {
//Read all tags and their counts from the db, and execute the page
query := readTagsFromDb()
//Format array of tags into another array, to be easier formatted on the page into a table
//An array of tagData arrays of size 4
var tagArray [][]tagData
var tempTagArray []tagData
i := 0
for _, t := range query {
tempTagArray = append(tempTagArray, t)
i++
if i == 4 {
tagArray = append(tagArray, tempTagArray)
i = 0
//clear the temp array.
tempTagArray = nil
}
}
tagArray = append(tagArray, tempTagArray)
page := template.Must(template.ParseFiles("public/viewTags.html"))
if err := page.Execute(w, queryReply{user, tagArray}); err != nil {
c.Criticalf("%v", err.Error())
}
}
示例8: userPageHandler
func userPageHandler(w http.ResponseWriter, r *http.Request, c appengine.Context, user stackongo.User) {
page := template.Must(template.ParseFiles("public/userPage.html"))
usr, _ := strconv.Atoi(r.FormValue("userId"))
currentUser := data.Users[usr]
query := userData{User_info: currentUser.User_info}
var n int
query.Caches = make(map[string][]stackongo.Question)
n = Min(3, len(currentUser.Caches["unanswered"]))
if n > 0 {
query.Caches["answered"] = currentUser.Caches["answered"][0:n]
}
n = Min(3, len(currentUser.Caches["pending"]))
if n > 0 {
query.Caches["pending"] = currentUser.Caches["pending"][0:n]
}
n = Min(3, len(currentUser.Caches["updating"]))
if n > 0 {
query.Caches["updating"] = currentUser.Caches["updating"][0:n]
}
if err := page.Execute(w, queryReply{user, query}); err != nil {
c.Criticalf("%v", err.Error())
}
}
示例9: cachePathTime
func cachePathTime(c appengine.Context, path string) (t int64, err error) {
t, err = cacheTime(c)
if err != nil {
return 0, err
}
key := fmt.Sprintf("%d,mtime,%s", t, path)
item, err := memcache.Get(c, key)
if err == nil {
v, err := strconv.ParseInt(string(item.Value), 10, 64)
if err == nil {
if chatty {
c.Infof("cachePathTime %q = %v", key, v)
}
return v, nil
}
c.Criticalf("memcache.Get %q = %q (%v) - deleting", key, item.Value, err)
memcache.Delete(c, key)
}
var seq int64
if fi, err := stat(c, path); err == nil {
seq = fi.Seq
}
c.Infof("cachePathTime save %q = %v", key, seq)
item = &memcache.Item{Key: key, Value: []byte(strconv.FormatInt(seq, 10))}
if err := memcache.Set(c, item); err != nil {
c.Criticalf("memcache.Set %q %q: %v", key, item.Value, err)
}
return seq, nil
}
示例10: HandleError
func HandleError(c appengine.Context, w http.ResponseWriter, err error) {
w.WriteHeader(http.StatusInternalServerError)
err2 := Layout.Execute(w, tmplt.Context{"err": err})
if err2 != nil {
c.Criticalf("Got error %v while serving %v", err2, err)
return
}
}
示例11: cacheWrite
func cacheWrite(c appengine.Context, t int64, kind, name string, data []byte) error {
mkey := fmt.Sprintf("%d,%s,%s", t, kind, name)
if true || chatty {
c.Infof("cacheWrite %s %d bytes", mkey, len(data))
}
err := memcache.Set(c, &memcache.Item{Key: mkey, Value: data})
if err != nil {
c.Criticalf("cacheWrite memcache.Set %q: %v", mkey, err)
}
return err
}
示例12: writeLogMessage
func writeLogMessage(c appengine.Context, level logLevel, msg string) {
const fmt = "%s"
switch level {
case levelDebug:
c.Debugf(fmt, msg)
case levelWarning:
c.Warningf(fmt, msg)
case levelError:
c.Errorf(fmt, msg)
case levelCritical:
c.Criticalf(fmt, msg)
default:
c.Infof(fmt, msg)
}
}
示例13: notify
// notify tries to update the CL for the given Commit with a failure message.
// If it doesn't succeed, it sends a failure email to golang-dev.
func notify(c appengine.Context, com *Commit, builder, logHash string) {
var msg bytes.Buffer
err := notifyTmpl.Execute(&msg, struct {
Builder string
LogHash string
Hostname string
}{builder, logHash, domain})
if err != nil {
c.Criticalf("couldn't render template: %v", err)
return
}
if err := postGerritMessage(c, com, msg.String()); err != nil {
c.Errorf("couldn't post to gerrit: %v", err)
}
}
示例14: UserHasActiveSubscription
//TODO finish this function with the popper search parameters
func UserHasActiveSubscription(ctx appengine.Context, userKey *datastore.Key) (bool, error) {
count, err := datastore.NewQuery(TXN_KIND).
Ancestor(userKey).
Filter("PaymentActivationDate>=", time.Now().AddDate(0, -6, 0)).
Count(ctx)
if err != nil {
return false, err
}
if count > 1 {
ctx.Criticalf(fmt.Sprintf("User has multiple (%d) active subscriptions, key: %s", count, userKey.String()))
}
return count > 0, nil
}
示例15: doExpire
func doExpire(c appengine.Context, expireTime time.Time, cursorString string) {
query := getExpiredQuery(expireTime).KeysOnly()
if len(cursorString) > 0 {
if cursor, err := datastore.DecodeCursor(cursorString); err != nil {
c.Errorf("Failed to decode cursor: %s", err)
return
} else {
query = query.Start(cursor)
}
}
for {
toDelete := make([]*datastore.Key, 0, 100)
for queryIterator := query.Run(c); ; {
peerKey, err := queryIterator.Next(nil)
if len(toDelete) >= 100 {
break
} else if err == datastore.Done {
c.Infof("Done finding expired peers")
break
} else if err != nil {
c.Criticalf("Failed to get next peer: %#v (%s)", err, err)
return
}
toDelete = append(toDelete, peerKey)
}
deleted := len(toDelete)
c.Infof("Deleting %d expired peers", deleted)
if err := ds.DeleteMulti(c, toDelete); err != nil {
c.Criticalf("Failed to delete peers: %#v (%s)", err, err)
return
}
if deleted <= 0 {
break
}
}
c.Infof("Finished deleting expired peers")
}