本文整理汇总了Golang中github.com/youtube/vitess/go/acl.SendError函数的典型用法代码示例。如果您正苦于以下问题:Golang SendError函数的具体用法?Golang SendError怎么用?Golang SendError使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了SendError函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的Golang代码示例。
示例1: ServeLogs
// ServeLogs registers the URL on which messages will be broadcast.
// It is safe to register multiple URLs for the same StreamLogger.
func (logger *StreamLogger) ServeLogs(url string, messageFmt func(url.Values, interface{}) string) {
http.HandleFunc(url, func(w http.ResponseWriter, r *http.Request) {
if err := acl.CheckAccessHTTP(r, acl.DEBUGGING); err != nil {
acl.SendError(w, err)
return
}
if err := r.ParseForm(); err != nil {
http.Error(w, err.Error(), http.StatusBadRequest)
}
ch := logger.Subscribe("ServeLogs")
defer logger.Unsubscribe(ch)
// Notify client that we're set up. Helpful to distinguish low-traffic streams from connection issues.
w.WriteHeader(http.StatusOK)
w.(http.Flusher).Flush()
for message := range ch {
if _, err := io.WriteString(w, messageFmt(r.Form, message)); err != nil {
return
}
w.(http.Flusher).Flush()
}
})
log.Infof("Streaming logs from %s at %v.", logger.Name(), url)
}
开发者ID:CowLeo,项目名称:vitess,代码行数:27,代码来源:streamlog.go
示例2: ServeHTTP
func (cp *CachePool) ServeHTTP(response http.ResponseWriter, request *http.Request) {
if err := acl.CheckAccessHTTP(request, acl.MONITORING); err != nil {
acl.SendError(response, err)
return
}
defer func() {
if x := recover(); x != nil {
response.Write(([]byte)(x.(error).Error()))
}
}()
response.Header().Set("Content-Type", "text/plain")
pool := cp.getPool()
if pool == nil {
response.Write(([]byte)("closed"))
return
}
command := request.URL.Path[len(statsURL):]
if command == "stats" {
command = ""
}
conn := cp.Get()
// This is not the same as defer rc.cachePool.Put(conn)
defer func() { cp.Put(conn) }()
r, err := conn.Stats(command)
if err != nil {
conn.Close()
conn = nil
response.Write(([]byte)(err.Error()))
} else {
response.Write(r)
}
}
开发者ID:nangong92t,项目名称:go_src,代码行数:32,代码来源:cache_pool.go
示例3: schemazHandler
func schemazHandler(tables []*schema.Table, w http.ResponseWriter, r *http.Request) {
if err := acl.CheckAccessHTTP(r, acl.DEBUGGING); err != nil {
acl.SendError(w, err)
return
}
startHTMLTable(w)
defer endHTMLTable(w)
w.Write(schemazHeader)
sorter := schemazSorter{
rows: tables,
less: func(row1, row2 *schema.Table) bool {
return row1.Name > row2.Name
},
}
sort.Sort(&sorter)
envelope := struct {
ColumnCategory []string
CacheType []string
Table *schema.Table
}{
ColumnCategory: []string{"other", "number", "varbinary"},
CacheType: []string{"none", "read-write", "write-only"},
}
for _, Value := range sorter.rows {
envelope.Table = Value
if err := schemazTmpl.Execute(w, envelope); err != nil {
log.Errorf("schemaz: couldn't execute template: %v", err)
}
}
}
开发者ID:richarwu,项目名称:vitess,代码行数:31,代码来源:schemaz.go
示例4: streamqueryzHandler
func streamqueryzHandler(w http.ResponseWriter, r *http.Request) {
if err := acl.CheckAccessHTTP(r, acl.DEBUGGING); err != nil {
acl.SendError(w, err)
return
}
rows := SqlQueryRpcService.qe.streamQList.GetQueryzRows()
if err := r.ParseForm(); err != nil {
http.Error(w, fmt.Sprintf("cannot parse form: %s", err), http.StatusInternalServerError)
return
}
format := r.FormValue("format")
if format == "json" {
js, err := json.Marshal(rows)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
w.Header().Set("Content-Type", "application/json")
w.Write(js)
return
}
startHTMLTable(w)
defer endHTMLTable(w)
w.Write(streamqueryzHeader)
for i := range rows {
streamqueryzTmpl.Execute(w, rows[i])
}
}
开发者ID:nangong92t,项目名称:go_src,代码行数:28,代码来源:stream_queryz.go
示例5: ServeHTTP
// ServeHTTP shows the current plans in the query cache.
func (plr *Planner) ServeHTTP(response http.ResponseWriter, request *http.Request) {
if err := acl.CheckAccessHTTP(request, acl.DEBUGGING); err != nil {
acl.SendError(response, err)
return
}
if request.URL.Path == "/debug/query_plans" {
keys := plr.plans.Keys()
response.Header().Set("Content-Type", "text/plain")
response.Write([]byte(fmt.Sprintf("Length: %d\n", len(keys))))
for _, v := range keys {
response.Write([]byte(fmt.Sprintf("%#v\n", v)))
if plan, ok := plr.plans.Peek(v); ok {
if b, err := json.MarshalIndent(plan, "", " "); err != nil {
response.Write([]byte(err.Error()))
} else {
response.Write(b)
}
response.Write(([]byte)("\n\n"))
}
}
} else if request.URL.Path == "/debug/vschema" {
response.Header().Set("Content-Type", "application/json; charset=utf-8")
b, err := json.MarshalIndent(plr.VSchema().Keyspaces, "", " ")
if err != nil {
response.Write([]byte(err.Error()))
return
}
buf := bytes.NewBuffer(nil)
json.HTMLEscape(buf, b)
response.Write(buf.Bytes())
} else {
response.WriteHeader(http.StatusNotFound)
}
}
开发者ID:dumbunny,项目名称:vitess,代码行数:35,代码来源:planner.go
示例6: schemazHandler
func schemazHandler(tables []*schema.Table, w http.ResponseWriter, r *http.Request) {
if err := acl.CheckAccessHTTP(r, acl.DEBUGGING); err != nil {
acl.SendError(w, err)
return
}
logz.StartHTMLTable(w)
defer logz.EndHTMLTable(w)
w.Write(schemazHeader)
sorter := schemazSorter{
rows: tables,
less: func(row1, row2 *schema.Table) bool {
return row1.Name > row2.Name
},
}
sort.Sort(&sorter)
envelope := struct {
Type []string
Table *schema.Table
}{
Type: schema.TypeNames,
}
for _, Value := range sorter.rows {
envelope.Table = Value
if err := schemazTmpl.Execute(w, envelope); err != nil {
log.Errorf("schemaz: couldn't execute template: %v", err)
}
}
}
开发者ID:erzel,项目名称:vitess,代码行数:29,代码来源:schemaz.go
示例7: healthCheck
func healthCheck(w http.ResponseWriter, r *http.Request) {
if err := acl.CheckAccessHTTP(r, acl.MONITORING); err != nil {
acl.SendError(w, err)
return
}
w.Header().Set("Content-Type", "text/plain")
if err := IsHealthy(); err != nil {
w.Write([]byte("notok"))
}
w.Write([]byte("ok"))
}
开发者ID:kingpro,项目名称:vitess,代码行数:11,代码来源:queryctl.go
示例8: registerDebugHealthHandler
func (tsv *TabletServer) registerDebugHealthHandler() {
http.HandleFunc("/debug/health", func(w http.ResponseWriter, r *http.Request) {
if err := acl.CheckAccessHTTP(r, acl.MONITORING); err != nil {
acl.SendError(w, err)
return
}
w.Header().Set("Content-Type", "text/plain")
if err := tsv.IsHealthy(); err != nil {
w.Write([]byte("not ok"))
return
}
w.Write([]byte("ok"))
})
}
开发者ID:zhaoyta,项目名称:vitess,代码行数:14,代码来源:tabletserver.go
示例9: querylogzHandler
// querylogzHandler serves a human readable snapshot of the
// current query log.
func querylogzHandler(ch chan interface{}, w http.ResponseWriter, r *http.Request) {
if err := acl.CheckAccessHTTP(r, acl.DEBUGGING); err != nil {
acl.SendError(w, err)
return
}
timeout, limit := parseTimeoutLimitParams(r)
logz.StartHTMLTable(w)
defer logz.EndHTMLTable(w)
w.Write(querylogzHeader)
tmr := time.NewTimer(timeout)
defer tmr.Stop()
for i := 0; i < limit; i++ {
select {
case out := <-ch:
select {
case <-tmr.C:
return
default:
}
stats, ok := out.(*LogStats)
if !ok {
err := fmt.Errorf("Unexpected value in %s: %#v (expecting value of type %T)", TxLogger.Name(), out, &LogStats{})
io.WriteString(w, `<tr class="error">`)
io.WriteString(w, err.Error())
io.WriteString(w, "</tr>")
log.Error(err)
continue
}
var level string
if stats.TotalTime().Seconds() < 0.01 {
level = "low"
} else if stats.TotalTime().Seconds() < 0.1 {
level = "medium"
} else {
level = "high"
}
tmplData := struct {
*LogStats
ColorLevel string
}{stats, level}
if err := querylogzTmpl.Execute(w, tmplData); err != nil {
log.Errorf("querylogz: couldn't execute template: %v", err)
}
case <-tmr.C:
return
}
}
}
开发者ID:erzel,项目名称:vitess,代码行数:51,代码来源:querylogz.go
示例10: txlogzHandler
// txlogzHandler serves a human readable snapshot of the
// current transaction log.
// Endpoint: /txlogz?timeout=%d&limit=%d
// timeout: the txlogz will keep dumping transactions until timeout
// limit: txlogz will keep dumping transcations until it hits the limit
func txlogzHandler(w http.ResponseWriter, req *http.Request) {
if err := acl.CheckAccessHTTP(req, acl.DEBUGGING); err != nil {
acl.SendError(w, err)
return
}
timeout, limit := parseTimeoutLimitParams(req)
ch := TxLogger.Subscribe("txlogz")
defer TxLogger.Unsubscribe(ch)
logz.StartHTMLTable(w)
defer logz.EndHTMLTable(w)
w.Write(txlogzHeader)
tmr := time.NewTimer(timeout)
defer tmr.Stop()
for i := 0; i < limit; i++ {
select {
case out := <-ch:
txc, ok := out.(*TxConnection)
if !ok {
err := fmt.Errorf("Unexpected value in %s: %#v (expecting value of type %T)", TxLogger.Name(), out, &TxConnection{})
io.WriteString(w, `<tr class="error">`)
io.WriteString(w, err.Error())
io.WriteString(w, "</tr>")
log.Error(err)
continue
}
duration := txc.EndTime.Sub(txc.StartTime).Seconds()
var level string
if duration < 0.1 {
level = "low"
} else if duration < 1.0 {
level = "medium"
} else {
level = "high"
}
tmplData := struct {
*TxConnection
Duration float64
ColorLevel string
}{txc, duration, level}
if err := txlogzTmpl.Execute(w, tmplData); err != nil {
log.Errorf("txlogz: couldn't execute template: %v", err)
}
case <-tmr.C:
return
}
}
}
开发者ID:erzel,项目名称:vitess,代码行数:54,代码来源:txlogz.go
示例11: queryzHandler
func queryzHandler(si *SchemaInfo, w http.ResponseWriter, r *http.Request) {
if err := acl.CheckAccessHTTP(r, acl.DEBUGGING); err != nil {
acl.SendError(w, err)
return
}
startHTMLTable(w)
defer endHTMLTable(w)
w.Write(queryzHeader)
keys := si.queries.Keys()
sorter := queryzSorter{
rows: make([]*queryzRow, 0, len(keys)),
less: func(row1, row2 *queryzRow) bool {
return row1.timePQ() > row2.timePQ()
},
}
for _, v := range si.queries.Keys() {
plan := si.peekQuery(v)
if plan == nil {
continue
}
Value := &queryzRow{
Query: wrappable(v),
Table: plan.TableName,
Plan: plan.PlanID,
Reason: plan.Reason,
}
Value.Count, Value.tm, Value.Rows, Value.Errors = plan.Stats()
var timepq time.Duration
if Value.Count != 0 {
timepq = time.Duration(int64(Value.tm) / Value.Count)
}
if timepq < 10*time.Millisecond {
Value.Color = "low"
} else if timepq < 100*time.Millisecond {
Value.Color = "medium"
} else {
Value.Color = "high"
}
sorter.rows = append(sorter.rows, Value)
}
sort.Sort(&sorter)
for _, Value := range sorter.rows {
if err := queryzTmpl.Execute(w, Value); err != nil {
log.Errorf("queryz: couldn't execute template: %v", err)
}
}
}
开发者ID:CowLeo,项目名称:vitess,代码行数:48,代码来源:queryz.go
示例12: ServeHTTP
func (co *Consolidator) ServeHTTP(response http.ResponseWriter, request *http.Request) {
if err := acl.CheckAccessHTTP(request, acl.DEBUGGING); err != nil {
acl.SendError(response, err)
return
}
items := co.consolidations.Items()
response.Header().Set("Content-Type", "text/plain")
if items == nil {
response.Write([]byte("empty\n"))
return
}
response.Write([]byte(fmt.Sprintf("Length: %d\n", len(items))))
for _, v := range items {
response.Write([]byte(fmt.Sprintf("%v: %s\n", v.Value.(*ccount).Get(), v.Key)))
}
}
开发者ID:CowLeo,项目名称:vitess,代码行数:16,代码来源:consolidator.go
示例13: ServeHTTP
func (si *SchemaInfo) ServeHTTP(response http.ResponseWriter, request *http.Request) {
if err := acl.CheckAccessHTTP(request, acl.DEBUGGING); err != nil {
acl.SendError(response, err)
return
}
if ep, ok := si.endpoints[debugQueryPlansKey]; ok && request.URL.Path == ep {
si.handleHTTPQueryPlans(response, request)
} else if ep, ok := si.endpoints[debugQueryStatsKey]; ok && request.URL.Path == ep {
si.handleHTTPQueryStats(response, request)
} else if ep, ok := si.endpoints[debugTableStatsKey]; ok && request.URL.Path == ep {
si.handleHTTPTableStats(response, request)
} else if ep, ok := si.endpoints[debugSchemaKey]; ok && request.URL.Path == ep {
si.handleHTTPSchema(response, request)
} else {
response.WriteHeader(http.StatusNotFound)
}
}
开发者ID:hadoop835,项目名称:vitess,代码行数:17,代码来源:schema_info.go
示例14: txlogzHandler
// txlogzHandler serves a human readable snapshot of the
// current transaction log.
func txlogzHandler(w http.ResponseWriter, r *http.Request) {
if err := acl.CheckAccessHTTP(r, acl.DEBUGGING); err != nil {
acl.SendError(w, err)
return
}
ch := TxLogger.Subscribe()
defer TxLogger.Unsubscribe(ch)
startHTMLTable(w)
defer endHTMLTable(w)
w.Write(txlogzHeader)
deadline := time.After(10 * time.Second)
for i := 0; i < 300; i++ {
select {
case out := <-ch:
txc, ok := out.(*TxConnection)
if !ok {
err := fmt.Errorf("Unexpected value in %s: %#v (expecting value of type %T)", TxLogger.Name(), out, &TxConnection{})
io.WriteString(w, `<tr class="error">`)
io.WriteString(w, err.Error())
io.WriteString(w, "</tr>")
log.Error(err)
continue
}
duration := txc.EndTime.Sub(txc.StartTime).Seconds()
var level string
if duration < 0.1 {
level = "low"
} else if duration < 1.0 {
level = "medium"
} else {
level = "high"
}
tmplData := struct {
*TxConnection
Duration float64
ColorLevel string
}{txc, duration, level}
txlogzTmpl.Execute(w, tmplData)
case <-deadline:
return
}
}
}
开发者ID:chinna1986,项目名称:vitess,代码行数:46,代码来源:txlogz.go
示例15: queryzHandler
// queryzHandler displays the query stats.
func queryzHandler(w http.ResponseWriter, r *http.Request) {
if err := acl.CheckAccessHTTP(r, acl.DEBUGGING); err != nil {
acl.SendError(w, err)
return
}
startHTMLTable(w)
defer endHTMLTable(w)
w.Write(queryzHeader)
si := SqlQueryRpcService.qe.schemaInfo
keys := si.queries.Keys()
sorter := queryzSorter{
rows: make([]*queryzRow, 0, len(keys)),
less: func(row1, row2 *queryzRow) bool {
return row1.timePQ() > row2.timePQ()
},
}
for _, v := range si.queries.Keys() {
plan := si.getQuery(v)
if plan == nil {
continue
}
Value := &queryzRow{
Query: wrappable(v),
Table: plan.TableName,
Plan: plan.PlanId,
}
Value.Count, Value.tm, Value.Rows, Value.Errors = plan.Stats()
timepq := time.Duration(int64(Value.tm) / Value.Count)
if timepq < 10*time.Millisecond {
Value.Color = "low"
} else if timepq < 100*time.Millisecond {
Value.Color = "medium"
} else {
Value.Color = "high"
}
sorter.rows = append(sorter.rows, Value)
}
sort.Sort(&sorter)
for _, Value := range sorter.rows {
queryzTmpl.Execute(w, Value)
}
}
开发者ID:ninqing,项目名称:vitess,代码行数:44,代码来源:queryz.go
示例16: querylogzHandler
// querylogzHandler serves a human readable snapshot of the
// current query log.
func querylogzHandler(w http.ResponseWriter, r *http.Request) {
if err := acl.CheckAccessHTTP(r, acl.DEBUGGING); err != nil {
acl.SendError(w, err)
return
}
ch := SqlQueryLogger.Subscribe("querylogz")
defer SqlQueryLogger.Unsubscribe(ch)
startHTMLTable(w)
defer endHTMLTable(w)
w.Write(querylogzHeader)
tmr := time.NewTimer(10 * time.Second)
defer tmr.Stop()
for i := 0; i < 300; i++ {
select {
case out := <-ch:
stats, ok := out.(*SQLQueryStats)
if !ok {
err := fmt.Errorf("Unexpected value in %s: %#v (expecting value of type %T)", TxLogger.Name(), out, &SQLQueryStats{})
io.WriteString(w, `<tr class="error">`)
io.WriteString(w, err.Error())
io.WriteString(w, "</tr>")
log.Error(err)
continue
}
var level string
if stats.TotalTime().Seconds() < 0.01 {
level = "low"
} else if stats.TotalTime().Seconds() < 0.1 {
level = "medium"
} else {
level = "high"
}
tmplData := struct {
*SQLQueryStats
ColorLevel string
}{stats, level}
querylogzTmpl.Execute(w, tmplData)
case <-tmr.C:
return
}
}
}
开发者ID:miffa,项目名称:vitess,代码行数:45,代码来源:querylogz.go
示例17: ServeLogs
// ServeLogs registers the URL on which messages will be broadcast.
// It is safe to register multiple URLs for the same StreamLogger.
func (logger *StreamLogger) ServeLogs(url string, messageFmt func(url.Values, interface{}) string) {
http.HandleFunc(url, func(w http.ResponseWriter, r *http.Request) {
if err := acl.CheckAccessHTTP(r, acl.DEBUGGING); err != nil {
acl.SendError(w, err)
return
}
if err := r.ParseForm(); err != nil {
http.Error(w, err.Error(), http.StatusBadRequest)
}
ch := logger.Subscribe()
defer logger.Unsubscribe(ch)
for message := range ch {
if _, err := io.WriteString(w, messageFmt(r.Form, message)); err != nil {
return
}
w.(http.Flusher).Flush()
}
})
log.Infof("Streaming logs from %s at %v.", logger.Name(), url)
}
开发者ID:chinna1986,项目名称:vitess,代码行数:23,代码来源:streamlog.go
示例18: streamqueryzTerminateHandler
func streamqueryzTerminateHandler(w http.ResponseWriter, r *http.Request) {
if err := acl.CheckAccessHTTP(r, acl.ADMIN); err != nil {
acl.SendError(w, err)
return
}
if err := r.ParseForm(); err != nil {
http.Error(w, fmt.Sprintf("cannot parse form: %s", err), http.StatusInternalServerError)
return
}
connID := r.FormValue("connID")
c, err := strconv.Atoi(connID)
if err != nil {
http.Error(w, "invalid connID", http.StatusInternalServerError)
return
}
if err = SqlQueryRpcService.qe.streamQList.Terminate(int64(c)); err != nil {
http.Error(w, fmt.Sprintf("error: %v", err), http.StatusInternalServerError)
return
}
streamqueryzHandler(w, r)
}
开发者ID:nangong92t,项目名称:go_src,代码行数:21,代码来源:stream_queryz.go
示例19: statusHandler
func statusHandler(w http.ResponseWriter, r *http.Request) {
if err := acl.CheckAccessHTTP(r, acl.DEBUGGING); err != nil {
acl.SendError(w, err)
return
}
statusMu.Lock()
defer statusMu.Unlock()
data := struct {
Sections []section
BinaryName string
Hostname string
StartTime string
}{
Sections: statusSections,
BinaryName: binaryName,
Hostname: hostname,
StartTime: serverStart.Format(time.RFC1123),
}
if err := statusTmpl.ExecuteTemplate(w, "status", data); err != nil {
log.Errorf("servenv: couldn't execute template: %v", err)
}
}
开发者ID:chinna1986,项目名称:vitess,代码行数:24,代码来源:status.go
示例20: InitStatusHandling
// InitStatusHandling installs webserver handlers for global actions like /status, /reset and /cancel.
func (wi *Instance) InitStatusHandling() {
// code to serve /status
workerTemplate := mustParseTemplate("worker", workerStatusHTML)
http.HandleFunc("/status", func(w http.ResponseWriter, r *http.Request) {
if err := acl.CheckAccessHTTP(r, acl.ADMIN); err != nil {
acl.SendError(w, err)
return
}
wi.currentWorkerMutex.Lock()
wrk := wi.currentWorker
logger := wi.currentMemoryLogger
ctx := wi.currentContext
err := wi.lastRunError
wi.currentWorkerMutex.Unlock()
data := make(map[string]interface{})
if wrk != nil {
status := template.HTML("Current worker:<br>\n") + wrk.StatusAsHTML()
if ctx == nil {
data["Done"] = true
if err != nil {
status += template.HTML(fmt.Sprintf("<br>\nEnded with an error: %v<br>\n", err))
}
}
data["Status"] = status
if logger != nil {
data["Logs"] = template.HTML(strings.Replace(logger.String(), "\n", "</br>\n", -1))
} else {
data["Logs"] = template.HTML("See console for logs</br>\n")
}
}
executeTemplate(w, workerTemplate, data)
})
// add the section in status that does auto-refresh of status div
servenv.AddStatusPart("Worker Status", workerStatusPartHTML, func() interface{} {
return nil
})
// reset handler
http.HandleFunc("/reset", func(w http.ResponseWriter, r *http.Request) {
if err := acl.CheckAccessHTTP(r, acl.ADMIN); err != nil {
acl.SendError(w, err)
return
}
if err := wi.Reset(); err != nil {
httpError(w, err.Error(), nil)
} else {
// No worker currently running, we go to the menu.
http.Redirect(w, r, "/", http.StatusTemporaryRedirect)
}
})
// cancel handler
http.HandleFunc("/cancel", func(w http.ResponseWriter, r *http.Request) {
if err := acl.CheckAccessHTTP(r, acl.ADMIN); err != nil {
acl.SendError(w, err)
return
}
wi.currentWorkerMutex.Lock()
// no worker, or not running, we go to the menu
if wi.currentWorker == nil || wi.currentCancelFunc == nil {
wi.currentWorkerMutex.Unlock()
http.Redirect(w, r, "/", http.StatusTemporaryRedirect)
return
}
// otherwise, cancel the running worker and go back to the status page
cancel := wi.currentCancelFunc
wi.currentWorkerMutex.Unlock()
cancel()
http.Redirect(w, r, servenv.StatusURLPath(), http.StatusTemporaryRedirect)
})
}
开发者ID:littleyang,项目名称:vitess,代码行数:80,代码来源:status.go
注:本文中的github.com/youtube/vitess/go/acl.SendError函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论