No description, website, or topics provided.
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
cmd
common
config
docker
g
modules
scripts
test
vagrant
vendor
.ackrc
.gitignore
.gitlab-ci.yml
.travis.yml
LICENSE
Makefile
README.md
VERSION
cfg.json
codecov.yml
go-test-all.sh
logo.png
main.go
version.go

README.md

Open-Falcon Backend

Open-Falcon

Build Status codecov GoDoc Join the chat at https://gitter.im/goappmonitor/Lobby Code Health Code Issues Go Report Card License

Documentations

Get Started

Start MySQL and Redis using docker

cd docker
docker-compose -f init.yml up -d
docker inspect docker_mysql_1
docker inspect docker_redis_1
cd ..

Change your environment setting

vi config/confgen.sh

Start Backend modules

make clean all pack
mkdir out
mv open-falcon-v2.0.0.tar.gz out/
cd out
tar zxvf open-falcon-v2.0.0.tar.gz
./open-falcon start agent graph transfer hbs fe query

Building from source

Binary

# all modules
make all

# specified module
make agent

Docker image

Use docker build at project root, for example:

docker build -t <image_name>:<image_tag> -f docker/alpine/Dockerfile .

Run Open-Falcon Commands

Agent for example:

./open-falcon agent [build|pack|start|stop|restart|status|tail]

Package Management

We use govendor to manage the golang packages. Please install govendor before compilation.

go get -u github.com/kardianos/govendor

Most depended packages are saved under ./vendor dir. If you want to add or update a package, just run govendor fetch xxxx@commitID or govendor fetch xxxx@v1.x.x, then you will find the package have been placed in ./vendor correctly.

Make sure you're using Go 1.5+ and GO15VENDOREXPERIMENT=1 env var is exported. (export GODEBUG=cgocheck=0 using Go 1.6+.)

Package Release

make clean all pack

Upgrading of MySql databases

See scripts/mysql/README.md

Testing

There are environment variables could be used to set-up properties for testing:

  • $OWL_TEST_PROPS_FILE - File name of properties
  • $OWL_TEST_PROPS - Property content as single string
  • $OWL_TEST_PROPS_SEP - Seperator to split record of property content in $OWL_TEST_PROPS

For example, you could use make go-test by:

OWL_TEST_PROPS="mysql.owl_portal=root:cepave@tcp(192.168.20.50:3306)/falcon_portal_test?parseTime=True&loc=Local" make go-test GO_TEST_VERBOSE=yes GO_TEST_FOLDER="modules/mysqlapi/rdb/owl"

Or use go test:

OWL_TEST_PROPS="mysql.owl_portal=root:cepave@tcp(192.168.20.50:3306)/falcon_portal_test?parseTime=True&loc=Local" go test ./modules/mysqlapi/rdb/owl -test.v

GOMAXPROCS(-parallel)

Since some tests(e.x. database unit test) are stateful, these tests should be run in single thread:

  1. GOMAXPROCS=<n> - By environment variable
  2. -parallel <n> - By test flags

See go help testflag for detail information.

Example:

OWL_TEST_PROPS="mysql.owl_portal=root:cepave@tcp(192.168.20.50:3306)/falcon_portal_test?parseTime=True&loc=Local mysql.graph=root:cepave@tcp(192.168.20.50:3306)/graph?parseTime=True&loc=Local"

# By $GOMAXPROCS
GOMAXPROCS=1 go test ./modules/mysqlapi/...

# By -parallel
go test -parallel 1 ./modules/mysqlapi/...

By using make go-test

Variables:

  • GO_TEST_FOLDER - The inclusions of folders(recursively probed) to be tested
  • GO_TEST_EXCLUDE - The exclusions of folders(include children), which are descendants of GO_TEST_FOLDER
  • GO_TEST_PROPS_FILE - If the value is viable, the execution of "go test" would have additional arguments -owl.test.propfile=<GO_TEST_PROPS_FILE>
  • GO_TEST_PROPS - If the value is viable, the execution of "go test" would have additional arguments -owl.test=<GO_TEST_PROPS>
  • GO_TEST_PROPS_SEP - If the value is viable, the execution of "go test" would have additional arguments -owl.test.sep=<GO_TEST_PROPS_SEP>
  • GO_TEST_FLAGS - If the value is viable, the execution of "go test" would have additional flags <flags...>
  • GO_TEST_VERBOSE - If the value is "yes", the execution of "go test -test.v"(with additional flags of 3-party frameworks) would be applied
  • GO_TEST_COVERAGE_FILE - If the value is viable, the execution of "go test" would be added with -coverprofile <file>
# Default execution
make go-test GO_TEST_FOLDER="modules common" GO_TEST_EXCLUDE="modules/fe modules/f2e-api"

# With MySql property and verbose output
make go-test GO_TEST_FOLDER="modules common" GO_TEST_EXCLUDE="modules/fe modules/f2e-api" GO_TEST_VERBOSE=yes GO_TEST_PROPS="mysql.owl_portal=root:cepave@tcp(192.168.20.50:3306)/falcon_portal_test?parseTime=True&loc=Local"

See Makefile for default values of the two variables.

In fact, the Makefile uses go-test-all.sh to perform go-test.

By using go-test-all.sh

This script would try to detect the importing of "common/testing/" in *_test.go files.

If the configuration is matched, this script would append -owl.test.propfile, -owl.test, or -owl.test.sep flags.

Arguments:

  • -t <folders> - The inclusions of folders(recursively probed) to be tested
  • -e <folders> - The exclusions of folders(include children), which are descendants of GO_TEST_FOLDER
  • -f <args> - If the value is viable, the execution of "go test" would have additional arguments -owl.test.propfile=<args>
  • -p <args> - If the value is viable, the execution of "go test" would have additional arguments -owl.test=<args>
  • -s <args> - If the value is viable, the execution of "go test" would have additional arguments -owl.test.sep=<args>
  • -a <flags> - If the value is viable, the execution of "go test" would have additional flags <flags>
  • -v - If this flag is shown, the execution of go test -test.v(with additional flags of 3-party frameworks) would be applied
  • -c <file> - If this flag is shown, the -coverprofile <file> would be set
# Default execution
./go-test-all.sh -t "modules common" -e "modules/fe modules/f2e-api"

# With MySql property and verbose output
./go-test-all.sh -t "modules common" -e "modules/fe modules/f2e-api" -v -p "mysql.owl_portal=root:cepave@tcp(192.168.20.50:3306)/falcon_portal_test?parseTime=True&loc=Local"

Usage of property file

Example of property file("sample.properties"):

mysql.owl_portal=root:cepave@tcp(192.168.20.50:3307)/falcon_portal
client.http.host=127.0.0.1
client.http.port=6040

Execute by go-test-all.sh:

OWL_TEST_PROPS_FILE="$PWD/sample.properties" ./go-test-all.sh -t "modules/mysqlapi/restful"