Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Uptime] Add Settings Page #53550

Merged
merged 103 commits into from
Mar 21, 2020
Merged
Show file tree
Hide file tree
Changes from 92 commits
Commits
Show all changes
103 commits
Select commit Hold shift + click to select a range
d408981
check
andrewvc Dec 19, 2019
49665d4
Moar
andrewvc Dec 19, 2019
3947cac
More similarity to infra
andrewvc Dec 19, 2019
8247b21
Fix syntax
andrewvc Dec 19, 2019
7f5e8b6
Fix mappings key
andrewvc Dec 19, 2019
a1bc3ff
check
andrewvc Dec 20, 2019
0e5cf0a
dynamic settings work
andrewvc Dec 20, 2019
4a04c71
Temp
andrewvc Dec 20, 2019
b03253d
Merge remote-tracking branch 'origin/master' into source-settings
andrewvc Jan 2, 2020
e6af3f9
Merge remote-tracking branch 'origin/master' into source-settings
andrewvc Jan 2, 2020
ba99dd9
Fix type issues
andrewvc Jan 2, 2020
134018c
Merge remote-tracking branch 'origin/master' into source-settings
andrewvc Jan 28, 2020
5150e14
Rough out settings page
andrewvc Jan 28, 2020
29a26ca
Checkpoint
andrewvc Jan 31, 2020
90acfd0
Checkpoint
andrewvc Jan 31, 2020
4cd5daa
checkpoint
andrewvc Feb 4, 2020
4c16ec3
checkpoint
andrewvc Feb 4, 2020
be3d8dc
More form stuff
andrewvc Feb 4, 2020
4d8830b
Checkpoint
andrewvc Feb 5, 2020
c96241c
Merge remote-tracking branch 'origin/master' into source-settings
andrewvc Feb 5, 2020
cc4ab4b
checkpoint
andrewvc Feb 5, 2020
d26d7a9
checkpoint
andrewvc Feb 6, 2020
252dbbd
form saves work
andrewvc Feb 6, 2020
8879189
form saves work
andrewvc Feb 6, 2020
daa38be
Merge remote-tracking branch 'origin/master' into source-settings
andrewvc Feb 24, 2020
54e303b
Merge remote-tracking branch 'origin/master' into source-settings
andrewvc Feb 25, 2020
7a1d1c3
Fix routes
andrewvc Feb 25, 2020
e38c263
Merge remote-tracking branch 'origin/master' into source-settings
andrewvc Feb 25, 2020
dfb879c
settings page sets
andrewvc Feb 25, 2020
b4ed4f0
Merge remote-tracking branch 'origin/master' into source-settings
andrewvc Feb 25, 2020
d917bbd
Move SO type
andrewvc Feb 26, 2020
88cf2b9
Checkpoint
andrewvc Feb 26, 2020
8940500
Checkpoint
andrewvc Feb 26, 2020
79541a3
It works (mostly)!
andrewvc Feb 26, 2020
ba99f79
Checkpoint
andrewvc Feb 26, 2020
fecd39b
Merge remote-tracking branch 'origin/master' into source-settings
andrewvc Feb 26, 2020
0c5a4be
Saves work again
andrewvc Feb 26, 2020
800fc39
Fix type issue
andrewvc Feb 27, 2020
2ea3da5
Fix type issue
andrewvc Feb 27, 2020
43b0180
Merge remote-tracking branch 'origin/master' into source-settings
andrewvc Feb 27, 2020
c37beee
Much cleanup
andrewvc Feb 27, 2020
28bf3cd
Merge remote-tracking branch 'origin/master' into source-settings
andrewvc Mar 2, 2020
f790060
Remove needless comment
andrewvc Mar 2, 2020
f142580
Consolidate saved objects code
andrewvc Mar 2, 2020
d73c8fd
Merge remote-tracking branch 'origin/master' into source-settings
andrewvc Mar 2, 2020
4c427fe
fmt
andrewvc Mar 3, 2020
fe2bd0c
Add dynamic settings API tests
andrewvc Mar 3, 2020
379ffff
Merge remote-tracking branch 'origin/master' into source-settings
andrewvc Mar 3, 2020
44a9661
Add form tag, link to settings, tests
andrewvc Mar 4, 2020
6366a7c
Add functional tests
andrewvc Mar 5, 2020
bd64489
Merge remote-tracking branch 'origin/master' into source-settings
andrewvc Mar 5, 2020
b8570c8
Don't return create error to user
andrewvc Mar 5, 2020
409a3f0
Fix syntax
andrewvc Mar 5, 2020
2023b43
Add header
andrewvc Mar 5, 2020
75acc74
Remove unnecessary ts-ignore
andrewvc Mar 5, 2020
69a1670
Merge remote-tracking branch 'origin/master' into source-settings
andrewvc Mar 5, 2020
de99c50
Apply suggestions from code review
andrewvc Mar 5, 2020
0bc3b51
Fix syntax
andrewvc Mar 5, 2020
8b26a88
Merge remote-tracking branch 'origin/master' into source-settings
andrewvc Mar 5, 2020
4df2f4b
Fix types
andrewvc Mar 5, 2020
61f7b42
Only update fixtures if changed
andrewvc Mar 5, 2020
56160c6
Merge branch 'master' into source-settings
andrewvc Mar 5, 2020
8507737
Various improvements
andrewvc Mar 6, 2020
42d908c
Move settings buttons inside panel
andrewvc Mar 6, 2020
2154b69
Finish splitting out breadcrumbs
andrewvc Mar 12, 2020
6fc4d1c
Remove unused files
andrewvc Mar 12, 2020
88a8270
Better handling of privileges with settings
andrewvc Mar 12, 2020
9ff2c92
Toasts kind of work
andrewvc Mar 13, 2020
be5e839
Merge remote-tracking branch 'origin/master' into source-settings
andrewvc Mar 13, 2020
16ac622
Merge remote-tracking branch 'origin/master' into source-settings
andrewvc Mar 13, 2020
dbe68c1
Better toasts
andrewvc Mar 13, 2020
838f9da
Security / functionality improvement
andrewvc Mar 16, 2020
0b6785d
Merge remote-tracking branch 'origin/master' into source-settings
andrewvc Mar 17, 2020
8332b5d
Merge remote-tracking branch 'origin/master' into source-settings
andrewvc Mar 17, 2020
2ea058c
Path fixes
andrewvc Mar 17, 2020
7f2d080
Revert "Path fixes"
andrewvc Mar 18, 2020
129b4b3
Merge remote-tracking branch 'origin/master' into source-settings
andrewvc Mar 18, 2020
a9b3abf
Undo yarn lock change
andrewvc Mar 18, 2020
c7bf15c
Merge remote-tracking branch 'origin/master' into source-settings
andrewvc Mar 18, 2020
3d86dd9
Fix tests
andrewvc Mar 18, 2020
b5e5ab9
All tests pass again
andrewvc Mar 18, 2020
b24a00c
Merge remote-tracking branch 'origin/master' into source-settings
andrewvc Mar 18, 2020
27fda4c
Tidy tests
andrewvc Mar 18, 2020
87edaf8
Merge branch 'master' into source-settings
elasticmachine Mar 18, 2020
6296c93
Merge branch 'master' into source-settings
elasticmachine Mar 19, 2020
e4dcbfc
Merge remote-tracking branch 'avc/source-settings' into source-settings
andrewvc Mar 19, 2020
eada6da
Incorporate PR feedback
andrewvc Mar 19, 2020
4a8abb2
Merge branch 'master' into source-settings
elasticmachine Mar 19, 2020
1ad5741
Merge remote-tracking branch 'origin/master' into source-settings
andrewvc Mar 19, 2020
7fe5e49
Merge remote-tracking branch 'avc/source-settings' into source-settings
andrewvc Mar 19, 2020
b35ef72
Merge remote-tracking branch 'origin/master' into source-settings
andrewvc Mar 19, 2020
1bc87ee
Merge branch 'master' into source-settings
elasticmachine Mar 20, 2020
9ce1004
Merge remote-tracking branch 'origin/master' into source-settings
andrewvc Mar 20, 2020
37d0545
Fix failing tests
andrewvc Mar 20, 2020
12c3347
Merge remote-tracking branch 'avc/source-settings' into source-settings
andrewvc Mar 20, 2020
bcadf4c
Merge remote-tracking branch 'origin/master' into source-settings
andrewvc Mar 20, 2020
b794065
Fix failing tests
andrewvc Mar 20, 2020
474d1dd
Fix index collision
andrewvc Mar 20, 2020
e5c8298
Merge remote-tracking branch 'origin/master' into source-settings
andrewvc Mar 21, 2020
c99d896
Update snap
andrewvc Mar 21, 2020
b93eb0f
Remove unused var
andrewvc Mar 21, 2020
8b75416
Fetch settings lazily
andrewvc Mar 21, 2020
18a6cb6
Invoke settings in test blocks only
andrewvc Mar 21, 2020
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions x-pack/legacy/plugins/uptime/common/constants/ui.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@ export const MONITOR_ROUTE = '/monitor/:monitorId?';

