| @@ -0,0 +1,95 @@ | |||||
| package main | |||||
| import ( | |||||
| "fmt" | |||||
| "io" | |||||
| "os" | |||||
| "strconv" | |||||
| "time" | |||||
| cdssdk "gitlink.org.cn/cloudream/common/sdks/storage" | |||||
| ) | |||||
| func main() { | |||||
| test1("http://121.36.5.116:32010") | |||||
| // test2("http://127.0.0.1:7890") | |||||
| } | |||||
| func test1(url string) { | |||||
| cli := cdssdk.NewClient(&cdssdk.Config{ | |||||
| URL: url, | |||||
| }) | |||||
| openLen, err := strconv.ParseInt(os.Args[1], 10, 64) | |||||
| if err != nil { | |||||
| fmt.Println(err) | |||||
| return | |||||
| } | |||||
| readLen, err := strconv.ParseInt(os.Args[2], 10, 64) | |||||
| if err != nil { | |||||
| fmt.Println(err) | |||||
| return | |||||
| } | |||||
| partLen, err := strconv.ParseInt(os.Args[3], 10, 64) | |||||
| if err != nil { | |||||
| fmt.Println(err) | |||||
| return | |||||
| } | |||||
| startTime := time.Now() | |||||
| obj, err := cli.Object().Download(cdssdk.ObjectDownload{ | |||||
| UserID: 1, | |||||
| ObjectID: 470790, | |||||
| Offset: 0, | |||||
| Length: &openLen, | |||||
| PartSize: partLen, | |||||
| }) | |||||
| if err != nil { | |||||
| fmt.Println(err) | |||||
| return | |||||
| } | |||||
| fmt.Printf("Open time: %v\n", time.Since(startTime)) | |||||
| startTime = time.Now() | |||||
| buf := make([]byte, readLen) | |||||
| _, err = io.ReadFull(obj.File, buf) | |||||
| fmt.Printf("Read time: %v\n", time.Since(startTime)) | |||||
| if err != nil { | |||||
| fmt.Println(err) | |||||
| return | |||||
| } | |||||
| startTime = time.Now() | |||||
| obj.File.Close() | |||||
| fmt.Printf("Close time: %v\n", time.Since(startTime)) | |||||
| } | |||||
| func test2(url string) { | |||||
| cli := cdssdk.NewClient(&cdssdk.Config{ | |||||
| URL: url, | |||||
| }) | |||||
| obj, err := cli.Object().Download(cdssdk.ObjectDownload{ | |||||
| UserID: 1, | |||||
| ObjectID: 27151, | |||||
| Offset: 0, | |||||
| PartSize: 100000000, | |||||
| // Length: &openLen, | |||||
| }) | |||||
| if err != nil { | |||||
| fmt.Println(err) | |||||
| return | |||||
| } | |||||
| f, err := os.Create("test.txt") | |||||
| if err != nil { | |||||
| fmt.Println(err) | |||||
| return | |||||
| } | |||||
| io.Copy(f, obj.File) | |||||
| } | |||||
| @@ -71,7 +71,7 @@ func (b *RepRedundancy) Value() (driver.Value, error) { | |||||
| return serder.ObjectToJSONEx[Redundancy](b) | return serder.ObjectToJSONEx[Redundancy](b) | ||||
| } | } | ||||
| var DefaultECRedundancy = *NewECRedundancy(2, 3, 1024*1024*5) | |||||
| var DefaultECRedundancy = *NewECRedundancy(3, 6, 1024*1024*5) | |||||
| type ECRedundancy struct { | type ECRedundancy struct { | ||||
| serder.Metadata `union:"ec"` | serder.Metadata `union:"ec"` | ||||
| @@ -0,0 +1,104 @@ | |||||
| package time2 | |||||
| import ( | |||||
| "fmt" | |||||
| "path" | |||||
| "runtime" | |||||
| "strings" | |||||
| "time" | |||||
| ) | |||||
| type Measurement struct { | |||||
| startTime time.Time | |||||
| lastPointTime time.Time | |||||
| printer func(string) | |||||
| on bool | |||||
| title string | |||||
| } | |||||
| func NewMeasurement(printer func(string)) Measurement { | |||||
| return Measurement{ | |||||
| printer: printer, | |||||
| } | |||||
| } | |||||
| func (m *Measurement) Begin(on bool, title ...string) { | |||||
| if m == nil { | |||||
| return | |||||
| } | |||||
| m.on = on | |||||
| m.title = strings.Join(title, ".") | |||||
| if on { | |||||
| m.startTime = time.Now() | |||||
| m.lastPointTime = m.startTime | |||||
| _, file, line, ok := runtime.Caller(1) | |||||
| titlePart := "" | |||||
| if m.title != "" { | |||||
| titlePart = fmt.Sprintf(":%s", m.title) | |||||
| } | |||||
| if ok { | |||||
| m.printer(fmt.Sprintf("[begin%v]%v:%v", titlePart, path.Base(file), line)) | |||||
| } else { | |||||
| m.printer(fmt.Sprintf("[begin%v]unknown point", titlePart)) | |||||
| } | |||||
| } | |||||
| } | |||||
| func (m *Measurement) Point(head ...string) { | |||||
| if m == nil { | |||||
| return | |||||
| } | |||||
| if m.on { | |||||
| m.printer(m.makePointString(strings.Join(head, "."))) | |||||
| } | |||||
| } | |||||
| func (m *Measurement) makePointString(head string) string { | |||||
| last := m.lastPointTime | |||||
| now := time.Now() | |||||
| m.lastPointTime = now | |||||
| _, file, line, ok := runtime.Caller(2) | |||||
| prefixCont := "" | |||||
| if m.title != "" { | |||||
| prefixCont = m.title | |||||
| } | |||||
| if head != "" { | |||||
| if prefixCont == "" { | |||||
| prefixCont = head | |||||
| } else { | |||||
| prefixCont = fmt.Sprintf("%s.%s", prefixCont, head) | |||||
| } | |||||
| } | |||||
| prefixPart := "" | |||||
| if prefixCont != "" { | |||||
| prefixPart = fmt.Sprintf("[%s]", prefixCont) | |||||
| } | |||||
| if ok { | |||||
| return fmt.Sprintf("%v%v:%v@%v(%v)", prefixPart, path.Base(file), line, now.Sub(last), now.Sub(m.startTime)) | |||||
| } | |||||
| return fmt.Sprintf("%vunknown point@%v(%v)", prefixPart, now.Sub(last), now.Sub(m.startTime)) | |||||
| } | |||||
| func (m *Measurement) End(head ...string) { | |||||
| if m == nil { | |||||
| return | |||||
| } | |||||
| if m.on { | |||||
| m.printer(fmt.Sprintf("[end]%v\n", m.makePointString(strings.Join(head, ".")))) | |||||
| } | |||||
| } | |||||