Skip to content

Commit

Permalink
Merge branch 'master' of github.com:elastic/kibana into support-menu
Browse files Browse the repository at this point in the history
  • Loading branch information
mikecote committed Nov 11, 2019
2 parents 6c66062 + 4860c05 commit a9e759f
Show file tree
Hide file tree
Showing 6 changed files with 110 additions and 72 deletions.
2 changes: 1 addition & 1 deletion docs/user/ml/index.asciidoc
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ can then optionally import that data into an {es} index.

You need the following permissions to use the Data Visualizer with file upload:

* cluster privileges: `monitor`, `manage_index_pipelines`
* cluster privileges: `monitor`, `manage_ingest_pipelines`
* index privileges: `read`, `manage`, `index`

For more information, see {ref}/security-privileges.html[Security privileges]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -184,14 +184,15 @@ describe('filter_manager', () => {
expect(updateListener.callCount).toBe(1);
});

test('app state should accept array', async () => {
test('app state should accept array and preserve order', async () => {
const f1 = getFilter(esFilters.FilterStateStore.APP_STATE, false, false, 'age', 34);
const f2 = getFilter(esFilters.FilterStateStore.APP_STATE, false, false, 'gender', 'female');

filterManager.addFilters([f1]);
filterManager.addFilters([f2]);
const appFilters = filterManager.getAppFilters();
expect(appFilters).toHaveLength(2);
expect(appFilters).toEqual([f2, f1]);
expect(appFilters).toEqual([f1, f2]);
expect(filterManager.getGlobalFilters()).toHaveLength(0);
});

Expand All @@ -206,7 +207,7 @@ describe('filter_manager', () => {
expect(updateListener.callCount).toBe(1);
});

test('global state should be accept array', async () => {
test('global state should be accept array and preserve order', async () => {
const f1 = getFilter(esFilters.FilterStateStore.GLOBAL_STATE, false, false, 'age', 34);
const f2 = getFilter(
esFilters.FilterStateStore.GLOBAL_STATE,
Expand All @@ -215,11 +216,36 @@ describe('filter_manager', () => {
'gender',
'female'
);

filterManager.addFilters([f1, f2]);
expect(filterManager.getAppFilters()).toHaveLength(0);
const globalFilters = filterManager.getGlobalFilters();
expect(globalFilters).toHaveLength(2);
expect(globalFilters).toEqual([f2, f1]);
expect(globalFilters).toEqual([f1, f2]);
});

test('mixed filters: global filters should stay in the beginning', async () => {
const f1 = getFilter(esFilters.FilterStateStore.GLOBAL_STATE, false, false, 'age', 34);
const f2 = getFilter(esFilters.FilterStateStore.APP_STATE, false, false, 'gender', 'female');
filterManager.addFilters([f1, f2]);
const filters = filterManager.getFilters();
expect(filters).toHaveLength(2);
expect(filters).toEqual([f1, f2]);
});

test('mixed filters: global filters should move to the beginning', async () => {
const f1 = getFilter(esFilters.FilterStateStore.APP_STATE, false, false, 'age', 34);
const f2 = getFilter(
esFilters.FilterStateStore.GLOBAL_STATE,
false,
false,
'gender',
'female'
);
filterManager.addFilters([f1, f2]);
const filters = filterManager.getFilters();
expect(filters).toHaveLength(2);
expect(filters).toEqual([f2, f1]);
});

test('add multiple filters at once', async () => {
Expand Down
13 changes: 9 additions & 4 deletions src/plugins/data/public/query/filter_manager/filter_manager.ts
Original file line number Diff line number Diff line change
Expand Up @@ -77,11 +77,16 @@ export class FilterManager {

private handleStateUpdate(newFilters: esFilters.Filter[]) {
// global filters should always be first

newFilters.sort(({ $state: a }: esFilters.Filter, { $state: b }: esFilters.Filter): number => {
return a!.store === esFilters.FilterStateStore.GLOBAL_STATE &&
b!.store !== esFilters.FilterStateStore.GLOBAL_STATE
? -1
: 1;
if (a!.store === b!.store) {
return 0;
} else {
return a!.store === esFilters.FilterStateStore.GLOBAL_STATE &&
b!.store !== esFilters.FilterStateStore.GLOBAL_STATE
? -1
: 1;
}
});

const filtersUpdated = !_.isEqual(this.filters, newFilters);
Expand Down
6 changes: 6 additions & 0 deletions x-pack/legacy/plugins/apm/dev_docs/github_commands.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
### Useful Github Pull Request commands

The following commands can be executed by writing them as comments on a pull request:

- `@elasticmachine merge upstream`: Will merge the upstream (eg. master or 7.x) into the branch. This is useful if a bug has been fixed upstream and the fix is necessary to pass CI checks
- `retest` Re-run the tests. This is useful if a flaky test caused the build to fail
53 changes: 53 additions & 0 deletions x-pack/legacy/plugins/apm/dev_docs/vscode_setup.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
### Visual Studio Code

When using [Visual Studio Code](https://code.visualstudio.com/) with APM it's best to set up a [multi-root workspace](https://code.visualstudio.com/docs/editor/multi-root-workspaces) and add the `x-pack/legacy/plugins/apm` directory, the `x-pack` directory, and the root of the Kibana repository to the workspace. This makes it so you can navigate and search within APM and use the wider workspace roots when you need to widen your search.

#### Using the Jest extension

The [vscode-jest extension](https://marketplace.visualstudio.com/items?itemName=Orta.vscode-jest) is a good way to run your Jest tests inside the editor.

Some of the benefits of using the extension over just running it in a terminal are:

• It shows the pass/fail of a test inline in the test file
• It shows the error message in the test file if it fails
• You don’t have to have the terminal process running
• It can automatically update your snapshots when they change
• Coverage mapping

The extension doesn't really work well if you're trying to use it on all of Kibana or all of X-Pack, but it works well if you configure it to run only on the files in APM.

If you have a workspace configured as described above you should have:

```json
"jest.disabledWorkspaceFolders": ["kibana", "x-pack"]
```

in your Workspace settings, and:

```json
"jest.pathToJest": "node scripts/jest.js --testPathPattern=legacy/plugins/apm",
"jest.rootPath": "../../.."
```

in the settings for the APM folder.

#### Jest debugging

To make the [VSCode debugger](https://vscode.readthedocs.io/en/latest/editor/debugging/) work with Jest (you can set breakpoints in the code and tests and use the VSCode debugger) you'll need the [Node Debug extension](https://marketplace.visualstudio.com/items?itemName=ms-vscode.node-debug2) installed and can set up a launch configuration like:

```json
{
"type": "node",
"name": "APM Jest",
"request": "launch",
"args": ["--runInBand", "--testPathPattern=legacy/plugins/apm"],
"cwd": "${workspaceFolder}/../../..",
"console": "internalConsole",
"internalConsoleOptions": "openOnSessionStart",
"disableOptimisticBPs": true,
"program": "${workspaceFolder}/../../../scripts/jest.js",
"runtimeVersion": "10.15.2"
}
```

(you'll want `runtimeVersion` to match what's in the Kibana root .nvmrc. Depending on your setup, you might be able to remove this line.)
74 changes: 11 additions & 63 deletions x-pack/legacy/plugins/apm/readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,13 @@ cd apm-integration-testing/

_Docker Compose is required_

### Debugging Elasticsearch queries

All APM api endpoints accept `_debug=true` as a query param that will result in the underlying ES query being outputted in the Kibana backend process.

Example:
`/api/apm/services/my_service?_debug=true`

### Unit testing

Note: Run the following commands from `kibana/x-pack`.
Expand All @@ -45,10 +52,6 @@ node scripts/jest.js plugins/apm --watch
node scripts/jest.js plugins/apm --updateSnapshot
```

### Cypress E2E tests

See the Cypress-specific [readme.md](cypress/README.md)

### Linting

_Note: Run the following commands from `kibana/`._
Expand All @@ -65,63 +68,8 @@ yarn prettier "./x-pack/legacy/plugins/apm/**/*.{tsx,ts,js}" --write
yarn eslint ./x-pack/legacy/plugins/apm --fix
```

### Useful Github Pull Request commands

The following commands can be executed by writing them as comments on a pull request:

- `@elasticmachine merge upstream`: Will merge the upstream (eg. master or 7.x) into the branch. This is useful if a bug has been fixed upstream and the fix is necessary to pass CI checks
- `retest` Re-run the tests. This is useful if a flaky test caused the build to fail

### Visual Studio Code

When using [Visual Studio Code](https://code.visualstudio.com/) with APM it's best to set up a [multi-root workspace](https://code.visualstudio.com/docs/editor/multi-root-workspaces) and add the `x-pack/legacy/plugins/apm` directory, the `x-pack` directory, and the root of the Kibana repository to the workspace. This makes it so you can navigate and search within APM and use the wider workspace roots when you need to widen your search.

#### Using the Jest extension

The [vscode-jest extension](https://marketplace.visualstudio.com/items?itemName=Orta.vscode-jest) is a good way to run your Jest tests inside the editor.

Some of the benefits of using the extension over just running it in a terminal are:

• It shows the pass/fail of a test inline in the test file
• It shows the error message in the test file if it fails
• You don’t have to have the terminal process running
• It can automatically update your snapshots when they change
• Coverage mapping

The extension doesn't really work well if you're trying to use it on all of Kibana or all of X-Pack, but it works well if you configure it to run only on the files in APM.

If you have a workspace configured as described above you should have:

```json
"jest.disabledWorkspaceFolders": ["kibana", "x-pack"]
```

in your Workspace settings, and:

```json
"jest.pathToJest": "node scripts/jest.js --testPathPattern=legacy/plugins/apm",
"jest.rootPath": "../../.."
```

in the settings for the APM folder.

#### Jest debugging

To make the [VSCode debugger](https://vscode.readthedocs.io/en/latest/editor/debugging/) work with Jest (you can set breakpoints in the code and tests and use the VSCode debugger) you'll need the [Node Debug extension](https://marketplace.visualstudio.com/items?itemName=ms-vscode.node-debug2) installed and can set up a launch configuration like:

```json
{
"type": "node",
"name": "APM Jest",
"request": "launch",
"args": ["--runInBand", "--testPathPattern=legacy/plugins/apm"],
"cwd": "${workspaceFolder}/../../..",
"console": "internalConsole",
"internalConsoleOptions": "openOnSessionStart",
"disableOptimisticBPs": true,
"program": "${workspaceFolder}/../../../scripts/jest.js",
"runtimeVersion": "10.15.2"
}
```
#### Further resources

(you'll want `runtimeVersion` to match what's in the Kibana root .nvmrc. Depending on your setup, you might be able to remove this line.)
- [Cypress integration tests](cypress/README.md)
- [VSCode setup instructions](./dev_docs/vscode_setup.md)
- [Github PR commands](./dev_docs/github_commands.md)

0 comments on commit a9e759f

Please sign in to comment.