// TODO(rh): tame copy/paste code from cammount func main() { flag.Parse() cacheDir, err := ioutil.TempDir("", "camlicache") if err != nil { log.Fatalf("Error creating temp cache directory: %v", err) } defer os.RemoveAll(cacheDir) diskcache, err := localdisk.New(cacheDir) if err != nil { log.Fatalf("Error setting up local disk cache: %v", err) } if flag.NArg() != 1 { log.Fatal("usage: camwebdav <blobref>") } br := blobref.Parse(flag.Arg(0)) if br == nil { log.Fatalf("%s was not a valid blobref.", flag.Arg(0)) } client := client.NewOrFail() fetcher := cacher.NewCachingFetcher(diskcache, client) f = fs.NewCamliFileSystem(fetcher, br) http.HandleFunc("/", webdav) err = http.ListenAndServe(*davaddr, nil) if err != nil { log.Fatalf("Error starting WebDAV server: %v", err) } }
func main() { // Scans the arg list and sets up flags debug := flag.Bool("debug", false, "print debugging messages.") threaded := flag.Bool("threaded", true, "switch off threading; print debugging messages.") flag.Parse() errorf := func(msg string, args ...interface{}) { fmt.Fprintf(os.Stderr, msg, args...) os.Exit(2) } if flag.NArg() < 2 { errorf("usage: cammount <blobref> <mountpoint>\n") } root := blobref.Parse(flag.Arg(0)) if root == nil { errorf("Error parsing root blobref: %q\n", root) } client := client.NewOrFail() // automatic from flags cacheDir, err := ioutil.TempDir("", "camlicache") if err != nil { errorf("Error creating temp cache directory: %v\n", err) } defer os.RemoveAll(cacheDir) diskcache, err := localdisk.New(cacheDir) if err != nil { errorf("Error setting up local disk cache: %v", err) } fetcher := cacher.NewCachingFetcher(diskcache, client) fs := fs.NewCamliFileSystem(fetcher, root) timing := fuse.NewTimingPathFilesystem(fs) conn := fuse.NewPathFileSystemConnector(timing) rawTiming := fuse.NewTimingRawFilesystem(conn) state := fuse.NewMountState(rawTiming) state.Debug = *debug mountPoint := flag.Arg(1) err = state.Mount(mountPoint) if err != nil { fmt.Printf("MountFuse fail: %v\n", err) os.Exit(1) } fmt.Printf("Mounted %s on %s (threaded=%v, debug=%v)\n", root.String(), mountPoint, *threaded, *debug) state.Loop(*threaded) fmt.Println("Finished", state.Stats()) counts := state.OperationCounts() fmt.Println("Counts: ", counts) latency := state.Latencies() fmt.Println("MountState latency (ms):") PrintMap(latency) latency = timing.Latencies() fmt.Println("Path ops (ms):", latency) latency = rawTiming.Latencies() fmt.Println("Raw FS (ms):", latency) }