https://github.com/ejoffe/profiletimer
A simple utility tool to profile go code.
https://github.com/ejoffe/profiletimer
Last synced: 10 months ago
JSON representation
A simple utility tool to profile go code.
- Host: GitHub
- URL: https://github.com/ejoffe/profiletimer
- Owner: ejoffe
- License: mit
- Created: 2021-05-23T05:01:03.000Z (over 4 years ago)
- Default Branch: master
- Last Pushed: 2021-08-04T00:32:45.000Z (over 4 years ago)
- Last Synced: 2025-01-24T13:35:16.267Z (12 months ago)
- Language: Go
- Homepage:
- Size: 2.93 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: readme.md
- License: LICENSE
Awesome Lists containing this project
README
Profile Timer
=============
A simple utility tool to profile go code.
Profile timer works like a stop watch, you start the timer and call the step function everytime you want to add a new data point. At the end you can print a summary of all the steps and the amount of time each step took.
Installation
------------
```bash
go get -u github.com/ejoffe/profiletimer
```
Usage
-----
```Go
func main() {
timer := profiletimer.StartProfileTimer()
doSomeStuff()
timer.Step("doSomeStuff")
doSomeMoreStuff()
timer.Step("doSomeMoreStuff")
doEvenMoreStuff()
timer.Step("doEvenMoreStuff")
timer.ShowResults()
}
```
The code above will print out a summary to stdout with the amount of time each step took.
```
doSomeStuff : 2165.694534ms
doSomeMoreStuff : 11.568080ms
doEvenMoreStuff : 541.535541ms
-------------------------------
total : 2718.798155ms
```
Middleware
----------
```Go
func main() {
router := chi.NewRouter()
router.Use(profiletimer.TimerMiddleware)
router.Get("/", get)
http.ListenAndServe(":80", router)
}
func get(w http.ResponseWriter, r *http.Request) {
timer := profiletimer.TimerFromContext(r.Context())
doSomeStuff()
timer.Step("doSomeStuff")
doSomeMoreStuff()
timer.Step("doSomeMoreStuff")
doEvenMoreStuff()
timer.Step("doEvenMoreStuff")
}
```
### Noop Timer
Often, you'll want to leave the profile step functions in the code and only run them in debug or profile mode. In this case you can use `StartProfileTimer()` when in debug mode, and otherwise instantiate the timer using `StartNoopTimer()`.
License
-------
- [MIT License](LICENSE)