Skip to content

Commit

Permalink
TSVB wrong default date field on default index-pattern (#36519) (#36980)
Browse files Browse the repository at this point in the history
Fix: #36264
  • Loading branch information
alexwizp authored May 23, 2019
1 parent 55ee25f commit 775eb3d
Show file tree
Hide file tree
Showing 14 changed files with 51 additions and 32 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ function FieldSelectUi({
onChange,
disabled,
restrict,
placeholder,
uiRestrictions,
...rest
}) {
Expand Down Expand Up @@ -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}
Expand All @@ -93,6 +92,9 @@ FieldSelectUi.defaultProps = {
indexPattern: '*',
disabled: false,
restrict: [],
placeholder: i18n.translate('tsvb.fieldSelect.selectFieldPlaceholder', {
defaultMessage: 'Select field...',
})
};

FieldSelectUi.propTypes = {
Expand All @@ -105,6 +107,7 @@ FieldSelectUi.propTypes = {
type: PropTypes.string,
value: PropTypes.string,
uiRestrictions: PropTypes.object,
placeholder: PropTypes.string,
};

const FieldSelect = injectI18n(FieldSelectUi);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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}>
Expand All @@ -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
Expand Down Expand Up @@ -99,6 +100,7 @@ export const IndexPattern = props => {
onChange={handleSelectChange(timeFieldName)}
indexPattern={model[indexPatternName]}
fields={fields}
placeholder={isDefaultIndexPatternUsed ? model.default_timefield : undefined}
fullWidth
/>
</EuiFormRow>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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',
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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,
};
}
Original file line number Diff line number Diff line change
Expand Up @@ -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'],
});
Expand All @@ -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),
};
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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: {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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: {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down

0 comments on commit 775eb3d

Please sign in to comment.