Commit Graph

3538 Commits

Author SHA1 Message Date
uboness 46f6572756 [transform] added a new script transform
Enables manipulating existing payload and building a new payload based on a script

Original commit: elastic/x-pack-elasticsearch@912dafe709
2015-02-25 17:22:24 +02:00
uboness 7ab8271692 [test] introduced AlertsSingleNodeTests
- changed SearchTransformTests to extend it

Original commit: elastic/x-pack-elasticsearch@19d1d32d1a
2015-02-25 15:36:35 +02:00
uboness 3aa988472c [transform] fixed and added unit tests for SearchTransform
- Also, the search template/script are not populated not just by the fired/scheduled time, but also by the payload

Original commit: elastic/x-pack-elasticsearch@7ca8331a1c
2015-02-25 14:52:19 +02:00
jaymode 121a20ca87 [test] add lucene expressions jar as test dependency
REST tests that use expressions as the script language requires the
lucene-expressions library to be loaded.

Original commit: elastic/x-pack-elasticsearch@c0f2b8a4b2
2015-02-24 15:23:55 -05:00
Brian Murphy 46cefe261a Now input is separate from condition and condition just contains the decision logic.
```
    "input": {
        "search": {
            "request": {
                "body": {
                    "query": {
                        "match_all": {}
                    }
                }
            }
        }
    },
    "condition": {
        "script": {
            "script": "return true"
        }
    },
```
The result of this in the `alert_execution` looks like :
```
        "input_result": {
            "search": {
                "payload": {
                    "hits": {
                        "total": 1,
                        "hits": [
                            {
                                "_type": "my-type",
                                "_source": {
                                    "field": "value"
                                },
                                "_id": "AUujS61M4FTW2U3Ztz5U",
                                "_index": "my-index",
                                "_score": 0.30685282
                            }
                        ],
                        "max_score": 0.30685282
                    },
                    "_shards": {
                        "total": 5,
                        "failed": 0,
                        "successful": 5
                    },
                    "timed_out": false,
                    "took": 1823
                },
                "request": {
                    "body": {
                        "query": {
                            "match_all": {}
                        }
                   }
                }
            }
      }
      "condition_result": {
        "script": {
            "met": true
        }
      }
```
There are two Inputs currently the `SearchInput` as shown above and a `SimpleInput` that just contains a payload that will be returned in the result.
There are three conditions, the `ScriptCondition` as shown above and an `AlwaysTrueCondition` and AlwaysFalseCondition` condition.

Original commit: elastic/x-pack-elasticsearch@0d8ac24c5a
2015-02-24 12:05:30 -05:00
uboness fa02c150b4 [throttler] added unit tests for all throttlers
Original commit: elastic/x-pack-elasticsearch@3014d2b723
2015-02-24 14:45:02 +02:00
uboness 6fdd6d49e2 [throttler] changed the Throttler interface
Removed the passed in `Condition.Result` from the `apply` method

Original commit: elastic/x-pack-elasticsearch@23101b028d
2015-02-24 14:45:02 +02:00
jaymode 021000e4d8 [ldap] move bind user settings out of the user_search settings
The bind user can be used for other operations in the future, so it is being moved
out of the user_search settings into the top level ldap realm settings.

Closes elastic/elasticsearch#729

Original commit: elastic/x-pack-elasticsearch@babc5ece0b
2015-02-24 06:10:42 -05:00
jaymode 7336509acc [ldap] allow mapping users to roles
This change will always attempt to map a user's distinguished name
to a role in addition to the user's groups.

Closes elastic/elasticsearch#324

Original commit: elastic/x-pack-elasticsearch@9ebcdd549c
2015-02-24 05:53:59 -05:00
uboness b292051a13 [email] fixed bugs and added unit tests
Original commit: elastic/x-pack-elasticsearch@3b5406d4c8
2015-02-24 12:27:13 +02:00
Martijn van Groningen d916f99800 The lock used during executing a fired alert should also encapsulate the updating of the fired alert.
During stopping alerts we wait until all ongoing operations are completed, such as adding, deleting alerts and executing fired alerts.
For fired alerts we should also let the update of fired alert happen under a lock. We could miss an ongoing operation if we would shutdown.

This can be a reason why BasicAlertingTest.testDeleteAlert failed: https://build.elasticsearch.com/job/es_alerting/187/testReport/junit/org.elasticsearch.alerts/BasicAlertingTest/testDeleteAlert/

Original commit: elastic/x-pack-elasticsearch@732b213cf2
2015-02-23 23:24:28 +01:00
Martijn van Groningen a3825aa242 Cleanup: removed unused method.
Original commit: elastic/x-pack-elasticsearch@5dd9126d71
2015-02-23 15:29:36 +01:00
jaymode c2a61d2207 [ldap] add user search with base dn and bind dn
This adds a second mode of operation to the ldap realm. This mode of operation
allows for single bind user to be specified. This bind user will be used to
search for user DNs starting from a base DN. The user DN will then be used to
authenticate via a bind operation. The bind user will then search for the user's
groups.

Closes elastic/elasticsearch#552
Closes elastic/elasticsearch#323

Original commit: elastic/x-pack-elasticsearch@3338730a64
2015-02-23 08:52:38 -05:00
uboness 6a5c86e46c Added a SchedulerMock to be used for unit tests
Original commit: elastic/x-pack-elasticsearch@d4dfb37431
2015-02-23 15:44:15 +02:00
uboness 8dffa5afd1 Enabled tests @Slow annotation
Original commit: elastic/x-pack-elasticsearch@4cabffcdf4
2015-02-23 15:44:15 +02:00
uboness 89b7d085e1 [scheduler] cleaned up and extended scheduler support
- Added additional user friendly schedules
 - `hourly` - a simple to configure schedule that will fire every hour on one or more specific minutes in the hour
 - `daily` - a simple to configure schedule that will fire every day on one or more specific times in the day
 - `weekly` - a simple to configure schedule that will fire every week on one or more specific days + times in the week
 - `monthly` - a simple to configure schedule that will fire every month on one or more specific days + times in the month
 - `yearly` - a simple to configure schedule that will fire every year on one or more specific months + days + times in the year
 - `interval` - a simple interval based schedule that will fire every fixed configurable interval (supported units are: seconds, minutes, hours, days and weeks)

- Added unit tests to all the schedules and the schedule registry
- Introduced `Scheduler` as an interface and `InternalScheduler` for the quartz implementation. This will help unit testing other dependent services
- `Scheduler` is now independent of `Alert`. It works with `Job` constructs (`Alert` now implements a `Job`).
- Introduced `SchedulerMock` as a simple `Scheduler` implementation that can be used for unit tests - enables manual triggering of jobs.

- introduced `@Slow` test annotation support in the `pom.xml`

Original commit: elastic/x-pack-elasticsearch@94a8f5ddea
2015-02-23 15:44:14 +02:00
Martijn van Groningen 59f0883721 Cleanup: Removed config service infrastructure
Original commit: elastic/x-pack-elasticsearch@3f99c357c8
2015-02-23 14:36:17 +01:00
uboness 2136210711 [template] formalized the template definition
- Introduced `Template` & `Template.Parser` interfaces
- There main template implementation is the `ScriptTemplate` and its parser is bound to `Template.Parser`
- There are also xContent templates - YAML & JSON that just render the model as xContent. (used as a fallback in webhook action)
- updated all actions to use the new template infrastructure

Also

- introduced mockito for unit testing
- removed `WebhookTest` as it was effectively testing the template functionality... we'll add a proper test for teh webhook action in a later commit

Original commit: elastic/x-pack-elasticsearch@34a90e8c2f
2015-02-23 12:30:31 +01:00
uboness 48bf4e8a8b Update README.asciidoc
Original commit: elastic/x-pack-elasticsearch@ec5c9c23ad
2015-02-21 13:03:13 +01:00
jaymode d108faede3 [Test] AwaitsFix for tcp timeout tests. See elastic/elasticsearch#499
Original commit: elastic/x-pack-elasticsearch@31b79d51ac
2015-02-18 20:02:59 -05:00
jaymode cac922974d [Test] add a ldap search to the tcp timeout tests
If tests are run on the same machine as the ldap server a bind may be
succesfull. This adds a search to the test which should take longer than
1 millisecond for the server to respond.

Original commit: elastic/x-pack-elasticsearch@f37fb912e8
2015-02-18 18:20:59 -05:00
Martijn van Groningen c0c5b3cf6b Test: just create json based alerts
Original commit: elastic/x-pack-elasticsearch@6aa88ac5a1
2015-02-18 20:50:44 +01:00
Martijn van Groningen b4a465496a Test: increased logging
Original commit: elastic/x-pack-elasticsearch@8f95a60683
2015-02-18 20:11:51 +01:00
jaymode 52a2dd4acf [SSL/TLS] reduce logging when non https traffic is received on ssl channel
This removes the logging of an exception at the default log level when a incoming request in
the http transport is unencrypted and the http transport expects traffic to be encrypted.

Closes elastic/elasticsearch#561

Original commit: elastic/x-pack-elasticsearch@0cf23e8e9d
2015-02-18 10:27:20 -05:00
jaymode 4de8d04f9f [ldap] Migrate to using UnboundID SDK for LDAP
This migrates all of the LDAP code off of JNDI and makes use of the UnboundID
SDK to perform LDAP communication. As much as possible the behavior has
remained consistent. The minimum ldap search timeout is now 1s as UnboundID
only accepts this timeout in seconds; previously a value in milliseconds could be
specified.

Closes elastic/elasticsearch#694

Original commit: elastic/x-pack-elasticsearch@dd1c92bf91
2015-02-18 07:38:47 -05:00
uboness aa529f1c3b update core constructs definition
Original commit: elastic/x-pack-elasticsearch@d550e0abd1
2015-02-17 22:35:00 +01:00
Martijn van Groningen 69bbea6985 Changed the initialization retry logic of the AlertService to be event based instead of blocking (actively polling for a new cluster state).
This avoids that a single thread will be busy during the time that not all primary shards of the alerts and alert history indices are started.

Also the execution of alert history items that were loaded during initialization will be executed once the AlertService goes into started state, before this was executed once the AlertActionService has started, which could load to failures, because there was a small window of time where the alert manager wasn't started. Executing alert history items with the state search_needed requires the alert manager to be started and that isn't yet the case when the AlertActionService has started.

Closes elastic/elasticsearch#75
Closes elastic/elasticsearch#76

Original commit: elastic/x-pack-elasticsearch@a799bc34e3
2015-02-17 19:35:18 +01:00
uboness 54923420d9 [cleanup] - added forbidden apis mvn plugin
- fixed the use of the found forbidden APIs
- changed `FiredAlert.State` values to lower case (for consistency sake)

Original commit: elastic/x-pack-elasticsearch@9b3f8383d9
2015-02-17 16:31:18 +01:00
Alexander Reelsen 17e16e2c53 Testing: Try to rebind in case of BindException
Original commit: elastic/x-pack-elasticsearch@e68e156a54
2015-02-17 15:36:07 +01:00
Alexander Reelsen 3f9f0fcadb Testing: Properly terminate thread pools
Original commit: elastic/x-pack-elasticsearch@a16cbed365
2015-02-17 15:21:28 +01:00
uboness 37d9fd062e Replacing "trigger" with "condition"
- renamed "trigger" notion to "condition"

- the main parts that make an alert are:
 - **schedule** - determines when/how often should the alert be checked
 - **condition** - determines whether the alert should execute
 - **actions** - define what the alert should do

- the lifecycle terminology of a fired alert changed as well, to the following
 - **fired** - the schedule fired an event indicating the alert should be **checked**
 - **checked** - the condition associated with the alert was checked - either it was met (indicating the the alert should be executed) or it wasn't (indicating the alert should not be executed)
 - **throttled** - although the condition was met, the system decided **not** to execute the alert after all based on the throttling logic
 - **executed** - the condition of the alert was met, and the system decided it should not throttle it, thefore the actions of the alert were executed.

- `FiredAlert.State` changed to reflect the new lifecycle (as described above)

Original commit: elastic/x-pack-elasticsearch@d67d13d982
2015-02-17 14:51:38 +01:00
uboness 61761286e0 Refactoring
- moved alert execution logic to the history service (the history service now listener to schedule events)
- introduced `AlertLockService` - used by both alerts service and history service to lock alerts across services
- the history service is now responsible for executing the previous "not yet executed" fired alerts.
- renamed `AlertContext` to `ExecutionContext`
- renamed `AlertRun` to `AlertExecution`
- improved actions result parsing logic (`success` field is mandatory)
- renamed the alert history type to `fired_alert` (used to be `alerthistory`)
- renamed fired alert `error_msg` to just `message`.

Original commit: elastic/x-pack-elasticsearch@09f26ce3cf
2015-02-17 12:14:00 +01:00
Brian Murphy 8b83d74994 Fix DateTime issues
We were using DateTime without a timezone to pick the history index to write the alert runs to.
This caused tests to fail because we use UTC internally (as we should)

Original commit: elastic/x-pack-elasticsearch@6d6f57fb9e
2015-02-13 17:07:46 -08:00
Brian Murphy ba15a197ea Make all tests pass
This change fixes the compilation errors in
`EmailTemplateTest` `WebhookTest` `AlertActionsTest` `AbstractAlertingTests` and `ActionHistoryIndexNameTest`.
Fix alert parsing.
Don't attempt to emit a null body template.
Add inject to parser construction.
Fix Alert serialization.
Fix json template to work with the NWO.
Fix ToXContent of Actions.
Add equals methods to Actions and Schedule to facilitate testing.
Changes after rebase to take new EmailAction into account.
Fix `AlertSerializationTest`
Many serialization fixes.
Fix alerthistory template
This change brings the alert history index template uptodate with the code.
Fix createAlertSource
This change brings createAlertSource uptodate with the NWO
Fix Webhook test
Change default template in webhook action to use the simple constructor.
Shutdown the thread pool in the `EmailActionTest`
Don't try to throttle if this alert has never run before.
Add serialization to AlertRun and fix serialization for FiredAlert
This change also makes all trigger and action results serializable and de-serializable.
Parsers now implement parseResult() and the registries for actions and triggers also have matching calls.
Add alert_run to alert history JSON.
Fix logging in index action.
Fix Ack serialization.
Change payload of index action ... IndexResponse isn't serializing properly.
Fix success of index action.
Fix TimeThrottler to use lastExecutedTime instead of lastRunTime.
Fix ThrottleTest
We don't need to assert busy here. The sleeps should be enough. If they aren't something is wrong.
Horrible hack to get around thread pool issues.
Fix Bootstrap test
Also always request version when loading alert history
Fix bootstrap test and set the correct cron into the future.

Original commit: elastic/x-pack-elasticsearch@d3a6c8c3aa
2015-02-13 15:15:36 -08:00
Martijn van Groningen 6392007c72 - Made the threadpools fixed and the size based on the number of processors in a node.
- Removed the the queue reading in the HistoryService.
- Let the HistoryService use the alerts threadpool directly for executing fired alerts, which will use the internal queueing of ThreadPool is all threads are busy.
- Moved the alert thread pool startup to the start of the history service.
- Enforce versioning check if fired alerts are updated.

Closes elastic/elasticsearch#101

Original commit: elastic/x-pack-elasticsearch@39b0de7112
2015-02-13 18:17:40 +01:00
uboness a4a88c1a82 Updated ShieldVersion with version 1.0.1
Original commit: elastic/x-pack-elasticsearch@eea021633f
2015-02-12 17:54:47 -08:00
uboness d29cbe4ef7 Added NOTICE.txt
Original commit: elastic/x-pack-elasticsearch@aad60b86a8
2015-02-12 17:25:22 -08:00
jaymode 59fbf4d5f2 add the automaton library to the plugin zip
Original commit: elastic/x-pack-elasticsearch@6ceff1fc0f
2015-02-12 13:44:11 -08:00
jaymode af409e2ff8 [authz] fix Indices.Globals iterator to continue past a global without indices
If a Global permission is encountered that has no indices the iterator would not continue
to the rest of the entries. This change fixes the iterator to check if a Global has indices and
if not continues to look for a Global with indices permissions.

Closes elastic/elasticsearch#701

Original commit: elastic/x-pack-elasticsearch@5fbe318046
2015-02-12 12:58:22 -08:00
jaymode 6a8d971df1 [ldap] group search base_dn should not be null
JNDI will throw a NullPointerException when base_dn is not specified.
This should always be a non-null value that points to at least the base
of the directory or higher.

Closes elastic/elasticsearch#703

Original commit: elastic/x-pack-elasticsearch@825afcdd78
2015-02-12 12:36:41 -08:00
Robert Muir e7f141bd5c use brics automaton instead of lucene, so we don't depend on lucene
Closes elastic/elasticsearch#710

Original commit: elastic/x-pack-elasticsearch@71ca4e6241
2015-02-12 15:24:42 -05:00
uboness 70b5d36098 Enhanced email action
- Introducing the notion of email account (i.e. smtp account). It is now possible to configure multiple email accounts (in node settings) via which the emails will be sent. The email alert action can be configured with an account name, to indicate which account should be used, if no account is configured, the email will be sent with the _default account_. The default account can also be configured using the `default_account` node setting.
- `InternalEmailService` maintains the email sessions and responsible for sending emails.
- the account settings are dynamic (configurable at runtime)
- `Email` class was introduces to abstract away the email structure (`javax.mail`'s `Message` is not the most intuitive construct to deal with. `Email` enables setting both `text` and `html` content and also support normal and inlined attachments.
- "profiles" were added to support different email message formats. Unfortunately the different email systems don't fully comply to the standards and each has their own way of structuring the mime message (especially when it comes to attachments). The `Profile` enum abstracts this by letting the user define what email system structure it wants to support. we define 4 profiles - `GMAIL`, `MAC`, `OUTLOOK` and `STANDARD`. `STANDARD` is the official way of structuring the mime message according to the different RFC standard (it also serves as the default profile).
- The `EmailAction` only task is to create an `Email` based on the action settings and the payload, and send it via the `EmailService`.

Original commit: elastic/x-pack-elasticsearch@2b893c8127
2015-02-10 18:19:11 -08:00
uboness ec42ec8fdc introduced AlertContext
Represents the context of an alert run. It's passed as an argument to all the different constructs that execute during an alert run - trigger, throttler, transform and action. This will provide each execution phase access to to all the results of the previous phase. It also holds the current payload in the execution.

Action results representing failures now hold the `reason` for the failure. This will provide insight on failed action execution as these messages will end up in the fired alert history.

Original commit: elastic/x-pack-elasticsearch@6846a49247
2015-02-09 20:41:42 +01:00
uboness 157c7b6fd6 Introduced the `payload` and `transform` constructs
A payload represents a the payload the is originally created by the trigger and passed all the way down to the executing actions. The action may use this payload during their execution, for example, the email action may use this payload as the model behind the email templats.

A transform represents a transformation of a payload. In its core, it accepts a payload applies a transformation to it and outputs the outcome of the transformation as a payload. This simple design makes transforms chainable, meaning, a list of transformations can be applied in a well defined order to a payload.

The transform is applied on the payload initially generated by the trigger. The output of the transformation will be provided to the actions as a payload when they're executed.

Currently we only have two transform types - `noop` and `search`. The former is a transform construct that doesn't actually do any transformation, but instead outputs the same payload it's applied on. The latter (`search`) perform a search on elasticsearch and uses the output of the search (the search response) as the payload it outputs.

Original commit: elastic/x-pack-elasticsearch@6d40337635
2015-02-07 01:25:47 +01:00
uboness 241444437f Refactored `Alert` and `Alert.Status`
- all alerts are now ackable (there's no way to define an "unackable" alert)
 - `Alert.Status` now holds an `ack` that represents the ack status
 - `Alert.Status` now holds a `lastThrottle` that represents the state of the last throttle (will be `null` if not throttled yet)
 - changed the `Alert.Status.Ack.State` to hold more intuitive values - `awaits_execution`, `ackable` and `acked`
 - `Alert.Status` is now streamble
 - introduced additional info method on `Alert.Status` (e.g. `executed()`, `triggered()`, `ran()`)

Original commit: elastic/x-pack-elasticsearch@3eda1c211a
2015-02-06 18:33:11 +01:00
Brian Murphy 0470fdf6af Add EmailSettingsService to hold global email settings.
This change adds a service to hold the dynamically updateable email settings.
Added logging and made inner settings holding class static.

Original commit: elastic/x-pack-elasticsearch@e1690fa292
2015-02-06 11:08:28 -05:00
Brian Murphy da1f446b49 Add HttpClient to encapsulate HttpRequest from `WebhookAction`
Create a `HttpClient` in alerts.support to handle http requests.
`HttpClient` is an injectable AbstractComponent.

Original commit: elastic/x-pack-elasticsearch@8e70962ddf
2015-02-06 11:02:24 -05:00
Martijn van Groningen f261d8aeaf Componentized the history service and alert record parser.
Renamed AlertRecord to FiredAlert
Refactored the persistence part of FiredAlert out of HistoryService to HistoryStore.
Moved AlertActionState to FiredAlert.State

Original commit: elastic/x-pack-elasticsearch@595c733cfc
2015-02-06 08:23:27 +01:00
Brian Murphy 31a3907bed Use `ParseField` when parsing actions
Use parse fields when parsing and building XContent in Actions.

Original commit: elastic/x-pack-elasticsearch@db48702b76
2015-02-05 16:57:30 -05:00
Brian Murphy 3147927e20 Refactor actions to match trigger refactoring.
This change refactors the old AlertActions code into Actions to mirror the triggers code.
This work also includes the configuration changes and webhook changes from master.
TemplateUtils has been renamed to StringTemplateUtils. References to the old AlertActions code have been removed and updated
to reference the new code.
Action.Result now implements ToXContent
This allows the FiredAlerts to track the history of the actions.

Original commit: elastic/x-pack-elasticsearch@a3d5d3bd4d
2015-02-05 16:42:45 -05:00