XDS agent architecture

The agent part is written in Go and the webapp / dashboard is in typescript + Angular4.

+-- bin/                where xds-server binary file will be built
+-- conf.d              Linux configuration and startup files (systemd user service)
+-- glide.yaml          Go package dependency file
+-- lib/                sources of server part (Go)
+-- main.go             main entry point of of Web server (Go)
+-- Makefile            makefile including
+--           readme
+-- scripts/            hold various scripts used for installation or startup
+-- tools/              temporary directory to hold development tools (like glide)
+-- vendor/             temporary directory to hold Go dependencies packages
+-- webapp/             source client basic webapp / dashboard

Debug xds-agent (Go code)

Install first Visual Studio Code and Go plugin (ext install lukehoban.Go)

Visual Studio Code launcher settings can be found into .vscode/launch.json. The important think is to correctly set GOPATH in launch.json in order to build xds-agent and debug it within Visual Studio Code.

Here is an example of launch.json:

    "version": "0.2.0",
    "configurations": [{
            "name": "XDS-Agent",
            "type": "go",
            "request": "launch",
            "mode": "debug",
            "remotePath": "",
            "port": 2345,
            "host": "",
            "program": "${workspaceRoot}",
            "env": {
                "GOPATH": "${workspaceRoot}/../../../../../..:${env:GOPATH}",
            "args": ["-log", "debug", "-c", "__agent-config_local_dev.json"],
            "showLog": false

And __agent-config_local_dev.json file content is as follow :

    "webAppDir": "./webapp/dist",
    "logsDir": "${HOME}/tmp/xds-agent/logs",
    "xdsServers": [
          "url": "http://localhost:8000"
    "syncthing": {
        "binDir": "./bin",
        "home": "${HOME}/tmp/xds_local_dev/syncthing-config",
        "gui-address": "http://localhost:8386",

Tricks to debug both xds-agent and xds-server

To debug both xds-agent and xds-server or common code xds-common, it may be useful use the same local sources.

A trick to do that is to replace xds-server + xds-common in vendor directory by a symlink that points to local sources.

So clone first xds-server + xds-common sources next to xds-agent directory.

You should have the following tree:

tree -L 5 src/
    `-- gerrit
        `-- src
            `-- xds
                |-- xds-agent
                |-- xds-common
                `-- xds-server

Then invoke vendor/debug Makefile rule to create symbolic links inside vendor directory :

cd src/
make vendor/debug

Debug dashboard part (Typescript / angular code)

Start xds-agent either from command line or in debug mode (see previous chapter) and in another terminal start a watcher daemon so that type typescript sources of webapp / dashboard are automatically “transpiled” using following command :

cd webapp
npm run watch

Then open the XDS Dashboard page (http://localhost:8800) and open the developer tool of web browser (for example Ctrl+Shift+I in Chrome).