From 19b84f0bc2380a06a5910d3a54809d2838db03d6 Mon Sep 17 00:00:00 2001 From: pavel06081991 Date: Mon, 14 Jan 2019 14:04:39 +0300 Subject: [PATCH] [ML] translate job validation messages (#28235) [ML] translate job validation messages --- .../models/job_validation/job_validation.js | 4 +- .../server/models/job_validation/messages.js | 410 ++++++++++++++++++ .../models/job_validation/messages.json | 220 ---------- 3 files changed, 413 insertions(+), 221 deletions(-) create mode 100644 x-pack/plugins/ml/server/models/job_validation/messages.js delete mode 100644 x-pack/plugins/ml/server/models/job_validation/messages.json diff --git a/x-pack/plugins/ml/server/models/job_validation/job_validation.js b/x-pack/plugins/ml/server/models/job_validation/job_validation.js index 627d80d9c07e..1d59b8c379b9 100644 --- a/x-pack/plugins/ml/server/models/job_validation/job_validation.js +++ b/x-pack/plugins/ml/server/models/job_validation/job_validation.js @@ -11,7 +11,7 @@ import Boom from 'boom'; import { fieldsServiceProvider } from '../fields_service'; import { renderTemplate } from '../../../common/util/string_utils'; -import messages from './messages.json'; +import { getMessages } from './messages'; import { VALIDATION_STATUS } from '../../../common/constants/validation'; import { basicJobValidation, uniqWithIsEqual } from '../../../common/util/job_utils'; @@ -22,6 +22,8 @@ import { validateModelMemoryLimit } from './validate_model_memory_limit'; import { validateTimeRange, isValidTimeField } from './validate_time_range'; export async function validateJob(callWithRequest, payload, kbnVersion = 'current', server) { + const messages = getMessages(); + try { if (typeof payload !== 'object' || payload === null) { throw new Error(i18n.translate('xpack.ml.models.jobValidation.payloadIsNotObjectErrorMessage', { diff --git a/x-pack/plugins/ml/server/models/job_validation/messages.js b/x-pack/plugins/ml/server/models/job_validation/messages.js new file mode 100644 index 000000000000..92d2679243c1 --- /dev/null +++ b/x-pack/plugins/ml/server/models/job_validation/messages.js @@ -0,0 +1,410 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + + +import { i18n } from '@kbn/i18n'; + +let messages; + +export const getMessages = () => { + if (messages) { + return messages; + } + + return messages = { + field_not_aggregatable: { + status: 'ERROR', + text: i18n.translate('xpack.ml.models.jobValidation.messages.fieldNotAggregatableMessage', { + defaultMessage: 'Detector field {fieldName} is not an aggregatable field.', + values: { + fieldName: '"{{fieldName}}"', + }, + }), + url: 'https://www.elastic.co/guide/en/elastic-stack-overview/{{version}}/ml-configuring-aggregation.html' + }, + fields_not_aggregatable: { + status: 'ERROR', + text: i18n.translate('xpack.ml.models.jobValidation.messages.fieldsNotAggregatableMessage', { + defaultMessage: 'One of the detector fields is not an aggregatable field.', + }), + url: 'https://www.elastic.co/guide/en/elastic-stack-overview/{{version}}/ml-configuring-aggregation.html' + }, + cardinality_by_field: { + status: 'WARNING', + text: i18n.translate('xpack.ml.models.jobValidation.messages.cardinalityByFieldMessage', { + defaultMessage: 'Cardinality of {fieldName} is above 1000 and might result in high memory usage.', + values: { + fieldName: 'by_field "{{fieldName}}"', + }, + }), + url: 'https://www.elastic.co/guide/en/kibana/{{version}}/job-tips.html#cardinality' + }, + cardinality_over_field_low: { + status: 'WARNING', + text: i18n.translate('xpack.ml.models.jobValidation.messages.cardinalityOverFieldLowMessage', { + defaultMessage: 'Cardinality of {fieldName} is below 10 and might not be suitable for population analysis.', + values: { + fieldName: 'over_field "{{fieldName}}"', + }, + }), + url: 'https://www.elastic.co/guide/en/kibana/{{version}}/job-tips.html#cardinality' + }, + cardinality_over_field_high: { + status: 'WARNING', + text: i18n.translate('xpack.ml.models.jobValidation.messages.cardinalityOverFieldHighMessage', { + defaultMessage: 'Cardinality of {fieldName} is above 1000000 and might result in high memory usage.', + values: { + fieldName: 'over_field "{{fieldName}}"', + }, + }), + url: 'https://www.elastic.co/guide/en/kibana/{{version}}/job-tips.html#cardinality' + }, + cardinality_partition_field: { + status: 'WARNING', + text: i18n.translate('xpack.ml.models.jobValidation.messages.cardinalityPartitionFieldMessage', { + defaultMessage: 'Cardinality of {fieldName} is above 1000 and might result in high memory usage.', + values: { + fieldName: 'partition_field "{{fieldName}}"', + }, + }), + url: 'https://www.elastic.co/guide/en/kibana/{{version}}/job-tips.html#cardinality' + }, + cardinality_model_plot_high: { + status: 'WARNING', + text: i18n.translate('xpack.ml.models.jobValidation.messages.cardinalityModelPlotHighMessage', { + defaultMessage: 'The estimated cardinality of {modelPlotCardinality} ' + + 'of fields relevant to creating model plots might result in resource intensive jobs.', + values: { + modelPlotCardinality: '{{modelPlotCardinality}}', + }, + }) + }, + categorization_filters_valid: { + status: 'SUCCESS', + text: i18n.translate('xpack.ml.models.jobValidation.messages.categorizationFiltersValidMessage', { + defaultMessage: 'Categorization filters checks passed.', + }), + url: 'https://www.elastic.co/guide/en/elastic-stack-overview/{{version}}/ml-configuring-categories.html' + }, + categorization_filters_invalid: { + status: 'ERROR', + text: i18n.translate('xpack.ml.models.jobValidation.messages.categorizationFiltersInvalidMessage', { + defaultMessage: 'The categorization filters configuration is invalid. ' + + 'Make sure filters are valid regular expressions and {categorizationFieldName} is set.', + values: { + categorizationFieldName: '"categorization_field_name"', + }, + }), + url: 'https://www.elastic.co/guide/en/elasticsearch/reference/{{version}}/ml-job-resource.html#ml-analysisconfig' + }, + bucket_span_empty: { + status: 'ERROR', + text: i18n.translate('xpack.ml.models.jobValidation.messages.bucketSpanEmptyMessage', { + defaultMessage: 'The bucket span field must be specified.', + }), + url: 'https://www.elastic.co/guide/en/elasticsearch/reference/{{version}}/ml-job-resource.html#ml-analysisconfig' + }, + bucket_span_estimation_mismatch: { + status: 'INFO', + heading: i18n.translate('xpack.ml.models.jobValidation.messages.bucketSpanEstimationMismatchHeading', { + defaultMessage: 'Bucket span', + }), + text: i18n.translate('xpack.ml.models.jobValidation.messages.bucketSpanEstimationMismatchMessage', { + defaultMessage: 'Current bucket span is {currentBucketSpan}, but bucket span estimation returned {estimateBucketSpan}.', + values: { + currentBucketSpan: '"{{currentBucketSpan}}"', + estimateBucketSpan: '"{{estimateBucketSpan}}"', + }, + }), + url: 'https://www.elastic.co/guide/en/kibana/{{version}}/job-tips.html#bucket-span' + }, + bucket_span_high: { + status: 'INFO', + heading: i18n.translate('xpack.ml.models.jobValidation.messages.bucketSpanHighHeading', { + defaultMessage: 'Bucket span', + }), + text: i18n.translate('xpack.ml.models.jobValidation.messages.bucketSpanHighMessage', { + defaultMessage: 'Bucket span is 1 day or more. Be aware that days are considered as UTC days, not local days.', + }), + url: 'https://www.elastic.co/guide/en/kibana/{{version}}/job-tips.html#bucket-span' + }, + bucket_span_valid: { + status: 'SUCCESS', + heading: i18n.translate('xpack.ml.models.jobValidation.messages.bucketSpanValidHeading', { + defaultMessage: 'Bucket span', + }), + text: i18n.translate('xpack.ml.models.jobValidation.messages.bucketSpanValidMessage', { + defaultMessage: 'Format of {bucketSpan} is valid.', + values: { + bucketSpan: '"{{bucketSpan}}"', + }, + }), + url: 'https://www.elastic.co/guide/en/elasticsearch/reference/{{version}}/ml-job-resource.html#ml-analysisconfig' + }, + bucket_span_invalid: { + status: 'ERROR', + heading: i18n.translate('xpack.ml.models.jobValidation.messages.bucketSpanInvalidHeading', { + defaultMessage: 'Bucket span', + }), + text: i18n.translate('xpack.ml.models.jobValidation.messages.bucketSpanInvalidMessage', { + defaultMessage: 'The specified bucket span is not a valid time interval format e.g. 10m, 1h. It also needs to be higher than zero.', + }), + url: 'https://www.elastic.co/guide/en/elasticsearch/reference/{{version}}/ml-job-resource.html#ml-analysisconfig' + }, + detectors_duplicates: { + status: 'ERROR', + text: i18n.translate('xpack.ml.models.jobValidation.messages.detectorsDuplicatesMessage', { + defaultMessage: 'Duplicate detectors were found. Detectors having the same combined configuration for ' + + '{functionParam}, {fieldNameParam}, {byFieldNameParam}, {overFieldNameParam} and ' + + '{partitionFieldNameParam} are not allowed within the same job.', + values: { + functionParam: `'function'`, + fieldNameParam: `'field_name'`, + byFieldNameParam: `'by_field_name'`, + overFieldNameParam: `'over_field_name'`, + partitionFieldNameParam: `'partition_field_name'`, + }, + }), + url: 'https://www.elastic.co/guide/en/kibana/{{version}}/job-tips.html#detectors' + }, + detectors_empty: { + status: 'ERROR', + text: i18n.translate('xpack.ml.models.jobValidation.messages.detectorsEmptyMessage', { + defaultMessage: 'No detectors were found. At least one detector must be specified.', + }), + url: 'https://www.elastic.co/guide/en/kibana/{{version}}/job-tips.html#detectors' + }, + detectors_function_empty: { + status: 'ERROR', + text: i18n.translate('xpack.ml.models.jobValidation.messages.detectorsFunctionEmptyMessage', { + defaultMessage: 'One of the detector functions is empty.', + }), + url: 'https://www.elastic.co/guide/en/kibana/{{version}}/job-tips.html#detectors' + }, + detectors_function_not_empty: { + status: 'SUCCESS', + heading: i18n.translate('xpack.ml.models.jobValidation.messages.detectorsFunctionNotEmptyHeading', { + defaultMessage: 'Detector functions', + }), + text: i18n.translate('xpack.ml.models.jobValidation.messages.detectorsFunctionNotEmptyMessage', { + defaultMessage: 'Presence of detector functions validated in all detectors.', + }), + url: 'https://www.elastic.co/guide/en/kibana/{{version}}/job-tips.html#detectors' + }, + index_fields_invalid: { + status: 'ERROR', + text: i18n.translate('xpack.ml.models.jobValidation.messages.indexFieldsInvalidMessage', { + defaultMessage: 'Could not load fields from index.', + }) + }, + index_fields_valid: { + status: 'SUCCESS', + text: i18n.translate('xpack.ml.models.jobValidation.messages.indexFieldsValidMessage', { + defaultMessage: 'Index fields are present in the datafeed.', + }) + }, + influencer_high: { + status: 'WARNING', + text: i18n.translate('xpack.ml.models.jobValidation.messages.influencerHighMessage', { + defaultMessage: 'The job configuration includes more than 3 influencers. ' + + 'Consider using fewer influencers or creating multiple jobs.', + }), + url: 'https://www.elastic.co/guide/en/kibana/{{version}}/job-tips.html#influencers' + }, + influencer_low: { + status: 'WARNING', + text: i18n.translate('xpack.ml.models.jobValidation.messages.influencerLowMessage', { + defaultMessage: 'No influencers have been configured. Picking an influencer is strongly recommended.', + }), + url: 'https://www.elastic.co/guide/en/kibana/{{version}}/job-tips.html#influencers' + }, + influencer_low_suggestion: { + status: 'WARNING', + text: i18n.translate('xpack.ml.models.jobValidation.messages.influencerLowSuggestionMessage', { + defaultMessage: 'No influencers have been configured. Consider using {influencerSuggestion} as an influencer.', + values: { influencerSuggestion: '{{influencerSuggestion}}' }, + }), + url: 'https://www.elastic.co/guide/en/kibana/{{version}}/job-tips.html#influencers' + }, + influencer_low_suggestions: { + status: 'WARNING', + text: i18n.translate('xpack.ml.models.jobValidation.messages.influencerLowSuggestionsMessage', { + defaultMessage: 'No influencers have been configured. Consider using one or more of {influencerSuggestion}.', + values: { influencerSuggestion: '{{influencerSuggestion}}' }, + }), + url: 'https://www.elastic.co/guide/en/kibana/{{version}}/job-tips.html#influencers' + }, + job_id_empty: { + status: 'ERROR', + text: i18n.translate('xpack.ml.models.jobValidation.messages.jobIdEmptyMessage', { + defaultMessage: 'The job name field must not be empty.', + }), + url: 'https://www.elastic.co/guide/en/elasticsearch/reference/{{version}}/ml-job-resource.html#ml-job-resource' + }, + job_id_invalid: { + status: 'ERROR', + text: i18n.translate('xpack.ml.models.jobValidation.messages.jobIdInvalidMessage', { + defaultMessage: 'The job name is invalid. It can contain lowercase alphanumeric (a-z and 0-9) characters, ' + + 'hyphens or underscores and must start and end with an alphanumeric character.', + }), + url: 'https://www.elastic.co/guide/en/elasticsearch/reference/{{version}}/ml-job-resource.html#ml-job-resource' + }, + job_id_valid: { + status: 'SUCCESS', + heading: i18n.translate('xpack.ml.models.jobValidation.messages.jobIdValidHeading', { + defaultMessage: 'Job id format is valid.', + }), + text: i18n.translate('xpack.ml.models.jobValidation.messages.jobIdValidMessage', { + defaultMessage: 'Lowercase alphanumeric (a-z and 0-9) characters, hyphens or underscores, ' + + 'starts and ends with an alphanumeric character.', + }), + url: 'https://www.elastic.co/guide/en/elasticsearch/reference/{{version}}/ml-job-resource.html#ml-job-resource' + }, + job_group_id_invalid: { + status: 'ERROR', + text: i18n.translate('xpack.ml.models.jobValidation.messages.jobGroupIdInvalidMessage', { + defaultMessage: 'One of the job group names is invalid. They can contain lowercase ' + + 'alphanumeric (a-z and 0-9) characters, hyphens or underscores and must start and end with an alphanumeric character.', + }), + url: 'https://www.elastic.co/guide/en/elasticsearch/reference/{{version}}/ml-job-resource.html#ml-job-resource' + }, + job_group_id_valid: { + status: 'SUCCESS', + heading: i18n.translate('xpack.ml.models.jobValidation.messages.jobGroupIdValidHeading', { + defaultMessage: 'Job group id formats are valid.', + }), + text: i18n.translate('xpack.ml.models.jobValidation.messages.jobGroupIdValidMessage', { + defaultMessage: 'Lowercase alphanumeric (a-z and 0-9) characters, hyphens or underscores, ' + + 'starts and ends with an alphanumeric character.', + }), + url: 'https://www.elastic.co/guide/en/elasticsearch/reference/{{version}}/ml-job-resource.html#ml-job-resource' + }, + skipped_extended_tests: { + status: 'WARNING', + text: i18n.translate('xpack.ml.models.jobValidation.messages.skippedExtendedTestsMessage', { + defaultMessage: 'Skipped additional checks because the basic requirements of the job configuration were not met.', + }) + }, + success_cardinality: { + status: 'SUCCESS', + heading: i18n.translate('xpack.ml.models.jobValidation.messages.successCardinalityHeading', { + defaultMessage: 'Cardinality', + }), + text: i18n.translate('xpack.ml.models.jobValidation.messages.successCardinalityMessage', { + defaultMessage: 'Cardinality of detector fields is within recommended bounds.', + }), + url: 'https://www.elastic.co/guide/en/kibana/{{version}}/job-tips.html#cardinality' + }, + success_bucket_span: { + status: 'SUCCESS', + heading: i18n.translate('xpack.ml.models.jobValidation.messages.successBucketSpanHeading', { + defaultMessage: 'Bucket span', + }), + text: i18n.translate('xpack.ml.models.jobValidation.messages.successBucketSpanMessage', { + defaultMessage: 'Format of {bucketSpan} is valid and passed validation checks.', + values: { bucketSpan: '"{{bucketSpan}}"' }, + }), + url: 'https://www.elastic.co/guide/en/kibana/{{version}}/job-tips.html#bucket-span' + }, + success_influencers: { + status: 'SUCCESS', + text: i18n.translate('xpack.ml.models.jobValidation.messages.successInfluencersMessage', { + defaultMessage: 'Influencer configuration passed the validation checks.', + }), + url: 'https://www.elastic.co/guide/en/kibana/{{version}}/job-tips.html#influencers' + }, + estimated_mml_greater_than_max_mml: { + status: 'WARNING', + text: i18n.translate('xpack.ml.models.jobValidation.messages.estimatedMmlGreaterThanMaxMmlMessage', { + defaultMessage: 'The estimated model memory limit is greater than the max model memory limit configured for this cluster.', + }) + }, + mml_greater_than_max_mml: { + status: 'ERROR', + text: i18n.translate('xpack.ml.models.jobValidation.messages.mmlGreaterThanMaxMmlMessage', { + defaultMessage: 'The model memory limit is greater than the max model memory limit configured for this cluster.', + }) + }, + mml_value_invalid: { + status: 'ERROR', + text: i18n.translate('xpack.ml.models.jobValidation.messages.mmlValueInvalidMessage', { + defaultMessage: '{mml} is not a valid value for model memory limit. The value needs to be at least ' + + '1MB and should be specified in bytes e.g. 10MB.', + values: { mml: '{{mml}}' } + }), + url: 'https://www.elastic.co/guide/en/kibana/{{version}}/job-tips.html#model-memory-limits' + }, + half_estimated_mml_greater_than_mml: { + status: 'WARNING', + text: i18n.translate('xpack.ml.models.jobValidation.messages.halfEstimatedMmlGreaterThanMmlMessage', { + defaultMessage: 'The specified model memory limit is less than half of the estimated model ' + + 'memory limit and will likely hit the hard limit.', + }), + url: 'https://www.elastic.co/guide/en/kibana/{{version}}/job-tips.html#model-memory-limits' + }, + estimated_mml_greater_than_mml: { + status: 'INFO', + text: + i18n.translate('xpack.ml.models.jobValidation.messages.estimatedMmlGreaterThanMmlMessage', { + defaultMessage: 'The estimated model memory limit is greater than the model memory limit you have configured.', + }), + url: 'https://www.elastic.co/guide/en/kibana/{{version}}/job-tips.html#model-memory-limits' + }, + success_mml: { + status: 'SUCCESS', + heading: i18n.translate('xpack.ml.models.jobValidation.messages.successMmlHeading', { + defaultMessage: 'Model memory limit', + }), + text: i18n.translate('xpack.ml.models.jobValidation.messages.successMmlMessage', { + defaultMessage: 'Valid and within the estimated model memory limit.', + }), + url: 'https://www.elastic.co/guide/en/kibana/{{version}}/job-tips.html#model-memory-limits' + }, + success_time_range: { + status: 'SUCCESS', + heading: i18n.translate('xpack.ml.models.jobValidation.messages.successTimeRangeHeading', { + defaultMessage: 'Time range', + }), + text: i18n.translate('xpack.ml.models.jobValidation.messages.successTimeRangeMessage', { + defaultMessage: 'Valid and long enough to model patterns in the data.', + }) + }, + time_field_invalid: { + status: 'ERROR', + text: i18n.translate('xpack.ml.models.jobValidation.messages.timeFieldInvalidMessage', { + defaultMessage: `{timeField} cannot be used as the time-field because it's not a valid field of type 'date'.`, + values: { + timeField: `'{{timeField}}'`, + } + }) + }, + time_range_short: { + status: 'WARNING', + heading: i18n.translate('xpack.ml.models.jobValidation.messages.timeRangeShortHeading', { + defaultMessage: 'Time range', + }), + text: i18n.translate('xpack.ml.models.jobValidation.messages.timeRangeShortMessage', { + defaultMessage: 'The selected or available time range might be too short. The recommended minimum ' + + 'time range should be at least {minTimeSpanReadable} and {bucketSpanCompareFactor} times the bucket span.', + values: { + minTimeSpanReadable: '{{minTimeSpanReadable}}', + bucketSpanCompareFactor: '{{bucketSpanCompareFactor}}', + }, + }) + }, + time_range_before_epoch: { + status: 'WARNING', + heading: i18n.translate('xpack.ml.models.jobValidation.messages.timeRangeBeforeEpochHeading', { + defaultMessage: 'Time range', + }), + text: i18n.translate( + 'xpack.ml.models.jobValidation.messages.timeRangeBeforeEpochMessage', { + defaultMessage: 'The selected or available time range contains data with timestamps before ' + + 'the UNIX epoch beginning. Timestamps before 01/01/1970 00:00:00 (UTC) are not supported for machine learning jobs.', + }) + } + }; +}; diff --git a/x-pack/plugins/ml/server/models/job_validation/messages.json b/x-pack/plugins/ml/server/models/job_validation/messages.json deleted file mode 100644 index fe3b496bea65..000000000000 --- a/x-pack/plugins/ml/server/models/job_validation/messages.json +++ /dev/null @@ -1,220 +0,0 @@ -{ - "field_not_aggregatable": { - "status": "ERROR", - "text": "Detector field \"{{fieldName}}\" is not an aggregatable field.", - "url": "https://www.elastic.co/guide/en/elastic-stack-overview/{{version}}/ml-configuring-aggregation.html" - }, - "fields_not_aggregatable": { - "status": "ERROR", - "text": "One of the detector fields is not an aggregatable field.", - "url": "https://www.elastic.co/guide/en/elastic-stack-overview/{{version}}/ml-configuring-aggregation.html" - }, - "cardinality_by_field": { - "status": "WARNING", - "text": "Cardinality of by_field \"{{fieldName}}\" is above 1000 and might result in high memory usage.", - "url": "https://www.elastic.co/guide/en/kibana/{{version}}/job-tips.html#cardinality" - }, - "cardinality_over_field_low": { - "status": "WARNING", - "text": "Cardinality of over_field \"{{fieldName}}\" is below 10 and might not be suitable for population analysis.", - "url": "https://www.elastic.co/guide/en/kibana/{{version}}/job-tips.html#cardinality" - }, - "cardinality_over_field_high": { - "status": "WARNING", - "text": "Cardinality of over_field \"{{fieldName}}\" is above 1000000 and might result in high memory usage.", - "url": "https://www.elastic.co/guide/en/kibana/{{version}}/job-tips.html#cardinality" - }, - "cardinality_partition_field": { - "status": "WARNING", - "text": "Cardinality of partition_field \"{{fieldName}}\" is above 1000 and might result in high memory usage.", - "url": "https://www.elastic.co/guide/en/kibana/{{version}}/job-tips.html#cardinality" - }, - "cardinality_model_plot_high": { - "status": "WARNING", - "text": "The estimated cardinality of {{modelPlotCardinality}} of fields relevant to creating model plots might result in resource intensive jobs." - }, - "categorization_filters_valid": { - "status": "SUCCESS", - "text": "Categorization filters checks passed.", - "url": "https://www.elastic.co/guide/en/elastic-stack-overview/{{version}}/ml-configuring-categories.html" - }, - "categorization_filters_invalid": { - "status": "ERROR", - "text": "The categorization filters configuration is invalid. Make sure filters are valid regular expressions and \"categorization_field_name\" is set.", - "url": "https://www.elastic.co/guide/en/elasticsearch/reference/{{version}}/ml-job-resource.html#ml-analysisconfig" - }, - "bucket_span_empty": { - "status": "ERROR", - "text": "The bucket span field must be specified.", - "url": "https://www.elastic.co/guide/en/elasticsearch/reference/{{version}}/ml-job-resource.html#ml-analysisconfig" - }, - "bucket_span_estimation_mismatch": { - "status": "INFO", - "heading": "Bucket span", - "text": "Current bucket span is \"{{currentBucketSpan}}\", but bucket span estimation returned \"{{estimateBucketSpan}}\".", - "url": "https://www.elastic.co/guide/en/kibana/{{version}}/job-tips.html#bucket-span" - }, - "bucket_span_high": { - "status": "INFO", - "heading": "Bucket span", - "text": "Bucket span is 1 day or more. Be aware that days are considered as UTC days, not local days.", - "url": "https://www.elastic.co/guide/en/kibana/{{version}}/job-tips.html#bucket-span" - }, - "bucket_span_valid": { - "status": "SUCCESS", - "heading": "Bucket span", - "text": "Format of \"{{bucketSpan}}\" is valid.", - "url": "https://www.elastic.co/guide/en/elasticsearch/reference/{{version}}/ml-job-resource.html#ml-analysisconfig" - }, - "bucket_span_invalid": { - "status": "ERROR", - "heading": "Bucket span", - "text": "The specified bucket span is not a valid time interval format e.g. 10m, 1h. It also needs to be higher than zero.", - "url": "https://www.elastic.co/guide/en/elasticsearch/reference/{{version}}/ml-job-resource.html#ml-analysisconfig" - }, - "detectors_duplicates": { - "status": "ERROR", - "text": "Duplicate detectors were found. Detectors having the same combined configuration for 'function', 'field_name', 'by_field_name', 'over_field_name' and 'partition_field_name' are not allowed within the same job.", - "url": "https://www.elastic.co/guide/en/kibana/{{version}}/job-tips.html#detectors" - }, - "detectors_empty": { - "status": "ERROR", - "text": "No detectors were found. At least one detector must be specified.", - "url": "https://www.elastic.co/guide/en/kibana/{{version}}/job-tips.html#detectors" - }, - "detectors_function_empty": { - "status": "ERROR", - "text": "One of the detector functions is empty.", - "url": "https://www.elastic.co/guide/en/kibana/{{version}}/job-tips.html#detectors" - }, - "detectors_function_not_empty": { - "status": "SUCCESS", - "heading": "Detector functions", - "text": "Presence of detector functions validated in all detectors.", - "url": "https://www.elastic.co/guide/en/kibana/{{version}}/job-tips.html#detectors" - }, - "index_fields_invalid": { - "status": "ERROR", - "text": "Could not load fields from index." - }, - "index_fields_valid": { - "status": "SUCCESS", - "text": "Index fields are present in the datafeed." - }, - "influencer_high": { - "status": "WARNING", - "text": "The job configuration includes more than 3 influencers. Consider using fewer influencers or creating multiple jobs.", - "url": "https://www.elastic.co/guide/en/kibana/{{version}}/job-tips.html#influencers" - }, - "influencer_low": { - "status": "WARNING", - "text": "No influencers have been configured. Picking an influencer is strongly recommended.", - "url": "https://www.elastic.co/guide/en/kibana/{{version}}/job-tips.html#influencers" - }, - "influencer_low_suggestion": { - "status": "WARNING", - "text": "No influencers have been configured. Consider using {{influencerSuggestion}} as an influencer.", - "url": "https://www.elastic.co/guide/en/kibana/{{version}}/job-tips.html#influencers" - }, - "influencer_low_suggestions": { - "status": "WARNING", - "text": "No influencers have been configured. Consider using one or more of {{influencerSuggestion}}.", - "url": "https://www.elastic.co/guide/en/kibana/{{version}}/job-tips.html#influencers" - }, - "job_id_empty": { - "status": "ERROR", - "text": "The job name field must not be empty.", - "url": "https://www.elastic.co/guide/en/elasticsearch/reference/{{version}}/ml-job-resource.html#ml-job-resource" - }, - "job_id_invalid": { - "status": "ERROR", - "text": "The job name is invalid. It can contain lowercase alphanumeric (a-z and 0-9) characters, hyphens or underscores and must start and end with an alphanumeric character.", - "url": "https://www.elastic.co/guide/en/elasticsearch/reference/{{version}}/ml-job-resource.html#ml-job-resource" - }, - "job_id_valid": { - "status": "SUCCESS", - "heading": "Job id format is valid.", - "text": "Lowercase alphanumeric (a-z and 0-9) characters, hyphens or underscores, starts and ends with an alphanumeric character.", - "url": "https://www.elastic.co/guide/en/elasticsearch/reference/{{version}}/ml-job-resource.html#ml-job-resource" - }, - "job_group_id_invalid": { - "status": "ERROR", - "text": "One of the job group names is invalid. They can contain lowercase alphanumeric (a-z and 0-9) characters, hyphens or underscores and must start and end with an alphanumeric character.", - "url": "https://www.elastic.co/guide/en/elasticsearch/reference/{{version}}/ml-job-resource.html#ml-job-resource" - }, - "job_group_id_valid": { - "status": "SUCCESS", - "heading": "Job group id formats are valid.", - "text": "Lowercase alphanumeric (a-z and 0-9) characters, hyphens or underscores, starts and ends with an alphanumeric character.", - "url": "https://www.elastic.co/guide/en/elasticsearch/reference/{{version}}/ml-job-resource.html#ml-job-resource" - }, - "skipped_extended_tests": { - "status": "WARNING", - "text": "Skipped additional checks because the basic requirements of the job configuration were not met." - }, - "success_cardinality": { - "status": "SUCCESS", - "heading": "Cardinality", - "text": "Cardinality of detector fields is within recommended bounds.", - "url": "https://www.elastic.co/guide/en/kibana/{{version}}/job-tips.html#cardinality" - }, - "success_bucket_span": { - "status": "SUCCESS", - "heading": "Bucket span", - "text": "Format of \"{{bucketSpan}}\" is valid and passed validation checks.", - "url": "https://www.elastic.co/guide/en/kibana/{{version}}/job-tips.html#bucket-span" - }, - "success_influencers": { - "status": "SUCCESS", - "text": "Influencer configuration passed the validation checks.", - "url": "https://www.elastic.co/guide/en/kibana/{{version}}/job-tips.html#influencers" - }, - "estimated_mml_greater_than_max_mml": { - "status": "WARNING", - "text": "The estimated model memory limit is greater than the max model memory limit configured for this cluster." - }, - "mml_greater_than_max_mml": { - "status": "ERROR", - "text": "The model memory limit is greater than the max model memory limit configured for this cluster." - }, - "mml_value_invalid": { - "status": "ERROR", - "text": "{{mml}} is not a valid value for model memory limit. The value needs to be at least 1MB and should be specified in bytes e.g. 10MB.", - "url": "https://www.elastic.co/guide/en/kibana/{{version}}/job-tips.html#model-memory-limits" - }, - "half_estimated_mml_greater_than_mml": { - "status": "WARNING", - "text": "The specified model memory limit is less than half of the estimated model memory limit and will likely hit the hard limit.", - "url": "https://www.elastic.co/guide/en/kibana/{{version}}/job-tips.html#model-memory-limits" - }, - "estimated_mml_greater_than_mml": { - "status": "INFO", - "text": "The estimated model memory limit is greater than the model memory limit you have configured.", - "url": "https://www.elastic.co/guide/en/kibana/{{version}}/job-tips.html#model-memory-limits" - }, - "success_mml": { - "status": "SUCCESS", - "heading": "Model memory limit", - "text": "Valid and within the estimated model memory limit.", - "url": "https://www.elastic.co/guide/en/kibana/{{version}}/job-tips.html#model-memory-limits" - }, - "success_time_range": { - "status": "SUCCESS", - "heading": "Time range", - "text": "Valid and long enough to model patterns in the data." - }, - "time_field_invalid": { - "status": "ERROR", - "text": "'{{timeField}}' cannot be used as the time-field because it's not a valid field of type 'date'." - }, - "time_range_short": { - "status": "WARNING", - "heading": "Time range", - "text": "The selected or available time range might be too short. The recommended minimum time range should be at least {{minTimeSpanReadable}} and {{bucketSpanCompareFactor}} times the bucket span." - }, - "time_range_before_epoch": { - "status": "WARNING", - "heading": "Time range", - "text": "The selected or available time range contains data with timestamps before the UNIX epoch beginning. Timestamps before 01/01/1970 00:00:00 (UTC) are not supported for machine learning jobs." - } -}