aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcschiano <c.schiano@abc-arbitrage.com>2016-07-18 10:28:24 +0200
committercschiano <c.schiano@abc-arbitrage.com>2016-07-18 10:28:24 +0200
commitc63cebaee11b03c44ead1d4563c22329ffd99220 (patch)
treeb0702af0a34cc8d09f00120c904a32183410b073
parentd3ae3a8e146f0340776c4383458cebdc683bef7f (diff)
downloadseaweedfs-c63cebaee11b03c44ead1d4563c22329ffd99220.tar.xz
seaweedfs-c63cebaee11b03c44ead1d4563c22329ffd99220.zip
Add a visualization for the filer
-rw-r--r--weed/server/filer_server_handlers_read.go74
-rw-r--r--weed/server/filer_ui/templates.go53
2 files changed, 72 insertions, 55 deletions
diff --git a/weed/server/filer_server_handlers_read.go b/weed/server/filer_server_handlers_read.go
index 8340021ce..1470bcc48 100644
--- a/weed/server/filer_server_handlers_read.go
+++ b/weed/server/filer_server_handlers_read.go
@@ -1,15 +1,12 @@
package weed_server
import (
- "io"
"net/http"
- "net/url"
"strconv"
"strings"
"github.com/chrislusf/seaweedfs/weed/glog"
- "github.com/chrislusf/seaweedfs/weed/operation"
- "github.com/chrislusf/seaweedfs/weed/util"
+ ui "github.com/chrislusf/seaweedfs/weed/server/filer_ui"
"github.com/syndtr/goleveldb/leveldb"
)
@@ -42,63 +39,30 @@ func (fs *FilerServer) listDirectoryHandler(w http.ResponseWriter, r *http.Reque
}
func (fs *FilerServer) GetOrHeadHandler(w http.ResponseWriter, r *http.Request, isGetMethod bool) {
- if strings.HasSuffix(r.URL.Path, "/") {
- if fs.disableDirListing {
- w.WriteHeader(http.StatusMethodNotAllowed)
- return
- }
- fs.listDirectoryHandler(w, r)
- return
- }
+ fileLimit := 100
+ files, err := fs.filer.ListFiles(r.URL.Path, "", fileLimit)
- fileId, err := fs.filer.FindFile(r.URL.Path)
if err == leveldb.ErrNotFound {
- glog.V(3).Infoln("Not found in db", r.URL.Path)
- w.WriteHeader(http.StatusNotFound)
+ glog.V(0).Infof("Error %s", err)
return
}
- urlLocation, err := operation.LookupFileId(fs.getMasterNode(), fileId)
- if err != nil {
- glog.V(1).Infoln("operation LookupFileId %s failed, err is %s", fileId, err.Error())
- w.WriteHeader(http.StatusNotFound)
- return
- }
- urlString := urlLocation
- if fs.redirectOnRead {
- http.Redirect(w, r, urlString, http.StatusFound)
+ directories, err2 := fs.filer.ListDirectories(r.URL.Path)
+ if err2 == leveldb.ErrNotFound {
+ glog.V(0).Infof("Error %s", err)
return
}
- u, _ := url.Parse(urlString)
- q := u.Query()
- for key, values := range r.URL.Query() {
- for _, value := range values {
- q.Add(key, value)
- }
- }
- u.RawQuery = q.Encode()
- request := &http.Request{
- Method: r.Method,
- URL: u,
- Proto: r.Proto,
- ProtoMajor: r.ProtoMajor,
- ProtoMinor: r.ProtoMinor,
- Header: r.Header,
- Body: r.Body,
- Host: r.Host,
- ContentLength: r.ContentLength,
- }
- glog.V(3).Infoln("retrieving from", u)
- resp, do_err := util.Do(request)
- if do_err != nil {
- glog.V(0).Infoln("failing to connect to volume server", do_err.Error())
- writeJsonError(w, r, http.StatusInternalServerError, do_err)
- return
- }
- defer resp.Body.Close()
- for k, v := range resp.Header {
- w.Header()[k] = v
+
+ args := struct {
+ Path string
+ Files interface{}
+ Directories interface{}
+ NotAllFilesDisplayed bool
+ }{
+ r.URL.Path,
+ files,
+ directories,
+ len(files) == fileLimit,
}
- w.WriteHeader(resp.StatusCode)
- io.Copy(w, resp.Body)
+ ui.StatusTpl.Execute(w, args)
}
diff --git a/weed/server/filer_ui/templates.go b/weed/server/filer_ui/templates.go
new file mode 100644
index 000000000..b4d16d4db
--- /dev/null
+++ b/weed/server/filer_ui/templates.go
@@ -0,0 +1,53 @@
+package master_ui
+
+import (
+ "html/template"
+)
+
+var StatusTpl = template.Must(template.New("status").Parse(`<!DOCTYPE html>
+<html>
+<head>
+ <title>SeaweedFS Filer</title>
+ <link rel="icon" href="http://7viirv.com1.z0.glb.clouddn.com/seaweed_favicon.png" sizes="32x32" />
+ <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.1/css/bootstrap.min.css">
+</head>
+<body>
+ <div class="container">
+ <div class="page-header">
+ <h1>
+ <img src="http://7viirv.com1.z0.glb.clouddn.com/seaweed50x50.png"></img>
+ SeaweedFS Filer
+ </h1>
+ </div>
+ <div class="row">
+ {{.Path}}
+ </div>
+
+ <div class="row">
+ <ul>
+ {{$path := .Path }}
+ {{ range $dirs_index, $dir := .Directories }}
+ <li>
+ <a href= {{ print $path $dir.Name "/"}} >
+ {{ $dir.Name }}
+ </a>
+ </li>
+ {{ end }}
+
+ {{ range $file_index, $file := .Files }}
+ <li>
+ {{ $file.Name }}
+ </li>
+ {{ end }}
+ </ul>
+ </div>
+
+ {{if .NotAllFilesDisplayed}}
+ <div class="row">
+ Not all files are displayed.
+ </div>
+ {{end}}
+ </div>
+</body>
+</html>
+`))