Advertisement
Guest User

profiler

a guest
Sep 6th, 2017
21
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Go 1.88 KB | None | 0 0
  1. package main
  2.  
  3. import (
  4.     "flag"
  5.     "time"
  6.     "os"
  7.     "log"
  8.   "fmt"
  9.     "net/http"
  10.     "runtime"
  11.     "encoding/csv"
  12. )
  13.  
  14. var (
  15.     addr         =  flag.String("addr", "localhost", "http service address")
  16.     port         =  flag.String("port", "9082", "http service port")
  17. )
  18.  
  19. func serveHome(m *runtime.MemStats) http.HandlerFunc {
  20.     fn := func (w http.ResponseWriter, r *http.Request) {
  21.     log.Println(r.URL)
  22.     runtime.ReadMemStats(m)
  23.     w.WriteHeader(200)
  24.     w.Write([]byte("Server Stats\n"))
  25.  
  26.         t := time.Now()
  27.     w.Write([]byte(fmt.Sprintf("Timestamp: %d\n", t.Unix())))
  28.     w.Write([]byte(fmt.Sprintf("Alloc usage: %d KB\n", m.Alloc/1e3)))
  29.     w.Write([]byte(fmt.Sprintf("TotalAlloc usage: %d KB\n", m.TotalAlloc/1e3)))
  30.     w.Write([]byte(fmt.Sprintf("Sys usage: %d KB\n", m.Sys/1e3)))
  31.     w.Write([]byte(fmt.Sprintf("Goroutine count: %d\n", runtime.NumGoroutine())))
  32.   }
  33.     return http.HandlerFunc(fn)
  34. }
  35.  
  36. func main() {
  37.     flag.Parse()
  38.     var m   runtime.MemStats
  39.  
  40.     // monitoring
  41.     file, errf := os.Create("stat.txt")
  42.     if errf != nil {
  43.         log.Fatal(errf)
  44.     }
  45.     defer file.Close()
  46.     writer := csv.NewWriter(file)
  47.     defer writer.Flush()
  48.  
  49.     errw := writer.Write([]string{"TIME", "ALLOC", "SYS"})
  50.     if errw != nil {
  51.         log.Fatal(errw)
  52.     }
  53.  
  54.     ticker := time.NewTicker(10 * time.Second)
  55.     quit := make(chan struct{})
  56.     defer close(quit)
  57.     go func(m *runtime.MemStats) {
  58.         for {
  59.        select {
  60.         case <- ticker.C:
  61.                     runtime.ReadMemStats(m)
  62.                     errw = writer.Write([]string{fmt.Sprintf("%d", time.Now().Unix()), string(fmt.Sprintf("%d", m.Alloc)), string(fmt.Sprintf("%d", m.Sys))})
  63.                     if errw != nil {
  64.                         log.Fatal(errw)
  65.                     }
  66.                     writer.Flush()
  67.         case <- quit:
  68.             ticker.Stop()
  69.             return
  70.         }
  71.     }
  72.     }(&m)
  73.  
  74.     http.HandleFunc("/", serveHome(&m))
  75.     err := http.ListenAndServe(*addr + ":" + *port, nil)
  76.     if err != nil {
  77.         log.Fatal("ListenAndServe: ", err)
  78.     }
  79.  
  80. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement