func sendFile(fileName string) { f, err := os.Open(fileName) if err != nil { log.Error("Fail to open file: %v", err) return } defer f.Close() fi, err := os.Stat(fileName) if err != nil { log.Error("Fail to stat file: %v", err) return } fileName = strings.Replace(fileName, "\\", "/", -1) //path.Base() log.Info("File name: %s; size: %s", fileName, com.HumaneFileSize(uint64(fi.Size()))) conn, err := net.Dial("tcp", setting.Cfg.Sync.RemoteAddr) if err != nil { log.Error("Fail to establish connection: %v", err) return } defer conn.Close() log.Info("Connection established") conn.Write([]byte(fileName)) p := make([]byte, 2) _, err = conn.Read(p) if err != nil { log.Error("Cannot get response from server: %v", err) return } else if string(p) != "ok" { log.Error("Invalid response: %s", string(p)) return } log.Info("Header sent") start := time.Now() _, err = io.Copy(conn, f) if err != nil { log.Error("Fail to send file(%s): %v", fileName, err) return } spend := time.Since(start) log.Info("File sent, speed: %s/s", com.HumaneFileSize(uint64((fi.Size()*1000000000/int64(spend))/1024))) }
func dumpGC(memStats *runtime.MemStats, gcstats *debug.GCStats, w io.Writer) { if gcstats.NumGC > 0 { lastPause := gcstats.Pause[0] elapsed := time.Now().Sub(startTime) overhead := float64(gcstats.PauseTotal) / float64(elapsed) * 100 allocatedRate := float64(memStats.TotalAlloc) / elapsed.Seconds() fmt.Fprintf(w, "NumGC:%d Pause:%s Pause(Avg):%s Overhead:%3.2f%% Alloc:%s Sys:%s Alloc(Rate):%s/s Histogram:%s %s %s \n", gcstats.NumGC, com.ToStr(lastPause), com.ToStr(avg(gcstats.Pause)), overhead, com.HumaneFileSize(memStats.Alloc), com.HumaneFileSize(memStats.Sys), com.HumaneFileSize(uint64(allocatedRate)), com.ToStr(gcstats.PauseQuantiles[94]), com.ToStr(gcstats.PauseQuantiles[98]), com.ToStr(gcstats.PauseQuantiles[99])) } else { // while GC has disabled elapsed := time.Now().Sub(startTime) allocatedRate := float64(memStats.TotalAlloc) / elapsed.Seconds() fmt.Fprintf(w, "Alloc:%s Sys:%s Alloc(Rate):%s/s\n", com.HumaneFileSize(memStats.Alloc), com.HumaneFileSize(memStats.Sys), com.HumaneFileSize(uint64(allocatedRate))) } }