Skip to content

Commit fb6cc1e

Browse files
authored
Merge pull request apache#10 from wangtuanjie/wtj
statd.v4
2 parents f619dbe + d22ea33 commit fb6cc1e

File tree

4 files changed

+47
-5
lines changed

4 files changed

+47
-5
lines changed

go/src/pili.qiniu.com/statd.v4/http/http.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ func storageHandlerHelp(stg statd.Storage, name string, handler Hanlder) func(w
6464

6565
return func(w http.ResponseWriter, req *http.Request) {
6666
xl := xlog.New(w, req)
67-
query, err := storageQueryOf(req)
67+
query, err := queryOf(req)
6868
if err != nil {
6969
httputil.ReplyErr(w, 400, err.Error())
7070
return
@@ -76,7 +76,7 @@ func storageHandlerHelp(stg statd.Storage, name string, handler Hanlder) func(w
7676
}
7777
}
7878

79-
func storageQueryOf(req *http.Request) (query statd.Query, err error) {
79+
func queryOf(req *http.Request) (query statd.Query, err error) {
8080

8181
var ok bool
8282
query.Where = make(map[string]interface{})

go/src/pili.qiniu.com/statd.v4/http/http_test.go

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,29 @@ foo:
160160
resp.Body.Close()
161161
ast.Equal(200, resp.StatusCode)
162162
}
163+
164+
{
165+
// invalid arg cases
166+
try := func(query string) {
167+
client := http.Client{Transport: stubTransport{123, false}}
168+
resp, err := client.Get(srv.URL + "/v4/foo?" + query)
169+
ast.NoError(err)
170+
resp.Body.Close()
171+
ast.Equal(400, resp.StatusCode)
172+
}
173+
174+
tryf := func(f string, a ...interface{}) {
175+
try(fmt.Sprintf(f, a...))
176+
}
177+
178+
try("")
179+
try("begin=invalid")
180+
tryf("begin=%v", start.Unix())
181+
tryf("begin=%v&end=invalid", start.Unix())
182+
tryf("begin=%v&end=%v", start.Unix(), end.Unix())
183+
tryf("begin=%v&end=%v&g=invalid", start.Unix(), end.Unix())
184+
tryf("begin=%v&end=%v&g=5min", start.Unix(), end.Unix())
185+
}
163186
}
164187

165188
//-----------------------------------------------------------------------------

go/src/pili.qiniu.com/statd.v4/time.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ func NextMonth(t time.Time) time.Time {
4848
// 5. 2006-01-02/00:00
4949
// 6. 20060102150405
5050
// 7. 2006-01-02T15:04:05Z07:00 (RFC3339)
51+
// 8. duration-ago, 如 5h-ago
5152
func TimeOf(str string) (t time.Time, ok bool) {
5253
var err error
5354
if strings.HasPrefix(str, "20") {
@@ -65,6 +66,15 @@ func TimeOf(str string) (t time.Time, ok bool) {
6566
ok = err == nil
6667
return
6768
}
69+
} else if strings.HasSuffix(str, "-ago") {
70+
str = strings.TrimSuffix(str, "-ago")
71+
dur, err := time.ParseDuration(str)
72+
if err != nil {
73+
ok = false
74+
return
75+
}
76+
return time.Now().Add(-dur), true
77+
6878
} else {
6979
var n uint64
7080
if n, err = strconv.ParseUint(str, 10, 63); err != nil {

go/src/pili.qiniu.com/statd.v4/time_test.go

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -77,14 +77,23 @@ func TestTimeOf(t *testing.T) {
7777
}
7878

7979
for _, c := range cases {
80-
t1, ok := TimeOf(fmt.Sprint(c))
80+
tt, ok := TimeOf(fmt.Sprint(c))
8181
if !ok {
8282
t.Fatalf("parse %v failed", c)
8383
}
84-
if !t1.Equal(now) {
85-
t.Fatalf("parse %v, expect = %v actual = %v\n", c, now, t1)
84+
if !tt.Equal(now) {
85+
t.Fatalf("parse %v, expect = %v actual = %v\n", c, now, tt)
8686
}
8787
}
88+
89+
tt, ok := TimeOf("5h-ago")
90+
if !ok {
91+
t.Fatal("parse 5h-ago failed")
92+
}
93+
dur := time.Since(tt)
94+
if dur.Seconds() < 5*3600 {
95+
t.Fatal("parse 5h-ago failed -", dur)
96+
}
8897
}
8998

9099
func TestGetEnd(t *testing.T) {

0 commit comments

Comments
 (0)