## [SIEM] Fixes dragging entries to the Timeline while data is loading may trigger a partial page reload
The `react-beautiful-dnd` library, upgraded during the `7.6` stack release from
`10.0.1` to `12.2.0`, includes a breaking change to the way [errors are handled](https://github.com/atlassian/react-beautiful-dnd/blob/v12.0.0/docs/guides/setup-problem-detection-and-error-recovery.md)
and recovered. As a result of this change, an uncaught error may trigger a
an effect that feels (from the perspective of a user) like a partial page
reload.
The most common condition where this can occur is when dragging entries to the
Timeline while data is loading, per the animated gif below:
![refresh-error](https://user-images.githubusercontent.com/4459398/76016029-59755f80-5ed9-11ea-858d-cb1189d22ea9.gif)
## Reproduction steps
1. Navigate to the Hosts page
2. Open the Timeline
3. Drag a host to the Timeline
4. While data is still loading, drag a different host to the Timeline to create an `or` query
**Expected Results**
* The page does not appear to reload
* In development mode, a single error is logged to the JS console
**Actual Results**
* The page appears to reload
* In development mode, two errors are logged to the JS console
**Error 1**
```
react-beautiful-dnd
Invariant failed: Cannot find droppable entry with id [droppableId.content.event-details-value-default-draggable-plain-column-renderer-formatted-field-value-timeline-1-kLGooXABOOUskGlPiQw5-@timestamp-1583260131000]👷<200d> This is a development only message. It will be removed in production builds.
in Draggable (created by ConnectFunction)
in ConnectFunction (created by PrivateDraggable)
in PrivateDraggable (created by PublicDraggable)
in PublicDraggable (created by Droppable)
in Droppable (created by ConnectFunction)
in ConnectFunction
```
**Error 2**
```
react-beautiful-dnd
Invariant failed: Cannot find droppable entry with id [droppableId.content.event-details-value-default-draggable-plain-column-renderer-formatted-field-value-timeline-1-kLGooXABOOUskGlPiQw5-@timestamp-1583260131000]👷<200d> This is a development only message. It will be removed in production builds.
in ErrorBoundary (created by DragDropContext)
in DragDropContext (created by Anonymous)
in Anonymous
```
### Desk testing
Tested locally in:
* Chrome `80.0.3987.122`
* Firefox `73.0.1`
* Safari `13.0.5`
Fixes https://github.com/elastic/kibana/issues/59466
* [Reporting] Handle error if intercepted request could not be continued
* [Reporting/Screenshots] Handle page setup errors and capture the page with errors shown
* show warnings in UI
* i18n todos
* Cleanup an old troubleshooting task
* set the default for all new timeout settings to 30 seconds
* fix some tests
* update error strings
* Cleanup 2
* fix tests 2
* polish the job info map status items
* More error message updating
* Log the error that was caught
* Oops fix ts
* add documentation
* fix i18n
* fix mocha test
* use the openUrl timeout as the default for navigation
* fix comment
Co-authored-by: Elastic Machine <elasticmachine@users.noreply.github.com>
* refactor to use io-ts, to be able to have ressource with sub, add total comments via comment_ids, be able to delete multiple cases/comments
* fix test
* adapt UI to refactor of the API
* put it back the way it was
* clean up to get cases
* review I
* review II - bring back url parameter
* fix merge
Co-authored-by: Elastic Machine <elasticmachine@users.noreply.github.com>
* [Maps] top term percentage property
* populate percentage in feature properties
* TS work
* clean up TS
* fix all type errors
* unit test for esAggFieldsFactory
* clean up
* i18n cleanup
* do not show decimal place for perentage
* fix jest expects
* fix eslint errors
* tslint errors
* handle empty top bucket aggregation
Co-authored-by: Elastic Machine <elasticmachine@users.noreply.github.com>
* Add custom action to registry and show actions list in siem
* Exposed action form as reusable component
* Fixed few small bugs
* Fixed red ci
* Fixed type checks
* Fixed failed tests
* Fixed due to comments
* Fixed type check errors
* Fixed plugin check
* Rebalancing CI groups according to #58930
* Fixed merge issues
* Add async search strategy
* Add async search
* Fix async strategy and add tests
* Move types to separate file
* Revert changes to demo search
* Update demo search strategy to use async
* Add async es search strategy
* Return response as rawResponse
* Poll after initial request
* Add cancellation to search strategies
* Add tests
* Simplify async search strategy
* Move loadingCount to search strategy
* Update abort controller library
* Bootstrap
* Abort when the request is aborted
* Add utility and update value suggestions route
* Fix bad merge conflict
* Update tests
* Move to data_enhanced plugin
* Remove bad merge
* Revert switching abort controller libraries
* Revert package.json in lib
* Move to previous abort controller
* Add support for frozen indices
* Fix test to use fake timers to run debounced handlers
* Revert changes to example plugin
* Fix loading bar not going away when cancelling
* Call getSearchStrategy instead of passing directly
* Add async demo search strategy
* Fix error with setting state
* Update how aborting works
* Fix type checks
* Add test for loading count
* Attempt to fix broken example test
* Revert changes to test
* Fix test
* Update name to camelCase
* Fix failing test
* Don't require data_enhanced in example plugin
* Actually send DELETE request
* Use waitForCompletion parameter
* Use default search params
* Add support for rollups
* Only make changes needed for frozen indices/rollups
* Fix tests/types
* Don't include skipped in loaded/total
Co-authored-by: Elastic Machine <elasticmachine@users.noreply.github.com>
* Added possibility to embed connectors flyout
* Fixed type checks and removed example from siem start page
* Fixed jest tests
* Fixed failing tests
* fixed type check
* Added config for siem tests
* Fixed failing tests
* Fixed due to comments
* Added missing documentation
* Updated EUI to 20.0.1; updated typescript usage
* snapshots
* Upgrade to eui 20.0.2, fix one more type
* PR feedback
* Update EUI icon usage to the correct types
* Updated with master
- Deprecates the custom KibanaContext.
- Where applicable dependencies provided via KibanaContext are now passed on via AppDependencies.
- The main feature of KibanaContext was to populate index pattern and saved search information for the transform wizard. This is now provided via the useSearchItems() custom hook.
* [ML] Add support for date_nanos time field in anomaly job wizard
* [ML] Edits following review
* [ML] Add functional test for creating job off date_nanos data
* Makes alerting and actions optional properties for interface RequestHandlerContext
* Added an error response result if context for actions and alerting is not registered
* Implemented edit alert functionality
* Added unit tests
* Added functional test for edit alert
* Fixed failed tests
* Fixed edit api
* Fixed due to comments
* Fixed functional test
* Fixed tests
* Fixed add alert
* Small type fix
* Fixed jest test
* Fixed type check
* Fixed bugs with interval and throttle + index threshold expression
* Add direct access link registry and dashboard impl and use in ML
* Add example plugin with migration example
* address code review comments
* Fixes, more code review updates
* Readme clean up
* add tests
* remove else
* Rename everything from DirectAccessLinkGenerator to the much short UrlGenerator. also fix the ml # thing and return a relative link from dashboard genrator
* add important text in bold
* Move url generators into share plugin
* add correct i18n prefix
* Fix timeRange url name
* make share plugin optional for dashboard
* fix code owners
* Use base UrlGeneratorState type, add comments
* Fix hash bug and add test that would have caught it
* Pull core service init out into separate function
* Call bind function from embeddable factory constructor
* Move inspector init back to start method. Remove old license check file
* Add TS types
- Deprecates the custom KibanaContext.
- Where applicable dependencies provided via KibanaContext are now passed on via AppDependencies.
- The main feature of KibanaContext was to populate index pattern and saved search information for the transform wizard. This is now provided via the useSearchItems() custom hook.
* wip
* review follow up
* make ACTION a prefix, not SUFFIX
* fix path
* add warnings about casting to ActionType
* Make context an object in examples, not a string
* require object context, which seems to fix the partial requirement in type and thus the type issue
* mistake
Co-authored-by: Elastic Machine <elasticmachine@users.noreply.github.com>
* [SIEM] Fix Timeline registerProvider to be called only when it's needed
* cleanup
* add unit tests
Co-authored-by: Elastic Machine <elasticmachine@users.noreply.github.com>
* [APM] Make typescript optimization process compatible with NP
Rather than creating an extra tsconfig.json file in the APM folder, simply change the one in x-pack root, and include APM files from both legacy + NP.
* Update dev_docs/typescript.md
* Use spread op instead of assign
* Use console.error instead of console.log
* [ML] validate mml based on estimated value
* [ML] better memoize
* [ML] memoryInputValidator unit tests
* [ML] cache mml errors
* [ML] prevent override
* [ML] fix validators, add unit tests
* [ML] ignore typing issue with numeral
* [ML] fix validateMinMML
* [ML] fix useCreateAnalyticsForm test
* [ML] setEstimatedModelMemoryLimit to the fallback value in case of an error
* Define a very basic SiemClient
We're going to add our client to the route handler context. Currently,
it's sole purpose is to provide us with the signalsIndex to use for the
request.
This will allow us to stop passing around most uses of config and
getSpaceId, as they were used for this same purpose.
* WIP: Convert first DE route to NP
This is one of the more comprehensive routes, so I think we're good to
convert the rest.
* Abstract joi/NP validator to helper
We're gonna need this all over the place. Until our schema can generate
an NP-compatible type, we can use this helper to generate an equivalent
validator.
* Second route down
* Another one
* updateRulesRoute
* Fix exports
* patchRulesRoute
* Normalize request param type names
* findRulesRoute
* addPrepackagedRulesRoute
* getPrepackagedRulesStatusRoute
* createRulesBulkRoute
* updateRulesBulkRoute
* patchRulesBulkRoute
* deleteRulesBulkRoute
* importRulesRoute
* exportRulesRoute
* findRulesStatusesRoute
* setSignalsStatusRoute
* querySignalsRoute
* Remove unused type
* createIndexRoute
* Convert readIndexRoute
Removes support for a HEAD request here, becuase it was only used by the
signal_index_exists script (which is now gone). A GET request will have
the same semantics, with a few more bytes in the response.
* deleteIndexRoute
* readTagsRoute
* readPrivilegesRoute
We're incorrectly accessing request.auth in here still, fixing that
next.
* We are always authenticated until we support optional auth
* Clean up our route initialization
* Remove our now-unused ClientsService
* Remove unused getIndex helper and references
* Remove legacy route initialization (partial application)
All our routing tests are still totally broken. Coming up!
* Reference name property in context registration
This should be replaced with a reference to the constant, but at least
this doesn't add a third way it's being referenced.
* Convert our first route tests to NP
The API for our test utils isn't final, but this at least gets some
tests passing. We'll see how it handles a more complex example.
* Create Rules tests
* Update addPrepackagedRules tests
There were a lot of incorrect tests in here due to some incorrect route
registration: we were asserting a 404 but receiving a false positive
because the route we wanted didn't exist.
* Read Privileges Route tests
* Delete Rules route tests
* Use more permissive validation in request mock
* createRulesBulkRoute tests
* deleteRulesBulkRoute tests
* More explicit result mock
It was very unclear in the tests what this mock represented.
* findRulesRoute tests
* getPrepackagedRulesRoute tests
* PatchRulesBulkRoute tests
* Convert migrated tests to newest interface
* PatchRulesRoute tests
Also fixes a potential false positive in our patch_rule_bulk_route
validation tests by providing a more realistic payload with a single key
missing.
* Rename file for consistency
* UpdateRulesBulkRoute tests
* deleteRulesBulkRoute tests
* findRulesStatusRoute tests
* updateRulesRoute tests
* setSignalStatusRoute tests
* querySignalsRoute tests
This actually caught a bug where we were not resolving our response before returning
* Update schema tests following rename of type
* Converts Import Rules route tests to NP form
Most of these tests are failing due to our request not being parsed by
Hapi as it previously was. Once we figure out how to generate a
post-middleware request with a file stream, these should be easily
fixed.
* Remove unused import
This was the last remaining reference to hapi in our server plugin. yay!
* Remove unnecessary tests
We're already covering our error paths here.
* Hit success branch of bulk patch route test
* Add test around error path in our route
* Update our router to validate requests by default
This gives us two important behaviors:
1. Requests to inject() will be populated with default values
2. We can test request validation independent of a handler call
* This allows more straightforward assertions as we don't have to
disambiguate between a schema rejection and a data rejection.
* Update route validation tests with new interface
We don't need to reach into our route in the test, nor ts-ignore it.
* Update ImportRules route tests for NP testing
Gets rid of the multipart-form processing that Hapi would convert for us
into a Readable stream. Instead, we generate our own post-middleware
requst that's got a stream on it.
* Remove unnecessary router method
A bug in an initial implementation of inject() lead me to believe that
validations were removing the stream from our requests; this turned out
to be false! YAGNI
* Add an adapter for our route responses
This provides a uniform interface of { body, status, calls }, where body
and status come from the highest-status call (in the case of many). In a
case where we build multiple responses, the preference is to return the
most problematic one first. If there's an issue, one can look into the
other calls and see what's going on.
This breaks the tests and is not fully implemented, but this will allow
us to change how we build responses without affecting our tests.
* Fix remaining assertions in one test file
Helped flesh out our adapter a bit more.
* Update our response adapter to represent how NP transforms our errors
Most importantly, we return a statusCode but not a status_code.
* Update tests to interface with our Response type
This makes them robust to framework/implementation changes.
* Generate our error responses with our siemResponse wrapper
This adds the status_code key that we desire in our error responses.
Tests were updated as well, and they're currently failing because they
expect statusCode, not status_code.
* Update test assertions to look for status_code
* Remove unused import
* Return a meaningful error if an invalid request was injected
This ensures we a) mimic platform behavior so that b) we don't risk a
false positive if our invalid request were to somehow succeed.
* Return a useful error when no route has been registered
* Add back POST variant of delete_rules_bulk_route
Some browsers do not support a request body for DELETE requests.
* Allow headers to be passed to our error response
This is used by Apollo to set some cache/allow headers in the case of
specific bad requests.
* Add back our header-passing from Apollo errors
I also inverted the logic here to handle the special case first.
* Add some tests around our error response helper
* Fix types of our error wrapper
* Move router logic into separate function
This could be decomposed further but getRoute becomes more verbose, so
meh.
* Convert our mock server to a class
It makes the shared state (mocks) of these functions more explicit, and also
does away with some dumb tuple-returns I had (a consequence of trying to
make everything pure).
* Remove need for a route spy
Instead of mocking certain router methods with the same spy and then
retrieving its calls, we can simply iterate over the calls of the router
methods we care about. This is a little less logic and a little more
straightforward.
* Update test with updated copy
We're consolidating on "signals index" when referring to the data index
where signals are stored.
* Remove unneeded type assertion from our route validation factory
We implicitly cast our return value here when we provide the generic
type parameter, so there's no reason for the explicit cast.
* Use exact message assertions
* Export our SiemRequestContext type for consumers
This will move to server/index in NP.
* Make our SiemClient properties readonly
We don't want consumers mutating our state.
* Throw error if SiemClientFactory has not been properly set up
* Remove unnecessary spread
* Use reduce's type argument instead of an explicit assertion
* Remove unnecessary optional chaining
This was a holdover from when we captured calls that had no body, but is
now unnecessary.
* Remove unnecessary headers on mock requests
* Remove non-null assertion in favor of constructor assignment
* Prefer type annotations to explicit casting
If we annotate that both incoming pieces of our headers are of the
correct type, then we can spread them into an object of the same type
and avoid the index signature issue.
* Skip test failure do to handling of authentication
We need to thread through the utility that provides us this same
functionality.
* Mock our cluster calls with realistic data
* Remove TODO as this is addressed in a later PR
Co-authored-by: Josh Dover <me@joshdover.com>
* Addresses #55544.
- uses the core breadthfirst cytoscape layout
- rotates elements by -90degrees
- selects rum nodes as roots
- implements hover styles to show connected nodes
- fixes flash of unstyled cytoscape elements on initial load
* PR review feedback
* adds canned response for testing cytoscape layout in storybook
* update dep snapshot for removing cytoscape-dagre
* [Maps] source descriptor types
* make SORT_ORDER an enum
* fix type error
* finish defining descriptors for all sources
* fill out layer descriptor
* fix type
* make some properties optional to avoid type explosions
* make type optional
* nest types a bit more so they better match class structor
* in progress work from pairing with Thomas
* one more thing
* add unit test (#35)
* add functions removed from fields typescript converstion
* move joins from VectorTileLayer constructor to VectorLayer constructor, add mock to fix map_selectors test
Co-authored-by: Elastic Machine <elasticmachine@users.noreply.github.com>
Co-authored-by: Thomas Neirynck <thomas@elastic.co>
* Optimized pipelines
* Fixed tests
* Addressed feedback
* Withhold LS stats until there is at least one pipeline
* Fixed logstash stats
* Addressed feedback
Co-authored-by: Elastic Machine <elasticmachine@users.noreply.github.com>
* [ML] multi-line json support for analytics job editor
* [ML] advanced editor with xjson
* [ML] add jest mock for XJsonMode
* [ML] add xJson mode to the json tab
* [ML] fix mocks
* [ML] Fixing licensing after server NP cutover
* client side refactor
* management refactor
* moving management license check
* adding server side license class
* added common license class
* client sides using license class
* updating server api guards
* fix privileges tests
* updating translations
* fixing disabled tabs on basic license
* refactoring client side license checks
* setting license initialized flag
* fixing license check on index data viz
Co-authored-by: Elastic Machine <elasticmachine@users.noreply.github.com>
* [test] Comment out Jest hooks in skipped blocks
Jest will run the hooks regardless of if they are skipped.
Tests skipped in 61c9dc4022
and 420ded8eb2 were still resulting in build failures due to the beforeEach failing.
Signed-off-by: Tyler Smalley <tyler.smalley@elastic.co>
* Additional variables/imports no longer needed
Signed-off-by: Tyler Smalley <tyler.smalley@elastic.co>
* Skip additional flaky ingest tests
Signed-off-by: Tyler Smalley <tyler.smalley@elastic.co>
* Comment out file
Signed-off-by: Tyler Smalley <tyler.smalley@elastic.co>
* Must have one test
Signed-off-by: Tyler Smalley <tyler.smalley@elastic.co>
Cleanup implementation of the header to let pages embed the header rather than the weird sort of control the header works with today. Also uses kibana context in a way that makes more sense, and provide a path forward for #53550 since that will need to add a new header type (and some buttons next to the picker).
Fixes#58835
This is a follow-on to https://github.com/elastic/kibana/pull/57030 ,
"[alerting] initial index threshold alertType and supporting APIs",
to get it working with the existing alerting UI. The parameter shape
was different between the two, so the alertType was changed to fix
the existing UI shapes expected.
* Move linked_search to react
* Use i18n from start contract
* Move linked search to the editor
* Updating layout and fixing truncation
* Fix functional test, add a tooltip
Co-authored-by: Caroline Horn <549577+cchaos@users.noreply.github.com>
Migrate transform legacy server to NP.
- Create server plugin/index for transform in x-pack/plugins.
- Move all legacy/server files to plugins/transform
* [Maps] direct Discover visualize to Maps application
* pass initial layers to maps app
* add functional test
* fix parentheses messed up by lint fix
* fix i18n expression
* move logic into lib
* fix typescript errors
* use constant for geo_point and geo_shape, more TS noise
* use encode_array in an attempt to make TS happy
* another round of TS changes
* one more thing
Co-authored-by: Elastic Machine <elasticmachine@users.noreply.github.com>
* Add resolver middleware
* Update types to match events, use sample events in useCamera tests
* add predicate to convert alertdata to legacy endpoint event
* Use mock event generator in tests
* Guard against events not having agent or endpoint fields
Co-authored-by: Robert Austin <robert.austin@elastic.co>
* Removed Boom from reindex-service
The reindex service had logic inside it for mapping errors
to HTTP. This has been moved to the route handlers and also
removed Boom.
There is one more instance of Boom use inside of reindex-actions
but that comes from Saved Objects which should probably be removed
at a later stage.
* Fix import path
Specify the full relative import path to the kibana's core
server folder
* Remove unnecessary if statement
Co-authored-by: Elastic Machine <elasticmachine@users.noreply.github.com>
* Add tabs to the Endpoint app. Uses EuiTabs and browser history for integration with react-router
Co-authored-by: Paul Tavares <56442535+paul-tavares@users.noreply.github.com>
Co-authored-by: Elastic Machine <elasticmachine@users.noreply.github.com>