58ce2e55d8
* dynamic coord config adding more balancing control add new dynamic coordinator config, maxSegmentsToConsiderPerMove. This config caps the number of segments that are iterated over when selecting a segment to move. The default value combined with current balancing strategies will still iterate over all provided segments. However, setting this value to something > 0 will cap the number of segments visited. This could make sense in cases where a cluster has a very large number of segments and the admins prefer less iterations vs a thorough consideration of all segments provided. * fix checkstyle failure * Make doc more detailed for admin to understand when/why to use new config * refactor PR to use a % of segments instead of raw number * update the docs * remove bad doc line * fix typo in name of new dynamic config * update RservoirSegmentSampler to gracefully deal with values > 100% * add handler for <= 0 in ReservoirSegmentSampler * fixup CoordinatorDynamicConfigTest naming and argument ordering * fix items in docs after spellcheck flags * Fix lgtm flag on missing space in string literal * improve documentation for new config * Add default value to config docs and add advice in cluster tuning doc * Add percentOfSegmentsToConsiderPerMove to web console coord config dialog * update jest snapshot after console change * fix spell checker errors * Improve debug logging in getRandomSegmentBalancerHolder to cover all bad inputs for % of segments to consider * add new config back to web console module after merge with master * fix ReservoirSegmentSamplerTest * fix line breaks in coordinator console dialog * Add a test that helps ensure not regressions for percentOfSegmentsToConsiderPerMove * Make improvements based off of feedback in review * additional cleanup coming from review * Add a warning log if limit on segments to consider for move can't be calcluated * remove unused import * fix tests for CoordinatorDynamicConfig * remove precondition test that is redundant in CoordinatorDynamicConfig Builder class |
||
---|---|---|
.. | ||
assets | ||
e2e-tests | ||
lib | ||
script | ||
src | ||
.gitignore | ||
.stylelintrc.json | ||
README.md | ||
babel.config.js | ||
console-config.js | ||
favicon.png | ||
jest.common.config.js | ||
jest.e2e.config.js | ||
jest.unit.config.js | ||
package-lock.json | ||
package.json | ||
pom.xml | ||
sasslint.json | ||
tsconfig.json | ||
tslint.json | ||
unified-console.html | ||
webpack.config.js |
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
- You need to be within the
web-console
directory - Install the modules with
npm install
- Run
npm run compile
to compile the scss files (this usually needs to be done only once) - Run
npm start
will start in development mode and will proxy druid requests tolocalhost: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 tslint, sass-lint, and prettier to enforce the code style.
If you are going to do any non-trivial development you should set up file watchers in your IDE to automatically fix your code as you type.
If you do not set up auto file watchers then even a trivial change such as a typo fix might draw the ire of the code style enforcement (it might require some lines to be re-wrapped). If you find yourself in that position you should run on or more of:
npm run tslint-fix
npm run sasslint-fix
npm run prettify
To get your code into an acceptable state.
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:
- Build druid distribution:
script/druid build
- Start druid cluster:
script/druid start
- Run end-to-end tests:
npm run test-e2e
- 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
.
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
.
Description of the directory structure
As part of this directory:
assets/
- The images (and other assets) used within the consolee2e-tests/
- End-to-end tests for the consolelib/
- A place where some overrides to the react-table stylus files live, this is outside of the normal SCSS build system.public/
- The compiled destination for the files powering this consolescript/
- Some helper bash scripts for running this consolesrc/
- This directory (together withlib
) 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