mirror of
https://github.com/elastic/kibana.git
synced 2025-04-23 01:13:23 -04:00
Fix: #36264
This commit is contained in:
parent
013235b03a
commit
4f7fc12f6b
14 changed files with 51 additions and 32 deletions
|
@ -37,6 +37,7 @@ function FieldSelectUi({
|
|||
onChange,
|
||||
disabled,
|
||||
restrict,
|
||||
placeholder,
|
||||
uiRestrictions,
|
||||
...rest
|
||||
}) {
|
||||
|
@ -76,9 +77,7 @@ function FieldSelectUi({
|
|||
|
||||
return (
|
||||
<EuiComboBox
|
||||
placeholder={i18n.translate('tsvb.fieldSelect.selectFieldPlaceholder', {
|
||||
defaultMessage: 'Select field...',
|
||||
})}
|
||||
placeholder={placeholder}
|
||||
isDisabled={disabled}
|
||||
options={options}
|
||||
selectedOptions={selectedOptions}
|
||||
|
@ -93,6 +92,9 @@ FieldSelectUi.defaultProps = {
|
|||
indexPattern: '*',
|
||||
disabled: false,
|
||||
restrict: [],
|
||||
placeholder: i18n.translate('tsvb.fieldSelect.selectFieldPlaceholder', {
|
||||
defaultMessage: 'Select field...',
|
||||
})
|
||||
};
|
||||
|
||||
FieldSelectUi.propTypes = {
|
||||
|
@ -105,6 +107,7 @@ FieldSelectUi.propTypes = {
|
|||
type: PropTypes.string,
|
||||
value: PropTypes.string,
|
||||
uiRestrictions: PropTypes.object,
|
||||
placeholder: PropTypes.string,
|
||||
};
|
||||
|
||||
const FieldSelect = injectI18n(FieldSelectUi);
|
||||
|
|
|
@ -54,8 +54,9 @@ export const IndexPattern = props => {
|
|||
};
|
||||
|
||||
const htmlId = htmlIdGenerator();
|
||||
|
||||
const model = { ...defaults, ...props.model };
|
||||
const isDefaultIndexPatternUsed = model.default_index_pattern && !model[indexPatternName];
|
||||
|
||||
return (
|
||||
<div className={props.className}>
|
||||
<EuiFlexGroup responsive={false} wrap={true}>
|
||||
|
@ -66,10 +67,10 @@ export const IndexPattern = props => {
|
|||
id="tsvb.indexPatternLabel"
|
||||
defaultMessage="Index pattern"
|
||||
/>)}
|
||||
helpText={(model.default_index_pattern && !model[indexPatternName] && <FormattedMessage
|
||||
helpText={isDefaultIndexPatternUsed && <FormattedMessage
|
||||
id="tsvb.indexPattern.searchByDefaultIndex"
|
||||
defaultMessage="Default index pattern is used. To query all indexes use *"
|
||||
/>)}
|
||||
/>}
|
||||
fullWidth
|
||||
>
|
||||
<EuiFieldText
|
||||
|
@ -99,6 +100,7 @@ export const IndexPattern = props => {
|
|||
onChange={handleSelectChange(timeFieldName)}
|
||||
indexPattern={model[indexPatternName]}
|
||||
fields={fields}
|
||||
placeholder={isDefaultIndexPatternUsed ? model.default_timefield : undefined}
|
||||
fullWidth
|
||||
/>
|
||||
</EuiFormRow>
|
||||
|
|
|
@ -39,11 +39,17 @@ function ReactEditorControllerProvider(Private, config) {
|
|||
const savedObjectsClient = chrome.getSavedObjectsClient();
|
||||
const indexPattern = await savedObjectsClient.get('index-pattern', config.get('defaultIndex'));
|
||||
|
||||
return indexPattern.attributes.title;
|
||||
return indexPattern.attributes;
|
||||
};
|
||||
|
||||
fetchDefaultParams = async () => {
|
||||
this.state.vis.params.default_index_pattern = await this.fetchDefaultIndexPattern();
|
||||
const {
|
||||
title,
|
||||
timeFieldName,
|
||||
} = await this.fetchDefaultIndexPattern();
|
||||
|
||||
this.state.vis.params.default_index_pattern = title;
|
||||
this.state.vis.params.default_timefield = timeFieldName;
|
||||
this.state.vis.fields = await fetchIndexPatternFields(this.state.vis);
|
||||
|
||||
this.state.isLoaded = true;
|
||||
|
|
|
@ -64,7 +64,7 @@ export default function MetricsVisProvider(Private) {
|
|||
fill: 0.5,
|
||||
stacked: 'none'
|
||||
}],
|
||||
time_field: '@timestamp',
|
||||
time_field: '',
|
||||
index_pattern: '',
|
||||
interval: 'auto',
|
||||
axis_position: 'left',
|
||||
|
|
|
@ -17,8 +17,18 @@
|
|||
* under the License.
|
||||
*/
|
||||
|
||||
export default function getIntervalAndTimefield(panel, series = {}) {
|
||||
const timeField = series.override_index_pattern && series.series_time_field || panel.time_field;
|
||||
import { get } from 'lodash';
|
||||
|
||||
const DEFAULT_TIME_FIELD = '@timestamp';
|
||||
|
||||
export default function getIntervalAndTimefield(panel, series = {}, indexPatternObject) {
|
||||
const getDefaultTimeField = () => get(indexPatternObject, 'timeFieldName', DEFAULT_TIME_FIELD);
|
||||
|
||||
const timeField = (series.override_index_pattern && series.series_time_field || panel.time_field) || getDefaultTimeField();
|
||||
const interval = series.override_index_pattern && series.series_interval || panel.interval;
|
||||
return { timeField, interval };
|
||||
|
||||
return {
|
||||
timeField,
|
||||
interval,
|
||||
};
|
||||
}
|
||||
|
|
|
@ -29,7 +29,7 @@ export async function getIndexPatternObject(req, indexPatternString) {
|
|||
const savedObjectClient = req.getSavedObjectsClient();
|
||||
const indexPatternObjects = await savedObjectClient.find({
|
||||
type: 'index-pattern',
|
||||
fields: ['title', 'fields'],
|
||||
fields: ['title', 'fields', 'timeFieldName'],
|
||||
search: indexPatternString ? `"${indexPatternString}"` : null,
|
||||
search_fields: ['title'],
|
||||
});
|
||||
|
@ -38,9 +38,10 @@ export async function getIndexPatternObject(req, indexPatternString) {
|
|||
const indexPatterns = indexPatternObjects.saved_objects
|
||||
.filter(obj => obj.attributes.title === indexPatternString || (defaultIndex && obj.id === defaultIndex))
|
||||
.map(indexPattern => {
|
||||
const { title, fields } = indexPattern.attributes;
|
||||
const { title, fields, timeFieldName } = indexPattern.attributes;
|
||||
return {
|
||||
title,
|
||||
timeFieldName,
|
||||
fields: JSON.parse(fields),
|
||||
};
|
||||
});
|
||||
|
|
|
@ -23,7 +23,7 @@ import getIntervalAndTimefield from '../../get_interval_and_timefield';
|
|||
import { set } from 'lodash';
|
||||
export default function dateHistogram(req, panel, series, esQueryConfig, indexPatternObject, capabilities) {
|
||||
return next => doc => {
|
||||
const { timeField, interval } = getIntervalAndTimefield(panel, series);
|
||||
const { timeField, interval } = getIntervalAndTimefield(panel, series, indexPatternObject);
|
||||
const { bucketSize, intervalString } = getBucketSize(req, interval, capabilities);
|
||||
const { from, to } = offsetTime(req, series.offset_time);
|
||||
const timezone = capabilities.searchTimezone;
|
||||
|
|
|
@ -23,9 +23,7 @@ import bucketTransform from '../../helpers/bucket_transform';
|
|||
import getIntervalAndTimefield from '../../get_interval_and_timefield';
|
||||
export default function metricBuckets(req, panel, series, esQueryConfig, indexPatternObject, capabilities) {
|
||||
return next => doc => {
|
||||
const {
|
||||
interval
|
||||
} = getIntervalAndTimefield(panel, series);
|
||||
const { interval } = getIntervalAndTimefield(panel, series, indexPatternObject);
|
||||
const {
|
||||
intervalString
|
||||
} = getBucketSize(req, interval, capabilities);
|
||||
|
|
|
@ -21,15 +21,15 @@ import offsetTime from '../../offset_time';
|
|||
import getIntervalAndTimefield from '../../get_interval_and_timefield';
|
||||
import { buildEsQuery } from '@kbn/es-query';
|
||||
|
||||
export default function query(req, panel, series, esQueryConfig, indexPattern) {
|
||||
export default function query(req, panel, series, esQueryConfig, indexPatternObject) {
|
||||
return next => doc => {
|
||||
const { timeField } = getIntervalAndTimefield(panel, series);
|
||||
const { timeField } = getIntervalAndTimefield(panel, series, indexPatternObject);
|
||||
const { from, to } = offsetTime(req, series.offset_time);
|
||||
|
||||
doc.size = 0;
|
||||
const queries = !panel.ignore_global_filter ? req.payload.query : [];
|
||||
const filters = !panel.ignore_global_filter ? req.payload.filters : [];
|
||||
doc.query = buildEsQuery(indexPattern, queries, filters, esQueryConfig);
|
||||
doc.query = buildEsQuery(indexPatternObject, queries, filters, esQueryConfig);
|
||||
|
||||
const timerange = {
|
||||
range: {
|
||||
|
|
|
@ -23,9 +23,7 @@ import bucketTransform from '../../helpers/bucket_transform';
|
|||
import getIntervalAndTimefield from '../../get_interval_and_timefield';
|
||||
export default function siblingBuckets(req, panel, series, esQueryConfig, indexPatternObject, capabilities) {
|
||||
return next => doc => {
|
||||
const {
|
||||
interval
|
||||
} = getIntervalAndTimefield(panel, series);
|
||||
const { interval } = getIntervalAndTimefield(panel, series, indexPatternObject);
|
||||
const {
|
||||
bucketSize
|
||||
} = getBucketSize(req, interval, capabilities);
|
||||
|
|
|
@ -25,7 +25,7 @@ import { calculateAggRoot } from './calculate_agg_root';
|
|||
|
||||
export default function dateHistogram(req, panel, esQueryConfig, indexPatternObject, capabilities) {
|
||||
return next => doc => {
|
||||
const { timeField, interval } = getIntervalAndTimefield(panel);
|
||||
const { timeField, interval } = getIntervalAndTimefield(panel, {}, indexPatternObject);
|
||||
const { bucketSize, intervalString } = getBucketSize(req, interval, capabilities);
|
||||
const { from, to } = getTimerange(req);
|
||||
const timezone = capabilities.searchTimezone;
|
||||
|
|
|
@ -22,9 +22,10 @@ import getBucketSize from '../../helpers/get_bucket_size';
|
|||
import bucketTransform from '../../helpers/bucket_transform';
|
||||
import getIntervalAndTimefield from '../../get_interval_and_timefield';
|
||||
import { calculateAggRoot } from './calculate_agg_root';
|
||||
export default function metricBuckets(req, panel) {
|
||||
|
||||
export default function metricBuckets(req, panel, esQueryConfig, indexPatternObject) {
|
||||
return next => doc => {
|
||||
const { interval } = getIntervalAndTimefield(panel);
|
||||
const { interval } = getIntervalAndTimefield(panel, {}, indexPatternObject);
|
||||
const { intervalString } = getBucketSize(req, interval);
|
||||
panel.series.forEach(column => {
|
||||
const aggRoot = calculateAggRoot(doc, column);
|
||||
|
|
|
@ -20,16 +20,16 @@ import { buildEsQuery } from '@kbn/es-query';
|
|||
import getTimerange from '../../helpers/get_timerange';
|
||||
import getIntervalAndTimefield from '../../get_interval_and_timefield';
|
||||
|
||||
export default function query(req, panel, esQueryConfig, indexPattern) {
|
||||
export default function query(req, panel, esQueryConfig, indexPatternObject) {
|
||||
return next => doc => {
|
||||
const { timeField } = getIntervalAndTimefield(panel);
|
||||
const { timeField } = getIntervalAndTimefield(panel, {}, indexPatternObject);
|
||||
const { from, to } = getTimerange(req);
|
||||
|
||||
doc.size = 0;
|
||||
|
||||
const queries = !panel.ignore_global_filter ? req.payload.query : [];
|
||||
const filters = !panel.ignore_global_filter ? req.payload.filters : [];
|
||||
doc.query = buildEsQuery(indexPattern, queries, filters, esQueryConfig);
|
||||
doc.query = buildEsQuery(indexPatternObject, queries, filters, esQueryConfig);
|
||||
|
||||
const timerange = {
|
||||
range: {
|
||||
|
|
|
@ -22,9 +22,9 @@ import getBucketSize from '../../helpers/get_bucket_size';
|
|||
import bucketTransform from '../../helpers/bucket_transform';
|
||||
import getIntervalAndTimefield from '../../get_interval_and_timefield';
|
||||
import { calculateAggRoot } from './calculate_agg_root';
|
||||
export default function siblingBuckets(req, panel) {
|
||||
export default function siblingBuckets(req, panel, esQueryConfig, indexPatternObject) {
|
||||
return next => doc => {
|
||||
const { interval } = getIntervalAndTimefield(panel);
|
||||
const { interval } = getIntervalAndTimefield(panel, {}, indexPatternObject);
|
||||
const { bucketSize } = getBucketSize(req, interval);
|
||||
panel.series.forEach(column => {
|
||||
const aggRoot = calculateAggRoot(doc, column);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue