Files
opensearch-pyd/elasticsearch/client/ml.py
T

1505 lines
57 KiB
Python
Raw Normal View History

2020-04-23 11:22:08 -05:00
# Licensed to Elasticsearch B.V under one or more agreements.
# Elasticsearch B.V licenses this file to you under the Apache 2.0 License.
# See the LICENSE file in the project root for more information
2020-01-19 00:01:36 +00:00
from .utils import NamespacedClient, query_params, _make_path, SKIP_IN_PATH, _bulk_body
2018-03-20 12:36:13 -06:00
2019-03-29 09:25:23 -06:00
2018-03-20 12:36:13 -06:00
class MlClient(NamespacedClient):
2019-03-29 09:25:23 -06:00
@query_params("allow_no_jobs", "force", "timeout")
2020-03-11 16:33:15 -05:00
def close_job(self, job_id, body=None, params=None, headers=None):
2018-03-20 12:36:13 -06:00
"""
2020-04-03 12:52:11 -05:00
Closes one or more anomaly detection jobs. A job can be opened and closed
multiple times throughout its lifecycle.
2020-04-23 11:22:08 -05:00
`<https://www.elastic.co/guide/en/elasticsearch/reference/7.x/ml-close-job.html>`_
2018-03-20 12:36:13 -06:00
2019-03-29 09:25:23 -06:00
:arg job_id: The name of the job to close
:arg body: The URL params optionally sent in the body
2019-12-17 22:31:35 +01:00
:arg allow_no_jobs: Whether to ignore if a wildcard expression
matches no jobs. (This includes `_all` string or when no jobs have been
2019-03-29 09:25:23 -06:00
specified)
:arg force: True if the job should be forcefully closed
2019-12-17 22:31:35 +01:00
:arg timeout: Controls the time to wait until a job has closed.
Default to 30 minutes
2018-03-20 12:36:13 -06:00
"""
if job_id in SKIP_IN_PATH:
raise ValueError("Empty value passed for a required argument 'job_id'.")
2019-12-17 22:31:35 +01:00
2019-03-29 09:25:23 -06:00
return self.transport.perform_request(
"POST",
_make_path("_ml", "anomaly_detectors", job_id, "_close"),
params=params,
2020-03-11 16:33:15 -05:00
headers=headers,
2019-03-29 09:25:23 -06:00
body=body,
)
2018-03-20 12:36:13 -06:00
@query_params()
2020-03-11 16:33:15 -05:00
def delete_calendar(self, calendar_id, params=None, headers=None):
2018-03-20 12:36:13 -06:00
"""
2020-04-03 12:52:11 -05:00
Deletes a calendar.
2020-04-23 11:22:08 -05:00
`<https://www.elastic.co/guide/en/elasticsearch/reference/7.x/ml-delete-calendar.html>`_
2018-03-20 12:36:13 -06:00
2019-03-29 09:25:23 -06:00
:arg calendar_id: The ID of the calendar to delete
2018-03-20 12:36:13 -06:00
"""
2019-03-29 09:25:23 -06:00
if calendar_id in SKIP_IN_PATH:
raise ValueError(
"Empty value passed for a required argument 'calendar_id'."
)
2019-12-17 22:31:35 +01:00
2019-03-29 09:25:23 -06:00
return self.transport.perform_request(
2020-03-11 16:33:15 -05:00
"DELETE",
_make_path("_ml", "calendars", calendar_id),
params=params,
headers=headers,
2019-03-29 09:25:23 -06:00
)
@query_params()
2020-03-11 16:33:15 -05:00
def delete_calendar_event(self, calendar_id, event_id, params=None, headers=None):
2019-03-29 09:25:23 -06:00
"""
2020-04-03 12:52:11 -05:00
Deletes scheduled events from a calendar.
2020-04-23 11:22:08 -05:00
`<https://www.elastic.co/guide/en/elasticsearch/reference/7.x/ml-delete-calendar-event.html>`_
2019-03-29 09:25:23 -06:00
:arg calendar_id: The ID of the calendar to modify
:arg event_id: The ID of the event to remove from the calendar
"""
for param in (calendar_id, event_id):
if param in SKIP_IN_PATH:
raise ValueError("Empty value passed for a required argument.")
2019-12-17 22:31:35 +01:00
2019-03-29 09:25:23 -06:00
return self.transport.perform_request(
"DELETE",
_make_path("_ml", "calendars", calendar_id, "events", event_id),
params=params,
2020-03-11 16:33:15 -05:00
headers=headers,
2019-03-29 09:25:23 -06:00
)
@query_params()
2020-03-11 16:33:15 -05:00
def delete_calendar_job(self, calendar_id, job_id, params=None, headers=None):
2019-03-29 09:25:23 -06:00
"""
2020-04-03 12:52:11 -05:00
Deletes anomaly detection jobs from a calendar.
2020-04-23 11:22:08 -05:00
`<https://www.elastic.co/guide/en/elasticsearch/reference/7.x/ml-delete-calendar-job.html>`_
2019-03-29 09:25:23 -06:00
:arg calendar_id: The ID of the calendar to modify
:arg job_id: The ID of the job to remove from the calendar
"""
for param in (calendar_id, job_id):
if param in SKIP_IN_PATH:
raise ValueError("Empty value passed for a required argument.")
2019-12-17 22:31:35 +01:00
2019-03-29 09:25:23 -06:00
return self.transport.perform_request(
"DELETE",
_make_path("_ml", "calendars", calendar_id, "jobs", job_id),
params=params,
2020-03-11 16:33:15 -05:00
headers=headers,
2019-03-29 09:25:23 -06:00
)
@query_params("force")
2020-03-11 16:33:15 -05:00
def delete_datafeed(self, datafeed_id, params=None, headers=None):
2019-03-29 09:25:23 -06:00
"""
2020-04-03 12:52:11 -05:00
Deletes an existing datafeed.
2020-04-23 11:22:08 -05:00
`<https://www.elastic.co/guide/en/elasticsearch/reference/7.x/ml-delete-datafeed.html>`_
2019-03-29 09:25:23 -06:00
:arg datafeed_id: The ID of the datafeed to delete
:arg force: True if the datafeed should be forcefully deleted
"""
if datafeed_id in SKIP_IN_PATH:
raise ValueError(
"Empty value passed for a required argument 'datafeed_id'."
)
2019-12-17 22:31:35 +01:00
2019-03-29 09:25:23 -06:00
return self.transport.perform_request(
2020-03-11 16:33:15 -05:00
"DELETE",
_make_path("_ml", "datafeeds", datafeed_id),
params=params,
headers=headers,
2019-03-29 09:25:23 -06:00
)
2018-03-20 12:36:13 -06:00
2020-06-23 15:34:31 -05:00
@query_params("requests_per_second", "timeout")
def delete_expired_data(self, body=None, job_id=None, params=None, headers=None):
2018-03-20 12:36:13 -06:00
"""
2020-04-03 12:52:11 -05:00
Deletes expired and unused machine learning data.
2020-04-23 11:22:08 -05:00
`<https://www.elastic.co/guide/en/elasticsearch/reference/7.x/ml-delete-expired-data.html>`_
2020-05-19 12:59:40 -05:00
:arg body: deleting expired data parameters
2020-06-23 15:34:31 -05:00
:arg job_id: The ID of the job(s) to perform expired data
hygiene for
:arg requests_per_second: The desired requests per second for
the deletion processes.
:arg timeout: How long can the underlying delete processes run
until they are canceled
2018-03-20 12:36:13 -06:00
"""
2019-03-29 09:25:23 -06:00
return self.transport.perform_request(
2020-05-19 12:59:40 -05:00
"DELETE",
2020-06-23 15:34:31 -05:00
_make_path("_ml", "_delete_expired_data", job_id),
2020-05-19 12:59:40 -05:00
params=params,
headers=headers,
body=body,
2019-03-29 09:25:23 -06:00
)
2018-03-20 12:36:13 -06:00
@query_params()
2020-03-11 16:33:15 -05:00
def delete_filter(self, filter_id, params=None, headers=None):
2018-03-20 12:36:13 -06:00
"""
2020-04-03 12:52:11 -05:00
Deletes a filter.
2020-04-23 11:22:08 -05:00
`<https://www.elastic.co/guide/en/elasticsearch/reference/7.x/ml-delete-filter.html>`_
2018-03-20 12:36:13 -06:00
2019-03-29 09:25:23 -06:00
:arg filter_id: The ID of the filter to delete
2018-03-20 12:36:13 -06:00
"""
2019-03-29 09:25:23 -06:00
if filter_id in SKIP_IN_PATH:
raise ValueError("Empty value passed for a required argument 'filter_id'.")
2019-12-17 22:31:35 +01:00
2019-03-29 09:25:23 -06:00
return self.transport.perform_request(
2020-03-11 16:33:15 -05:00
"DELETE",
_make_path("_ml", "filters", filter_id),
params=params,
headers=headers,
2019-03-29 09:25:23 -06:00
)
2018-03-20 12:36:13 -06:00
2019-03-29 09:25:23 -06:00
@query_params("allow_no_forecasts", "timeout")
2020-03-11 16:33:15 -05:00
def delete_forecast(self, job_id, forecast_id=None, params=None, headers=None):
2018-03-20 12:36:13 -06:00
"""
2020-04-03 12:52:11 -05:00
Deletes forecasts from a machine learning job.
2020-04-23 11:22:08 -05:00
`<https://www.elastic.co/guide/en/elasticsearch/reference/7.x/ml-delete-forecast.html>`_
2018-03-20 12:36:13 -06:00
2019-03-29 09:25:23 -06:00
:arg job_id: The ID of the job from which to delete forecasts
:arg forecast_id: The ID of the forecast to delete, can be comma
delimited list. Leaving blank implies `_all`
:arg allow_no_forecasts: Whether to ignore if `_all` matches no
forecasts
2019-12-17 22:31:35 +01:00
:arg timeout: Controls the time to wait until the forecast(s)
are deleted. Default to 30 seconds
2018-03-20 12:36:13 -06:00
"""
if job_id in SKIP_IN_PATH:
raise ValueError("Empty value passed for a required argument 'job_id'.")
2019-12-17 22:31:35 +01:00
2019-03-29 09:25:23 -06:00
return self.transport.perform_request(
"DELETE",
_make_path("_ml", "anomaly_detectors", job_id, "_forecast", forecast_id),
params=params,
2020-03-11 16:33:15 -05:00
headers=headers,
2019-03-29 09:25:23 -06:00
)
@query_params("force", "wait_for_completion")
2020-03-11 16:33:15 -05:00
def delete_job(self, job_id, params=None, headers=None):
2019-03-29 09:25:23 -06:00
"""
2020-04-03 12:52:11 -05:00
Deletes an existing anomaly detection job.
2020-04-23 11:22:08 -05:00
`<https://www.elastic.co/guide/en/elasticsearch/reference/7.x/ml-delete-job.html>`_
2019-03-29 09:25:23 -06:00
:arg job_id: The ID of the job to delete
2019-12-17 22:31:35 +01:00
:arg force: True if the job should be forcefully deleted
:arg wait_for_completion: Should this request wait until the
operation has completed before returning Default: True
2019-03-29 09:25:23 -06:00
"""
if job_id in SKIP_IN_PATH:
raise ValueError("Empty value passed for a required argument 'job_id'.")
2019-12-17 22:31:35 +01:00
2019-03-29 09:25:23 -06:00
return self.transport.perform_request(
2020-03-11 16:33:15 -05:00
"DELETE",
_make_path("_ml", "anomaly_detectors", job_id),
params=params,
headers=headers,
2019-03-29 09:25:23 -06:00
)
2018-03-20 12:36:13 -06:00
@query_params()
2020-03-11 16:33:15 -05:00
def delete_model_snapshot(self, job_id, snapshot_id, params=None, headers=None):
2018-03-20 12:36:13 -06:00
"""
2020-04-03 12:52:11 -05:00
Deletes an existing model snapshot.
2020-04-23 11:22:08 -05:00
`<https://www.elastic.co/guide/en/elasticsearch/reference/7.x/ml-delete-snapshot.html>`_
2018-03-20 12:36:13 -06:00
2019-03-29 09:25:23 -06:00
:arg job_id: The ID of the job to fetch
:arg snapshot_id: The ID of the snapshot to delete
2018-03-20 12:36:13 -06:00
"""
2019-03-29 09:25:23 -06:00
for param in (job_id, snapshot_id):
2018-03-20 12:36:13 -06:00
if param in SKIP_IN_PATH:
raise ValueError("Empty value passed for a required argument.")
2019-12-17 22:31:35 +01:00
2019-03-29 09:25:23 -06:00
return self.transport.perform_request(
"DELETE",
_make_path(
"_ml", "anomaly_detectors", job_id, "model_snapshots", snapshot_id
),
params=params,
2020-03-11 16:33:15 -05:00
headers=headers,
2019-03-29 09:25:23 -06:00
)
2018-03-20 12:36:13 -06:00
2019-03-29 09:25:23 -06:00
@query_params(
"charset",
"column_names",
"delimiter",
"explain",
"format",
"grok_pattern",
"has_header_row",
2019-12-17 22:31:35 +01:00
"line_merge_size_limit",
2019-03-29 09:25:23 -06:00
"lines_to_sample",
"quote",
"should_trim_fields",
"timeout",
"timestamp_field",
"timestamp_format",
)
2020-03-11 16:33:15 -05:00
def find_file_structure(self, body, params=None, headers=None):
2018-03-20 12:36:13 -06:00
"""
2020-04-03 12:52:11 -05:00
Finds the structure of a text file. The text file must contain data that is
suitable to be ingested into Elasticsearch.
2020-04-23 11:22:08 -05:00
`<https://www.elastic.co/guide/en/elasticsearch/reference/7.x/ml-find-file-structure.html>`_
2018-03-20 12:36:13 -06:00
2019-03-29 09:25:23 -06:00
:arg body: The contents of the file to be analyzed
2019-12-17 22:31:35 +01:00
:arg charset: Optional parameter to specify the character set of
the file
:arg column_names: Optional parameter containing a comma
separated list of the column names for a delimited file
:arg delimiter: Optional parameter to specify the delimiter
character for a delimited file - must be a single character
:arg explain: Whether to include a commentary on how the
structure was derived
:arg format: Optional parameter to specify the high level file
format Valid choices: ndjson, xml, delimited, semi_structured_text
2019-12-17 22:31:35 +01:00
:arg grok_pattern: Optional parameter to specify the Grok
pattern that should be used to extract fields from messages in a semi-
structured text file
:arg has_header_row: Optional parameter to specify whether a
delimited file includes the column names in its first row
:arg line_merge_size_limit: Maximum number of characters
permitted in a single message when lines are merged to create messages.
Default: 10000
:arg lines_to_sample: How many lines of the file should be
included in the analysis Default: 1000
:arg quote: Optional parameter to specify the quote character
2019-03-29 09:25:23 -06:00
for a delimited file - must be a single character
2019-12-17 22:31:35 +01:00
:arg should_trim_fields: Optional parameter to specify whether
the values between delimiters in a delimited file should have whitespace
2019-03-29 09:25:23 -06:00
trimmed from them
2019-12-17 22:31:35 +01:00
:arg timeout: Timeout after which the analysis will be aborted
Default: 25s
:arg timestamp_field: Optional parameter to specify the
timestamp field in the file
:arg timestamp_format: Optional parameter to specify the
timestamp format in the file - may be either a Joda or Java time format
2018-03-20 12:36:13 -06:00
"""
2019-03-29 09:25:23 -06:00
if body in SKIP_IN_PATH:
raise ValueError("Empty value passed for a required argument 'body'.")
2019-12-17 22:31:35 +01:00
2020-01-19 00:01:36 +00:00
body = _bulk_body(self.transport.serializer, body)
2019-03-29 09:25:23 -06:00
return self.transport.perform_request(
2020-03-11 16:33:15 -05:00
"POST",
"/_ml/find_file_structure",
params=params,
headers=headers,
body=body,
2019-03-29 09:25:23 -06:00
)
2018-03-20 12:36:13 -06:00
2019-03-29 09:25:23 -06:00
@query_params("advance_time", "calc_interim", "end", "skip_time", "start")
2020-03-11 16:33:15 -05:00
def flush_job(self, job_id, body=None, params=None, headers=None):
2018-03-20 12:36:13 -06:00
"""
2020-04-03 12:52:11 -05:00
Forces any buffered data to be processed by the job.
2020-04-23 11:22:08 -05:00
`<https://www.elastic.co/guide/en/elasticsearch/reference/7.x/ml-flush-job.html>`_
2018-03-20 12:36:13 -06:00
:arg job_id: The name of the job to flush
:arg body: Flush parameters
2019-12-17 22:31:35 +01:00
:arg advance_time: Advances time to the given value generating
results and updating the model for the advanced interval
:arg calc_interim: Calculates interim results for the most
recent bucket or all buckets within the latency period
:arg end: When used in conjunction with calc_interim, specifies
the range of buckets on which to calculate interim results
:arg skip_time: Skips time to the given value without generating
results or updating the model for the skipped interval
:arg start: When used in conjunction with calc_interim,
specifies the range of buckets on which to calculate interim results
2018-03-20 12:36:13 -06:00
"""
if job_id in SKIP_IN_PATH:
raise ValueError("Empty value passed for a required argument 'job_id'.")
2019-12-17 22:31:35 +01:00
2019-03-29 09:25:23 -06:00
return self.transport.perform_request(
"POST",
_make_path("_ml", "anomaly_detectors", job_id, "_flush"),
params=params,
2020-03-11 16:33:15 -05:00
headers=headers,
2019-03-29 09:25:23 -06:00
body=body,
)
2018-03-20 12:36:13 -06:00
2020-06-03 10:38:35 -05:00
@query_params("duration", "expires_in", "max_model_memory")
2020-03-11 16:33:15 -05:00
def forecast(self, job_id, params=None, headers=None):
2018-03-20 12:36:13 -06:00
"""
2020-04-03 12:52:11 -05:00
Predicts the future behavior of a time series by using its historical behavior.
2020-04-23 11:22:08 -05:00
`<https://www.elastic.co/guide/en/elasticsearch/reference/7.x/ml-forecast.html>`_
2018-03-20 12:36:13 -06:00
2019-03-29 09:25:23 -06:00
:arg job_id: The ID of the job to forecast for
:arg duration: The duration of the forecast
2019-12-17 22:31:35 +01:00
:arg expires_in: The time interval after which the forecast
expires. Expired forecasts will be deleted at the first opportunity.
2020-06-03 10:38:35 -05:00
:arg max_model_memory: The max memory able to be used by the
forecast. Default is 20mb.
2018-03-20 12:36:13 -06:00
"""
if job_id in SKIP_IN_PATH:
raise ValueError("Empty value passed for a required argument 'job_id'.")
2019-12-17 22:31:35 +01:00
2019-03-29 09:25:23 -06:00
return self.transport.perform_request(
"POST",
_make_path("_ml", "anomaly_detectors", job_id, "_forecast"),
params=params,
2020-03-11 16:33:15 -05:00
headers=headers,
2019-03-29 09:25:23 -06:00
)
2018-03-20 12:36:13 -06:00
2019-03-29 09:25:23 -06:00
@query_params(
"anomaly_score",
"desc",
"end",
"exclude_interim",
"expand",
"from_",
"size",
"sort",
"start",
)
2020-03-11 16:33:15 -05:00
def get_buckets(self, job_id, body=None, timestamp=None, params=None, headers=None):
2018-03-20 12:36:13 -06:00
"""
2020-04-03 12:52:11 -05:00
Retrieves anomaly detection job results for one or more buckets.
2020-04-23 11:22:08 -05:00
`<https://www.elastic.co/guide/en/elasticsearch/reference/7.x/ml-get-bucket.html>`_
2018-03-20 12:36:13 -06:00
2019-03-29 09:25:23 -06:00
:arg job_id: ID of the job to get bucket results from
:arg body: Bucket selection details if not provided in URI
2019-12-17 22:31:35 +01:00
:arg timestamp: The timestamp of the desired single bucket
result
2019-03-29 09:25:23 -06:00
:arg anomaly_score: Filter for the most anomalous buckets
:arg desc: Set the sort direction
:arg end: End time filter for buckets
:arg exclude_interim: Exclude interim results
:arg expand: Include anomaly records
:arg from_: skips a number of buckets
:arg size: specifies a max number of buckets to get
:arg sort: Sort buckets by a particular field
:arg start: Start time filter for buckets
2018-03-20 12:36:13 -06:00
"""
2019-12-17 22:31:35 +01:00
# from is a reserved word so it cannot be used, use from_ instead
if "from_" in params:
params["from"] = params.pop("from_")
2018-03-20 12:36:13 -06:00
if job_id in SKIP_IN_PATH:
raise ValueError("Empty value passed for a required argument 'job_id'.")
2019-12-17 22:31:35 +01:00
2019-03-29 09:25:23 -06:00
return self.transport.perform_request(
2020-03-13 13:44:46 -05:00
"POST",
2019-03-29 09:25:23 -06:00
_make_path(
"_ml", "anomaly_detectors", job_id, "results", "buckets", timestamp
),
params=params,
2020-03-11 16:33:15 -05:00
headers=headers,
2019-03-29 09:25:23 -06:00
body=body,
)
2018-03-20 12:36:13 -06:00
2019-03-29 09:25:23 -06:00
@query_params("end", "from_", "job_id", "size", "start")
2020-03-11 16:33:15 -05:00
def get_calendar_events(self, calendar_id, params=None, headers=None):
2018-03-20 12:36:13 -06:00
"""
2020-04-03 12:52:11 -05:00
Retrieves information about the scheduled events in calendars.
2020-04-23 11:22:08 -05:00
`<https://www.elastic.co/guide/en/elasticsearch/reference/7.x/ml-get-calendar-event.html>`_
2018-03-20 12:36:13 -06:00
2019-03-29 09:25:23 -06:00
:arg calendar_id: The ID of the calendar containing the events
:arg end: Get events before this time
:arg from_: Skips a number of events
:arg job_id: Get events for the job. When this option is used
calendar_id must be '_all'
:arg size: Specifies a max number of events to get
:arg start: Get events after this time
2018-03-20 12:36:13 -06:00
"""
2019-12-17 22:31:35 +01:00
# from is a reserved word so it cannot be used, use from_ instead
if "from_" in params:
params["from"] = params.pop("from_")
2019-03-29 09:25:23 -06:00
if calendar_id in SKIP_IN_PATH:
raise ValueError(
"Empty value passed for a required argument 'calendar_id'."
)
2019-12-17 22:31:35 +01:00
2019-03-29 09:25:23 -06:00
return self.transport.perform_request(
2020-03-11 16:33:15 -05:00
"GET",
_make_path("_ml", "calendars", calendar_id, "events"),
params=params,
headers=headers,
2019-03-29 09:25:23 -06:00
)
2018-03-20 12:36:13 -06:00
2019-03-29 09:25:23 -06:00
@query_params("from_", "size")
2020-03-11 16:33:15 -05:00
def get_calendars(self, body=None, calendar_id=None, params=None, headers=None):
"""
2020-04-03 12:52:11 -05:00
Retrieves configuration information for calendars.
2020-04-23 11:22:08 -05:00
`<https://www.elastic.co/guide/en/elasticsearch/reference/7.x/ml-get-calendar.html>`_
2019-12-17 22:31:35 +01:00
:arg body: The from and size parameters optionally sent in the
body
2019-03-29 09:25:23 -06:00
:arg calendar_id: The ID of the calendar to fetch
:arg from_: skips a number of calendars
:arg size: specifies a max number of calendars to get
"""
2019-12-17 22:31:35 +01:00
# from is a reserved word so it cannot be used, use from_ instead
if "from_" in params:
params["from"] = params.pop("from_")
2019-03-29 09:25:23 -06:00
return self.transport.perform_request(
2020-03-13 13:44:46 -05:00
"POST",
2020-03-11 16:33:15 -05:00
_make_path("_ml", "calendars", calendar_id),
params=params,
headers=headers,
body=body,
2019-03-29 09:25:23 -06:00
)
2020-06-23 15:34:31 -05:00
@query_params("from_", "partition_field_value", "size")
2020-03-11 16:33:15 -05:00
def get_categories(
self, job_id, body=None, category_id=None, params=None, headers=None
):
2018-03-20 12:36:13 -06:00
"""
2020-04-03 12:52:11 -05:00
Retrieves anomaly detection job results for one or more categories.
2020-04-23 11:22:08 -05:00
`<https://www.elastic.co/guide/en/elasticsearch/reference/7.x/ml-get-category.html>`_
2018-03-20 12:36:13 -06:00
:arg job_id: The name of the job
:arg body: Category selection details if not provided in URI
2019-12-17 22:31:35 +01:00
:arg category_id: The identifier of the category definition of
interest
2018-03-20 12:36:13 -06:00
:arg from_: skips a number of categories
2020-06-23 15:34:31 -05:00
:arg partition_field_value: Specifies the partition to retrieve
categories for. This is optional, and should never be used for jobs
where per-partition categorization is disabled.
2018-03-20 12:36:13 -06:00
:arg size: specifies a max number of categories to get
"""
2019-12-17 22:31:35 +01:00
# from is a reserved word so it cannot be used, use from_ instead
if "from_" in params:
params["from"] = params.pop("from_")
2018-03-20 12:36:13 -06:00
if job_id in SKIP_IN_PATH:
raise ValueError("Empty value passed for a required argument 'job_id'.")
2019-12-17 22:31:35 +01:00
2019-03-29 09:25:23 -06:00
return self.transport.perform_request(
2020-03-13 13:44:46 -05:00
"POST",
2019-03-29 09:25:23 -06:00
_make_path(
"_ml", "anomaly_detectors", job_id, "results", "categories", category_id
),
params=params,
2020-03-11 16:33:15 -05:00
headers=headers,
2019-03-29 09:25:23 -06:00
body=body,
)
2018-03-20 12:36:13 -06:00
2019-03-29 09:25:23 -06:00
@query_params("allow_no_datafeeds")
2020-03-11 16:33:15 -05:00
def get_datafeed_stats(self, datafeed_id=None, params=None, headers=None):
2019-03-29 09:25:23 -06:00
"""
2020-04-03 12:52:11 -05:00
Retrieves usage information for datafeeds.
2020-04-23 11:22:08 -05:00
`<https://www.elastic.co/guide/en/elasticsearch/reference/7.x/ml-get-datafeed-stats.html>`_
2019-03-29 09:25:23 -06:00
:arg datafeed_id: The ID of the datafeeds stats to fetch
2019-12-17 22:31:35 +01:00
:arg allow_no_datafeeds: Whether to ignore if a wildcard
expression matches no datafeeds. (This includes `_all` string or when no
2019-03-29 09:25:23 -06:00
datafeeds have been specified)
"""
return self.transport.perform_request(
2020-03-11 16:33:15 -05:00
"GET",
_make_path("_ml", "datafeeds", datafeed_id, "_stats"),
params=params,
headers=headers,
2019-03-29 09:25:23 -06:00
)
@query_params("allow_no_datafeeds")
2020-03-11 16:33:15 -05:00
def get_datafeeds(self, datafeed_id=None, params=None, headers=None):
2019-03-29 09:25:23 -06:00
"""
2020-04-03 12:52:11 -05:00
Retrieves configuration information for datafeeds.
2020-04-23 11:22:08 -05:00
`<https://www.elastic.co/guide/en/elasticsearch/reference/7.x/ml-get-datafeed.html>`_
2019-03-29 09:25:23 -06:00
:arg datafeed_id: The ID of the datafeeds to fetch
2019-12-17 22:31:35 +01:00
:arg allow_no_datafeeds: Whether to ignore if a wildcard
expression matches no datafeeds. (This includes `_all` string or when no
2019-03-29 09:25:23 -06:00
datafeeds have been specified)
"""
return self.transport.perform_request(
2020-03-11 16:33:15 -05:00
"GET",
_make_path("_ml", "datafeeds", datafeed_id),
params=params,
headers=headers,
2019-03-29 09:25:23 -06:00
)
@query_params("from_", "size")
2020-03-11 16:33:15 -05:00
def get_filters(self, filter_id=None, params=None, headers=None):
2019-03-29 09:25:23 -06:00
"""
2020-04-03 12:52:11 -05:00
Retrieves filters.
2020-04-23 11:22:08 -05:00
`<https://www.elastic.co/guide/en/elasticsearch/reference/7.x/ml-get-filter.html>`_
2019-03-29 09:25:23 -06:00
:arg filter_id: The ID of the filter to fetch
:arg from_: skips a number of filters
:arg size: specifies a max number of filters to get
"""
2019-12-17 22:31:35 +01:00
# from is a reserved word so it cannot be used, use from_ instead
if "from_" in params:
params["from"] = params.pop("from_")
2019-03-29 09:25:23 -06:00
return self.transport.perform_request(
2020-03-11 16:33:15 -05:00
"GET",
_make_path("_ml", "filters", filter_id),
params=params,
headers=headers,
2019-03-29 09:25:23 -06:00
)
@query_params(
"desc",
"end",
"exclude_interim",
"from_",
"influencer_score",
"size",
"sort",
"start",
)
2020-03-11 16:33:15 -05:00
def get_influencers(self, job_id, body=None, params=None, headers=None):
2018-03-20 12:36:13 -06:00
"""
2020-04-03 12:52:11 -05:00
Retrieves anomaly detection job results for one or more influencers.
2020-04-23 11:22:08 -05:00
`<https://www.elastic.co/guide/en/elasticsearch/reference/7.x/ml-get-influencer.html>`_
2018-03-20 12:36:13 -06:00
2020-04-03 12:52:11 -05:00
:arg job_id: Identifier for the anomaly detection job
2018-03-20 12:36:13 -06:00
:arg body: Influencer selection criteria
2019-12-17 22:31:35 +01:00
:arg desc: whether the results should be sorted in decending
order
2018-03-20 12:36:13 -06:00
:arg end: end timestamp for the requested influencers
:arg exclude_interim: Exclude interim results
:arg from_: skips a number of influencers
2019-12-17 22:31:35 +01:00
:arg influencer_score: influencer score threshold for the
requested influencers
2018-03-20 12:36:13 -06:00
:arg size: specifies a max number of influencers to get
:arg sort: sort field for the requested influencers
:arg start: start timestamp for the requested influencers
"""
2019-12-17 22:31:35 +01:00
# from is a reserved word so it cannot be used, use from_ instead
if "from_" in params:
params["from"] = params.pop("from_")
2018-03-20 12:36:13 -06:00
if job_id in SKIP_IN_PATH:
raise ValueError("Empty value passed for a required argument 'job_id'.")
2019-12-17 22:31:35 +01:00
2019-03-29 09:25:23 -06:00
return self.transport.perform_request(
2020-03-13 13:44:46 -05:00
"POST",
2019-03-29 09:25:23 -06:00
_make_path("_ml", "anomaly_detectors", job_id, "results", "influencers"),
params=params,
2020-03-11 16:33:15 -05:00
headers=headers,
2019-03-29 09:25:23 -06:00
body=body,
)
2018-03-20 12:36:13 -06:00
2019-03-29 09:25:23 -06:00
@query_params("allow_no_jobs")
2020-03-11 16:33:15 -05:00
def get_job_stats(self, job_id=None, params=None, headers=None):
2018-03-20 12:36:13 -06:00
"""
2020-04-03 12:52:11 -05:00
Retrieves usage information for anomaly detection jobs.
2020-04-23 11:22:08 -05:00
`<https://www.elastic.co/guide/en/elasticsearch/reference/7.x/ml-get-job-stats.html>`_
2018-03-20 12:36:13 -06:00
:arg job_id: The ID of the jobs stats to fetch
2019-12-17 22:31:35 +01:00
:arg allow_no_jobs: Whether to ignore if a wildcard expression
matches no jobs. (This includes `_all` string or when no jobs have been
2019-03-29 09:25:23 -06:00
specified)
2018-03-20 12:36:13 -06:00
"""
2019-03-29 09:25:23 -06:00
return self.transport.perform_request(
"GET",
_make_path("_ml", "anomaly_detectors", job_id, "_stats"),
params=params,
2020-03-11 16:33:15 -05:00
headers=headers,
2019-03-29 09:25:23 -06:00
)
2018-03-20 12:36:13 -06:00
2019-03-29 09:25:23 -06:00
@query_params("allow_no_jobs")
2020-03-11 16:33:15 -05:00
def get_jobs(self, job_id=None, params=None, headers=None):
2018-03-20 12:36:13 -06:00
"""
2020-04-03 12:52:11 -05:00
Retrieves configuration information for anomaly detection jobs.
2020-04-23 11:22:08 -05:00
`<https://www.elastic.co/guide/en/elasticsearch/reference/7.x/ml-get-job.html>`_
2018-03-20 12:36:13 -06:00
2019-03-29 09:25:23 -06:00
:arg job_id: The ID of the jobs to fetch
2019-12-17 22:31:35 +01:00
:arg allow_no_jobs: Whether to ignore if a wildcard expression
matches no jobs. (This includes `_all` string or when no jobs have been
2019-03-29 09:25:23 -06:00
specified)
2018-03-20 12:36:13 -06:00
"""
2019-03-29 09:25:23 -06:00
return self.transport.perform_request(
2020-03-11 16:33:15 -05:00
"GET",
_make_path("_ml", "anomaly_detectors", job_id),
params=params,
headers=headers,
2019-03-29 09:25:23 -06:00
)
2018-03-20 12:36:13 -06:00
2019-03-29 09:25:23 -06:00
@query_params("desc", "end", "from_", "size", "sort", "start")
2020-03-11 16:33:15 -05:00
def get_model_snapshots(
self, job_id, body=None, snapshot_id=None, params=None, headers=None
):
2018-03-20 12:36:13 -06:00
"""
2020-04-03 12:52:11 -05:00
Retrieves information about model snapshots.
2020-04-23 11:22:08 -05:00
`<https://www.elastic.co/guide/en/elasticsearch/reference/7.x/ml-get-snapshot.html>`_
2018-03-20 12:36:13 -06:00
:arg job_id: The ID of the job to fetch
:arg body: Model snapshot selection criteria
2019-12-17 22:31:35 +01:00
:arg snapshot_id: The ID of the snapshot to fetch
:arg desc: True if the results should be sorted in descending
order
2018-03-20 12:36:13 -06:00
:arg end: The filter 'end' query parameter
:arg from_: Skips a number of documents
2019-12-17 22:31:35 +01:00
:arg size: The default number of documents returned in queries
as a string.
2018-03-20 12:36:13 -06:00
:arg sort: Name of the field to sort on
:arg start: The filter 'start' query parameter
"""
2019-12-17 22:31:35 +01:00
# from is a reserved word so it cannot be used, use from_ instead
if "from_" in params:
params["from"] = params.pop("from_")
2018-03-20 12:36:13 -06:00
if job_id in SKIP_IN_PATH:
raise ValueError("Empty value passed for a required argument 'job_id'.")
2019-12-17 22:31:35 +01:00
2019-03-29 09:25:23 -06:00
return self.transport.perform_request(
2020-03-13 13:44:46 -05:00
"POST",
2019-03-29 09:25:23 -06:00
_make_path(
"_ml", "anomaly_detectors", job_id, "model_snapshots", snapshot_id
),
params=params,
2020-03-11 16:33:15 -05:00
headers=headers,
2019-03-29 09:25:23 -06:00
body=body,
)
@query_params(
"allow_no_jobs",
"bucket_span",
"end",
"exclude_interim",
"overall_score",
"start",
"top_n",
)
2020-03-11 16:33:15 -05:00
def get_overall_buckets(self, job_id, body=None, params=None, headers=None):
2019-03-29 09:25:23 -06:00
"""
2020-04-03 12:52:11 -05:00
Retrieves overall bucket results that summarize the bucket results of multiple
anomaly detection jobs.
2020-04-23 11:22:08 -05:00
`<https://www.elastic.co/guide/en/elasticsearch/reference/7.x/ml-get-overall-buckets.html>`_
2019-03-29 09:25:23 -06:00
2019-12-17 22:31:35 +01:00
:arg job_id: The job IDs for which to calculate overall bucket
results
:arg body: Overall bucket selection details if not provided in
URI
:arg allow_no_jobs: Whether to ignore if a wildcard expression
matches no jobs. (This includes `_all` string or when no jobs have been
2019-03-29 09:25:23 -06:00
specified)
2019-12-17 22:31:35 +01:00
:arg bucket_span: The span of the overall buckets. Defaults to
the longest job bucket_span
:arg end: Returns overall buckets with timestamps earlier than
this time
:arg exclude_interim: If true overall buckets that include
interim buckets will be excluded
:arg overall_score: Returns overall buckets with overall scores
higher than this value
:arg start: Returns overall buckets with timestamps after this
time
:arg top_n: The number of top job bucket scores to be used in
the overall_score calculation
2019-03-29 09:25:23 -06:00
"""
if job_id in SKIP_IN_PATH:
raise ValueError("Empty value passed for a required argument 'job_id'.")
2019-12-17 22:31:35 +01:00
2019-03-29 09:25:23 -06:00
return self.transport.perform_request(
2020-03-13 13:44:46 -05:00
"POST",
2019-03-29 09:25:23 -06:00
_make_path(
"_ml", "anomaly_detectors", job_id, "results", "overall_buckets"
),
params=params,
2020-03-11 16:33:15 -05:00
headers=headers,
2019-03-29 09:25:23 -06:00
body=body,
)
@query_params(
"desc",
"end",
"exclude_interim",
"from_",
"record_score",
"size",
"sort",
"start",
)
2020-03-11 16:33:15 -05:00
def get_records(self, job_id, body=None, params=None, headers=None):
2019-03-29 09:25:23 -06:00
"""
2020-04-03 12:52:11 -05:00
Retrieves anomaly records for an anomaly detection job.
2020-04-23 11:22:08 -05:00
`<https://www.elastic.co/guide/en/elasticsearch/reference/7.x/ml-get-record.html>`_
2019-03-29 09:25:23 -06:00
2020-04-03 12:52:11 -05:00
:arg job_id: The ID of the job
2019-03-29 09:25:23 -06:00
:arg body: Record selection criteria
:arg desc: Set the sort direction
:arg end: End time filter for records
:arg exclude_interim: Exclude interim results
:arg from_: skips a number of records
2020-04-03 12:52:11 -05:00
:arg record_score: Returns records with anomaly scores greater
or equal than this value
2019-03-29 09:25:23 -06:00
:arg size: specifies a max number of records to get
:arg sort: Sort records by a particular field
:arg start: Start time filter for records
"""
2019-12-17 22:31:35 +01:00
# from is a reserved word so it cannot be used, use from_ instead
if "from_" in params:
params["from"] = params.pop("from_")
2019-03-29 09:25:23 -06:00
if job_id in SKIP_IN_PATH:
raise ValueError("Empty value passed for a required argument 'job_id'.")
2019-12-17 22:31:35 +01:00
2019-03-29 09:25:23 -06:00
return self.transport.perform_request(
2020-03-13 13:44:46 -05:00
"POST",
2019-03-29 09:25:23 -06:00
_make_path("_ml", "anomaly_detectors", job_id, "results", "records"),
params=params,
2020-03-11 16:33:15 -05:00
headers=headers,
2019-03-29 09:25:23 -06:00
body=body,
)
2018-03-20 12:36:13 -06:00
@query_params()
2020-03-11 16:33:15 -05:00
def info(self, params=None, headers=None):
2018-03-20 12:36:13 -06:00
"""
2020-04-03 12:52:11 -05:00
Returns defaults and limits used by machine learning.
2020-04-23 11:22:08 -05:00
`<https://www.elastic.co/guide/en/elasticsearch/reference/7.x/get-ml-info.html>`_
2019-03-29 09:25:23 -06:00
"""
2020-03-11 16:33:15 -05:00
return self.transport.perform_request(
"GET", "/_ml/info", params=params, headers=headers
)
2018-03-20 12:36:13 -06:00
2019-03-29 09:25:23 -06:00
@query_params()
2020-03-11 16:33:15 -05:00
def open_job(self, job_id, params=None, headers=None):
2019-03-29 09:25:23 -06:00
"""
2020-04-03 12:52:11 -05:00
Opens one or more anomaly detection jobs.
2020-04-23 11:22:08 -05:00
`<https://www.elastic.co/guide/en/elasticsearch/reference/7.x/ml-open-job.html>`_
2019-03-29 09:25:23 -06:00
:arg job_id: The ID of the job to open
"""
if job_id in SKIP_IN_PATH:
raise ValueError("Empty value passed for a required argument 'job_id'.")
2019-12-17 22:31:35 +01:00
2019-03-29 09:25:23 -06:00
return self.transport.perform_request(
"POST",
_make_path("_ml", "anomaly_detectors", job_id, "_open"),
params=params,
2020-03-11 16:33:15 -05:00
headers=headers,
2019-03-29 09:25:23 -06:00
)
@query_params()
2020-03-11 16:33:15 -05:00
def post_calendar_events(self, calendar_id, body, params=None, headers=None):
2019-03-29 09:25:23 -06:00
"""
2020-04-03 12:52:11 -05:00
Posts scheduled events in a calendar.
2020-04-23 11:22:08 -05:00
`<https://www.elastic.co/guide/en/elasticsearch/reference/7.x/ml-post-calendar-event.html>`_
2019-03-29 09:25:23 -06:00
:arg calendar_id: The ID of the calendar to modify
:arg body: A list of events
"""
for param in (calendar_id, body):
if param in SKIP_IN_PATH:
raise ValueError("Empty value passed for a required argument.")
2019-12-17 22:31:35 +01:00
2019-03-29 09:25:23 -06:00
return self.transport.perform_request(
"POST",
_make_path("_ml", "calendars", calendar_id, "events"),
params=params,
2020-03-11 16:33:15 -05:00
headers=headers,
2019-03-29 09:25:23 -06:00
body=body,
)
@query_params("reset_end", "reset_start")
2020-03-11 16:33:15 -05:00
def post_data(self, job_id, body, params=None, headers=None):
2019-03-29 09:25:23 -06:00
"""
2020-04-03 12:52:11 -05:00
Sends data to an anomaly detection job for analysis.
2020-04-23 11:22:08 -05:00
`<https://www.elastic.co/guide/en/elasticsearch/reference/7.x/ml-post-data.html>`_
2019-03-29 09:25:23 -06:00
:arg job_id: The name of the job receiving the data
:arg body: The data to process
2019-12-17 22:31:35 +01:00
:arg reset_end: Optional parameter to specify the end of the
bucket resetting range
:arg reset_start: Optional parameter to specify the start of the
bucket resetting range
2019-03-29 09:25:23 -06:00
"""
for param in (job_id, body):
if param in SKIP_IN_PATH:
raise ValueError("Empty value passed for a required argument.")
2019-12-17 22:31:35 +01:00
2020-01-19 00:01:36 +00:00
body = _bulk_body(self.transport.serializer, body)
2019-03-29 09:25:23 -06:00
return self.transport.perform_request(
"POST",
_make_path("_ml", "anomaly_detectors", job_id, "_data"),
params=params,
2020-03-11 16:33:15 -05:00
headers=headers,
2019-12-17 22:31:35 +01:00
body=body,
2019-03-29 09:25:23 -06:00
)
@query_params()
2020-03-11 16:33:15 -05:00
def preview_datafeed(self, datafeed_id, params=None, headers=None):
2019-03-29 09:25:23 -06:00
"""
2020-04-03 12:52:11 -05:00
Previews a datafeed.
2020-04-23 11:22:08 -05:00
`<https://www.elastic.co/guide/en/elasticsearch/reference/7.x/ml-preview-datafeed.html>`_
2019-03-29 09:25:23 -06:00
:arg datafeed_id: The ID of the datafeed to preview
"""
if datafeed_id in SKIP_IN_PATH:
raise ValueError(
"Empty value passed for a required argument 'datafeed_id'."
)
2019-12-17 22:31:35 +01:00
2019-03-29 09:25:23 -06:00
return self.transport.perform_request(
"GET",
_make_path("_ml", "datafeeds", datafeed_id, "_preview"),
params=params,
2020-03-11 16:33:15 -05:00
headers=headers,
2019-03-29 09:25:23 -06:00
)
@query_params()
2020-03-11 16:33:15 -05:00
def put_calendar(self, calendar_id, body=None, params=None, headers=None):
2019-03-29 09:25:23 -06:00
"""
2020-04-03 12:52:11 -05:00
Instantiates a calendar.
2020-04-23 11:22:08 -05:00
`<https://www.elastic.co/guide/en/elasticsearch/reference/7.x/ml-put-calendar.html>`_
2019-03-29 09:25:23 -06:00
:arg calendar_id: The ID of the calendar to create
:arg body: The calendar details
"""
if calendar_id in SKIP_IN_PATH:
raise ValueError(
"Empty value passed for a required argument 'calendar_id'."
)
2019-12-17 22:31:35 +01:00
2019-03-29 09:25:23 -06:00
return self.transport.perform_request(
2020-03-11 16:33:15 -05:00
"PUT",
_make_path("_ml", "calendars", calendar_id),
params=params,
headers=headers,
body=body,
2019-03-29 09:25:23 -06:00
)
@query_params()
2020-03-11 16:33:15 -05:00
def put_calendar_job(self, calendar_id, job_id, params=None, headers=None):
2019-03-29 09:25:23 -06:00
"""
2020-04-03 12:52:11 -05:00
Adds an anomaly detection job to a calendar.
2020-04-23 11:22:08 -05:00
`<https://www.elastic.co/guide/en/elasticsearch/reference/7.x/ml-put-calendar-job.html>`_
2019-03-29 09:25:23 -06:00
:arg calendar_id: The ID of the calendar to modify
:arg job_id: The ID of the job to add to the calendar
"""
for param in (calendar_id, job_id):
if param in SKIP_IN_PATH:
raise ValueError("Empty value passed for a required argument.")
2019-12-17 22:31:35 +01:00
2019-03-29 09:25:23 -06:00
return self.transport.perform_request(
"PUT",
_make_path("_ml", "calendars", calendar_id, "jobs", job_id),
params=params,
2020-03-11 16:33:15 -05:00
headers=headers,
2019-03-29 09:25:23 -06:00
)
2020-04-01 09:16:38 -05:00
@query_params(
"allow_no_indices", "expand_wildcards", "ignore_throttled", "ignore_unavailable"
)
2020-03-11 16:33:15 -05:00
def put_datafeed(self, datafeed_id, body, params=None, headers=None):
2019-03-29 09:25:23 -06:00
"""
2020-04-03 12:52:11 -05:00
Instantiates a datafeed.
2020-04-23 11:22:08 -05:00
`<https://www.elastic.co/guide/en/elasticsearch/reference/7.x/ml-put-datafeed.html>`_
2019-03-29 09:25:23 -06:00
:arg datafeed_id: The ID of the datafeed to create
:arg body: The datafeed config
2020-04-01 09:16:38 -05:00
:arg allow_no_indices: Ignore if the source indices expressions
resolves to no concrete indices (default: true)
:arg expand_wildcards: Whether source index expressions should
get expanded to open or closed indices (default: open) Valid choices:
open, closed, hidden, none, all
:arg ignore_throttled: Ignore indices that are marked as
throttled (default: true)
:arg ignore_unavailable: Ignore unavailable indexes (default:
false)
2019-03-29 09:25:23 -06:00
"""
for param in (datafeed_id, body):
if param in SKIP_IN_PATH:
raise ValueError("Empty value passed for a required argument.")
2019-12-17 22:31:35 +01:00
2019-03-29 09:25:23 -06:00
return self.transport.perform_request(
2020-03-11 16:33:15 -05:00
"PUT",
_make_path("_ml", "datafeeds", datafeed_id),
params=params,
headers=headers,
body=body,
2019-03-29 09:25:23 -06:00
)
@query_params()
2020-03-11 16:33:15 -05:00
def put_filter(self, filter_id, body, params=None, headers=None):
2019-03-29 09:25:23 -06:00
"""
2020-04-03 12:52:11 -05:00
Instantiates a filter.
2020-04-23 11:22:08 -05:00
`<https://www.elastic.co/guide/en/elasticsearch/reference/7.x/ml-put-filter.html>`_
2019-03-29 09:25:23 -06:00
:arg filter_id: The ID of the filter to create
:arg body: The filter details
"""
for param in (filter_id, body):
if param in SKIP_IN_PATH:
raise ValueError("Empty value passed for a required argument.")
2019-12-17 22:31:35 +01:00
2019-03-29 09:25:23 -06:00
return self.transport.perform_request(
2020-03-11 16:33:15 -05:00
"PUT",
_make_path("_ml", "filters", filter_id),
params=params,
headers=headers,
body=body,
2019-03-29 09:25:23 -06:00
)
@query_params()
2020-03-11 16:33:15 -05:00
def put_job(self, job_id, body, params=None, headers=None):
2019-03-29 09:25:23 -06:00
"""
2020-04-03 12:52:11 -05:00
Instantiates an anomaly detection job.
2020-04-23 11:22:08 -05:00
`<https://www.elastic.co/guide/en/elasticsearch/reference/7.x/ml-put-job.html>`_
2019-03-29 09:25:23 -06:00
:arg job_id: The ID of the job to create
:arg body: The job
"""
for param in (job_id, body):
if param in SKIP_IN_PATH:
raise ValueError("Empty value passed for a required argument.")
2019-12-17 22:31:35 +01:00
2019-03-29 09:25:23 -06:00
return self.transport.perform_request(
"PUT",
_make_path("_ml", "anomaly_detectors", job_id),
params=params,
2020-03-11 16:33:15 -05:00
headers=headers,
2019-03-29 09:25:23 -06:00
body=body,
)
@query_params("delete_intervening_results")
2020-03-11 16:33:15 -05:00
def revert_model_snapshot(
self, job_id, snapshot_id, body=None, params=None, headers=None
):
2019-03-29 09:25:23 -06:00
"""
2020-04-03 12:52:11 -05:00
Reverts to a specific snapshot.
2020-04-23 11:22:08 -05:00
`<https://www.elastic.co/guide/en/elasticsearch/reference/7.x/ml-revert-snapshot.html>`_
2018-03-20 12:36:13 -06:00
:arg job_id: The ID of the job to fetch
2019-03-29 09:25:23 -06:00
:arg snapshot_id: The ID of the snapshot to revert to
:arg body: Reversion options
2019-12-17 22:31:35 +01:00
:arg delete_intervening_results: Should we reset the results
back to the time of the snapshot?
2018-03-20 12:36:13 -06:00
"""
for param in (job_id, snapshot_id):
if param in SKIP_IN_PATH:
raise ValueError("Empty value passed for a required argument.")
2019-12-17 22:31:35 +01:00
2019-03-29 09:25:23 -06:00
return self.transport.perform_request(
"POST",
_make_path(
"_ml",
"anomaly_detectors",
job_id,
"model_snapshots",
snapshot_id,
"_revert",
),
params=params,
2020-03-11 16:33:15 -05:00
headers=headers,
2019-03-29 09:25:23 -06:00
body=body,
)
2018-03-20 12:36:13 -06:00
2019-03-29 09:25:23 -06:00
@query_params("enabled", "timeout")
2020-03-11 16:33:15 -05:00
def set_upgrade_mode(self, params=None, headers=None):
2019-03-29 09:25:23 -06:00
"""
2020-04-03 12:52:11 -05:00
Sets a cluster wide upgrade_mode setting that prepares machine learning indices
for an upgrade.
2020-04-23 11:22:08 -05:00
`<https://www.elastic.co/guide/en/elasticsearch/reference/7.x/ml-set-upgrade-mode.html>`_
2019-03-29 09:25:23 -06:00
2019-12-17 22:31:35 +01:00
:arg enabled: Whether to enable upgrade_mode ML setting or not.
Defaults to false.
2019-03-29 09:25:23 -06:00
:arg timeout: Controls the time to wait before action times out.
Defaults to 30 seconds
"""
return self.transport.perform_request(
2020-03-11 16:33:15 -05:00
"POST", "/_ml/set_upgrade_mode", params=params, headers=headers
2019-03-29 09:25:23 -06:00
)
@query_params("end", "start", "timeout")
2020-03-11 16:33:15 -05:00
def start_datafeed(self, datafeed_id, body=None, params=None, headers=None):
2019-03-29 09:25:23 -06:00
"""
2020-04-03 12:52:11 -05:00
Starts one or more datafeeds.
2020-04-23 11:22:08 -05:00
`<https://www.elastic.co/guide/en/elasticsearch/reference/7.x/ml-start-datafeed.html>`_
2019-03-29 09:25:23 -06:00
:arg datafeed_id: The ID of the datafeed to start
:arg body: The start datafeed parameters
2019-12-17 22:31:35 +01:00
:arg end: The end time when the datafeed should stop. When not
set, the datafeed continues in real time
2019-03-29 09:25:23 -06:00
:arg start: The start time from where the datafeed should begin
2019-12-17 22:31:35 +01:00
:arg timeout: Controls the time to wait until a datafeed has
started. Default to 20 seconds
2019-03-29 09:25:23 -06:00
"""
if datafeed_id in SKIP_IN_PATH:
raise ValueError(
"Empty value passed for a required argument 'datafeed_id'."
)
2019-12-17 22:31:35 +01:00
2019-03-29 09:25:23 -06:00
return self.transport.perform_request(
"POST",
_make_path("_ml", "datafeeds", datafeed_id, "_start"),
params=params,
2020-03-11 16:33:15 -05:00
headers=headers,
2019-03-29 09:25:23 -06:00
body=body,
)
@query_params("allow_no_datafeeds", "force", "timeout")
2020-03-11 16:33:15 -05:00
def stop_datafeed(self, datafeed_id, params=None, headers=None):
2019-03-29 09:25:23 -06:00
"""
2020-04-03 12:52:11 -05:00
Stops one or more datafeeds.
2020-04-23 11:22:08 -05:00
`<https://www.elastic.co/guide/en/elasticsearch/reference/7.x/ml-stop-datafeed.html>`_
2019-03-29 09:25:23 -06:00
:arg datafeed_id: The ID of the datafeed to stop
2019-12-17 22:31:35 +01:00
:arg allow_no_datafeeds: Whether to ignore if a wildcard
expression matches no datafeeds. (This includes `_all` string or when no
2019-03-29 09:25:23 -06:00
datafeeds have been specified)
:arg force: True if the datafeed should be forcefully stopped.
2019-12-17 22:31:35 +01:00
:arg timeout: Controls the time to wait until a datafeed has
stopped. Default to 20 seconds
2019-03-29 09:25:23 -06:00
"""
if datafeed_id in SKIP_IN_PATH:
raise ValueError(
"Empty value passed for a required argument 'datafeed_id'."
)
2019-12-17 22:31:35 +01:00
2019-03-29 09:25:23 -06:00
return self.transport.perform_request(
2020-03-11 16:33:15 -05:00
"POST",
_make_path("_ml", "datafeeds", datafeed_id, "_stop"),
params=params,
headers=headers,
2019-03-29 09:25:23 -06:00
)
2020-04-01 09:16:38 -05:00
@query_params(
"allow_no_indices", "expand_wildcards", "ignore_throttled", "ignore_unavailable"
)
2020-03-11 16:33:15 -05:00
def update_datafeed(self, datafeed_id, body, params=None, headers=None):
2019-03-29 09:25:23 -06:00
"""
2020-04-03 12:52:11 -05:00
Updates certain properties of a datafeed.
2020-04-23 11:22:08 -05:00
`<https://www.elastic.co/guide/en/elasticsearch/reference/7.x/ml-update-datafeed.html>`_
2019-03-29 09:25:23 -06:00
:arg datafeed_id: The ID of the datafeed to update
:arg body: The datafeed update settings
2020-04-01 09:16:38 -05:00
:arg allow_no_indices: Ignore if the source indices expressions
resolves to no concrete indices (default: true)
:arg expand_wildcards: Whether source index expressions should
get expanded to open or closed indices (default: open) Valid choices:
open, closed, hidden, none, all
:arg ignore_throttled: Ignore indices that are marked as
throttled (default: true)
:arg ignore_unavailable: Ignore unavailable indexes (default:
false)
2019-03-29 09:25:23 -06:00
"""
for param in (datafeed_id, body):
if param in SKIP_IN_PATH:
raise ValueError("Empty value passed for a required argument.")
2019-12-17 22:31:35 +01:00
2019-03-29 09:25:23 -06:00
return self.transport.perform_request(
"POST",
_make_path("_ml", "datafeeds", datafeed_id, "_update"),
params=params,
2020-03-11 16:33:15 -05:00
headers=headers,
2019-03-29 09:25:23 -06:00
body=body,
)
@query_params()
2020-03-11 16:33:15 -05:00
def update_filter(self, filter_id, body, params=None, headers=None):
2019-03-29 09:25:23 -06:00
"""
2020-04-03 12:52:11 -05:00
Updates the description of a filter, adds items, or removes items.
2020-04-23 11:22:08 -05:00
`<https://www.elastic.co/guide/en/elasticsearch/reference/7.x/ml-update-filter.html>`_
2019-03-29 09:25:23 -06:00
:arg filter_id: The ID of the filter to update
:arg body: The filter update
"""
for param in (filter_id, body):
if param in SKIP_IN_PATH:
raise ValueError("Empty value passed for a required argument.")
2019-12-17 22:31:35 +01:00
2019-03-29 09:25:23 -06:00
return self.transport.perform_request(
"POST",
_make_path("_ml", "filters", filter_id, "_update"),
params=params,
2020-03-11 16:33:15 -05:00
headers=headers,
2019-03-29 09:25:23 -06:00
body=body,
)
@query_params()
2020-03-11 16:33:15 -05:00
def update_job(self, job_id, body, params=None, headers=None):
2019-03-29 09:25:23 -06:00
"""
2020-04-03 12:52:11 -05:00
Updates certain properties of an anomaly detection job.
2020-04-23 11:22:08 -05:00
`<https://www.elastic.co/guide/en/elasticsearch/reference/7.x/ml-update-job.html>`_
2019-03-29 09:25:23 -06:00
:arg job_id: The ID of the job to create
:arg body: The job update settings
"""
for param in (job_id, body):
if param in SKIP_IN_PATH:
raise ValueError("Empty value passed for a required argument.")
2019-12-17 22:31:35 +01:00
2019-03-29 09:25:23 -06:00
return self.transport.perform_request(
"POST",
_make_path("_ml", "anomaly_detectors", job_id, "_update"),
params=params,
2020-03-11 16:33:15 -05:00
headers=headers,
2019-03-29 09:25:23 -06:00
body=body,
)
@query_params()
2020-03-11 16:33:15 -05:00
def update_model_snapshot(
self, job_id, snapshot_id, body, params=None, headers=None
):
2019-03-29 09:25:23 -06:00
"""
2020-04-03 12:52:11 -05:00
Updates certain properties of a snapshot.
2020-04-23 11:22:08 -05:00
`<https://www.elastic.co/guide/en/elasticsearch/reference/7.x/ml-update-snapshot.html>`_
2019-03-29 09:25:23 -06:00
:arg job_id: The ID of the job to fetch
:arg snapshot_id: The ID of the snapshot to update
:arg body: The model snapshot properties to update
"""
for param in (job_id, snapshot_id, body):
if param in SKIP_IN_PATH:
raise ValueError("Empty value passed for a required argument.")
2019-12-17 22:31:35 +01:00
2019-03-29 09:25:23 -06:00
return self.transport.perform_request(
"POST",
_make_path(
"_ml",
"anomaly_detectors",
job_id,
"model_snapshots",
snapshot_id,
"_update",
),
params=params,
2020-03-11 16:33:15 -05:00
headers=headers,
2019-03-29 09:25:23 -06:00
body=body,
)
@query_params()
2020-03-11 16:33:15 -05:00
def validate(self, body, params=None, headers=None):
2019-03-29 09:25:23 -06:00
"""
2020-04-03 12:52:11 -05:00
Validates an anomaly detection job.
2020-05-19 12:59:40 -05:00
`<https://www.elastic.co/guide/en/machine-learning/current/ml-jobs.html>`_
2019-03-29 09:25:23 -06:00
:arg body: The job config
"""
if body in SKIP_IN_PATH:
raise ValueError("Empty value passed for a required argument 'body'.")
2019-12-17 22:31:35 +01:00
2019-03-29 09:25:23 -06:00
return self.transport.perform_request(
2020-03-11 16:33:15 -05:00
"POST",
"/_ml/anomaly_detectors/_validate",
params=params,
headers=headers,
body=body,
2019-03-29 09:25:23 -06:00
)
@query_params()
2020-03-11 16:33:15 -05:00
def validate_detector(self, body, params=None, headers=None):
2019-03-29 09:25:23 -06:00
"""
2020-04-03 12:52:11 -05:00
Validates an anomaly detection detector.
2020-05-19 12:59:40 -05:00
`<https://www.elastic.co/guide/en/machine-learning/current/ml-jobs.html>`_
2019-03-29 09:25:23 -06:00
:arg body: The detector
"""
if body in SKIP_IN_PATH:
raise ValueError("Empty value passed for a required argument 'body'.")
2019-12-17 22:31:35 +01:00
2019-03-29 09:25:23 -06:00
return self.transport.perform_request(
"POST",
"/_ml/anomaly_detectors/_validate/detector",
params=params,
2020-03-11 16:33:15 -05:00
headers=headers,
2019-03-29 09:25:23 -06:00
body=body,
)
2019-12-17 22:31:35 +01:00
2020-06-23 15:34:31 -05:00
@query_params("force", "timeout")
2020-03-11 16:33:15 -05:00
def delete_data_frame_analytics(self, id, params=None, headers=None):
2019-12-17 22:31:35 +01:00
"""
2020-04-03 12:52:11 -05:00
Deletes an existing data frame analytics job.
2020-04-23 11:22:08 -05:00
`<https://www.elastic.co/guide/en/elasticsearch/reference/7.x/delete-dfanalytics.html>`_
2019-12-17 22:31:35 +01:00
:arg id: The ID of the data frame analytics to delete
2020-03-13 13:44:46 -05:00
:arg force: True if the job should be forcefully deleted
2020-06-23 15:34:31 -05:00
:arg timeout: Controls the time to wait until a job is deleted.
Defaults to 1 minute
2019-12-17 22:31:35 +01:00
"""
if id in SKIP_IN_PATH:
raise ValueError("Empty value passed for a required argument 'id'.")
return self.transport.perform_request(
2020-03-11 16:33:15 -05:00
"DELETE",
_make_path("_ml", "data_frame", "analytics", id),
params=params,
headers=headers,
2019-12-17 22:31:35 +01:00
)
@query_params()
2020-03-11 16:33:15 -05:00
def evaluate_data_frame(self, body, params=None, headers=None):
2019-12-17 22:31:35 +01:00
"""
2020-04-03 12:52:11 -05:00
Evaluates the data frame analytics for an annotated index.
2020-04-23 11:22:08 -05:00
`<https://www.elastic.co/guide/en/elasticsearch/reference/7.x/evaluate-dfanalytics.html>`_
2019-12-17 22:31:35 +01:00
:arg body: The evaluation definition
"""
if body in SKIP_IN_PATH:
raise ValueError("Empty value passed for a required argument 'body'.")
return self.transport.perform_request(
2020-03-11 16:33:15 -05:00
"POST",
"/_ml/data_frame/_evaluate",
params=params,
headers=headers,
body=body,
2019-12-17 22:31:35 +01:00
)
@query_params("allow_no_match", "from_", "size")
2020-03-11 16:33:15 -05:00
def get_data_frame_analytics(self, id=None, params=None, headers=None):
2019-12-17 22:31:35 +01:00
"""
2020-04-03 12:52:11 -05:00
Retrieves configuration information for data frame analytics jobs.
2020-04-23 11:22:08 -05:00
`<https://www.elastic.co/guide/en/elasticsearch/reference/7.x/get-dfanalytics.html>`_
2019-12-17 22:31:35 +01:00
:arg id: The ID of the data frame analytics to fetch
:arg allow_no_match: Whether to ignore if a wildcard expression
matches no data frame analytics. (This includes `_all` string or when no
data frame analytics have been specified) Default: True
:arg from_: skips a number of analytics
:arg size: specifies a max number of analytics to get Default:
100
"""
# from is a reserved word so it cannot be used, use from_ instead
if "from_" in params:
params["from"] = params.pop("from_")
return self.transport.perform_request(
2020-03-11 16:33:15 -05:00
"GET",
_make_path("_ml", "data_frame", "analytics", id),
params=params,
headers=headers,
2019-12-17 22:31:35 +01:00
)
@query_params("allow_no_match", "from_", "size")
2020-03-11 16:33:15 -05:00
def get_data_frame_analytics_stats(self, id=None, params=None, headers=None):
2019-12-17 22:31:35 +01:00
"""
2020-04-03 12:52:11 -05:00
Retrieves usage information for data frame analytics jobs.
2020-04-23 11:22:08 -05:00
`<https://www.elastic.co/guide/en/elasticsearch/reference/7.x/get-dfanalytics-stats.html>`_
2019-12-17 22:31:35 +01:00
:arg id: The ID of the data frame analytics stats to fetch
:arg allow_no_match: Whether to ignore if a wildcard expression
matches no data frame analytics. (This includes `_all` string or when no
data frame analytics have been specified) Default: True
:arg from_: skips a number of analytics
:arg size: specifies a max number of analytics to get Default:
100
"""
# from is a reserved word so it cannot be used, use from_ instead
if "from_" in params:
params["from"] = params.pop("from_")
return self.transport.perform_request(
"GET",
_make_path("_ml", "data_frame", "analytics", id, "_stats"),
params=params,
2020-03-11 16:33:15 -05:00
headers=headers,
2019-12-17 22:31:35 +01:00
)
@query_params()
2020-03-11 16:33:15 -05:00
def put_data_frame_analytics(self, id, body, params=None, headers=None):
2019-12-17 22:31:35 +01:00
"""
2020-04-03 12:52:11 -05:00
Instantiates a data frame analytics job.
2020-04-23 11:22:08 -05:00
`<https://www.elastic.co/guide/en/elasticsearch/reference/7.x/put-dfanalytics.html>`_
2019-12-17 22:31:35 +01:00
:arg id: The ID of the data frame analytics to create
:arg body: The data frame analytics configuration
"""
for param in (id, body):
if param in SKIP_IN_PATH:
raise ValueError("Empty value passed for a required argument.")
return self.transport.perform_request(
"PUT",
_make_path("_ml", "data_frame", "analytics", id),
params=params,
2020-03-11 16:33:15 -05:00
headers=headers,
2019-12-17 22:31:35 +01:00
body=body,
)
@query_params("timeout")
2020-03-11 16:33:15 -05:00
def start_data_frame_analytics(self, id, body=None, params=None, headers=None):
2019-12-17 22:31:35 +01:00
"""
2020-04-03 12:52:11 -05:00
Starts a data frame analytics job.
2020-04-23 11:22:08 -05:00
`<https://www.elastic.co/guide/en/elasticsearch/reference/7.x/start-dfanalytics.html>`_
2019-12-17 22:31:35 +01:00
:arg id: The ID of the data frame analytics to start
:arg body: The start data frame analytics parameters
:arg timeout: Controls the time to wait until the task has
started. Defaults to 20 seconds
"""
if id in SKIP_IN_PATH:
raise ValueError("Empty value passed for a required argument 'id'.")
return self.transport.perform_request(
"POST",
_make_path("_ml", "data_frame", "analytics", id, "_start"),
params=params,
2020-03-11 16:33:15 -05:00
headers=headers,
2019-12-17 22:31:35 +01:00
body=body,
)
@query_params("allow_no_match", "force", "timeout")
2020-03-11 16:33:15 -05:00
def stop_data_frame_analytics(self, id, body=None, params=None, headers=None):
2019-12-17 22:31:35 +01:00
"""
2020-04-03 12:52:11 -05:00
Stops one or more data frame analytics jobs.
2020-04-23 11:22:08 -05:00
`<https://www.elastic.co/guide/en/elasticsearch/reference/7.x/stop-dfanalytics.html>`_
2019-12-17 22:31:35 +01:00
:arg id: The ID of the data frame analytics to stop
:arg body: The stop data frame analytics parameters
:arg allow_no_match: Whether to ignore if a wildcard expression
matches no data frame analytics. (This includes `_all` string or when no
data frame analytics have been specified)
:arg force: True if the data frame analytics should be
forcefully stopped
:arg timeout: Controls the time to wait until the task has
stopped. Defaults to 20 seconds
"""
if id in SKIP_IN_PATH:
raise ValueError("Empty value passed for a required argument 'id'.")
return self.transport.perform_request(
"POST",
_make_path("_ml", "data_frame", "analytics", id, "_stop"),
params=params,
2020-03-11 16:33:15 -05:00
headers=headers,
2019-12-17 22:31:35 +01:00
body=body,
)
2020-03-13 13:44:46 -05:00
@query_params()
def delete_trained_model(self, model_id, params=None, headers=None):
"""
2020-04-03 12:52:11 -05:00
Deletes an existing trained inference model that is currently not referenced by
an ingest pipeline.
2020-04-23 11:22:08 -05:00
`<https://www.elastic.co/guide/en/elasticsearch/reference/7.x/delete-inference.html>`_
2020-03-13 13:44:46 -05:00
:arg model_id: The ID of the trained model to delete
"""
if model_id in SKIP_IN_PATH:
raise ValueError("Empty value passed for a required argument 'model_id'.")
return self.transport.perform_request(
"DELETE",
_make_path("_ml", "inference", model_id),
params=params,
headers=headers,
)
@query_params()
def explain_data_frame_analytics(
self, body=None, id=None, params=None, headers=None
):
"""
2020-04-03 12:52:11 -05:00
Explains a data frame analytics config.
2020-04-23 11:22:08 -05:00
`<https://www.elastic.co/guide/en/elasticsearch/reference/7.x/explain-dfanalytics.html>`_
2020-03-13 13:44:46 -05:00
:arg body: The data frame analytics config to explain
:arg id: The ID of the data frame analytics to explain
"""
return self.transport.perform_request(
"POST",
_make_path("_ml", "data_frame", "analytics", id, "_explain"),
params=params,
headers=headers,
body=body,
)
@query_params(
"allow_no_match",
"decompress_definition",
2020-06-03 10:38:35 -05:00
"for_export",
2020-03-13 13:44:46 -05:00
"from_",
"include_model_definition",
"size",
2020-04-01 09:16:38 -05:00
"tags",
2020-03-13 13:44:46 -05:00
)
def get_trained_models(self, model_id=None, params=None, headers=None):
"""
2020-04-03 12:52:11 -05:00
Retrieves configuration information for a trained inference model.
2020-04-23 11:22:08 -05:00
`<https://www.elastic.co/guide/en/elasticsearch/reference/7.x/get-inference.html>`_
2020-03-13 13:44:46 -05:00
:arg model_id: The ID of the trained models to fetch
:arg allow_no_match: Whether to ignore if a wildcard expression
matches no trained models. (This includes `_all` string or when no
trained models have been specified) Default: True
:arg decompress_definition: Should the model definition be
decompressed into valid JSON or returned in a custom compressed format.
Defaults to true. Default: True
2020-06-03 10:38:35 -05:00
:arg for_export: Omits fields that are illegal to set on model
PUT
2020-03-13 13:44:46 -05:00
:arg from_: skips a number of trained models
:arg include_model_definition: Should the full model definition
be included in the results. These definitions can be large. So be
cautious when including them. Defaults to false.
:arg size: specifies a max number of trained models to get
Default: 100
2020-04-01 09:16:38 -05:00
:arg tags: A comma-separated list of tags that the model must
have.
2020-03-13 13:44:46 -05:00
"""
# from is a reserved word so it cannot be used, use from_ instead
if "from_" in params:
params["from"] = params.pop("from_")
return self.transport.perform_request(
"GET",
_make_path("_ml", "inference", model_id),
params=params,
headers=headers,
)
@query_params("allow_no_match", "from_", "size")
def get_trained_models_stats(self, model_id=None, params=None, headers=None):
"""
2020-04-03 12:52:11 -05:00
Retrieves usage information for trained inference models.
2020-04-23 11:22:08 -05:00
`<https://www.elastic.co/guide/en/elasticsearch/reference/7.x/get-inference-stats.html>`_
2020-03-13 13:44:46 -05:00
:arg model_id: The ID of the trained models stats to fetch
:arg allow_no_match: Whether to ignore if a wildcard expression
matches no trained models. (This includes `_all` string or when no
trained models have been specified) Default: True
:arg from_: skips a number of trained models
:arg size: specifies a max number of trained models to get
Default: 100
"""
# from is a reserved word so it cannot be used, use from_ instead
if "from_" in params:
params["from"] = params.pop("from_")
return self.transport.perform_request(
"GET",
_make_path("_ml", "inference", model_id, "_stats"),
params=params,
headers=headers,
)
@query_params()
def put_trained_model(self, model_id, body, params=None, headers=None):
"""
2020-04-03 12:52:11 -05:00
Creates an inference trained model.
2020-04-23 11:22:08 -05:00
`<https://www.elastic.co/guide/en/elasticsearch/reference/7.x/put-inference.html>`_
2020-03-13 13:44:46 -05:00
:arg model_id: The ID of the trained models to store
:arg body: The trained model configuration
"""
for param in (model_id, body):
if param in SKIP_IN_PATH:
raise ValueError("Empty value passed for a required argument.")
return self.transport.perform_request(
"PUT",
_make_path("_ml", "inference", model_id),
params=params,
headers=headers,
body=body,
)
2020-04-01 09:16:38 -05:00
@query_params()
def estimate_model_memory(self, body, params=None, headers=None):
"""
2020-04-03 12:52:11 -05:00
Estimates the model memory
2020-04-23 11:22:08 -05:00
`<https://www.elastic.co/guide/en/elasticsearch/reference/7.x/ml-apis.html>`_
2020-04-01 09:16:38 -05:00
:arg body: The analysis config, plus cardinality estimates for
fields it references
"""
if body in SKIP_IN_PATH:
raise ValueError("Empty value passed for a required argument 'body'.")
return self.transport.perform_request(
"POST",
"/_ml/anomaly_detectors/_estimate_model_memory",
params=params,
headers=headers,
body=body,
)