From 19f998a604512f9b3dc995653c8e94cce889a0a1 Mon Sep 17 00:00:00 2001 From: Mengwei Ding Date: Fri, 12 Apr 2019 16:35:30 +0800 Subject: [PATCH] [Code] Persist clone error messages --- x-pack/plugins/code/model/repository.ts | 1 + .../public/components/admin_page/project_item.tsx | 13 +++++++++++-- x-pack/plugins/code/public/reducers/status.ts | 1 + .../plugins/code/server/indexer/schema/document.ts | 3 +++ .../code/server/queue/abstract_git_worker.ts | 12 +++++++++--- x-pack/plugins/code/server/queue/abstract_worker.ts | 6 +++--- x-pack/plugins/code/server/queue/clone_worker.ts | 2 +- x-pack/plugins/code/server/repository_service.ts | 2 +- 8 files changed, 30 insertions(+), 10 deletions(-) diff --git a/x-pack/plugins/code/model/repository.ts b/x-pack/plugins/code/model/repository.ts index e4641346fb261..30e4ba0f71419 100644 --- a/x-pack/plugins/code/model/repository.ts +++ b/x-pack/plugins/code/model/repository.ts @@ -117,6 +117,7 @@ export interface WorkerProgress { progress: number; timestamp: Date; revision?: string; + errorMessage?: string; } export interface CloneProgress { diff --git a/x-pack/plugins/code/public/components/admin_page/project_item.tsx b/x-pack/plugins/code/public/components/admin_page/project_item.tsx index c74cbded0f9cf..afffa4151152d 100644 --- a/x-pack/plugins/code/public/components/admin_page/project_item.tsx +++ b/x-pack/plugins/code/public/components/admin_page/project_item.tsx @@ -12,6 +12,7 @@ import { EuiProgress, EuiText, EuiTextColor, + EuiToolTip, } from '@elastic/eui'; import moment from 'moment'; import React from 'react'; @@ -82,7 +83,14 @@ class CodeProjectItem extends React.PureComponent<{ footer = ERROR INDEX REPO; hasError = true; } else if (status.state === RepoState.CLONE_ERROR) { - footer = ERROR CLONE REPO; + footer = ( + + ERROR CLONE REPO  + + + + + ); // Disable repo link is clone failed. disableRepoLink = true; hasError = true; @@ -104,7 +112,8 @@ class CodeProjectItem extends React.PureComponent<{ status && status.state !== RepoState.CLONING && status.state !== RepoState.DELETING && - status.state !== RepoState.INDEXING; + status.state !== RepoState.INDEXING && + status.state !== RepoState.CLONE_ERROR; const indexVisibility = indexShow ? 'visible' : 'hidden'; const deleteShow = status && status.state !== RepoState.DELETING; diff --git a/x-pack/plugins/code/public/reducers/status.ts b/x-pack/plugins/code/public/reducers/status.ts index 15b6d813174a7..550185bdcd57d 100644 --- a/x-pack/plugins/code/public/reducers/status.ts +++ b/x-pack/plugins/code/public/reducers/status.ts @@ -33,6 +33,7 @@ export interface RepoStatus { cloneProgress?: any; timestamp?: Date; state?: RepoState; + errorMessage?: string; } export interface StatusState { diff --git a/x-pack/plugins/code/server/indexer/schema/document.ts b/x-pack/plugins/code/server/indexer/schema/document.ts index 944fc879e4bd8..d1582c5bca859 100644 --- a/x-pack/plugins/code/server/indexer/schema/document.ts +++ b/x-pack/plugins/code/server/indexer/schema/document.ts @@ -100,6 +100,9 @@ export const DocumentSchema = { revision: { type: 'keyword', }, + errorMessage: { + type: 'text', + }, cloneProgress: { properties: { isCloned: { diff --git a/x-pack/plugins/code/server/queue/abstract_git_worker.ts b/x-pack/plugins/code/server/queue/abstract_git_worker.ts index eb740741d202a..d644952dcbf8f 100644 --- a/x-pack/plugins/code/server/queue/abstract_git_worker.ts +++ b/x-pack/plugins/code/server/queue/abstract_git_worker.ts @@ -68,20 +68,26 @@ export abstract class AbstractGitWorker extends AbstractWorker { } } - public async updateProgress(job: Job, progress: number, cloneProgress?: CloneProgress) { + public async updateProgress( + job: Job, + progress: number, + error?: Error, + cloneProgress?: CloneProgress + ) { const { uri } = job.payload; const p: CloneWorkerProgress = { uri, progress, timestamp: new Date(), cloneProgress, + errorMessage: error ? error.message : undefined, }; try { return await this.objectClient.updateRepositoryGitStatus(uri, p); - } catch (error) { + } catch (err) { // This is a warning since it's not blocking anything. this.log.warn(`Update git clone progress error.`); - this.log.warn(error); + this.log.warn(err); } } } diff --git a/x-pack/plugins/code/server/queue/abstract_worker.ts b/x-pack/plugins/code/server/queue/abstract_worker.ts index fa628007c98ff..8bb16b8d36e0e 100644 --- a/x-pack/plugins/code/server/queue/abstract_worker.ts +++ b/x-pack/plugins/code/server/queue/abstract_worker.ts @@ -121,7 +121,7 @@ export abstract class AbstractWorker implements Worker { res.job )} seconds.` ); - return await this.updateProgress(res.job, WorkerReservedProgress.ERROR); + return await this.updateProgress(res.job, WorkerReservedProgress.ERROR, res.error); } public async onJobTimeOut(res: any) { @@ -130,10 +130,10 @@ export abstract class AbstractWorker implements Worker { res.job )} seconds.` ); - return await this.updateProgress(res.job, WorkerReservedProgress.TIMEOUT); + return await this.updateProgress(res.job, WorkerReservedProgress.TIMEOUT, res.error); } - public async updateProgress(job: Job, progress: number) { + public async updateProgress(job: Job, progress: number, error?: Error) { // This is an abstract class. Do nothing here. You should override this. return new Promise((resolve, _) => { resolve(); diff --git a/x-pack/plugins/code/server/queue/clone_worker.ts b/x-pack/plugins/code/server/queue/clone_worker.ts index d939c70d2f5c1..87388a854cfcc 100644 --- a/x-pack/plugins/code/server/queue/clone_worker.ts +++ b/x-pack/plugins/code/server/queue/clone_worker.ts @@ -63,7 +63,7 @@ export class CloneWorker extends AbstractGitWorker { const repo = RepositoryUtils.buildRepository(url); return await repoService.clone(repo, (progress: number, cloneProgress?: CloneProgress) => { job.payload.uri = repo.uri; - this.updateProgress(job, progress, cloneProgress); + this.updateProgress(job, progress, undefined, cloneProgress); }); } diff --git a/x-pack/plugins/code/server/repository_service.ts b/x-pack/plugins/code/server/repository_service.ts index 6cb25a228dfd3..8df80f6a3e7d9 100644 --- a/x-pack/plugins/code/server/repository_service.ts +++ b/x-pack/plugins/code/server/repository_service.ts @@ -227,7 +227,7 @@ export class RepositoryService { const msg = `Clone repository from ${repo.url} error.`; this.log.error(msg); this.log.error(error); - throw new Error(msg); + throw new Error(error.message); } } }