mirror of
https://github.com/elastic/kibana.git
synced 2025-04-24 09:48:58 -04:00
[ML] translate job validation messages
This commit is contained in:
parent
abc3815fd5
commit
e6317c8a3e
3 changed files with 413 additions and 221 deletions
|
@ -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', {
|
||||
|
|
410
x-pack/plugins/ml/server/models/job_validation/messages.js
Normal file
410
x-pack/plugins/ml/server/models/job_validation/messages.js
Normal file
|
@ -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.',
|
||||
})
|
||||
}
|
||||
};
|
||||
};
|
|
@ -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."
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue