78 lines
1.3 KiB
Go
78 lines
1.3 KiB
Go
package http
|
|
|
|
import (
|
|
"net/http"
|
|
"time"
|
|
)
|
|
|
|
type _size struct {
|
|
value uint64
|
|
}
|
|
|
|
func (s *_size) get() uint64 {
|
|
return s.value
|
|
}
|
|
func (s *_size) set(v uint64) {
|
|
s.value = v
|
|
}
|
|
func (s *_size) add(v uint64) {
|
|
s.value += v
|
|
}
|
|
|
|
type _status struct {
|
|
value int
|
|
}
|
|
|
|
func (s *_status) get() int {
|
|
return s.value
|
|
}
|
|
func (s *_status) set(v int) {
|
|
s.value = v
|
|
}
|
|
|
|
type ResponseWriterWrapper struct {
|
|
writer http.ResponseWriter
|
|
size *_size
|
|
status *_status
|
|
time time.Time
|
|
}
|
|
|
|
func MakeResponseWriterWrapper(w http.ResponseWriter) *ResponseWriterWrapper {
|
|
return &ResponseWriterWrapper{
|
|
writer: w,
|
|
size: &_size{value: 0},
|
|
status: &_status{value: 200},
|
|
time: time.Now(),
|
|
}
|
|
}
|
|
|
|
func (r *ResponseWriterWrapper) Write(data []byte) (int, error) {
|
|
r.size.add(uint64(len(data)))
|
|
return r.writer.Write(data)
|
|
}
|
|
|
|
func (r *ResponseWriterWrapper) Header() http.Header {
|
|
return r.writer.Header()
|
|
}
|
|
|
|
func (r *ResponseWriterWrapper) WriteHeader(statusCode int) {
|
|
r.status.set(statusCode)
|
|
r.writer.WriteHeader(statusCode)
|
|
}
|
|
|
|
func (r *ResponseWriterWrapper) GetSize() uint64 {
|
|
return r.size.get()
|
|
}
|
|
|
|
func (r *ResponseWriterWrapper) GetTime() time.Time {
|
|
return r.time
|
|
}
|
|
|
|
func (r *ResponseWriterWrapper) GetStatus() int {
|
|
return r.status.get()
|
|
}
|
|
|
|
func (r *ResponseWriterWrapper) GetElapsed() float64 {
|
|
return time.Now().Sub(r.time).Seconds()
|
|
}
|