Commit Graph

1456 Commits

Author SHA1 Message Date
uboness b11f457fb7 Updated the watch_history template
- Disabled the search request body/template fields as they're too volatile to have mappings (applied for both for `search` input and transform)
- Disabled watch level transform result payload

Original commit: elastic/x-pack-elasticsearch@f69b237234
2015-05-16 02:13:17 +02:00
Martijn van Groningen a52a833264 test: change test logging
Original commit: elastic/x-pack-elasticsearch@2fe4619b4f
2015-05-15 12:50:36 +02:00
uboness 912bd1299b Introduced version name to the info API
Holds the name of the version as it is defined in the `pom.xml` (different than the version number that is automatically generated by `WatcherVersion`)

Original commit: elastic/x-pack-elasticsearch@b6cf221f63
2015-05-15 04:54:33 +02:00
uboness ba5f25f73c Updated `WatcherVersion` with min es compatibility to 1.5
Original commit: elastic/x-pack-elasticsearch@a48048aae4
2015-05-15 03:07:36 +02:00
Brian Murphy 7c1497ae3b [TEST] Ensure the license is enabled when starting watcher
This change adds a check to make sure that the license is enabled when starting watcher in the tests.
This avoids a race-condition where a test might run before the license manager had a chance to start.

Original commit: elastic/x-pack-elasticsearch@0b9d0da5d4
2015-05-14 18:22:09 -04:00
Brian Murphy 54926ec336 Fix escaping of mustache strings.
I think the escaping done in XMustacheFactory (and by extension JsonEscapingMustacheFactory in core) is broken.
You cannot just escape any control character by sticking a '\' in front of it. For example a new line character it '\n' but this will be rendered as a line break. Simply prepending a '\' to this just results in a '\' and then a new line !
Added support for different escaping strategies based on the XContentType of a template for XMustacheEngine.
Currently only JSON escaping is supported using jackson.JsonStringEncoder.
Templates will be prepended with __<contentType>__:: when the content type is set. If this is set to JSON we will json escape the content.

Fixes: elastic/elasticsearch#404

Original commit: elastic/x-pack-elasticsearch@1400cba659
2015-05-14 14:35:16 -04:00
jaymode 09621f1267 allow the system truststore to be used if one is not specified
A truststore should not be required as the default system truststore can be used
to validate certificates that have been signed by most commercial CAs.

Additionally, the HttpClient is now a lifecycle component to prevent out of memory
exceptions when starting up with a bad configuration; when an exception is thrown
in the constructor, Guice will continue to try to create the object until the system runs
out of memory.

Closes elastic/elasticsearch#476

Original commit: elastic/x-pack-elasticsearch@2333e47ac1
2015-05-14 09:45:43 -04:00
Brian Murphy 5796a771c0 Chain transform was incorrectly assuming that all transforms had to be objects.
The chain transform :
```
  "transform" : {
    "chain" : [
      {
        "search" : {
          "search_type" : "count",
          "indices" : [ "logstash-*" ],
          "body" : {
            "query" : {
              "match" : { "priority" : "error"}
            }
          }
        }
      },
      {
         "script" :  "return [ error_count : ctx.payload.hits.total ]"

      }
    ]
  },
```
Was failing because the chain transform (wrongly) refused to parse the script string as a transform.
This change will allow the transforms to determine what should parse or not.

Fixes: elastic/elasticsearch#475

Updates after review

Original commit: elastic/x-pack-elasticsearch@78c1a2498d
2015-05-13 22:23:08 -04:00
uboness 926e39d21e Disabled mapping for transform results
Transform results may product different payloads per watch/execution. It means that if the resulted transformed payload is mapped and indexed, there's a high chance for mapping conflicts and thus failures.

For this reason, this commit disables the mapping of all `transform` results (on both the watch and the action levels).

This commit also changes the field name of the transform result from `transform_result` to just `transform` (aligned with other result field names - `input`, `condition` and `actions`)

 Fixes elastic/elasticsearch#472

