https://github.com/thiagonache/httpstats
The idea of this package is to provide an easy way to collect detailed HTTP metrics from the client. It exports a function that injects hooks using HTTPTrace Package.
https://github.com/thiagonache/httpstats
go golang golang-library http http-client stats
Last synced: 3 days ago
JSON representation
The idea of this package is to provide an easy way to collect detailed HTTP metrics from the client. It exports a function that injects hooks using HTTPTrace Package.
- Host: GitHub
- URL: https://github.com/thiagonache/httpstats
- Owner: thiagonache
- License: mit
- Created: 2022-06-30T17:46:49.000Z (over 3 years ago)
- Default Branch: master
- Last Pushed: 2022-07-05T16:40:13.000Z (over 3 years ago)
- Last Synced: 2024-06-20T00:33:21.681Z (over 1 year ago)
- Topics: go, golang, golang-library, http, http-client, stats
- Language: Go
- Homepage:
- Size: 34.2 KB
- Stars: 4
- Watchers: 4
- Forks: 0
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# httpstats
[](https://pkg.go.dev/github.com/thiagonache/httpstats)
[](https://goreportcard.com/report/github.com/thiagonache/httpstats)
```go
import "github.com/thiagonache/httpstats"
```
The idea of this package is to provide an easy way to collect detailed HTTP
metrics from the client. It exports a function that injects hooks using
[HTTPTrace](https://pkg.go.dev/net/http/httptrace) Package. If you want a better
understand about how HTTPTrace works read [my blog
post](https://hi.thiagonbcarvalho.com/en/posts/httptrace/).
You just need to instantiate a new object and call the wrapper function of the http
module. For instance, to create a new request instead of using `http.NewRequest`
you should use `newStatsObject.NewRequest`.
## Example
Usual http call code
```go
c := &http.Client{}
req, err := http.NewRequest(http.MethodGet, "https://httpbin.org/get", nil)
if err != nil {
log.Fatal(err)
}
res, err := c.Do(req)
if err != nil {
log.Fatal(err)
}
body, err := io.ReadAll(res.Body)
if err != nil {
log.Fatal(err)
}
fmt.Println(string(body))
```
Output
```json
{
"args": {},
"headers": {
"Accept-Encoding": "gzip",
"Host": "httpbin.org",
"User-Agent": "Go-http-client/2.0",
"X-Amzn-Trace-Id": "Root=1-62bdfa65-252f4f6244194d1257217609"
},
"origin": "201.95.218.50",
"url": "https://httpbin.org/get"
}
```
Using this package to get detailed metrics.
```go
s := httpstats.New()
c := &http.Client{}
req, err := s.NewRequest(http.MethodGet, "https://httpbin.org/get", nil)
...
fmt.Println("DNS:", s.DNS[0])
fmt.Println("Connect:", s.Connect[0])
```
Output
```json
{
"args": {},
"headers": {
"Accept-Encoding": "gzip",
"Host": "httpbin.org",
"User-Agent": "Go-http-client/2.0",
"X-Amzn-Trace-Id": "Root=1-62bdfaef-6a1f4a8533030f0f78dbb4e6"
},
"origin": "201.95.218.50",
"url": "https://httpbin.org/get"
}
DNS: 9.454983ms
Connect: 147.036392ms
```