Skip to content

Latest commit

 

History

History
79 lines (59 loc) · 1.87 KB

README.md

File metadata and controls

79 lines (59 loc) · 1.87 KB

GoDoc Go Report Card

pprofrec

Provides a single pane of glass across all runtime metrics. pprofrec records pprof lookups, runtime.MemStats and gopsutil metrics, and exposes them via http endpoints to inspect and troubleshoot an application in an idiomatic, fast and boring way.

Demo

  • Scroll on the x-axis to see more features and on the y-axis to see more data points.

usage

Record runtime metrics at a given frequency within a given window.

windowOpts := pprofrec.WindowOpts{
    Window:    120 * time.Second,
    Frequency: 1 * time.Second,
}
mux.HandleFunc("/debug/pprof/window", pprofrec.Window(ctx, windowOpts))

Stream runtime metrics at a given frequency.

streamOpts := pprofrec.StreamOpts{
    Frequency: 500 * time.Millisecond,
}
mux.HandleFunc("/debug/pprof/stream", pprofrec.Stream(streamOpts))

Full example

package main

import (
	"context"
	"log"
	"net/http"
	"time"

	"github.com/ppwfx/pprofrec"
)

func main() {
	mux := http.NewServeMux()

	ctx := context.Background()

	windowOpts := pprofrec.WindowOpts{
		Window:    120 * time.Second,
		Frequency: 1 * time.Second,
	}
	mux.HandleFunc("/debug/pprof/window", pprofrec.Window(ctx, windowOpts))

	streamOpts := pprofrec.StreamOpts{
		Frequency: 500 * time.Millisecond,
	}
	mux.HandleFunc("/debug/pprof/stream", pprofrec.Stream(streamOpts))

	srv := &http.Server{
		Addr:         ":8080",
		WriteTimeout: 15 * time.Minute,
		Handler:      mux,
	}

	log.Printf("listens on: %v", srv.Addr)

	err := srv.ListenAndServe()
	if err != nil {
		log.Fatalf("failed to listen: %v", err)

		return
	}
}