druid/web-console
Rishabh Singh 4ebdfe226d
Druid automated quickstart (#13365)
* Druid automated quickstart

* remove conf/druid/single-server/quickstart/_common/historical/jvm.config

* Minor changes in python script

* Add lower bound memory for some services

* Additional runtime properties for services

* Update supervise script to accept command arguments, corresponding changes in druid-quickstart.py

* File end newline

* Limit the ability to start multiple instances of a service, documentation changes

* simplify script arguments

* restore changes in medium profile

* run-druid refactor

* compute and pass middle manager runtime properties to run-druid
supervise script changes to process java opts array
use argparse, leave free memory, logging

* Remove extra quotes from mm task javaopts array

* Update logic to compute minimum memory

* simplify run-druid

* remove debug options from run-druid

* resolve the config_path provided

* comment out service specific runtime properties which are computed in the code

* simplify run-druid

* clean up docs, naming changes

* Throw ValueError exception on illegal state

* update docs

* rename args, compute_only -> compute, run_zk -> zk

* update help documentation

* update help documentation

* move task memory computation into separate method

* Add validation checks

* remove print

* Add validations

* remove start-druid bash script, rename start-druid-main

* Include tasks in lower bound memory calculation

* Fix test

* 256m instead of 256g

* caffeine cache uses 5% of heap

* ensure min task count is 2, task count is monotonic

* update configs and documentation for runtime props in conf/druid/single-server/quickstart

* Update docs

* Specify memory argument for each profile in single-server.md

* Update middleManager runtime.properties

* Move quickstart configs to conf/druid/base, add bash launch script, support python2

* Update supervise script

* rename base config directory to auto

* rename python script, changes to pass repeated args to supervise

* remove exmaples/conf/druid/base dir

* add docs

* restore changes in conf dir

* update start-druid-auto

* remove hashref for commands in supervise script

* start-druid-main java_opts array is comma separated

* update entry point script name in python script

* Update help docs

* documentation changes

* docs changes

* update docs

* add support for running indexer

* update supported services list

* update help

* Update python.md

* remove dir

* update .spelling

* Remove dependency on psutil and pathlib

* update docs

* Update get_physical_memory method

* Update help docs

* update docs

* update method to get physical memory on python

* udpate spelling

* update .spelling

* minor change

* Minor change

* memory comptuation for indexer

* update start-druid

* Update python.md

* Update single-server.md

* Update python.md

* run python3 --version to check if python is installed

* Update supervise script

* start-druid: echo message if python not found

* update anchor text

* minor change

* Update condition in supervise script

* JVM not jvm in docs
2022-12-09 11:04:02 -08:00
..
assets Web console: add tile for Azure Event Hubs (via Kafka API) (#10317) 2020-08-31 20:58:52 -07:00
e2e-tests Web console: update DQT to version 0.17 (#13323) 2022-11-07 17:47:11 -08:00
lib Web console: add arrayOfDoublesSketch and other small fixes (#13486) 2022-12-06 21:21:49 -08:00
script Web console: add arrayOfDoublesSketch and other small fixes (#13486) 2022-12-06 21:21:49 -08:00
src Druid automated quickstart (#13365) 2022-12-09 11:04:02 -08:00
.editorconfig Web console: update dev dependencies (#11119) 2021-04-16 20:15:19 -07:00
.eslintrc.js Web console: update dev dependencies (#12240) 2022-02-08 16:37:36 -08:00
.gitignore Web console: show segment sizes in rows not bytes (#10496) 2020-10-13 13:19:39 -07:00
.stylelintrc.json Web console: Switch to ESLint (#11142) 2021-04-22 19:33:03 -07:00
README.md Web console: Misc table fixes (#12489) 2022-05-03 12:08:08 -07:00
babel.config.js Web console: Remove support for IE11 and other older browsers (#11357) 2021-06-10 19:05:40 -07:00
console-config.js Web console: Switch to ESLint (#11142) 2021-04-22 19:33:03 -07:00
favicon.png Web console: refresh and tighten up the console styles 💅💫 (#10515) 2020-10-20 22:11:29 -07:00
jest.common.config.js Web console: Switch to ESLint (#11142) 2021-04-22 19:33:03 -07:00
jest.e2e.config.js Web console: update dev dependencies (#12240) 2022-02-08 16:37:36 -08:00
jest.unit.config.js Web console: Switch to ESLint (#11142) 2021-04-22 19:33:03 -07:00
package-lock.json Bump minimatch and replace in /web-console (#13396) 2022-11-23 12:16:00 -08:00
package.json Bump minimatch and replace in /web-console (#13396) 2022-11-23 12:16:00 -08:00
pom.xml Prepare master branch for next release, 26.0.0 (#13401) 2022-11-22 15:31:01 +05:30
tsconfig.json Web console: update typescript 4.4 for faster build speeds (#11725) 2021-10-25 21:53:38 -07:00
tsconfig.test.json Web console: update dev dependencies (#11119) 2021-04-16 20:15:19 -07:00
unified-console.html Prepare master branch for next release, 26.0.0 (#13401) 2022-11-22 15:31:01 +05:30
webpack.config.js Blueprint 4 (#12391) 2022-04-04 10:34:22 -07:00

README.md

Apache Druid web console

This is the Druid web console that servers as a data management interface for Druid.

Developing the console

Getting started

  1. You need to be within the web-console directory
  2. Install the modules with npm install
  3. Run npm run compile to compile the scss files (this usually needs to be done only once)
  4. Run npm start will start in development mode and will proxy druid requests to localhost:8888

Note: you can provide an environment variable to proxy to a different Druid host like so: druid_host=1.2.3.4:8888 npm start Note: you can provide an environment variable use webpack-bundle-analyzer as a plugin in the build script or like so: BUNDLE_ANALYZER_PLUGIN='TRUE' npm start

To try the console in (say) coordinator mode you could run it as such:

druid_host=localhost:8081 npm start

Developing

You should use a TypeScript friendly IDE (such as WebStorm, or VS Code) to develop the web console.

The console relies on eslint (and various plugins), sass-lint, and prettier to enforce code style. If you are going to do any non-trivial development you should set up your IDE to automatically lint and fix your code as you make changes.

Configuring WebStorm

  • Preferences | Languages & Frameworks | JavaScript | Code Quality Tools | ESLint

    • Select "Automatic ESLint Configuration"
    • Check "Run eslint --fix on save"
  • Preferences | Languages & Frameworks | JavaScript | Prettier

    • Set "Run for files" to {**/*,*}.{js,ts,jsx,tsx,css,scss}
    • Check "On code reformat"
    • Check "On save"

Configuring VS Code

  • Install dbaeumer.vscode-eslint extension
  • Install esbenp.prettier-vscode extension
  • Open User Settings (JSON) and set the following:
      "editor.defaultFormatter": "esbenp.prettier-vscode",
      "editor.formatOnSave": true,
      "editor.codeActionsOnSave": {
        "source.fixAll.eslint": true
      }
    

Auto-fixing manually

It is also possible to auto-fix and format code without making IDE changes by running the following script:

  • npm run autofix — run code linters and formatter

You could also run fixers individually:

  • npm run eslint-fix — run code linter and fix issues
  • npm run sasslint-fix — run style linter and fix issues
  • npm run prettify — reformat code and styles

Updating the list of license files

If you change the dependencies of the console in any way please run script/licenses (from the web-console directory). It will analyze the changes and update the ../licenses file as needed.

Please be conscious of not introducing dependencies on packages with Apache incompatible licenses.

Running end-to-end tests

From the web-console directory:

  1. Build druid distribution: script/druid build
  2. Start druid cluster: script/druid start
  3. Run end-to-end tests: npm run test-e2e
  4. Stop druid cluster: script/druid stop

If you already have a druid cluster running on the standard ports, the steps to build/start/stop a druid cluster can be skipped.

Screenshots for debugging

e2e-tests/util/debug.ts:saveScreenshotIfError() is used to save a screenshot of the web console when the test fails. For example, if e2e-tests/tutorial-batch.spec.ts fails, it will create load-data-from-local-disk-error-screenshot.png.

Disabling headless mode

Disabling headless mode while running the tests can be helpful. This can be done via the DRUID_E2E_TEST_HEADLESS environment variable, which defaults to true.

Like so: DRUID_E2E_TEST_HEADLESS=false npm run test-e2e

Running against alternate web console

The environment variable DRUID_E2E_TEST_UNIFIED_CONSOLE_PORT can be used to target a web console running on a non-default port (i.e., not port 8888). For example, this environment variable can be used to target the development mode of the web console (started via npm start), which runs on port 18081.

Like so: DRUID_E2E_TEST_UNIFIED_CONSOLE_PORT=18081 npm run test-e2e

Running and debugging a single e2e test using Jest and Playwright

  • Run - jest --config jest.e2e.config.js e2e-tests/tutorial-batch.spec.ts
  • Debug - PWDEBUG=console jest --config jest.e2e.config.js e2e-tests/tutorial-batch.spec.ts

Description of the directory structure

As part of this directory:

  • assets/ - The images (and other assets) used within the console
  • e2e-tests/ - End-to-end tests for the console
  • lib/ - A place where keywords and generated docs live.
  • public/ - The compiled destination for the files powering this console
  • script/ - Some helper bash scripts for running this console
  • src/ - This directory (together with lib) constitutes all the source code for this console

List of non SQL data reading APIs used

GET /status
GET /druid/indexer/v1/supervisor?full
POST /druid/indexer/v1/worker
GET /druid/indexer/v1/workers
GET /druid/indexer/v1/tasks
GET /druid/coordinator/v1/loadqueue?simple
GET /druid/coordinator/v1/config
GET /druid/coordinator/v1/metadata/datasources?includeUnused
GET /druid/coordinator/v1/rules
GET /druid/coordinator/v1/config/compaction
GET /druid/coordinator/v1/tiers