Original commit: elastic/x-pack-elasticsearch@2c6d4f5182
2015-05-13 20:18:45 +02:00
Martijn van Groningen aba3f8f34c Revert TP SAME change for the service api
Original commit: elastic/x-pack-elasticsearch@f7e52fda96
2015-05-13 14:03:10 +02:00
jaymode b66ddbde3f add snapshot repo to resolve parent pom
Original commit: elastic/x-pack-elasticsearch@80214bbe81
2015-05-13 07:49:34 -04:00
jaymode 5758ca3c7b update to make elasticsearch 2.0 the minumim required version
This change makes the license plugin compatible with elasticseach-2.0.0-SNAPSHOT. This project
now uses the elasticsearch-parent pom to standardize the build with core. As part of this, the
Java security manager is enabled and all tests pass with the security manager enabled.

Closes elastic/elasticsearch#46

Original commit: elastic/x-pack-elasticsearch@5f471ea298
2015-05-13 07:14:10 -04:00
Martijn van Groningen af1d4ad79c Use ThreadPool.Names.SAME executor in stats and service apis.
Original commit: elastic/x-pack-elasticsearch@03c52668e0
2015-05-13 10:44:15 +02:00
Brian Murphy f14fe49dfa Use a different separator in `Wid`
`#` is a reserved character in the URL spec and must be escaped to be used. This change uses `-` instead.

Fixes: elastic/elasticsearch#467

Original commit: elastic/x-pack-elasticsearch@a75eb89cb8
2015-05-12 17:26:28 -04:00
uboness a59e157ca3 Added default `actions`
Until now you always needed to define the `actions` in a watch. Even if you didn't want any actions, you had to define and empty objects there.

Now, the `actions` is an optional field. When missing, we default to "no actions"

Original commit: elastic/x-pack-elasticsearch@3d1a961232
2015-05-12 20:38:30 +02:00
Brian Murphy 86262d5ca5 [TEST] Fix the MonthlyScheduleTests
Move deduping to `validMonthTimes`
This change dedups the `MonthTimes` in `validMonthTimes` to support this two new methods on `MonthTimes` are added `contains(int,DayTime)` which detects if a given day and DayTime combination is contained in the MonthTime and `intersects(MonthTimes)` which detects if a `MonthTimes` has any day/DayTime combinations contained in this `MonthTimes`.

Original commit: elastic/x-pack-elasticsearch@f68039bc39
2015-05-12 14:10:35 -04:00
Martijn van Groningen 9367cd23f2 test: increasing test logging from trace to debug
Original commit: elastic/x-pack-elasticsearch@8709256210
2015-05-12 14:49:30 +02:00
Bill Hwang 8545ddbf4d Watcher randomization testing
Creation of randomization data file for CI

https://github.com/elastic/infra/issues/188

Original commit: elastic/x-pack-elasticsearch@f201b144a5
2015-05-11 13:33:18 -07:00
Martijn van Groningen 887e97cb81 Merge pull request elastic/elasticsearch#452 from martijnvg/fix_es1x_compatibility
Fix Watcher binary compatibility between ES 1.5 and 1.6

Original commit: elastic/x-pack-elasticsearch@c7a5fc9379
2015-05-11 21:57:17 +02:00
Martijn van Groningen ddfb05dc05 test: properly set node types.
Original commit: elastic/x-pack-elasticsearch@46096c087b
2015-05-11 17:39:28 +02:00
Martijn van Groningen 66c032f6df Fix Watcher binary compatibility between ES 1.5 and 1.6
Original commit: elastic/x-pack-elasticsearch@a367d016aa
2015-05-11 15:32:31 +02:00
uboness 6320f39023 Cleanup for xcontent results + docs
Code:

- renamed 'executed_request` back to `request` in the search input/transform result (makes more sense in the context of the overall response structure
- renamed `sent_request` back to `request` in the http input result (makes more sense in the context of the overall response structure)
- renamed `http_status` to `status` in the http input result (makes more sense in the context of the overall response structure)

Docs:

- fixed indentations
- fixed wrong example in put-watch docs (`actions` was shown as an array)
- changed action ids to be lowercased & underscored

Original commit: elastic/x-pack-elasticsearch@6ded0936d5
2015-05-11 10:54:41 +02:00
uboness 46dfa059fd Changed `watch_record` xcontent structure
- Renamed `watch_execution` to `execution_result`
- Renamed `actions_results` to `actions`
- Renamed `input_result` to `input`
- Renamed `condition_result` to `condition`
- Updated the `watch_history.json` template to reflect the changes, also added concrete mappings for action types (such that field that should not be analized will be mapped as `not_analyzed`
- Fixed a bug in `WatchUtils.createSearchRequestFromPrototype` where the document types were ignored.

Also, changed the `actions` (fka `actions_results`) from an object to an array. the action id is not part of the action objects (indicated by the `id` field). For example:

```
{
  "actions" : [
    {
      "id" : "my_email",
      "email" : {
        ...
      }
    }
  ]
}
```

The reason for this change is to make the path to the action fields predictable deterministic. With the object structure, where the actions were keyed by their `id`, the path to the action fields depended on the action id, which is unpredictable and continuously changing from one action to another. This made it impossible to properly analyze the action data using aggregations (as aggs require full path into the aggregated fields).

With this change, the mappings of `watch_record` changed as well where the `actions` are not defined as nested type, yet it is still configured to include all the fields in the root object. We do this so in the future, when appropriate support will be added to kibana, it'll be able to apply nested aggregations on the actions, enabling correct/safe multi-dimensional aggregations. In the mean time however, while kibana doesn't support nested aggregations, we still need to have all the fields indexed on the root, so at least a single dimensional aggregations can be safely applied.

Also, change the `input` and `condition` objects in the `watch_record` such that their mappings are disabled. The main reason for this is the fact that a lot of the inputs use elements that can be configured in many ways, but the mappings are too strict to accept it. For example, a template can be configured as a `string` or as an `object`.

Original commit: elastic/x-pack-elasticsearch@83464a0c71
2015-05-10 19:17:09 +02:00
Shay Banon 7ff92c8f96 Merge pull request elastic/elasticsearch#445 from kimchy/remove_content_unsafe
Remove rest content unsafe usage

Original commit: elastic/x-pack-elasticsearch@c290326f3f
2015-05-09 16:26:11 +02:00
Shay Banon 02ad78743e Remove rest content unsafe usage
Original commit: elastic/x-pack-elasticsearch@4725a3de22
2015-05-09 16:21:45 +02:00
Brian Murphy 9a5455f573 [TESTS] Fix Inline template tests
This change adds a method to WatcherTestUtils to compare two json structures since order is not guaranteed in template parameters.
The Inline template tests in SearchInputTests and SearchTransformTests now use this instead of string comparision.

Original commit: elastic/x-pack-elasticsearch@c433545128
2015-05-09 10:18:45 -04:00
Martijn van Groningen 8fad9937f7 Changed search template format for search input and search transform to the new Watcher template format.
Also the WatcherUtils now always use the search template support from core and never uses ScriptService:
* A template is re-parsed and extended with the watch context variables.
* A normal request body is converted into a search template and watch context variables are used as template params.

Original commit: elastic/x-pack-elasticsearch@16bacaf094
2015-05-09 13:17:25 +02:00
uboness 8ddb0a65c4 Added a setting to disable watcher
The following node setting will disable watcher (it's enabled by default).

```
watcher.enabled: false
```

Original commit: elastic/x-pack-elasticsearch@1d0541a924
2015-05-09 01:33:00 +02:00
Brian Murphy eef3a1b1e8 Add force parameter to delete to force a delete
This change adds a force paramter to delete to allow the forcing of a delete to happen ignoring locking.
This means that watch executions may fail when they go to update the watch. Watches executing from the scheduler will fail fast if the watch they are supposed to execute has been removed.
Also move the history store updates outside of the watch locks.

Fixes: elastic/elasticsearch#405

Original commit: elastic/x-pack-elasticsearch@57561b6f85
2015-05-08 19:07:10 -04:00
uboness 87d4f67b10 Changed the `body` settings of the email
moved from `text_body` and `html_body` to a more structured `body` object as follows:

```
{
  "body" : {
    "text" : "the text body",
    "html" : "the html body"
  }
}
```
`body` can also accpet a string, in which case it will default to the text body of the email:

```
{
  "body" : "the text body of the email"
}
```
the above is a syntactic sugar for the following:

```
{
  "body" : {
    "text" : "the text body of the email"
  }
}
```

Original commit: elastic/x-pack-elasticsearch@92406ac2a1
2015-05-08 19:12:06 +02:00
Brian Murphy 45f39ca2a2 [REST-TEST] forgot to add this file.
Original commit: elastic/x-pack-elasticsearch@23de354192
2015-05-08 11:14:22 -04:00
Brian Murphy 4c939a7c3d Hijack the DELETE .watches index delete endpoint.
This change disables the DELETE .watches index endpoint.

Fixes: elastic/elasticsearch#439

Original commit: elastic/x-pack-elasticsearch@2e66cd55fa
2015-05-08 10:39:06 -04:00
Brian Murphy 8bc238e10a [REST-TEST] Use catch: missing instead of ignore: 404
Some of the non java clients don't return the body on an ignore: 404 so we must use catch missing instead.

Original commit: elastic/x-pack-elasticsearch@a10582691c
2015-05-08 10:11:43 -04:00
uboness 3289ee9029 Changed `attach_data` in emails to be more flexible
Bye default, when `attach_data` is set to `true` we attache the watch execution data as a `yaml` file. Now it's possible to configure the format of the file by setting the `attach_data` to an object with a `format` field (can either be set to `yaml` or `json`). Example:

```
"attach_data" : {
  "format" : "json"
}
```

Original commit: elastic/x-pack-elasticsearch@5cab59a676
2015-05-08 14:37:38 +02:00
Martijn van Groningen 97413eba38 test: also have trace logging for the other tests
Original commit: elastic/x-pack-elasticsearch@84584cd158
2015-05-08 12:19:30 +02:00
Martijn van Groningen 46838d3477 test: Don't run check index on shard close.
Original commit: elastic/x-pack-elasticsearch@38404e8994
2015-05-08 11:43:54 +02:00
uboness a06303a894 Change Script & Template configuration
Scripts and Templates are very much alike. There are only two main differences between them when it comes to watcher:

1. The template doesn't have a language type - it's always mustache.
2. Templates are often used to render xcontent (json/yaml). So there's build in support for  content type in it

Traditionally, in es core, the configuration of the scripts and templates was always a bit of a mess. There was no consistency between the two and when it comes to the templates configuration, they're even not future proof (future additions to the search requests body can break the templates).

After a long discussion, we've decided that we need to change the way users configure templates & scripts in es core... and align the two. These changes will only come in es 2.0. That said, it's important that watcher will be aligned with es core in how templates and scripts are configured and therefore we need to change it for that purpose.

Watcher will come with support for the scripts & templates configuration format of es 2.0. We want to future proof the configuration from day one.

here are the configuration:

Inline:

```
{
  "inline" : "script here",
  "lang" : "lang here",
  "params" : { parameters here }
}
```

File:

```
{
  "file" : "file name here",
  "lang" : "language here",
  "params" : { parameters here }
}
```

Indexed:

```
{
  "id" : "template id here",
  "lang" : "language here",
  "params" : { parameters here }
}
```

For templates it's the same configuration except there is no `lang` field. Also, for templates, there's native support for xcontent:

```
{
  "inline" : { "key" : "{{param1}}" },
  "params" : { "param1" : "value1" }
  }
}
```

Original commit: elastic/x-pack-elasticsearch@4a31114f35
2015-05-08 09:27:18 +02:00
uboness ddb5efeb25 Throw appropriate error when input is empty
When the watch `input` is an empty object, we need to throw an appropriate error indicating the problem (instead of the NPE that is currently thrown)

Closes elastic/elasticsearch#427

Original commit: elastic/x-pack-elasticsearch@c8b27e6653
2015-05-08 03:28:22 +02:00
Brian Murphy f78bc8dcb2 Add DateMath support to ScheduledTriggerEvent
This change changes how the ScheduledTriggerEvent is parsed to parse using DateMath instead of just as a date. This will allow the execute API to use such constructs as
```
POST _watcher/watch/test_watch/_execute
{
  "ignore_throttle" : true,
  "trigger_event" : {
    "schedule" : {
        "triggered_time": "now-5h",
        "scheduled_time": "now"
    }
  }
}
```

Fixes: elastic/elasticsearch#374

Original commit: elastic/x-pack-elasticsearch@fa286b217e
2015-05-07 19:23:33 -04:00
Brian Murphy 6f2429afb4 [REST-TEST] Add master_timeout to the rest API specs
This change adds the parameter `master_timeout` to the rest requests that can write to a watch PUT, ACK and DELETE.
Also add support in the rest tests to verify that this is accepted.

Fixes: elastic/elasticsearch#416

Original commit: elastic/x-pack-elasticsearch@4cc1c50f2c
2015-05-07 19:19:49 -04:00
Brian Murphy 2e787fff2b Throw an WatcherSettingsException when parsing an invalid hourly schedule.
```
   "schedule" : {
       "hourly" :  [0]
}
```
Was throwing an NPE now it gives a WatcherSettingsException.

Fixes: elastic/elasticsearch#419

Original commit: elastic/x-pack-elasticsearch@f334712f96
2015-05-07 17:23:27 -04:00
Brian Murphy f5c50c44de Fix NPE in Rest Layer when GET missing watch.
The REST GET API was trying to render a	null watch on GET which	was causing an NPE. Don't render the watch if it's not found and add a test for this case.

Fixes: elastic/elasticsearch#202

Original commit: elastic/x-pack-elasticsearch@0c8afa63ba
2015-05-07 17:12:57 -04:00
Martijn van Groningen a90d5a581e fix wrong parse field
Original commit: elastic/x-pack-elasticsearch@d017fb3e63
2015-05-07 16:50:52 +02:00
Martijn van Groningen f198b1bbae Use parse field instead of a plain string
Original commit: elastic/x-pack-elasticsearch@4c58dbdbb1
2015-05-07 16:46:10 +02:00
Martijn van Groningen 16910bb7d8 removed unused method
Original commit: elastic/x-pack-elasticsearch@8b5568c4e8
2015-05-07 16:45:37 +02:00
Clinton Gormley f5fe774340 Merge pull request elastic/elasticsearch#412 from clintongormley/real_bulk_body
REST tests: Add a real bulk body to the hijack tests

Original commit: elastic/x-pack-elasticsearch@b17e49a3d5
2015-05-07 16:41:10 +02:00
Clinton Gormley 00efe8593e REST tests: Add a real bulk body to the hijack tests
The Java REST runner expects a real body for the bulk API, rather than
an empty array

Original commit: elastic/x-pack-elasticsearch@86dc149ff7
2015-05-07 16:36:55 +02:00
Clinton Gormley d76df0d590 Merge pull request elastic/elasticsearch#411 from clintongormley/wait_for_green
REST tests: Wait for yellow, not green

Original commit: elastic/x-pack-elasticsearch@296b312e17
2015-05-07 16:07:08 +02:00
Clinton Gormley 2aab635792 Merge pull request elastic/elasticsearch#409 from clintongormley/bulk_format
REST tests: Bulk API expects an array not a hash

Original commit: elastic/x-pack-elasticsearch@82e39629fa
2015-05-07 16:06:32 +02:00
Brian Murphy 9bf00d80ba [TEST] Make hijack test description more descriptive.
This change renames the hijack test name from "Test Hijack api" to "Test Hijack and Block Direct Access to Internal Indices".

Original commit: elastic/x-pack-elasticsearch@118ac18132
2015-05-07 10:05:08 -04:00