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