mirror of
https://github.com/elastic/kibana.git
synced 2025-04-24 09:48:58 -04:00
[ML] Renaming saved object repair to sync (#84311)
* [ML] Remaiming saved object repair to sync * removing 0 from sync lists Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com>
This commit is contained in:
parent
cb55898c98
commit
090359ca5a
13 changed files with 101 additions and 111 deletions
|
@ -11,7 +11,7 @@ export interface SavedObjectResult {
|
|||
[jobId: string]: { success: boolean; error?: any };
|
||||
}
|
||||
|
||||
export interface RepairSavedObjectResponse {
|
||||
export interface SyncSavedObjectResponse {
|
||||
savedObjectsCreated: SavedObjectResult;
|
||||
savedObjectsDeleted: SavedObjectResult;
|
||||
datafeedsAdded: SavedObjectResult;
|
||||
|
|
|
@ -4,4 +4,4 @@
|
|||
* you may not use this file except in compliance with the Elastic License.
|
||||
*/
|
||||
|
||||
export { JobSpacesRepairFlyout } from './job_spaces_repair_flyout';
|
||||
export { JobSpacesSyncFlyout } from './job_spaces_sync_flyout';
|
|
@ -23,34 +23,31 @@ import {
|
|||
} from '@elastic/eui';
|
||||
|
||||
import { ml } from '../../services/ml_api_service';
|
||||
import {
|
||||
RepairSavedObjectResponse,
|
||||
SavedObjectResult,
|
||||
} from '../../../../common/types/saved_objects';
|
||||
import { RepairList } from './repair_list';
|
||||
import { SyncSavedObjectResponse, SavedObjectResult } from '../../../../common/types/saved_objects';
|
||||
import { SyncList } from './sync_list';
|
||||
import { useToastNotificationService } from '../../services/toast_notification_service';
|
||||
|
||||
interface Props {
|
||||
onClose: () => void;
|
||||
}
|
||||
export const JobSpacesRepairFlyout: FC<Props> = ({ onClose }) => {
|
||||
export const JobSpacesSyncFlyout: FC<Props> = ({ onClose }) => {
|
||||
const { displayErrorToast, displaySuccessToast } = useToastNotificationService();
|
||||
const [loading, setLoading] = useState(false);
|
||||
const [repairable, setRepairable] = useState(false);
|
||||
const [repairResp, setRepairResp] = useState<RepairSavedObjectResponse | null>(null);
|
||||
const [canSync, setCanSync] = useState(false);
|
||||
const [syncResp, setSyncResp] = useState<SyncSavedObjectResponse | null>(null);
|
||||
|
||||
async function loadRepairList(simulate: boolean = true) {
|
||||
async function loadSyncList(simulate: boolean = true) {
|
||||
setLoading(true);
|
||||
try {
|
||||
const resp = await ml.savedObjects.repairSavedObjects(simulate);
|
||||
setRepairResp(resp);
|
||||
const resp = await ml.savedObjects.syncSavedObjects(simulate);
|
||||
setSyncResp(resp);
|
||||
|
||||
const count = Object.values(resp).reduce((acc, cur) => acc + Object.keys(cur).length, 0);
|
||||
setRepairable(count > 0);
|
||||
setCanSync(count > 0);
|
||||
setLoading(false);
|
||||
return resp;
|
||||
} catch (error) {
|
||||
// this shouldn't be hit as errors are returned per-repair task
|
||||
// this shouldn't be hit as errors are returned per-sync task
|
||||
// as part of the response
|
||||
displayErrorToast(error);
|
||||
setLoading(false);
|
||||
|
@ -59,32 +56,33 @@ export const JobSpacesRepairFlyout: FC<Props> = ({ onClose }) => {
|
|||
}
|
||||
|
||||
useEffect(() => {
|
||||
loadRepairList();
|
||||
loadSyncList();
|
||||
}, []);
|
||||
|
||||
async function repair() {
|
||||
if (repairable) {
|
||||
// perform the repair
|
||||
const resp = await loadRepairList(false);
|
||||
// check simulate the repair again to check that all
|
||||
// items have been repaired.
|
||||
await loadRepairList(true);
|
||||
async function sync() {
|
||||
if (canSync) {
|
||||
// perform the sync
|
||||
const resp = await loadSyncList(false);
|
||||
// check simulate the sync again to check that all
|
||||
// items have been synchronized.
|
||||
await loadSyncList(true);
|
||||
|
||||
if (resp === null) {
|
||||
return;
|
||||
}
|
||||
const { successCount, errorCount } = getResponseCounts(resp);
|
||||
if (errorCount > 0) {
|
||||
const title = i18n.translate('xpack.ml.management.repairSavedObjectsFlyout.repair.error', {
|
||||
defaultMessage: 'Some jobs cannot be repaired.',
|
||||
const title = i18n.translate('xpack.ml.management.syncSavedObjectsFlyout.sync.error', {
|
||||
defaultMessage: 'Some jobs cannot be synchronized.',
|
||||
});
|
||||
displayErrorToast(resp as any, title);
|
||||
return;
|
||||
}
|
||||
|
||||
displaySuccessToast(
|
||||
i18n.translate('xpack.ml.management.repairSavedObjectsFlyout.repair.success', {
|
||||
defaultMessage: '{successCount} {successCount, plural, one {job} other {jobs}} repaired',
|
||||
i18n.translate('xpack.ml.management.syncSavedObjectsFlyout.sync.success', {
|
||||
defaultMessage:
|
||||
'{successCount} {successCount, plural, one {job} other {jobs}} synchronized',
|
||||
values: { successCount },
|
||||
})
|
||||
);
|
||||
|
@ -98,8 +96,8 @@ export const JobSpacesRepairFlyout: FC<Props> = ({ onClose }) => {
|
|||
<EuiTitle size="m">
|
||||
<h2>
|
||||
<FormattedMessage
|
||||
id="xpack.ml.management.repairSavedObjectsFlyout.headerLabel"
|
||||
defaultMessage="Repair saved objects"
|
||||
id="xpack.ml.management.syncSavedObjectsFlyout.headerLabel"
|
||||
defaultMessage="Synchronize saved objects"
|
||||
/>
|
||||
</h2>
|
||||
</EuiTitle>
|
||||
|
@ -108,33 +106,29 @@ export const JobSpacesRepairFlyout: FC<Props> = ({ onClose }) => {
|
|||
<EuiCallOut color="primary">
|
||||
<EuiText size="s">
|
||||
<FormattedMessage
|
||||
id="xpack.ml.management.repairSavedObjectsFlyout.description"
|
||||
defaultMessage="Repair the saved objects if they are out of sync with the machine learning jobs in Elasticsearch."
|
||||
id="xpack.ml.management.syncSavedObjectsFlyout.description"
|
||||
defaultMessage="Synchronize the saved objects if they are out of sync with the machine learning jobs in Elasticsearch."
|
||||
/>
|
||||
</EuiText>
|
||||
</EuiCallOut>
|
||||
<EuiSpacer />
|
||||
<RepairList repairItems={repairResp} />
|
||||
<SyncList syncItems={syncResp} />
|
||||
</EuiFlyoutBody>
|
||||
<EuiFlyoutFooter>
|
||||
<EuiFlexGroup justifyContent="spaceBetween">
|
||||
<EuiFlexItem grow={false}>
|
||||
<EuiButtonEmpty iconType="cross" onClick={onClose} flush="left">
|
||||
<FormattedMessage
|
||||
id="xpack.ml.management.repairSavedObjectsFlyout.closeButton"
|
||||
id="xpack.ml.management.syncSavedObjectsFlyout.closeButton"
|
||||
defaultMessage="Close"
|
||||
/>
|
||||
</EuiButtonEmpty>
|
||||
</EuiFlexItem>
|
||||
<EuiFlexItem grow={false}>
|
||||
<EuiButton
|
||||
onClick={repair}
|
||||
fill
|
||||
isDisabled={repairable === false || loading === true}
|
||||
>
|
||||
<EuiButton onClick={sync} fill isDisabled={canSync === false || loading === true}>
|
||||
<FormattedMessage
|
||||
id="xpack.ml.management.repairSavedObjectsFlyout.repairButton"
|
||||
defaultMessage="Repair"
|
||||
id="xpack.ml.management.syncSavedObjectsFlyout.syncButton"
|
||||
defaultMessage="Synchronize"
|
||||
/>
|
||||
</EuiButton>
|
||||
</EuiFlexItem>
|
||||
|
@ -145,7 +139,7 @@ export const JobSpacesRepairFlyout: FC<Props> = ({ onClose }) => {
|
|||
);
|
||||
};
|
||||
|
||||
function getResponseCounts(resp: RepairSavedObjectResponse) {
|
||||
function getResponseCounts(resp: SyncSavedObjectResponse) {
|
||||
let successCount = 0;
|
||||
let errorCount = 0;
|
||||
Object.values(resp).forEach((result: SavedObjectResult) => {
|
|
@ -9,38 +9,36 @@ import { FormattedMessage } from '@kbn/i18n/react';
|
|||
|
||||
import { EuiText, EuiTitle, EuiAccordion, EuiTextColor, EuiHorizontalRule } from '@elastic/eui';
|
||||
|
||||
import { RepairSavedObjectResponse } from '../../../../common/types/saved_objects';
|
||||
import { SyncSavedObjectResponse } from '../../../../common/types/saved_objects';
|
||||
|
||||
export const RepairList: FC<{ repairItems: RepairSavedObjectResponse | null }> = ({
|
||||
repairItems,
|
||||
}) => {
|
||||
if (repairItems === null) {
|
||||
export const SyncList: FC<{ syncItems: SyncSavedObjectResponse | null }> = ({ syncItems }) => {
|
||||
if (syncItems === null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return (
|
||||
<>
|
||||
<SavedObjectsCreated repairItems={repairItems} />
|
||||
<SavedObjectsCreated syncItems={syncItems} />
|
||||
|
||||
<EuiHorizontalRule margin="l" />
|
||||
|
||||
<SavedObjectsDeleted repairItems={repairItems} />
|
||||
<SavedObjectsDeleted syncItems={syncItems} />
|
||||
|
||||
<EuiHorizontalRule margin="l" />
|
||||
|
||||
<DatafeedsAdded repairItems={repairItems} />
|
||||
<DatafeedsAdded syncItems={syncItems} />
|
||||
|
||||
<EuiHorizontalRule margin="l" />
|
||||
|
||||
<DatafeedsRemoved repairItems={repairItems} />
|
||||
<DatafeedsRemoved syncItems={syncItems} />
|
||||
|
||||
<EuiHorizontalRule margin="l" />
|
||||
</>
|
||||
);
|
||||
};
|
||||
|
||||
const SavedObjectsCreated: FC<{ repairItems: RepairSavedObjectResponse }> = ({ repairItems }) => {
|
||||
const items = Object.keys(repairItems.savedObjectsCreated);
|
||||
const SavedObjectsCreated: FC<{ syncItems: SyncSavedObjectResponse }> = ({ syncItems }) => {
|
||||
const items = Object.keys(syncItems.savedObjectsCreated);
|
||||
|
||||
const title = (
|
||||
<>
|
||||
|
@ -48,7 +46,7 @@ const SavedObjectsCreated: FC<{ repairItems: RepairSavedObjectResponse }> = ({ r
|
|||
<h3>
|
||||
<EuiTextColor color={items.length ? 'default' : 'subdued'}>
|
||||
<FormattedMessage
|
||||
id="xpack.ml.management.repairSavedObjectsFlyout.savedObjectsCreated.title"
|
||||
id="xpack.ml.management.syncSavedObjectsFlyout.savedObjectsCreated.title"
|
||||
defaultMessage="Missing saved objects ({count})"
|
||||
values={{ count: items.length }}
|
||||
/>
|
||||
|
@ -59,7 +57,7 @@ const SavedObjectsCreated: FC<{ repairItems: RepairSavedObjectResponse }> = ({ r
|
|||
<p>
|
||||
<EuiTextColor color="subdued">
|
||||
<FormattedMessage
|
||||
id="xpack.ml.management.repairSavedObjectsFlyout.savedObjectsCreated.description"
|
||||
id="xpack.ml.management.syncSavedObjectsFlyout.savedObjectsCreated.description"
|
||||
defaultMessage="If there are jobs that do not have accompanying saved objects, they will be created in the current space."
|
||||
/>
|
||||
</EuiTextColor>
|
||||
|
@ -67,11 +65,11 @@ const SavedObjectsCreated: FC<{ repairItems: RepairSavedObjectResponse }> = ({ r
|
|||
</EuiText>
|
||||
</>
|
||||
);
|
||||
return <RepairItem id="savedObjectsCreated" title={title} items={items} />;
|
||||
return <SyncItem id="savedObjectsCreated" title={title} items={items} />;
|
||||
};
|
||||
|
||||
const SavedObjectsDeleted: FC<{ repairItems: RepairSavedObjectResponse }> = ({ repairItems }) => {
|
||||
const items = Object.keys(repairItems.savedObjectsDeleted);
|
||||
const SavedObjectsDeleted: FC<{ syncItems: SyncSavedObjectResponse }> = ({ syncItems }) => {
|
||||
const items = Object.keys(syncItems.savedObjectsDeleted);
|
||||
|
||||
const title = (
|
||||
<>
|
||||
|
@ -79,7 +77,7 @@ const SavedObjectsDeleted: FC<{ repairItems: RepairSavedObjectResponse }> = ({ r
|
|||
<h3>
|
||||
<EuiTextColor color={items.length ? 'default' : 'subdued'}>
|
||||
<FormattedMessage
|
||||
id="xpack.ml.management.repairSavedObjectsFlyout.savedObjectsDeleted.title"
|
||||
id="xpack.ml.management.syncSavedObjectsFlyout.savedObjectsDeleted.title"
|
||||
defaultMessage="Unmatched saved objects ({count})"
|
||||
values={{ count: items.length }}
|
||||
/>
|
||||
|
@ -90,7 +88,7 @@ const SavedObjectsDeleted: FC<{ repairItems: RepairSavedObjectResponse }> = ({ r
|
|||
<p>
|
||||
<EuiTextColor color="subdued">
|
||||
<FormattedMessage
|
||||
id="xpack.ml.management.repairSavedObjectsFlyout.savedObjectsDeleted.description"
|
||||
id="xpack.ml.management.syncSavedObjectsFlyout.savedObjectsDeleted.description"
|
||||
defaultMessage="If there are saved objects that do not have an accompanying job, they will be deleted."
|
||||
/>
|
||||
</EuiTextColor>
|
||||
|
@ -98,11 +96,11 @@ const SavedObjectsDeleted: FC<{ repairItems: RepairSavedObjectResponse }> = ({ r
|
|||
</EuiText>
|
||||
</>
|
||||
);
|
||||
return <RepairItem id="savedObjectsDeleted" title={title} items={items} />;
|
||||
return <SyncItem id="savedObjectsDeleted" title={title} items={items} />;
|
||||
};
|
||||
|
||||
const DatafeedsAdded: FC<{ repairItems: RepairSavedObjectResponse }> = ({ repairItems }) => {
|
||||
const items = Object.keys(repairItems.datafeedsAdded);
|
||||
const DatafeedsAdded: FC<{ syncItems: SyncSavedObjectResponse }> = ({ syncItems }) => {
|
||||
const items = Object.keys(syncItems.datafeedsAdded);
|
||||
|
||||
const title = (
|
||||
<>
|
||||
|
@ -110,7 +108,7 @@ const DatafeedsAdded: FC<{ repairItems: RepairSavedObjectResponse }> = ({ repair
|
|||
<h3>
|
||||
<EuiTextColor color={items.length ? 'default' : 'subdued'}>
|
||||
<FormattedMessage
|
||||
id="xpack.ml.management.repairSavedObjectsFlyout.datafeedsAdded.title"
|
||||
id="xpack.ml.management.syncSavedObjectsFlyout.datafeedsAdded.title"
|
||||
defaultMessage="Saved objects with missing datafeeds ({count})"
|
||||
values={{ count: items.length }}
|
||||
/>
|
||||
|
@ -121,7 +119,7 @@ const DatafeedsAdded: FC<{ repairItems: RepairSavedObjectResponse }> = ({ repair
|
|||
<p>
|
||||
<EuiTextColor color="subdued">
|
||||
<FormattedMessage
|
||||
id="xpack.ml.management.repairSavedObjectsFlyout.datafeedsAdded.description"
|
||||
id="xpack.ml.management.syncSavedObjectsFlyout.datafeedsAdded.description"
|
||||
defaultMessage="If there are saved objects that are missing the datafeed ID for anomaly detection jobs, the ID will be added."
|
||||
/>
|
||||
</EuiTextColor>
|
||||
|
@ -129,11 +127,11 @@ const DatafeedsAdded: FC<{ repairItems: RepairSavedObjectResponse }> = ({ repair
|
|||
</EuiText>
|
||||
</>
|
||||
);
|
||||
return <RepairItem id="datafeedsAdded" title={title} items={items} />;
|
||||
return <SyncItem id="datafeedsAdded" title={title} items={items} />;
|
||||
};
|
||||
|
||||
const DatafeedsRemoved: FC<{ repairItems: RepairSavedObjectResponse }> = ({ repairItems }) => {
|
||||
const items = Object.keys(repairItems.datafeedsRemoved);
|
||||
const DatafeedsRemoved: FC<{ syncItems: SyncSavedObjectResponse }> = ({ syncItems }) => {
|
||||
const items = Object.keys(syncItems.datafeedsRemoved);
|
||||
|
||||
const title = (
|
||||
<>
|
||||
|
@ -141,7 +139,7 @@ const DatafeedsRemoved: FC<{ repairItems: RepairSavedObjectResponse }> = ({ repa
|
|||
<h3>
|
||||
<EuiTextColor color={items.length ? 'default' : 'subdued'}>
|
||||
<FormattedMessage
|
||||
id="xpack.ml.management.repairSavedObjectsFlyout.datafeedsRemoved.title"
|
||||
id="xpack.ml.management.syncSavedObjectsFlyout.datafeedsRemoved.title"
|
||||
defaultMessage="Saved objects with unmatched datafeed IDs ({count})"
|
||||
values={{ count: items.length }}
|
||||
/>
|
||||
|
@ -152,7 +150,7 @@ const DatafeedsRemoved: FC<{ repairItems: RepairSavedObjectResponse }> = ({ repa
|
|||
<p>
|
||||
<EuiTextColor color="subdued">
|
||||
<FormattedMessage
|
||||
id="xpack.ml.management.repairSavedObjectsFlyout.datafeedsRemoved.description"
|
||||
id="xpack.ml.management.syncSavedObjectsFlyout.datafeedsRemoved.description"
|
||||
defaultMessage="If there are saved objects that use a datafeed that does not exist, they will be deleted."
|
||||
/>
|
||||
</EuiTextColor>
|
||||
|
@ -160,23 +158,21 @@ const DatafeedsRemoved: FC<{ repairItems: RepairSavedObjectResponse }> = ({ repa
|
|||
</EuiText>
|
||||
</>
|
||||
);
|
||||
return <RepairItem id="datafeedsRemoved" title={title} items={items} />;
|
||||
return <SyncItem id="datafeedsRemoved" title={title} items={items} />;
|
||||
};
|
||||
|
||||
const RepairItem: FC<{ id: string; title: JSX.Element; items: string[] }> = ({
|
||||
const SyncItem: FC<{ id: string; title: JSX.Element; items: string[] }> = ({
|
||||
id,
|
||||
title,
|
||||
items,
|
||||
}) => (
|
||||
<EuiAccordion id={id} buttonContent={title} paddingSize="l">
|
||||
<EuiText size="s">
|
||||
{items.length && (
|
||||
<ul>
|
||||
{items.map((item) => (
|
||||
<li key={item}>{item}</li>
|
||||
))}
|
||||
</ul>
|
||||
)}
|
||||
<ul>
|
||||
{items.map((item) => (
|
||||
<li key={item}>{item}</li>
|
||||
))}
|
||||
</ul>
|
||||
</EuiText>
|
||||
</EuiAccordion>
|
||||
);
|
|
@ -39,7 +39,7 @@ import { DataFrameAnalyticsList } from '../../../../data_frame_analytics/pages/a
|
|||
import { AccessDeniedPage } from '../access_denied_page';
|
||||
import { SharePluginStart } from '../../../../../../../../../src/plugins/share/public';
|
||||
import { SpacesPluginStart } from '../../../../../../../spaces/public';
|
||||
import { JobSpacesRepairFlyout } from '../../../../components/job_spaces_repair';
|
||||
import { JobSpacesSyncFlyout } from '../../../../components/job_spaces_sync';
|
||||
import { getDefaultAnomalyDetectionJobsListState } from '../../../../jobs/jobs_list/jobs';
|
||||
import { getMlGlobalServices } from '../../../../app';
|
||||
import { ListingPageUrlState } from '../../../../../../common/types/common';
|
||||
|
@ -125,7 +125,7 @@ export const JobsListPage: FC<{
|
|||
const spacesEnabled = spaces !== undefined;
|
||||
const [initialized, setInitialized] = useState(false);
|
||||
const [accessDenied, setAccessDenied] = useState(false);
|
||||
const [showRepairFlyout, setShowRepairFlyout] = useState(false);
|
||||
const [showSyncFlyout, setShowSyncFlyout] = useState(false);
|
||||
const [isMlEnabledInSpace, setIsMlEnabledInSpace] = useState(false);
|
||||
const tabs = useTabs(isMlEnabledInSpace, spacesEnabled);
|
||||
const [currentTabId, setCurrentTabId] = useState(tabs[0].id);
|
||||
|
@ -184,8 +184,8 @@ export const JobsListPage: FC<{
|
|||
);
|
||||
}
|
||||
|
||||
function onCloseRepairFlyout() {
|
||||
setShowRepairFlyout(false);
|
||||
function onCloseSyncFlyout() {
|
||||
setShowSyncFlyout(false);
|
||||
}
|
||||
|
||||
if (accessDenied) {
|
||||
|
@ -244,12 +244,12 @@ export const JobsListPage: FC<{
|
|||
<EuiPageContentBody>
|
||||
{spacesEnabled && (
|
||||
<>
|
||||
<EuiButtonEmpty onClick={() => setShowRepairFlyout(true)}>
|
||||
{i18n.translate('xpack.ml.management.jobsList.repairFlyoutButton', {
|
||||
defaultMessage: 'Repair saved objects',
|
||||
<EuiButtonEmpty onClick={() => setShowSyncFlyout(true)}>
|
||||
{i18n.translate('xpack.ml.management.jobsList.syncFlyoutButton', {
|
||||
defaultMessage: 'Synchronize saved objects',
|
||||
})}
|
||||
</EuiButtonEmpty>
|
||||
{showRepairFlyout && <JobSpacesRepairFlyout onClose={onCloseRepairFlyout} />}
|
||||
{showSyncFlyout && <JobSpacesSyncFlyout onClose={onCloseSyncFlyout} />}
|
||||
<EuiSpacer size="s" />
|
||||
</>
|
||||
)}
|
||||
|
|
|
@ -11,7 +11,7 @@ import { HttpService } from '../http_service';
|
|||
import { basePath } from './index';
|
||||
import {
|
||||
JobType,
|
||||
RepairSavedObjectResponse,
|
||||
SyncSavedObjectResponse,
|
||||
SavedObjectResult,
|
||||
JobsSpacesResponse,
|
||||
} from '../../../../common/types/saved_objects';
|
||||
|
@ -40,9 +40,9 @@ export const savedObjectsApiProvider = (httpService: HttpService) => ({
|
|||
});
|
||||
},
|
||||
|
||||
repairSavedObjects(simulate: boolean = false) {
|
||||
return httpService.http<RepairSavedObjectResponse>({
|
||||
path: `${basePath()}/saved_objects/repair`,
|
||||
syncSavedObjects(simulate: boolean = false) {
|
||||
return httpService.http<SyncSavedObjectResponse>({
|
||||
path: `${basePath()}/saved_objects/sync`,
|
||||
method: 'GET',
|
||||
query: { simulate },
|
||||
});
|
||||
|
|
|
@ -145,7 +145,7 @@
|
|||
|
||||
"JobSavedObjects",
|
||||
"SavedObjectsStatus",
|
||||
"RepairJobSavedObjects",
|
||||
"SyncJobSavedObjects",
|
||||
"InitializeJobSavedObjects",
|
||||
"AssignJobsToSpaces",
|
||||
"RemoveJobsFromSpaces",
|
||||
|
|
|
@ -6,8 +6,8 @@
|
|||
|
||||
import { wrapError } from '../client/error_wrapper';
|
||||
import { RouteInitialization, SavedObjectsRouteDeps } from '../types';
|
||||
import { checksFactory, repairFactory } from '../saved_objects';
|
||||
import { jobsAndSpaces, repairJobObjects, jobTypeSchema } from './schemas/saved_objects';
|
||||
import { checksFactory, syncSavedObjectsFactory } from '../saved_objects';
|
||||
import { jobsAndSpaces, syncJobObjects, jobTypeSchema } from './schemas/saved_objects';
|
||||
import { jobIdsSchema } from './schemas/job_service_schema';
|
||||
|
||||
/**
|
||||
|
@ -50,8 +50,8 @@ export function savedObjectsRoutes(
|
|||
/**
|
||||
* @apiGroup JobSavedObjects
|
||||
*
|
||||
* @api {get} /api/ml/saved_objects/repair Repair job saved objects
|
||||
* @apiName RepairJobSavedObjects
|
||||
* @api {get} /api/ml/saved_objects/sync Sync job saved objects
|
||||
* @apiName SyncJobSavedObjects
|
||||
* @apiDescription Create saved objects for jobs which are missing them.
|
||||
* Delete saved objects for jobs which no longer exist.
|
||||
* Update missing datafeed ids in saved objects for datafeeds which exist.
|
||||
|
@ -60,9 +60,9 @@ export function savedObjectsRoutes(
|
|||
*/
|
||||
router.get(
|
||||
{
|
||||
path: '/api/ml/saved_objects/repair',
|
||||
path: '/api/ml/saved_objects/sync',
|
||||
validate: {
|
||||
query: repairJobObjects,
|
||||
query: syncJobObjects,
|
||||
},
|
||||
options: {
|
||||
tags: ['access:ml:canCreateJob', 'access:ml:canCreateDataFrameAnalytics'],
|
||||
|
@ -71,8 +71,8 @@ export function savedObjectsRoutes(
|
|||
routeGuard.fullLicenseAPIGuard(async ({ client, request, response, jobSavedObjectService }) => {
|
||||
try {
|
||||
const { simulate } = request.query;
|
||||
const { repairJobs } = repairFactory(client, jobSavedObjectService);
|
||||
const savedObjects = await repairJobs(simulate);
|
||||
const { syncSavedObjects } = syncSavedObjectsFactory(client, jobSavedObjectService);
|
||||
const savedObjects = await syncSavedObjects(simulate);
|
||||
|
||||
return response.ok({
|
||||
body: savedObjects,
|
||||
|
@ -95,7 +95,7 @@ export function savedObjectsRoutes(
|
|||
{
|
||||
path: '/api/ml/saved_objects/initialize',
|
||||
validate: {
|
||||
query: repairJobObjects,
|
||||
query: syncJobObjects,
|
||||
},
|
||||
options: {
|
||||
tags: ['access:ml:canCreateJob', 'access:ml:canCreateDataFrameAnalytics'],
|
||||
|
@ -104,7 +104,7 @@ export function savedObjectsRoutes(
|
|||
routeGuard.fullLicenseAPIGuard(async ({ client, request, response, jobSavedObjectService }) => {
|
||||
try {
|
||||
const { simulate } = request.query;
|
||||
const { initSavedObjects } = repairFactory(client, jobSavedObjectService);
|
||||
const { initSavedObjects } = syncSavedObjectsFactory(client, jobSavedObjectService);
|
||||
const savedObjects = await initSavedObjects(simulate);
|
||||
|
||||
return response.ok({
|
||||
|
|
|
@ -12,7 +12,7 @@ export const jobsAndSpaces = schema.object({
|
|||
spaces: schema.arrayOf(schema.string()),
|
||||
});
|
||||
|
||||
export const repairJobObjects = schema.object({ simulate: schema.maybe(schema.boolean()) });
|
||||
export const syncJobObjects = schema.object({ simulate: schema.maybe(schema.boolean()) });
|
||||
|
||||
export const jobTypeSchema = schema.object({
|
||||
jobType: schema.string(),
|
||||
|
|
|
@ -7,6 +7,6 @@
|
|||
export { setupSavedObjects } from './saved_objects';
|
||||
export { JobObject, JobSavedObjectService, jobSavedObjectServiceFactory } from './service';
|
||||
export { checksFactory } from './checks';
|
||||
export { repairFactory } from './repair';
|
||||
export { syncSavedObjectsFactory } from './sync';
|
||||
export { jobSavedObjectsInitializationFactory } from './initialization';
|
||||
export { savedObjectClientsFactory } from './util';
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
|
||||
import { IScopedClusterClient, CoreStart, SavedObjectsClientContract } from 'kibana/server';
|
||||
import { savedObjectClientsFactory } from '../util';
|
||||
import { repairFactory } from '../repair';
|
||||
import { syncSavedObjectsFactory } from '../sync';
|
||||
import { jobSavedObjectServiceFactory, JobObject } from '../service';
|
||||
import { mlLog } from '../../lib/log';
|
||||
import { ML_SAVED_OBJECT_TYPE } from '../../../common/types/saved_objects';
|
||||
|
@ -58,7 +58,7 @@ export function jobSavedObjectsInitializationFactory(
|
|||
// create space overrides for specific jobs
|
||||
const jobSpaceOverrides = await createJobSpaceOverrides(client);
|
||||
// initialize jobs
|
||||
const { initSavedObjects } = repairFactory(client, jobSavedObjectService);
|
||||
const { initSavedObjects } = syncSavedObjectsFactory(client, jobSavedObjectService);
|
||||
const { jobs } = await initSavedObjects(false, jobSpaceOverrides);
|
||||
mlLog.info(`${jobs.length} job saved objects initialized`);
|
||||
} catch (error) {
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
*/
|
||||
|
||||
import { IScopedClusterClient } from 'kibana/server';
|
||||
import type { JobSpaceOverrides } from '../../repair';
|
||||
import type { JobSpaceOverrides } from '../../sync';
|
||||
import { logJobsSpaces } from './logs';
|
||||
import { metricsJobsSpaces } from './metrics';
|
||||
|
||||
|
|
|
@ -9,7 +9,7 @@ import { IScopedClusterClient } from 'kibana/server';
|
|||
import type { JobObject, JobSavedObjectService } from './service';
|
||||
import {
|
||||
JobType,
|
||||
RepairSavedObjectResponse,
|
||||
SyncSavedObjectResponse,
|
||||
InitializeSavedObjectResponse,
|
||||
} from '../../common/types/saved_objects';
|
||||
import { checksFactory } from './checks';
|
||||
|
@ -23,14 +23,14 @@ export interface JobSpaceOverrides {
|
|||
};
|
||||
}
|
||||
|
||||
export function repairFactory(
|
||||
export function syncSavedObjectsFactory(
|
||||
client: IScopedClusterClient,
|
||||
jobSavedObjectService: JobSavedObjectService
|
||||
) {
|
||||
const { checkStatus } = checksFactory(client, jobSavedObjectService);
|
||||
|
||||
async function repairJobs(simulate: boolean = false) {
|
||||
const results: RepairSavedObjectResponse = {
|
||||
async function syncSavedObjects(simulate: boolean = false) {
|
||||
const results: SyncSavedObjectResponse = {
|
||||
savedObjectsCreated: {},
|
||||
savedObjectsDeleted: {},
|
||||
datafeedsAdded: {},
|
||||
|
@ -232,5 +232,5 @@ export function repairFactory(
|
|||
return results;
|
||||
}
|
||||
|
||||
return { checkStatus, repairJobs, initSavedObjects };
|
||||
return { checkStatus, syncSavedObjects, initSavedObjects };
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue