Installation and Executation

Installation

Clone source code

Please make sure you have Go installed on your system. If you don’t know what it is, please check Go and environemt path.

$ mkdir -p ${GOPATH}/src/github.com/swiftstack
$ cd ${GOPATH}/src/github.com/swiftstack
$ git clone https://github.com/swiftstack/go-watch-folder

Install packages and run tests

Please install the automake package on your system to make sure you can use make command.

$ make prepare
go get -u github.com/sanbornm/go-selfupdate/...
go get -u github.com/jteeuwen/go-bindata/...
go get -u github.com/golang/dep/cmd/dep
dep ensure

$ make test
### Unit tests for GoWF ###
Usage of /var/folders/6g/9slv6z496gn6q8n0vmhdlvbh0000gn/T/go-build594409299/b001/gowf.test:
.
.
.
INFO: 2018/07/03 16:14:44 watch.go:133: Checker-0 (/Users/charles/gowork/src/github.com/swiftstack/go-watch-folder/gowf/testdata/dummyswift.conf): /private/tmp/dummy (0 files are shuffled)
DEBUG: 2018/07/03 16:14:44 stats.go:57:            Local:            0 files
DEBUG: 2018/07/03 16:14:44 stats.go:58:           Remote:            0 objects
DEBUG: 2018/07/03 16:14:44 stats.go:59:     Trigger jobs:            0 by User,              0 by GoWF
DEBUG: 2018/07/03 16:14:44 stats.go:60:    Jobs in queue:            0 objects
DEBUG: 2018/07/03 16:14:44 stats.go:61: Jobs in progress:            0 SLOs,                 0 objects,             0 MD5 calculation
DEBUG: 2018/07/03 16:14:44 stats.go:63:    Jobs uploaded:            0 successes,            0 failures,            0 disregard
type: %!s(bool=true)
type: %!s(bool=true)
--- PASS: TestRunWatchFolderTask (3.01s)
PASS
coverage: 46.7% of statements
ok          github.com/swiftstack/go-watch-folder/gowf      (cached)        coverage: 46.7% of statements
.
.
.
=== RUN   TestCompareDeduperHasAnchor
Dedup: 2018/07/03 16:15:08 deduper_test.go:75: Alloc = 102503 KiB, TotalAlloc = 4935966 KiB, Sys = 2067266 KiB, NumGC = 36 KiB
2018/07/03 16:15:10 TestCompareDeduperNonStreaming took 1.472720069s
Dedup: 2018/07/03 16:15:10 deduper_test.go:75: Alloc = 196539 KiB, TotalAlloc = 5459877 KiB, Sys = 2067266 KiB, NumGC = 50 KiB
Dedup: 2018/07/03 16:15:10 deduper_test.go:75: Alloc = 100 KiB, TotalAlloc = 5459877 KiB, Sys = 2067266 KiB, NumGC = 51 KiB
delete random write file /tmp/100MB
--- PASS: TestCompareDeduperHasAnchor (1.96s)
PASS
coverage: 94.9% of statements
ok          github.com/swiftstack/go-watch-folder/dedup     (cached)        coverage: 94.9% of statements

Build binary

$ make binary
go-bindata -pkg main -o cmd/templates.go tmpl/*.html
GOOS=linux GOARCH=amd64 go build -ldflags "-w -s -X main.Version=0.0.8-25-g4ea76d6 -X main.UpgradeServer=https://cloud.swiftstack.com/v1/AUTH_gowfdev/" -o build/gowf.linux cmd/gowf.go

You can find binaries in build folder

$ tree ${GOPATH}/src/github.com/swiftstack/go-watch-folder/build
/Users/charles/gowork/src/github.com/swiftstack/go-watch-folder/build
└── gowf.linux

0 directories, 1 files

Execution

In GoWF, a single configuration file is used to connect to a Swift account to which you will upload objects into containers in a specified Swift account. Therefore, if you want to map folders to different Swift accounts, you need to provide multiple configuration files to GoWF.

Command line

Single configuration file

$ gowf --config gowf.conf

# run it in debug mode (turn on log-level to debug)
$ gowf --config gowf.conf --log-file log.txt --log-level DEBUG

# run it in debug mode
$ gowf --config gowf.conf \
       --log-file log.txt \
       --log-level DEBUG

Multiple Configuration Files

$ gowf --config gowf.conf --config gowf-2nd.conf

List Containers or Objects under Container

# list container base on your default gowf configuration file
# Using default /etc/gowf/gowf.conf for listing swift containers
$ gowf --list

# Using specific gowf.conf for listing swift containers
$ gowf --config gowf.conf --list

# Using default /etc/gowf/gowf.conf for listing swift objects under swift container
$ gowf --list <container name>

# Using specific gowf.conf for listing swift containers for listing swift objects under swift container
$ gowf --config gowf.conf --list <container name>

# Using --log-level DEBUG to get more details
$ gowf --list <container name> --log-level DEBUG

Download Object

# Download swift object base on your default gowf configuration file (/etc/gowf/gowf.conf)
$ gowf --download <container name> <object name> <download directory/file name>

# If you don't give <download directory/file name>, it will download to "object name" in current folder
$ gowf --download <container name> <object name>

# Using specific gowf.conf for downloading swift object
$ gowf --config gowf.conf --download <container name> <object name> <download directory/file name>

# If you don't give <download directory/file name>, it will download to "object name" in current folder
$ gowf --config gowf.conf --download <container name> <object name>

Systemd service

Single Configuration file

If you use the standard install script to install GoWF, you will automatically install the latest version. You can find the configuration file in /etc/gowf/gowf.conf.

$ sudo systemctl start gowf.service
$ sudo systemctl stop gowf.service
$ sudo systemctl status gowf.service

Multiple Configuration Files

By default, the systemd service file provided only uses a single configuration file. If you want to support multiple Swift accounts, please modify /etc/systemd/system/gowf.service and add --config <path_to_your_2nd_config_file>

ExecStart=/usr/bin/gowf --config /etc/gowf/gowf.conf --log-file /var/log/gowf/gowf.log --stats-folder /var/log/gowf/stats/

to

ExecStart=/usr/bin/gowf --config /etc/gowf/gowf.conf --config /etc/gowf/another-gowf.conf --log-file /var/log/gowf/gowf.log

After modifying the systemd file and restart gowf.

$ sudo systemctl restart gowf.service
$ sudo systemctl status gowf.service