export const OVERVIEW_ROUTE = '/';

export const SETTINGS_ROUTE = '/settings';

export enum STATUS {
UP = 'up',
DOWN = 'down',
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
/*
* 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 * as t from 'io-ts';

export const DynamicSettingsType = t.type({
heartbeatIndices: t.string,
});

export const DynamicSettingsSaveType = t.intersection([
t.type({
success: t.boolean,
}),
t.partial({
error: t.string,
}),
]);

export type DynamicSettings = t.TypeOf<typeof DynamicSettingsType>;
export type DynamicSettingsSaveResponse = t.TypeOf<typeof DynamicSettingsSaveType>;

export const defaultDynamicSettings: DynamicSettings = {
heartbeatIndices: 'heartbeat-8*',
};
Comment on lines +25 to +27
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Shouldn't this be moved to constants?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would argue that not everything needs to be a constant, it's just an extra file. Mind if we try putting some stuff more inline? It is in the common folder and is near it's natural home IMHO, which is the DynamicSettings type definition.

1 change: 1 addition & 0 deletions x-pack/legacy/plugins/uptime/common/runtime_types/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,3 +9,4 @@ export * from './common';
export * from './monitor';
export * from './overview_filters';
export * from './snapshot';
export * from './dynamic_settings';

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ interface DataMissingProps {
export const DataMissing = ({ headingMessage }: DataMissingProps) => {
const { basePath } = useContext(UptimeSettingsContext);
return (
<EuiFlexGroup justifyContent="center">
<EuiFlexGroup justifyContent="center" data-test-subj="data-missing">
<EuiFlexItem grow={false}>
<EuiSpacer size="xs" />
<EuiPanel>
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
/*
* 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 { ChromeBreadcrumb } from 'kibana/public';
import React from 'react';
import { Route } from 'react-router-dom';
import { mountWithRouter } from '../../lib';
import { OVERVIEW_ROUTE } from '../../../common/constants';
import { KibanaContextProvider } from '../../../../../../../src/plugins/kibana_react/public';
import { UptimeUrlParams, getSupportedUrlParams } from '../../lib/helper';
import { makeBaseBreadcrumb, useBreadcrumbs } from '../../hooks/use_breadcrumbs';

describe('useBreadcrumbs', () => {
it('sets the given breadcrumbs', () => {
const [getBreadcrumbs, core] = mockCore();

const expectedCrumbs: ChromeBreadcrumb[] = [
{
text: 'Crumb: ',
href: 'http://href.example.net',
},
{
text: 'Crumb II: Son of Crumb',
href: 'http://href2.example.net',
},
];

const Component = () => {
useBreadcrumbs(expectedCrumbs);
return <>Hello</>;
};

mountWithRouter(
<KibanaContextProvider services={{ ...core }}>
<Route path={OVERVIEW_ROUTE}>
<Component />
</Route>
</KibanaContextProvider>
);

const urlParams: UptimeUrlParams = getSupportedUrlParams({});
expect(getBreadcrumbs()).toStrictEqual([makeBaseBreadcrumb(urlParams)].concat(expectedCrumbs));
});
});

const mockCore: () => [() => ChromeBreadcrumb[], any] = () => {
let breadcrumbObj: ChromeBreadcrumb[] = [];
const get = () => {
return breadcrumbObj;
};
const core = {
chrome: {
setBreadcrumbs: (newBreadcrumbs: ChromeBreadcrumb[]) => {
breadcrumbObj = newBreadcrumbs;
},
},
};

return [get, core];
};
41 changes: 41 additions & 0 deletions x-pack/legacy/plugins/uptime/public/hooks/use_breadcrumbs.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
/*
* 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 { ChromeBreadcrumb } from 'kibana/public';
import { i18n } from '@kbn/i18n';
import { useEffect } from 'react';
import { UptimeUrlParams } from '../lib/helper';
import { stringifyUrlParams } from '../lib/helper/stringify_url_params';
import { useKibana } from '../../../../../../src/plugins/kibana_react/public';
import { useUrlParams } from '.';

export const makeBaseBreadcrumb = (params?: UptimeUrlParams): ChromeBreadcrumb => {
let href = '#/';
if (params) {
const crumbParams: Partial<UptimeUrlParams> = { ...params };
// We don't want to encode this values because they are often set to Date.now(), the relative
// values in dateRangeStart are better for a URL.
delete crumbParams.absoluteDateRangeStart;
delete crumbParams.absoluteDateRangeEnd;
href += stringifyUrlParams(crumbParams, true);
}
return {
text: i18n.translate('xpack.uptime.breadcrumbs.overviewBreadcrumbText', {
defaultMessage: 'Uptime',
}),
href,
};
};

export const useBreadcrumbs = (extraCrumbs: ChromeBreadcrumb[]) => {
const params = useUrlParams()[0]();
const setBreadcrumbs = useKibana().services.chrome?.setBreadcrumbs;
useEffect(() => {
if (setBreadcrumbs) {
setBreadcrumbs([makeBaseBreadcrumb(params)].concat(extraCrumbs));
}
});
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

you can optimize it by passing effect depencies array, that way it will be only called when extracrumbs really changes, right now this will be called each time component renders.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done!

};
Loading