github.com/linapex/ethereum-go-chinese@v0.0.0-20190316121929-f8b7a73c3fa1/cmd/swarm/swarm-smoke/upload_speed.go (about) 1 2 //<developer> 3 // <name>linapex 曹一峰</name> 4 // <email>linapex@163.com</email> 5 // <wx>superexc</wx> 6 // <qqgroup>128148617</qqgroup> 7 // <url>https://jsq.ink</url> 8 // <role>pku engineer</role> 9 // <date>2019-03-16 19:16:33</date> 10 //</624450071710142464> 11 12 13 package main 14 15 import ( 16 "bytes" 17 "fmt" 18 "os" 19 "time" 20 21 "github.com/ethereum/go-ethereum/log" 22 "github.com/ethereum/go-ethereum/metrics" 23 "github.com/ethereum/go-ethereum/swarm/testutil" 24 25 cli "gopkg.in/urfave/cli.v1" 26 ) 27 28 var endpoint string 29 30 //只需使用第一个端点 31 func generateEndpoint(scheme string, cluster string, app string, from int) { 32 if cluster == "prod" { 33 endpoint = fmt.Sprintf("%s://%v.swarm-gateways.net“,方案,来自) 34 } else { 35 endpoint = fmt.Sprintf("%s://%s-%v-%s.stg.swarm gateways.net“,方案,应用程序,来自,群集) 36 } 37 } 38 39 func cliUploadSpeed(c *cli.Context) error { 40 log.PrintOrigins(true) 41 log.Root().SetHandler(log.LvlFilterHandler(log.Lvl(verbosity), log.StreamHandler(os.Stdout, log.TerminalFormat(true)))) 42 43 metrics.GetOrRegisterCounter("upload-speed", nil).Inc(1) 44 45 errc := make(chan error) 46 go func() { 47 errc <- uploadSpeed(c) 48 }() 49 50 select { 51 case err := <-errc: 52 if err != nil { 53 metrics.GetOrRegisterCounter("upload-speed.fail", nil).Inc(1) 54 } 55 return err 56 case <-time.After(time.Duration(timeout) * time.Second): 57 metrics.GetOrRegisterCounter("upload-speed.timeout", nil).Inc(1) 58 return fmt.Errorf("timeout after %v sec", timeout) 59 } 60 } 61 62 func uploadSpeed(c *cli.Context) error { 63 defer func(now time.Time) { 64 totalTime := time.Since(now) 65 66 log.Info("total time", "time", totalTime, "kb", filesize) 67 metrics.GetOrRegisterCounter("upload-speed.total-time", nil).Inc(int64(totalTime)) 68 }(time.Now()) 69 70 generateEndpoint(scheme, cluster, appName, from) 71 seed := int(time.Now().UnixNano() / 1e6) 72 log.Info("uploading to "+endpoint, "seed", seed) 73 74 randomBytes := testutil.RandomBytes(seed, filesize*1000) 75 76 t1 := time.Now() 77 hash, err := upload(&randomBytes, endpoint) 78 if err != nil { 79 log.Error(err.Error()) 80 return err 81 } 82 metrics.GetOrRegisterCounter("upload-speed.upload-time", nil).Inc(int64(time.Since(t1))) 83 84 fhash, err := digest(bytes.NewReader(randomBytes)) 85 if err != nil { 86 log.Error(err.Error()) 87 return err 88 } 89 90 log.Info("uploaded successfully", "hash", hash, "digest", fmt.Sprintf("%x", fhash)) 91 return nil 92 } 93