本文整理匯總了Golang中github.com/google/martian/log.Errorf函數的典型用法代碼示例。如果您正苦於以下問題:Golang Errorf函數的具體用法?Golang Errorf怎麽用?Golang Errorf使用的例子?那麽, 這裏精選的函數代碼示例或許可以為您提供幫助。
在下文中一共展示了Errorf函數的15個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的Golang代碼示例。
示例1: ServeHTTP
// ServeHTTP accepts a POST request with a body containing a modifier as a JSON
// message and updates the contained reqmod and resmod with the parsed
// modifier.
func (m *Modifier) ServeHTTP(rw http.ResponseWriter, req *http.Request) {
if req.Method != "POST" {
rw.Header().Set("Allow", "POST")
rw.WriteHeader(405)
return
}
body, err := ioutil.ReadAll(req.Body)
if err != nil {
http.Error(rw, err.Error(), 500)
log.Errorf("error reading request body: %v", err)
return
}
req.Body.Close()
r, err := parse.FromJSON(body)
if err != nil {
http.Error(rw, err.Error(), 400)
log.Errorf("error parsing JSON: %v", err)
return
}
m.SetRequestModifier(r.RequestModifier())
m.SetResponseModifier(r.ResponseModifier())
}
示例2: handleLoop
func (p *Proxy) handleLoop(conn net.Conn) {
p.conns.Add(1)
defer p.conns.Done()
defer conn.Close()
s, err := newSession()
if err != nil {
log.Errorf("martian: failed to create session: %v", err)
return
}
ctx, err := withSession(s)
if err != nil {
log.Errorf("martian: failed to create context: %v", err)
return
}
brw := bufio.NewReadWriter(bufio.NewReader(conn), bufio.NewWriter(conn))
for {
deadline := time.Now().Add(p.timeout)
conn.SetDeadline(deadline)
if err := p.handle(ctx, conn, brw); isCloseable(err) {
log.Debugf("martian: closing connection: %v", conn.RemoteAddr())
return
}
}
}
示例3: servePOST
func (m *Modifier) servePOST(rw http.ResponseWriter, req *http.Request) {
body, err := ioutil.ReadAll(req.Body)
if err != nil {
http.Error(rw, err.Error(), 500)
log.Errorf("martianhttp: error reading request body: %v", err)
return
}
req.Body.Close()
r, err := parse.FromJSON(body)
if err != nil {
http.Error(rw, err.Error(), 400)
log.Errorf("martianhttp: error parsing JSON: %v", err)
return
}
buf := new(bytes.Buffer)
if err := json.Indent(buf, body, "", " "); err != nil {
http.Error(rw, err.Error(), 400)
log.Errorf("martianhttp: error formatting JSON: %v", err)
return
}
m.mu.Lock()
defer m.mu.Unlock()
m.config = buf.Bytes()
m.setRequestModifier(r.RequestModifier())
m.setResponseModifier(r.ResponseModifier())
}
示例4: ServeHTTP
// ServeHTTP writes out a JSON response containing a list of verification
// errors that occurred during the requests and responses sent to the proxy.
func (h *Handler) ServeHTTP(rw http.ResponseWriter, req *http.Request) {
rw.Header().Set("Content-Type", "application/json")
if req.Method != "GET" {
rw.Header().Set("Allow", "GET")
rw.WriteHeader(405)
log.Errorf("verify: invalid request method: %s", req.Method)
return
}
vres := &verifyResponse{}
if h.reqv != nil {
if err := h.reqv.VerifyRequests(); err != nil {
appendError(vres, err)
}
}
if h.resv != nil {
if err := h.resv.VerifyResponses(); err != nil {
appendError(vres, err)
}
}
json.NewEncoder(rw).Encode(vres)
}
示例5: Write
// Writes writes bytes from b to the connection, optionally simulating
// connection latency and throttling write throughput based on desired
// bandwidth constraints.
func (c *conn) Write(b []byte) (int, error) {
c.wonce.Do(c.sleepLatency)
var total int64
for len(b) > 0 {
var max int64
n, err := c.wb.FillThrottle(func(remaining int64) (int64, error) {
max = remaining
if l := int64(len(b)); remaining >= l {
max = l
}
n, err := c.Conn.Write(b[:max])
return int64(n), err
})
total += n
if err != nil {
if err != io.EOF {
log.Errorf("trafficshape: failed write: %v", err)
}
return int(total), err
}
b = b[max:]
}
return int(total), nil
}
示例6: Fill
// Fill calls fn with the available capacity remaining (capacity-fill) and
// fills the bucket with the number of tokens returned by fn. If the remaining
// capacity is 0, Fill returns 0, nil. If the remaining capacity is < 0, Fill
// returns 0, ErrBucketOverflow.
//
// If fn returns an error, it will be returned by Fill along with the remaining
// capacity.
//
// fn is provided the remaining capacity as a soft maximum, fn is allowed to
// use more than the remaining capacity without incurring spillage, though this
// will cause subsequent calls to Fill to return ErrBucketOverflow until the
// next drain.
//
// If the bucket is closed when Fill is called, fn will not be executed and
// Fill will return with an error.
func (b *Bucket) Fill(fn func(int64) (int64, error)) (int64, error) {
if b.closed() {
log.Errorf("trafficshape: fill on closed bucket")
return 0, errFillClosedBucket
}
fill := atomic.LoadInt64(&b.fill)
capacity := atomic.LoadInt64(&b.capacity)
switch {
case fill < capacity:
log.Debugf("trafficshape: under capacity (%d/%d)", fill, capacity)
n, err := fn(capacity - fill)
fill = atomic.AddInt64(&b.fill, n)
return n, err
case fill > capacity:
log.Debugf("trafficshape: bucket overflow (%d/%d)", fill, capacity)
return 0, ErrBucketOverflow
}
log.Debugf("trafficshape: bucket full (%d/%d)", fill, capacity)
return 0, nil
}
示例7: ServeHTTP
// ServeHTTP configures latency and bandwidth constraints.
//
// The "latency" query string parameter accepts a duration string in any format
// supported by time.ParseDuration.
// The "up" and "down" query string parameters accept integers as bits per
// second to be used for read and write throughput.
func (h *Handler) ServeHTTP(rw http.ResponseWriter, req *http.Request) {
log.Debugf("trafficshape: configuration request")
latency := req.FormValue("latency")
if latency != "" {
d, err := time.ParseDuration(latency)
if err != nil {
log.Errorf("trafficshape: invalid latency parameter: %v", err)
http.Error(rw, fmt.Sprintf("invalid duration: %s", latency), 400)
return
}
h.l.SetLatency(d)
}
up := req.FormValue("up")
if up != "" {
br, err := strconv.ParseInt(up, 10, 64)
if err != nil {
log.Errorf("trafficshape: invalid up parameter: %v", err)
http.Error(rw, fmt.Sprintf("invalid upstream: %s", up), 400)
return
}
h.l.SetWriteBitrate(br)
}
down := req.FormValue("down")
if down != "" {
br, err := strconv.ParseInt(down, 10, 64)
if err != nil {
log.Errorf("trafficshape: invalid down parameter: %v", err)
http.Error(rw, fmt.Sprintf("invalid downstream: %s", down), 400)
return
}
h.l.SetReadBitrate(br)
}
log.Debugf("trafficshape: configured successfully")
}
示例8: ServeHTTP
// ServeHTTP resets the log, which clears its entries.
func (h *resetHandler) ServeHTTP(rw http.ResponseWriter, req *http.Request) {
if !(req.Method == "POST" || req.Method == "DELETE") {
rw.Header().Add("Allow", "POST")
rw.Header().Add("Allow", "DELETE")
rw.WriteHeader(http.StatusMethodNotAllowed)
log.Errorf("har: method not allowed: %s", req.Method)
return
}
h.logger.Reset()
rw.WriteHeader(http.StatusNoContent)
}
示例9: Read
// Read reads bytes from connection into b, optionally simulating connection
// latency and throttling read throughput based on desired bandwidth
// constraints.
func (c *conn) Read(b []byte) (int, error) {
c.ronce.Do(c.sleepLatency)
n, err := c.rb.FillThrottle(func(remaining int64) (int64, error) {
max := remaining
if l := int64(len(b)); max > l {
max = l
}
n, err := c.Conn.Read(b[:max])
return int64(n), err
})
if err != nil && err != io.EOF {
log.Errorf("trafficshape: error on throttled read: %v", err)
}
return int(n), err
}
示例10: WriteTo
// WriteTo writes data to w from the connection, optionally simulating
// connection latency and throttling write throughput based on desired
// bandwidth constraints.
func (c *conn) WriteTo(w io.Writer) (int64, error) {
c.wonce.Do(c.sleepLatency)
var total int64
for {
n, err := c.wb.FillThrottle(func(remaining int64) (int64, error) {
return io.CopyN(w, c.Conn, remaining)
})
total += n
if err != nil {
if err != io.EOF {
log.Errorf("trafficshape: failed copying to writer: %v", err)
}
return total, err
}
}
}
示例11: ReadFrom
// ReadFrom reads data from r until EOF or error, optionally simulating
// connection latency and throttling read throughput based on desired bandwidth
// constraints.
func (c *conn) ReadFrom(r io.Reader) (int64, error) {
c.ronce.Do(c.sleepLatency)
var total int64
for {
n, err := c.rb.FillThrottle(func(remaining int64) (int64, error) {
return io.CopyN(c.Conn, r, remaining)
})
total += n
if err == io.EOF {
log.Debugf("trafficshape: exhausted reader successfully")
return total, nil
} else if err != nil {
log.Errorf("trafficshape: failed copying from reader: %v", err)
return total, err
}
}
}
示例12: Serve
// Serve accepts connections from the listener and handles the requests.
func (p *Proxy) Serve(l net.Listener) error {
defer l.Close()
var delay time.Duration
for {
if p.Closing() {
return nil
}
conn, err := l.Accept()
if err != nil {
if nerr, ok := err.(net.Error); ok && nerr.Temporary() {
if delay == 0 {
delay = 5 * time.Millisecond
} else {
delay *= 2
}
if max := time.Second; delay > max {
delay = max
}
log.Debugf("martian: temporary error on accept: %v", err)
time.Sleep(delay)
continue
}
log.Errorf("martian: failed to accept: %v", err)
return err
}
delay = 0
log.Debugf("martian: accepted connection from %s", conn.RemoteAddr())
if tconn, ok := conn.(*net.TCPConn); ok {
tconn.SetKeepAlive(true)
tconn.SetKeepAlivePeriod(3 * time.Minute)
}
go p.handleLoop(conn)
}
}
示例13: Accept
// Accept waits for and returns the next connection to the listener.
func (l *Listener) Accept() (net.Conn, error) {
oc, err := l.Listener.Accept()
if err != nil {
log.Errorf("trafficshape: failed accepting connection: %v", err)
return nil, err
}
if tconn, ok := oc.(*net.TCPConn); ok {
log.Debugf("trafficshape: setting keep-alive for TCP connection")
tconn.SetKeepAlive(true)
tconn.SetKeepAlivePeriod(3 * time.Minute)
}
lc := &conn{
Conn: oc,
latency: l.Latency(),
rb: l.rb,
wb: l.wb,
}
return lc, nil
}
示例14: FillThrottle
// FillThrottle calls fn with the available capacity remaining (capacity-fill)
// and fills the bucket with the number of tokens returned by fn. If the
// remaining capacity is <= 0, FillThrottle will wait for the next drain before
// running fn.
//
// If fn returns an error, it will be returned by FillThrottle along with the
// number of tokens processed by fn.
//
// fn is provided the remaining capacity as a soft maximum, fn is allowed to
// use more than the remaining capacity without incurring spillage.
//
// If the bucket is closed when FillThrottle is called, or while waiting for
// the next drain, fn will not be executed and FillThrottle will return with an
// error.
func (b *Bucket) FillThrottle(fn func(int64) (int64, error)) (int64, error) {
for {
if b.closed() {
log.Errorf("trafficshape: fill on closed bucket")
return 0, errFillClosedBucket
}
fill := atomic.LoadInt64(&b.fill)
capacity := atomic.LoadInt64(&b.capacity)
if fill < capacity {
log.Debugf("trafficshape: under capacity (%d/%d)", fill, capacity)
n, err := fn(capacity - fill)
fill = atomic.AddInt64(&b.fill, n)
return n, err
}
log.Debugf("trafficshape: bucket full (%d/%d)", fill, capacity)
}
}
示例15: postData
func postData(req *http.Request) (*PostData, error) {
// If the request has no body (no Content-Length and Transfer-Encoding isn't
// chunked), skip the post data.
if req.ContentLength <= 0 && len(req.TransferEncoding) == 0 {
return nil, nil
}
ct := req.Header.Get("Content-Type")
mt, ps, err := mime.ParseMediaType(ct)
if err != nil {
log.Errorf("har: cannot parse Content-Type header %q: %v", ct, err)
mt = ct
}
pd := &PostData{
MimeType: mt,
Params: []Param{},
}
mv := messageview.New()
if err := mv.SnapshotRequest(req); err != nil {
return nil, err
}
br, err := mv.BodyReader()
if err != nil {
return nil, err
}
switch mt {
case "multipart/form-data":
mpr := multipart.NewReader(br, ps["boundary"])
for {
p, err := mpr.NextPart()
if err == io.EOF {
break
}
if err != nil {
return nil, err
}
defer p.Close()
body, err := ioutil.ReadAll(p)
if err != nil {
return nil, err
}
pd.Params = append(pd.Params, Param{
Name: p.FormName(),
Filename: p.FileName(),
ContentType: p.Header.Get("Content-Type"),
Value: string(body),
})
}
case "application/x-www-form-urlencoded":
body, err := ioutil.ReadAll(br)
if err != nil {
return nil, err
}
vs, err := url.ParseQuery(string(body))
if err != nil {
return nil, err
}
for n, vs := range vs {
for _, v := range vs {
pd.Params = append(pd.Params, Param{
Name: n,
Value: v,
})
}
}
default:
body, err := ioutil.ReadAll(br)
if err != nil {
return nil, err
}
pd.Text = string(body)
}
return pd, nil
}