2016-01-12 23:03:53 +00:00
|
|
|
package agent
|
|
|
|
|
|
|
|
import (
|
|
|
|
"fmt"
|
|
|
|
"net/http"
|
2016-01-13 06:06:42 +00:00
|
|
|
"strconv"
|
2016-01-12 23:03:53 +00:00
|
|
|
"strings"
|
|
|
|
)
|
|
|
|
|
2016-01-13 19:49:39 +00:00
|
|
|
var (
|
|
|
|
allocIDNotPresentErr = fmt.Errorf("must provide a valid alloc id")
|
|
|
|
fileNameNotPresentErr = fmt.Errorf("must provide a file name")
|
|
|
|
)
|
|
|
|
|
2016-01-12 23:03:53 +00:00
|
|
|
func (s *HTTPServer) DirectoryListRequest(resp http.ResponseWriter, req *http.Request) (interface{}, error) {
|
2016-01-13 06:25:12 +00:00
|
|
|
var allocID, path string
|
|
|
|
|
|
|
|
if allocID = strings.TrimPrefix(req.URL.Path, "/v1/client/fs/ls/"); allocID == "" {
|
2016-01-13 19:49:39 +00:00
|
|
|
return nil, allocIDNotPresentErr
|
2016-01-12 23:03:53 +00:00
|
|
|
}
|
2016-01-13 06:25:12 +00:00
|
|
|
if path = req.URL.Query().Get("path"); path == "" {
|
|
|
|
path = "/"
|
2016-01-12 23:03:53 +00:00
|
|
|
}
|
2016-01-13 06:25:12 +00:00
|
|
|
return s.agent.client.FSList(allocID, path)
|
2016-01-12 23:03:53 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
func (s *HTTPServer) FileStatRequest(resp http.ResponseWriter, req *http.Request) (interface{}, error) {
|
2016-01-13 06:25:12 +00:00
|
|
|
var allocID, path string
|
|
|
|
if allocID = strings.TrimPrefix(req.URL.Path, "/v1/client/fs/stat/"); allocID == "" {
|
2016-01-13 19:49:39 +00:00
|
|
|
return nil, allocIDNotPresentErr
|
2016-01-12 23:25:51 +00:00
|
|
|
}
|
2016-01-13 06:25:12 +00:00
|
|
|
if path := req.URL.Query().Get("path"); path == "" {
|
2016-01-13 19:49:39 +00:00
|
|
|
return nil, fileNameNotPresentErr
|
2016-01-12 23:25:51 +00:00
|
|
|
}
|
2016-01-13 06:25:12 +00:00
|
|
|
return s.agent.client.FSStat(allocID, path)
|
2016-01-12 23:03:53 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
func (s *HTTPServer) FileReadAtRequest(resp http.ResponseWriter, req *http.Request) (interface{}, error) {
|
2016-01-13 06:25:12 +00:00
|
|
|
var allocID, path string
|
|
|
|
var offset, limit int64
|
|
|
|
var err error
|
2016-01-13 06:06:42 +00:00
|
|
|
|
2016-01-13 06:25:12 +00:00
|
|
|
q := req.URL.Query()
|
|
|
|
|
|
|
|
if allocID = strings.TrimPrefix(req.URL.Path, "/v1/client/fs/readat/"); allocID == "" {
|
2016-01-13 19:49:39 +00:00
|
|
|
return nil, allocIDNotPresentErr
|
2016-01-13 06:06:42 +00:00
|
|
|
}
|
2016-01-13 06:25:12 +00:00
|
|
|
if path = q.Get("path"); path == "" {
|
2016-01-13 19:49:39 +00:00
|
|
|
return nil, fileNameNotPresentErr
|
2016-01-13 06:06:42 +00:00
|
|
|
}
|
|
|
|
|
2016-01-13 06:25:12 +00:00
|
|
|
if offset, err = strconv.ParseInt(q.Get("offset"), 10, 64); err != nil {
|
|
|
|
return nil, fmt.Errorf("error parsing offset: %v", err)
|
2016-01-13 06:06:42 +00:00
|
|
|
}
|
2016-01-13 06:25:12 +00:00
|
|
|
if limit, err = strconv.ParseInt(q.Get("limit"), 10, 64); err != nil {
|
|
|
|
return nil, fmt.Errorf("error parsing limit: %v", err)
|
2016-01-13 06:06:42 +00:00
|
|
|
}
|
|
|
|
if err = s.agent.client.FSReadAt(allocID, path, offset, limit, resp); err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
2016-01-12 23:03:53 +00:00
|
|
|
return nil, nil
|
|
|
|
}
|