diff --git a/.gitignore b/.gitignore index 8fa23fe..6981995 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,2 @@ _DATA -assets_vfsdata.go \ No newline at end of file +httpfs_vfsdata.go \ No newline at end of file diff --git a/assets.go b/assets.go deleted file mode 100644 index eaef2df..0000000 --- a/assets.go +++ /dev/null @@ -1,11 +0,0 @@ -// +build !release - -package distribyted - -//go:generate go run ./assets_generate.go -import ( - "net/http" -) - -var Assets http.FileSystem = http.Dir("assets") -var Templates http.FileSystem = http.Dir("templates") diff --git a/assets_generate.go b/assets_generate.go deleted file mode 100644 index d26559c..0000000 --- a/assets_generate.go +++ /dev/null @@ -1,30 +0,0 @@ -// +build ignore - -package main - -import ( - "log" - - "github.com/ajnavarro/distribyted" - "github.com/shurcooL/vfsgen" -) - -func main() { - err := vfsgen.Generate(distribyted.Assets, vfsgen.Options{ - BuildTags: "release", - VariableName: "Assets", - PackageName: "distribyted", - }) - if err != nil { - log.Fatalln(err) - } - - err := vfsgen.Generate(distribyted.Assets, vfsgen.Options{ - BuildTags: "release", - VariableName: "Templates", - PackageName: "distribyted", - }) - if err != nil { - log.Fatalln(err) - } -} diff --git a/binary_fs.go b/binary_fs.go index 3526e1b..2e788cb 100644 --- a/binary_fs.go +++ b/binary_fs.go @@ -2,15 +2,20 @@ package distribyted import ( "net/http" + "path" "strings" ) type binaryFileSystem struct { - http.FileSystem + fs http.FileSystem + base string } -func NewBinaryFileSystem(fs http.FileSystem) *binaryFileSystem { - return &binaryFileSystem{fs} +func NewBinaryFileSystem(fs http.FileSystem, base string) *binaryFileSystem { + return &binaryFileSystem{ + fs: fs, + base: base, + } } func (fs *binaryFileSystem) Exists(prefix string, filepath string) bool { @@ -22,3 +27,7 @@ func (fs *binaryFileSystem) Exists(prefix string, filepath string) bool { } return false } + +func (fs *binaryFileSystem) Open(name string) (http.File, error) { + return fs.fs.Open(path.Join(fs.base, name)) +} diff --git a/cmd/assets_generate/main.go b/cmd/assets_generate/main.go new file mode 100644 index 0000000..fdd3931 --- /dev/null +++ b/cmd/assets_generate/main.go @@ -0,0 +1,20 @@ +// +build ignore + +package main + +import ( + "github.com/ajnavarro/distribyted" + "github.com/shurcooL/vfsgen" + log "github.com/sirupsen/logrus" +) + +func main() { + err := vfsgen.Generate(distribyted.HttpFS, vfsgen.Options{ + BuildTags: "release", + VariableName: "HttpFS", + PackageName: "distribyted", + }) + if err != nil { + log.Fatalln(err) + } +} diff --git a/cmd/distribyted/main.go b/cmd/distribyted/main.go index 194f2b5..920018a 100644 --- a/cmd/distribyted/main.go +++ b/cmd/distribyted/main.go @@ -2,7 +2,6 @@ package main import ( "io/ioutil" - "log" "net/http" "os" "os/signal" @@ -20,9 +19,11 @@ import ( "github.com/gin-gonic/gin" "github.com/goccy/go-yaml" "github.com/shurcooL/httpfs/html/vfstemplate" + log "github.com/sirupsen/logrus" ) func main() { + var configPath string if len(os.Args) < 2 { configPath = "./config.yaml" @@ -30,25 +31,28 @@ func main() { configPath = os.Args[1] } + log.SetFormatter(&log.TextFormatter{}) + log.SetLevel(log.DebugLevel) + f, err := ioutil.ReadFile(configPath) if err != nil { - log.Fatal(err) + log.WithError(err).Fatal("error reading configuration file") } conf := &config.Root{} if err := yaml.Unmarshal(f, conf); err != nil { - log.Fatal(err) + log.WithError(err).Fatal("error parsing configuration file") } conf = config.AddDefaults(conf) if err := os.MkdirAll(conf.MetadataFolder, 0770); err != nil { - log.Fatal(err) + log.WithError(err).Fatal("error creating metadata folder") } fc, err := filecache.NewCache(conf.MetadataFolder) if err != nil { - log.Fatal(err) + log.WithError(err).Fatal("error creating cache") } fc.SetCapacity(conf.MaxCacheSize * 1024 * 1024) @@ -63,7 +67,7 @@ func main() { c, err := torrent.NewClient(torrentCfg) if err != nil { - log.Fatal(err) + log.WithError(err).Fatal("error initializing torrent client") } ss := stats.NewTorrent() @@ -74,28 +78,28 @@ func main() { go func() { <-sigChan - log.Println("Closing torrent client...") + log.Info("closing torrent client...") c.Close() - log.Println("Unmounting fuse filesystem...") + log.Info("unmounting fuse filesystem...") mountService.Close() - log.Println("Exiting...") + log.Info("exiting") os.Exit(1) }() for _, mp := range conf.MountPoints { if err := mountService.Mount(mp); err != nil { - log.Fatal(err) + log.WithError(err).WithField("path", mp).Fatal("error mounting folder") } } r := gin.Default() - assets := distribyted.NewBinaryFileSystem(distribyted.Assets) + assets := distribyted.NewBinaryFileSystem(distribyted.HttpFS, "/assets") r.Use(static.Serve("/assets", assets)) - t, err := vfstemplate.ParseGlob(distribyted.Templates, nil, "*") + t, err := vfstemplate.ParseGlob(distribyted.HttpFS, nil, "/templates/*") if err != nil { - log.Fatal(err) + log.WithError(err).Fatal("error parsing html template") } r.SetHTMLTemplate(t) @@ -124,7 +128,8 @@ func main() { ctx.JSON(200, stats) }) + //TODO add port from configuration if err := r.Run(":4444"); err != nil { - log.Fatal(err) + log.WithError(err).Fatal("error initializing server") } } diff --git a/go.mod b/go.mod index 8e48969..8ff9e8d 100644 --- a/go.mod +++ b/go.mod @@ -10,23 +10,27 @@ require ( github.com/anacrolix/missinggo/v2 v2.4.1-0.20200227072623-f02f6484f997 github.com/anacrolix/multiless v0.0.0-20200413040533-acfd16f65d5d // indirect github.com/anacrolix/torrent v1.15.2 - github.com/elliotchance/orderedmap v1.2.2 // indirect + github.com/elliotchance/orderedmap v1.3.0 // indirect github.com/fatih/color v1.9.0 // indirect github.com/gin-contrib/static v0.0.0-20191128031702-f81c604d8ac2 github.com/gin-gonic/gin v1.6.3 - github.com/goccy/go-yaml v1.4.3 - github.com/golang/protobuf v1.4.1 // indirect + github.com/goccy/go-yaml v1.7.18 + github.com/golang/protobuf v1.4.2 // indirect github.com/hanwen/go-fuse/v2 v2.0.3 - github.com/huandu/xstrings v1.3.1 // indirect - github.com/mattn/go-colorable v0.1.6 // indirect + github.com/huandu/xstrings v1.3.2 // indirect + github.com/mattn/go-colorable v0.1.7 // indirect github.com/mattn/go-sqlite3 v2.0.3+incompatible // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.1 // indirect github.com/mschoch/smat v0.2.0 // indirect github.com/shurcooL/httpfs v0.0.0-20190707220628-8d4bc4ba7749 - github.com/stretchr/testify v1.4.0 + github.com/shurcooL/vfsgen v0.0.0-20200627165143-92b8a710ab6c // indirect + github.com/sirupsen/logrus v1.6.0 + github.com/stretchr/objx v0.2.0 // indirect + github.com/stretchr/testify v1.6.1 github.com/tinylib/msgp v1.1.2 // indirect - golang.org/x/net v0.0.0-20200506145744-7e3656a0809f // indirect - golang.org/x/sys v0.0.0-20200509044756-6aff5f38e54f // indirect - golang.org/x/time v0.0.0-20200416051211-89c76fbcd5d1 // indirect + golang.org/x/net v0.0.0-20200707034311-ab3426394381 // indirect + golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae // indirect + golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e // indirect + gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776 // indirect ) diff --git a/go.sum b/go.sum index f8c300a..64ed1cc 100644 --- a/go.sum +++ b/go.sum @@ -131,6 +131,8 @@ github.com/elliotchance/orderedmap v1.2.0 h1:Z2kiPPgjjlS8NN+1EFzE4ZO/HpW02gl9ZH3 github.com/elliotchance/orderedmap v1.2.0/go.mod h1:8hdSl6jmveQw8ScByd3AaNHNk51RhbTazdqtTty+NFw= github.com/elliotchance/orderedmap v1.2.2 h1:U5tjNwkj4PjuySqnbkIiiGrj8Ovw83domXHeLeb7OgY= github.com/elliotchance/orderedmap v1.2.2/go.mod h1:8hdSl6jmveQw8ScByd3AaNHNk51RhbTazdqtTty+NFw= +github.com/elliotchance/orderedmap v1.3.0 h1:k6m77/d0zCXTjsk12nX40TkEBkSICq8T4s6R6bpCqU0= +github.com/elliotchance/orderedmap v1.3.0/go.mod h1:8hdSl6jmveQw8ScByd3AaNHNk51RhbTazdqtTty+NFw= github.com/etcd-io/bbolt v1.3.3 h1:gSJmxrs37LgTqR/oyJBWok6k6SvXEUerFTbltIhXkBM= github.com/etcd-io/bbolt v1.3.3/go.mod h1:ZF2nL25h33cCyBtcyWeZ2/I3HQOfTP+0PIEvHjkjCrw= github.com/fatih/color v1.7.0 h1:DkWD4oS2D8LGGgTQ6IvwJJXSL5Vp2ffcQg58nFV38Ys= @@ -171,6 +173,8 @@ github.com/go-playground/validator/v10 v10.2.0/go.mod h1:uOYAAleCW8F/7oMFd6aG0GO github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/goccy/go-yaml v1.4.3 h1:+1jK1ost1TBEfWjciIMU8rciBq0poxurgS7XvLgQInM= github.com/goccy/go-yaml v1.4.3/go.mod h1:PsEEJ29nIFZL07P/c8dv4P6rQkVFFXafQee85U+ERHA= +github.com/goccy/go-yaml v1.7.18 h1:fYYi9e/tiAThIR0ILtnL12lsPRqsbDmLRZIvDgcAKf4= +github.com/goccy/go-yaml v1.7.18/go.mod h1:wS4gNoLalDSJxo/SpngzPQ2BN4uuZVLCmbM4S3vd4+Y= github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/gogo/protobuf v1.2.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= @@ -186,6 +190,8 @@ github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:W github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= github.com/golang/protobuf v1.4.1 h1:ZFgWrT+bLgsYPirOnRfKLYJLvssAegOj/hgyMFdJZe0= github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= +github.com/golang/protobuf v1.4.2 h1:+Z5KGCizgyZCbGh1KZqA0fcLLkwbsjIzS4aV2v7wJX0= +github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.1 h1:Qgr9rKW7uDUkrbSmQeiDsGa8SjGyCOGtuasMWwvp2P4= github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= @@ -224,6 +230,8 @@ github.com/huandu/xstrings v1.3.0 h1:gvV6jG9dTgFEncxo+AF7PH6MZXi/vZl25owA/8Dg8Wo github.com/huandu/xstrings v1.3.0/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE= github.com/huandu/xstrings v1.3.1 h1:4jgBlKK6tLKFvO8u5pmYjG91cqytmDCDvGh7ECVFfFs= github.com/huandu/xstrings v1.3.1/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE= +github.com/huandu/xstrings v1.3.2 h1:L18LIDzqlW6xN2rEkpdV8+oL/IXWJ1APd+vsdYy4Wdw= +github.com/huandu/xstrings v1.3.2/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE= github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.9 h1:9yzud/Ht36ygwatGx56VwCZtlI/2AD15T1X2sjSuGns= @@ -233,7 +241,10 @@ github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7 github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/konsorten/go-windows-terminal-sequences v1.0.1 h1:mweAR1A6xJ3oS2pRaGiHgQ4OO8tzTaLawm8vnODuwDk= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/konsorten/go-windows-terminal-sequences v1.0.3 h1:CE8S1cTafDpPvMhIxNJKvHsGVBgn1xWYf1NbHQhywc8= +github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= @@ -252,6 +263,8 @@ github.com/mattn/go-colorable v0.1.4 h1:snbPLB8fVfU9iwbbo30TPtbLRzwWu6aJS6Xh4eaa github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= github.com/mattn/go-colorable v0.1.6 h1:6Su7aK7lXmJ/U79bYtBjLNaha4Fs1Rg9plHpcH+vvnE= github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= +github.com/mattn/go-colorable v0.1.7 h1:bQGKb3vps/j0E9GfJQ03JyhRuxsvdAanXlT9BTw3mdw= +github.com/mattn/go-colorable v0.1.7/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-isatty v0.0.7/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2yME+cCiQ= @@ -310,7 +323,12 @@ github.com/ryszard/goskiplist v0.0.0-20150312221310-2dfbae5fcf46 h1:GHRpF1pTW19a github.com/ryszard/goskiplist v0.0.0-20150312221310-2dfbae5fcf46/go.mod h1:uAQ5PCi+MFsC7HjREoAz1BU+Mq60+05gifQSsHSDG/8= github.com/shurcooL/httpfs v0.0.0-20190707220628-8d4bc4ba7749 h1:bUGsEnyNbVPw06Bs80sCeARAlK8lhwqGyi6UT8ymuGk= github.com/shurcooL/httpfs v0.0.0-20190707220628-8d4bc4ba7749/go.mod h1:ZY1cvUeJuFPAdZ/B6v7RHavJWZn2YPVFQ1OSXhCGOkg= +github.com/shurcooL/vfsgen v0.0.0-20200627165143-92b8a710ab6c h1:XLPw6rny9Vrrvrzhw8pNLrC2+x/kH0a/3gOx5xWDa6Y= +github.com/shurcooL/vfsgen v0.0.0-20200627165143-92b8a710ab6c/go.mod h1:TrYk7fJVaAttu97ZZKrO9UbRa8izdowaMIZcxYMbVaw= +github.com/sirupsen/logrus v1.2.0 h1:juTguoYk5qI21pwyTXY3B3Y5cOTH3ZUyZCg1v/mihuo= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= +github.com/sirupsen/logrus v1.6.0 h1:UBcNElsrwanuuMsnGSlYmtmgbb23qDR5dG+6X6Oo89I= +github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= github.com/smartystreets/assertions v0.0.0-20190215210624-980c5ac6f3ac/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= github.com/smartystreets/goconvey v0.0.0-20181108003508-044398e4856c/go.mod h1:XDJAKZRPZ1CvBcN2aX5YOUTYGHki24fSF0Iv48Ibg0s= @@ -319,12 +337,17 @@ github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasO github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI= github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.1.1 h1:2vfRuCMp5sSVIDSqO8oNnWJq7mPa6KVP3iPIwFBuy8A= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.2.0 h1:Hbg2NidpLE8veEBkEZTL3CvlkUIVzuU9jDplZO54c48= +github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= github.com/stretchr/testify v1.2.1/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= +github.com/stretchr/testify v1.6.1 h1:hDPOHmpOpP40lSULcqw7IrRb/u7w6RpDC9399XyoNd0= +github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/syncthing/syncthing v0.14.48-rc.4/go.mod h1:nw3siZwHPA6M8iSfjDCWQ402eqvEIasMQOE8nFOxy7M= github.com/tinylib/msgp v1.0.2/go.mod h1:+d+yLhGm8mzTaHzB+wgMYrodPfmZrzkirds8fDWklFE= github.com/tinylib/msgp v1.1.0 h1:9fQd+ICuRIu/ue4vxJZu6/LzxN0HwMds2nq/0cFvxHU= @@ -350,7 +373,9 @@ go.etcd.io/bbolt v1.3.4/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ= go.opencensus.io v0.20.1/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= go.opencensus.io v0.20.2/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2 h1:VklqNMn3ovrHsnt90PveolxSbWFaJdECFbxSq0Mqo2M= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= @@ -365,6 +390,7 @@ golang.org/x/net v0.0.0-20190125091013-d26f9f9a57f3/go.mod h1:mL1N/T3taQHkDXs73r golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190318221613-d196dffd7c2b/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190628185345-da137c7871d7 h1:rTIdg5QFRR7XCaK4LCjBiPbx8j4DQRpdYMnGn/bJUEU= golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191125084936-ffdde1057850/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= @@ -372,6 +398,8 @@ golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa h1:F+8P+gmewFQYRk6JoLQLwjBCT golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200506145744-7e3656a0809f h1:QBjCr1Fz5kw158VqdE9JfI9cJnl/ymnJWAdMuinqL7Y= golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200707034311-ab3426394381 h1:VXak5I6aEWmAXeQjA+QSZzlgNrpq9mjcfDemuexIKsU= +golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -385,6 +413,8 @@ golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5h golang.org/x/sys v0.0.0-20181122145206-62eef0e2fa9b/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190712062909-fae7ac547cb7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190910064555-bbd175535a8b h1:3S2h5FadpNr0zUUCVZjlKIEYF+KaX/OBplTGo89CYHI= @@ -402,6 +432,8 @@ golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200509044756-6aff5f38e54f h1:mOhmO9WsBaJCNmaZHPtHs9wOcdqdKCjF6OPJlmDM3KI= golang.org/x/sys v0.0.0-20200509044756-6aff5f38e54f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae h1:Ih9Yo4hSPImZOpfGuA4bR/ORKTAbhZo2AbWNRCnevdo= +golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -410,6 +442,8 @@ golang.org/x/time v0.0.0-20191024005414-555d28b269f0 h1:/5xXl8Y5W96D+TtHSlonuFqG golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20200416051211-89c76fbcd5d1 h1:NusfzzA6yGQ+ua51ck7E3omNUX/JuqbFSaRGqU8CcLI= golang.org/x/time v0.0.0-20200416051211-89c76fbcd5d1/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e h1:EHBhcS0mlXEAVwNyO2dLfjToGsyY4j24pTs2ScHnX7s= +golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -435,6 +469,8 @@ google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miE google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= google.golang.org/protobuf v1.22.0 h1:cJv5/xdbk1NnMPR1VP9+HU6gupuG9MLBoH1r6RHZ2MY= google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.0 h1:4MY060fB1DLGMB/7MBTLnwQUY6+F09GEiz6SsrNqyzM= +google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY= @@ -454,5 +490,9 @@ gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v3 v3.0.0-20191120175047-4206685974f2 h1:XZx7nhd5GMaZpmDaEHFVafUZC7ya0fuo7cSJ3UCKYmM= gopkg.in/yaml.v3 v3.0.0-20191120175047-4206685974f2/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776 h1:tQIYjPdBoyREyB9XMu+nnTclpTYkz2zFM+lzLJFO4gQ= +gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= diff --git a/http_fs.go b/http_fs.go new file mode 100644 index 0000000..950ccc5 --- /dev/null +++ b/http_fs.go @@ -0,0 +1,15 @@ +// +build !release + +package distribyted + +//go:generate go run ./cmd/assets_generate/main.go +import ( + "net/http" + + "github.com/shurcooL/httpfs/union" +) + +var HttpFS = union.New(map[string]http.FileSystem{ + "/assets": http.Dir("assets"), + "/templates": http.Dir("templates"), +}) diff --git a/iio/utils.go b/iio/utils.go index fa2bb59..f9fcb19 100644 --- a/iio/utils.go +++ b/iio/utils.go @@ -2,18 +2,19 @@ package iio import ( "io" - "log" + + log "github.com/sirupsen/logrus" ) func CloseIfCloseable(r interface{}) error { - log.Println("closing file...") + log.Debug("closing file...") if r == nil { return nil } closer, ok := r.(io.Closer) if !ok { - log.Println("file is not implementing close method") + log.Debug("file is not implementing close method") return nil } diff --git a/mount/handler.go b/mount/handler.go index 863b42d..71be5f1 100644 --- a/mount/handler.go +++ b/mount/handler.go @@ -2,7 +2,6 @@ package mount import ( "fmt" - "log" "os" "github.com/ajnavarro/distribyted/config" @@ -11,6 +10,7 @@ import ( "github.com/anacrolix/torrent" "github.com/hanwen/go-fuse/v2/fs" "github.com/hanwen/go-fuse/v2/fuse" + log "github.com/sirupsen/logrus" ) type Handler struct { @@ -53,19 +53,18 @@ func (s *Handler) Mount(mpc *config.MountPoint) error { // only get info if name is not available if t.Name() == "" { - log.Println("getting torrent info", t.InfoHash()) + log.WithField("hash", t.InfoHash()).Info("getting torrent info") <-t.GotInfo() } s.s.Add(mpc.Path, t) - log.Println("torrent added", t.Name()) + log.WithField("name", t.Name()).Info("torrent added") torrents = append(torrents, t) } // TODO change permissions if err := os.MkdirAll(mpc.Path, 0770); err != nil && !os.IsExist(err) { - log.Println("UFFF", err) return err } @@ -82,10 +81,11 @@ func (s *Handler) Mount(mpc *config.MountPoint) error { func (s *Handler) Close() { for path, server := range s.servers { - log.Println("unmounting", path) + log.WithField("path", path).Info("unmounting") err := server.Unmount() if err != nil { - log.Println("unmount failed", path, err) + //TODO try to force unmount if possible + log.WithError(err).WithField("path", path).Error("unmount failed") } } } diff --git a/node/file.go b/node/file.go index 2193eb3..13b8e5e 100644 --- a/node/file.go +++ b/node/file.go @@ -3,13 +3,13 @@ package node import ( "context" "io" - "log" "math" "syscall" "github.com/ajnavarro/distribyted/iio" "github.com/hanwen/go-fuse/v2/fs" "github.com/hanwen/go-fuse/v2/fuse" + log "github.com/sirupsen/logrus" ) var _ fs.NodeGetattrer = &File{} @@ -60,7 +60,7 @@ func (tr *File) Open(ctx context.Context, flags uint32) (fh fs.FileHandle, fuseF if tr.r == nil { r, err := tr.f() if err != nil { - log.Println("error opening reader for file", err) + log.WithError(err).Error("error opening reader for file") return nil, 0, syscall.EIO } @@ -81,7 +81,7 @@ func (tr *File) Read(ctx context.Context, f fs.FileHandle, dest []byte, off int6 n, err := tr.r.ReadAt(buf, off) if err != nil && err != io.EOF { - log.Println("error read data", err) + log.WithError(err).Error("error reading data") return nil, syscall.EIO } @@ -91,7 +91,7 @@ func (tr *File) Read(ctx context.Context, f fs.FileHandle, dest []byte, off int6 func (tr *File) Flush(ctx context.Context, f fs.FileHandle) syscall.Errno { if err := iio.CloseIfCloseable(tr.r); err != nil { - log.Println("error closing file", err) + log.WithError(err).Error("error closing file") return syscall.EIO } diff --git a/node/zip.go b/node/zip.go index 2ffabbf..2bac982 100644 --- a/node/zip.go +++ b/node/zip.go @@ -4,12 +4,12 @@ import ( "archive/zip" "context" "io" - "log" "syscall" "github.com/ajnavarro/distribyted/iio" "github.com/hanwen/go-fuse/v2/fs" "github.com/hanwen/go-fuse/v2/fuse" + log "github.com/sirupsen/logrus" ) var _ fs.NodeGetattrer = &Zip{} @@ -34,12 +34,12 @@ func (z *Zip) Opendir(ctx context.Context) syscall.Errno { if z.files == nil { r, err := z.reader() if err != nil { - log.Println("error opening reader for zip", err) + log.WithError(err).Error("error opening reader for zip") return syscall.EIO } zr, err := zip.NewReader(r, z.size) if err != nil { - log.Println("error getting zip reader from reader", err) + log.WithError(err).Error("error getting zip reader from reader") return syscall.EIO } @@ -54,7 +54,7 @@ func (z *Zip) Opendir(ctx context.Context) syscall.Errno { func() (io.ReaderAt, error) { zfr, err := f.Open() if err != nil { - log.Println("ERROR OPENING ZIP", err) + log.WithError(err).Error("error opening zip file") return nil, err } diff --git a/stats/torrent.go b/stats/torrent.go index 65285b7..764fac9 100644 --- a/stats/torrent.go +++ b/stats/torrent.go @@ -2,7 +2,6 @@ package stats import ( "errors" - "log" "time" "github.com/anacrolix/torrent" @@ -142,8 +141,6 @@ func (s *Torrent) stats(now time.Time, t *torrent.Torrent, chunks bool) *Torrent if s.returnPreviousMeasurements(now) { ts.DownloadedBytes = prev.downloadBytes ts.UploadedBytes = prev.uploadBytes - - log.Println("Using previous stats") } else { st := t.Stats() rd := st.BytesReadData.Int64()