diff --git a/DEVELOPMENT_GUIDE.md b/DEVELOPMENT_GUIDE.md new file mode 100644 index 0000000..f8014c9 --- /dev/null +++ b/DEVELOPMENT_GUIDE.md @@ -0,0 +1,28 @@ +# Plugin development + +### Debugging backend plugin + +For debugging backend part written on Go, you should go through a few steps. First, build a plugin with special flags for debugging: + +```sh +make build-debug +``` + +Then, configure your editor to connect to [delve](https://github.com/go-delve/delve) debugger running in headless mode. This is an example for VS Code: +```json +{ + "version": "0.2.0", + "configurations": [ + { + "name": "Debug backend plugin", + "type": "go", + "request": "attach", + "mode": "remote", + "port": 3222, + "host": "127.0.0.1", + }, + ] +} +``` + +Finally, run grafana-server and then execute `./debug-backend.sh` from grafana-zabbix root folder. This script will attach delve to running plugin. Now you can go to the VS Code and run _Debug backend plugin_ debug config. diff --git a/Makefile b/Makefile index f7dc65c..5105258 100644 --- a/Makefile +++ b/Makefile @@ -13,6 +13,8 @@ build-frontend: yarn dev-build build-backend: env GOOS=linux go build -mod=vendor -o ./dist/zabbix-plugin_linux_amd64 ./pkg +build-debug: + env GOOS=linux go build -mod=vendor -gcflags=all="-N -l" -o ./dist/zabbix-plugin_linux_amd64 ./pkg dist: dist-frontend dist-backend dist-frontend: diff --git a/debug-backend.sh b/debug-backend.sh new file mode 100755 index 0000000..e91b5d0 --- /dev/null +++ b/debug-backend.sh @@ -0,0 +1,18 @@ +#!/bin/bash +if [ "$1" == "-h" ]; then + echo "Usage: ${BASH_SOURCE[0]} [plugin process name] [port]" + exit +fi + +PORT="${2:-3222}" +PLUGIN_NAME="${1:-'zabbix-plugin_'}" +echo $PORT $PLUGIN_NAME + +ptrace_scope=`cat /proc/sys/kernel/yama/ptrace_scope` +if [ "$ptrace_scope" != 0 ]; then + echo "WARNING: ptrace_scope set to value other than 0, this might prevent debugger from connecting, try writing \"0\" to /proc/sys/kernel/yama/ptrace_scope. +Read more at https://www.kernel.org/doc/Documentation/security/Yama.txt" +fi + +dlv attach `pgrep ${PLUGIN_NAME}` --headless --listen 0.0.0.0:${PORT} --api-version 2 +pkill dlv