-
Notifications
You must be signed in to change notification settings - Fork 31
Developer Guide
This part of the documentation relates only to development of the plugin and not required if you only intended to use it.
The frontend part is implemented using Typescript, WebPack, ESLint and NPM. The backend is written on Golang and based on Hashicorp Plugin System. The plugin development uses docker actively and it's recommended to have at least basic understanding of docker and docker-compose, although all steps can be done without docker.
First, clone the project. It has to be built with docker or with locally installed tools.
-
docker run --rm -v ${PWD}:/opt/gcds -w /opt/gcds node:12 npm install- install frontend dependencies -
docker run --rm -v ${PWD}:/opt/gcds -w /opt/gcds node:12 node node_modules/webpack/bin/webpack.js- build frontend -
docker run --rm -v ${PWD}:/go/src/github.com/ha/gcp -w /go/src/github.com/ha/gcp/backend golang go mod vendor- install backend dependencies -
docker run --rm -v ${PWD}:/go/src/github.com/ha/gcp -w /go/src/github.com/ha/gcp golang go build -i -o ./dist/cassandra-plugin_linux_amd64 ./backend- build backend (Linux version)
If you have npm and golang installed locally, you can do the build steps without docker:
npm installwebpackcd backend && go mod vendorgo build -i -o ./dist/cassandra-plugin_linux_amd64 ./backend
The datasource can be OPTIONALLY built with the TLS support. To add it to the plugin, please follow these steps.
-
go get -u github.com/go-bindata/go-bindata/...- downloading the bindata package - Place your tls certificate and tls key into
./backend/credsfolder -
cd ./backend && go-bindata -o assets.go ./creds && cd ..- move credentials files as a.gofiles -
go build -i -ldflags "-X main.EnableTLS=true -X main.CertPath=/creds/cert_file_name -X main.KeyPath=/creds/key_file_name -X main.InsecureSkipVerify=true" -o ./dist/cassandra-plugin_linux_amd64 ./backend- build binary with required variables filled in. If you'd like to use rootCA, dogo build -i -ldflags "-X main.EnableTLS=true -X main.RootCA=/creds/root_ca_file_name" -o ./dist/cassandra-plugin_linux_amd64 ./backend
docker-compose up -d
docker-compose includes two services:
-
Grafana by itself, the plugin is mounted as a volume to
/var/lib/grafana/plugins/cassandra. Verbose logging is enabled. Grafana is available at http://localhost:3000, useradmin, passwordadmin -
Apache Cassandra, host
cassandra:9042, usercassandra, passwordcassandra.cqlshis available viadocker-compose exec cassandra cqlsh -u cassandra -p cassandra.
After the startup, the datasource should be available in the list of datasources. Also, following lines should appear in grafana logs:
# Frontend part registered
lvl=info msg="Starting plugin search" logger=plugins
lvl=info msg="Registering plugin" logger=plugins name="Apache Cassandra"
...
# Backend part is started and running
msg="Plugins: Adding route" logger=http.server route=/public/plugins/hadesarchitect-cassandra-datasource dir=/var/lib/grafana/plugins/cassandra/dist
msg="starting plugin" logger=plugins plugin-id=hadesarchitect-cassandra-datasource path=/var/lib/grafana/plugins/cassandra/dist/cassandra-plugin_linux_amd64 args=[/var/lib/grafana/plugins/cassandra/dist/cassandra-plugin_linux_amd64]
msg="plugin started" logger=plugins plugin-id=hadesarchitect-cassandra-datasource path=/var/lib/grafana/plugins/cassandra/dist/cassandra-plugin_linux_amd64 pid=23
msg="waiting for RPC address" logger=plugins plugin-id=hadesarchitect-cassandra-datasource path=/var/lib/grafana/plugins/cassandra/dist/cassandra-plugin_linux_amd64
msg="2020-01-16T22:08:51.619Z [DEBUG] cassandra-backend-datasource: Running Cassandra backend datasource..." logger=plugins plugin-id=hadesarchitect-cassandra-datasource
msg="plugin address" logger=plugins plugin-id=hadesarchitect-cassandra-datasource address=/tmp/plugin991218850 network=unix timestamp=2020-01-16T22:08:51.622Z
msg="using plugin" logger=plugins plugin-id=hadesarchitect-cassandra-datasource version=1
To read the logs, use docker-compose logs -f grafana.
docker-compose exec cassandra cqlsh -u cassandra -p cassandra -f ./test_data.cql
Backend tests: docker run --rm -v ${PWD}:/go/src/github.com/ha/gcp -w /go/src/github.com/ha/gcp golang go mod vendor && go test ./backend
Backend tests: go test ./backend
Run webpack with --watch option to enable watching:
docker run --rm -v ${PWD}:/opt/gcds -w /opt/gcds node:12 node node_modules/webpack/bin/webpack.js --watchdocker-compose restart grafana
With any changes done to backend, the binary file should be recompiled and grafana should be restarted:
docker run --rm -v ${PWD}:/go/src/github.com/ha/gcp -w /go/src/github.com/ha/gcp golang go build -i -o ./dist/cassandra-plugin_linux_amd64 ./backenddocker-compose restart grafana
To contact the developers, ask questions, or provide any feedback, please use Github discussions.