[[release-notes]]
== Release Notes

[float]
[[version-compatibility]]
=== Version Compatibility

Watcher {version} is compatible with:

* Elasticsearch: {version}
* License {version}
* Shield {version}

[float]
[[upgrade-instructions]]
=== Upgrading Watcher

Watcher {version} is backward compatible with Watcher 1.0.x. Follow these steps to
upgrade:

1. Back up all of the watches you've defined. You can search/scan the `.watches` index and save the
   returned watches aside.

2. Stop Elasticsearch on all nodes in your cluster.

3. Uninstall the Watcher plugin from each node:
+
[source,yaml]
--------------------------------------------------
bin/plugin remove watcher
--------------------------------------------------

4. From here on you can simply follow the <<getting-started, Getting Started>> guide.

[float]
[[change-list]]
=== Change List

[float]
==== 2.0.0

.Bug fixes
* Fixed an issue where the scheduler may get stuck during Watcher startup. This caused no watches to ever fire.

[float]
==== 2.0.0-rc1

.Breaking
* The dynamic index names support has been removed and Elasticsearch's date math index names support should be used instead.
  The only difference between Watcher's dynamic index names support and Elasticsearch's date math index names support is
  how timezones are expressed. In Watcher this is done via node settings, in Elasticsearch the timezone is part of the
  date math index names support. Only if you're using dynamic index names with timezones in Watcher then you need to
  upgrade your watches after the upgrade, otherwise your watches will work as they did before the upgrade. For example if
  `watcher.dynamic_indices.time_zone` setting was set to `+01:00` and a watch has the following index name `<logstash-{now/d}>`
  then after the upgrade you need to update this watch to use the following index name `<logstash-{now/d{YYYY.MM.dd|+01:00}}>`.

.Enhancements
* If `action.auto_create_index` setting has been configured then Watcher will check if the setting is too restrictive.
  If the `action.auto_create_index` is too restrictive then Watcher will fail during startup with a descriptive error message.

.Bug Fixes
* Fixed url encoding issue in http input and webhook output. The url params were url encoded twice.

[float]
==== 2.0.0-beta2

.New Features
* Added new <<actions-hipchat, HipChat Action>>
* Added new <<actions-slack, Slack Action>>
* Watches now have an <<watch-active-state, active state>>. In addition, a new API was added to
  <<api-rest-activate-watch, activate>>/<<api-rest-deactivate-watch, deactivate>> registered watches.
* Added new <<condition-array-compare, array-compare>>, that can compare an array of values in the
  <<watch-execution-context, Watch Execution Context Model>> to a given value.

.Bug Fixes
* If Watcher was installed with Shield then the Watcher index templates couldn't be stored and could lead
  to Watcher behaving incorrectly. This was caused by Watcher not detecting correctly if Shield was installed.
* Update `croneval` command line utility to properly handle whitespaces in the elasticsearch home path.

[float]
==== 2.0.0-beta1

This release is primarily for compatibility with Elasticsearch 2.0.0-beta1 and the Watcher versioning has
been aligned with the Elasticsearch versioning.

.Enhancements
* Watcher continuously checks if the index templates for `.watches`, `.triggered_watches`
  and `.watch_history-*` exist. Whereas before the existence of these index templates was
  only checked at Watcher startup time. The absence of these index templates leads to
  watcher data being indexed incorrectly, which then can cause Watcher to behave incorrectly.
* If Watcher was stopped via the stop Watcher api and after that a master election took place
  then Watcher would then unexpectedly start.
* During Watcher start up only wait for the shards of the `.watches` and `.triggered_watches`
  indices to be available. Before Watcher also waited for the shards of the `.watch_history-*`
  indices, which wasn't needed. This improved time it takes for Watcher to startup.

[float]
==== 1.0.0

.Enhancements
* Added execution time aware dynamic index names support to `index`
  action, `search` input, and `search` transform.
* You must now explicitly specify the unit when configuring any time value. (Numeric-only
  values are no longer supported.)
* Cleaned up the <<api-rest-get-watch, Get Watch API>> response.
* Cleaned up the <<api-rest-stats, Stats API>> response.


[float]
==== 1.0.0-rc1

.New Features
* Added <<api-rest-execute-inline-watch, inline watch>> support to the Execute API

.Enhancements
* Added execution context <<watch-execution-context, variables>> support.
* Email html body sanitization is now <<email-html-sanitization, configurable>>.
* It is now possible to configure timeouts for http requests in 
  <<http-input-attributes, HTTP input>> and <<webhook-action-attributes, webhook actions>>.

[float]
==== 1.0.0-Beta2

.New Features
* <<actions-ack-throttle, Acking and Throttling>> are now applied at the action level rather than
  the watch level.
* Added support for <<anatomy-actions-index-multi-doc-support, multi-doc>> indexing to the index
  action.
* Added a queued watches metric that's accessible via the <<api-rest-stats, Stats API>>.
* Added a currently-executing watches metric that's accessible via the <<api-rest-stats, Stats API>>.

.Enhancements
* The <<condition-compare, compare condition>> result now includes the value of each field that
  was referenced in the comparison.
* The <<api-rest-execute-watch, Execute API>> now supports a default trigger event
  (**breaking change**)
* The `watch_record` document structure in the `.watch_history-*` indices has changed significantly
  (**breaking change**)
* A new internal index was introduced - `.triggered_watches`
* Added support for headers in the <<actions-webhook, Webhook Action>> result and the
  <<input-http, HTTP Input>> result.
* Add plain text response body support for the <<input-http, HTTP Input>>.

.Bug Fixes
* Disallow negative time value settings for <<actions-ack-throttle, `throttle_period`>>
* Added support for separate keystore and truststore in <<actions-webhook, Webhook Action>>
  and <<input-http, HTTP Input>>.
