Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/go-playground/stats
:chart_with_upwards_trend: Monitors Go MemStats + System stats such as Memory, Swap and CPU and sends via UDP anywhere you want for logging etc...
https://github.com/go-playground/stats
Last synced: 14 days ago
JSON representation
:chart_with_upwards_trend: Monitors Go MemStats + System stats such as Memory, Swap and CPU and sends via UDP anywhere you want for logging etc...
- Host: GitHub
- URL: https://github.com/go-playground/stats
- Owner: go-playground
- License: mit
- Created: 2015-09-14T20:20:20.000Z (about 9 years ago)
- Default Branch: v1
- Last Pushed: 2016-09-07T12:51:16.000Z (about 8 years ago)
- Last Synced: 2024-10-24T20:31:03.669Z (15 days ago)
- Language: Go
- Homepage:
- Size: 168 KB
- Stars: 170
- Watchers: 7
- Forks: 19
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome-go - stats - Monitors Go MemStats + System stats such as Memory, Swap and CPU and sends via UDP anywhere you want for logging etc... (Miscellaneous / Uncategorized)
- zero-alloc-awesome-go - stats - Monitors Go MemStats + System stats such as Memory, Swap and CPU and sends via UDP anywhere you want for logging etc... (Miscellaneous / Uncategorized)
- awesome-go - stats - Monitors Go MemStats + System stats such as Memory, Swap and CPU and sends via UDP anywhere you want for logging etc... - ★ 108 (Miscellaneous)
- awesome-go-extra - stats - 09-14T20:20:20Z|2016-09-07T12:51:16Z| (Microsoft Office / Uncategorized)
- awesome-go-zh - stats
README
Package stats
=============![Project status](https://img.shields.io/badge/version-1.0.2-green.svg)
[![Build Status](https://semaphoreci.com/api/v1/projects/b5c5d4f1-ec31-441f-a6d2-88f4e73105df/563578/badge.svg)](https://semaphoreci.com/joeybloggs/stats)
[![GoDoc](https://godoc.org/gopkg.in/go-playground/stats.v1?status.svg)](https://godoc.org/gopkg.in/go-playground/stats.v1)Package stats allows for gathering of statistics regarding your Go application and system it is running on and
sent them via UDP to a server where you can do whatever you wish to the stats; display, store in database or
send off to a logging service.###### We currently gather the following Go related information:
* # of Garbabage collects
* Last Garbage Collection
* Last Garbage Collection Pause Duration
* Memory Allocated
* Memory Heap Allocated
* Memory Heap System Allocated
* Go version
* Number of goroutines
* HTTP request logging; when implemented via middleware###### And the following System Information:
* Host Information; hostname, OS....
* CPU Information; type, model, # of cores...
* Total CPU Timings
* Per Core CPU Timings
* Memory + Swap InformationInstallation
------------Use go get.
go get gopkg.in/go-playground/stats.v1
or to update
go get -u gopkg.in/go-playground/stats.v1
Then import the validator package into your own code.
import "gopkg.in/go-playground/stats.v1"
#### Example
Server
```go
package mainimport (
"fmt""gopkg.in/go-playground/stats.v1"
)func main() {
config := &stats.ServerConfig{
Domain: "",
Port: 3008,
Debug: false,
}server, err := stats.NewServer(config)
if err != nil {
panic(err)
}for stat := range server.Run() {
// calculate CPU times
// totalCPUTimes := stat.CalculateTotalCPUTimes()
// perCoreCPUTimes := stat.CalculateCPUTimes()// Do whatever you want with the data
// * Save to database
// * Stream elsewhere
// * Print to console
//fmt.Println(stat)
}
}
```Client
```go
package mainimport (
"fmt"
"net/http"
"runtime""gopkg.in/go-playground/stats.v1"
)var statsClient *stats.ClientStats
func main() {
serverConfig := &stats.ServerConfig{
Domain: "remoteserver",
Port: 3008,
Debug: false,
}clientConfig := &stats.ClientConfig{
Domain: "",
Port: 3009,
PollInterval: 1000,
Debug: false,
LogHostInfo: true,
LogCPUInfo: true,
LogTotalCPUTimes: true,
LogPerCPUTimes: true,
LogMemory: true,
LogGoMemory: true,
}client, err := stats.NewClient(clientConfig, serverConfig)
if err != nil {
panic(err)
}go client.Run()
// if you want to capture HTTP requests in a middleware you'll have
// to have access to the client.
// see below for middleware example
statsClient = client
}// LoggingRecoveryHandler ...
//
//
// Middleware example for capturing HTTP Request info
// NOTE: this is standard go middlware, but could be adapted to other types/styles easily
//
func LoggingRecoveryHandler(next http.Handler) http.Handler {fn := func(w http.ResponseWriter, r *http.Request) {
// log incoming request
logReq := statsClient.NewHTTPRequest(w, r)defer func() {
if err := recover(); err != nil {
trace := make([]byte, 1<<16)
n := runtime.Stack(trace, true)// log failure
logReq.Failure(fmt.Sprintf("%s\n%s", err, trace[:n]))http.Error(w, "Friendly error message", 500)
return
}
}()next.ServeHTTP(logReq.Writer(), r)
// log completion
logReq.Complete()
}return http.HandlerFunc(fn)
}
```License
------
- [MIT License](https://github.com/go-playground/stats/blob/v1/LICENSE), Copyright (c) 2015 Dean Karn
- [BSD License](https://github.com/go-playground/stats/tree/v1/vendor/github.com/shirou/gopsutil/LICENSE)
- Copyright (c) 2014, WAKAYAMA Shirou
- Copyright (c) 2009 The Go Authors. All rights reserved.
- [BSD License](https://github.com/go-playground/stats/tree/v1/vendor/github.com/shirou/w32/LICENSE), Copyright (c) 2010-2012 The w32 Authors. All rights reserved.