diff --git a/src/portal/src/app/config/gc/gc.component.html b/src/portal/src/app/config/gc/gc.component.html index 3b228aa05..a0b900793 100644 --- a/src/portal/src/app/config/gc/gc.component.html +++ b/src/portal/src/app/config/gc/gc.component.html @@ -3,7 +3,7 @@ {{(originScheduleType ? 'SCHEDULE.'+ originScheduleType.toUpperCase(): "") | translate}} {{'GC.ON' | translate}} {{originWeekDay.text | translate}} {{'GC.AT' | translate}} {{originOffTime.text}} - +
@@ -27,7 +27,7 @@
- +
{{'GC.JOB_LIST' | translate}}
{{'GC.JOB_ID' | translate}} @@ -38,12 +38,12 @@ {{'DETAILS' | translate}} {{job.id }} - {{'SCHEDULE.'+ job.type.toUpperCase() | translate }} + {{(job.type ? 'SCHEDULE.'+ job.type.toUpperCase() : '') | translate }} {{job.status.toUpperCase() | translate}} {{job.createTime | date:'medium'}} {{job.updateTime | date:'medium'}} - {{'GC.LOG_DETAIL' | translate}} + {{'GC.LOG_DETAIL' | translate}} {{'GC.LATEST_JOBS' | translate :{param: jobs.length} }} diff --git a/src/portal/src/app/config/gc/gc.component.scss b/src/portal/src/app/config/gc/gc.component.scss index b1170b9f5..e9dbd0620 100644 --- a/src/portal/src/app/config/gc/gc.component.scss +++ b/src/portal/src/app/config/gc/gc.component.scss @@ -2,11 +2,20 @@ display: flex; align-items: center; margin:20px 0; +} + +.setting-wrapper { > * { margin-right:35px; } } +.normal-wrapper { + > * { + margin-right: 90px; + } +} + .gc-start-btn { width:150px; } diff --git a/src/portal/src/app/config/gc/gc.component.ts b/src/portal/src/app/config/gc/gc.component.ts index 378377aee..c35757bb6 100644 --- a/src/portal/src/app/config/gc/gc.component.ts +++ b/src/portal/src/app/config/gc/gc.component.ts @@ -3,9 +3,10 @@ import { TranslateService } from '@ngx-translate/core'; import { GcJobViewModel, WeekDay } from "./gcLog"; import { GcViewModelFactory } from "./gc.viewmodel.factory"; import { GcRepoService } from "./gc.service"; -import { WEEKDAYS, SCHEDULE_TYPE } from './gc.const'; +import { WEEKDAYS, SCHEDULE_TYPE, ONE_MINITUE} from './gc.const'; import { GcUtility } from './gc.utility'; import { ErrorHandler } from '@harbor/ui'; + @Component({ selector: 'gc-config', templateUrl: './gc.component.html', @@ -23,6 +24,7 @@ export class GcComponent implements OnInit { SCHEDULE_TYPE = SCHEDULE_TYPE; weekDay: WeekDay = WEEKDAYS[0]; dailyTime: string; + disableGC: boolean = false; constructor(private gcRepoService: GcRepoService, private gcViewModelFactory: GcViewModelFactory, @@ -80,6 +82,9 @@ export class GcComponent implements OnInit { } gcNow(): void { + this.disableGC = true; + setTimeout(() => {this.enableGc(); }, ONE_MINITUE); + this.gcRepoService.manualGc().subscribe(response => { this.translate.get('GC.MSG_SUCCESS').subscribe((res: string) => { this.errorHandler.info(res); @@ -90,6 +95,10 @@ export class GcComponent implements OnInit { }); } + private enableGc () { + this.disableGC = false; + } + scheduleGc(): void { let offTime = this.gcUtility.getOffTime(this.dailyTime); if (this.schedule) { @@ -103,9 +112,7 @@ export class GcComponent implements OnInit { this.isEditMode = false; this.getJobs(); }, error => { - this.translate.get('GC.MSG_ERROR').subscribe((res: string) => { - this.errorHandler.info(res); - }); + this.errorHandler.error(error); }); } else { this.gcRepoService.postScheduleGc(this.scheduleType, offTime, this.weekDay.value).subscribe(response => { @@ -125,9 +132,7 @@ export class GcComponent implements OnInit { this.isEditMode = false; this.getJobs(); }, error => { - this.translate.get('GC.MSG_ERROR').subscribe((res: string) => { - this.errorHandler.info(res); - }); + this.errorHandler.error(error); }); } } diff --git a/src/portal/src/app/config/gc/gc.const.ts b/src/portal/src/app/config/gc/gc.const.ts index 1c30a6d4c..4e43dfcab 100644 --- a/src/portal/src/app/config/gc/gc.const.ts +++ b/src/portal/src/app/config/gc/gc.const.ts @@ -14,6 +14,8 @@ export const SCHEDULE_TYPE = { WEEKLY: "Weekly" }; +export const ONE_MINITUE = 60000; + diff --git a/src/portal/src/app/config/gc/gc.viewmodel.factory.ts b/src/portal/src/app/config/gc/gc.viewmodel.factory.ts index 99b54e1d2..ba109ba75 100644 --- a/src/portal/src/app/config/gc/gc.viewmodel.factory.ts +++ b/src/portal/src/app/config/gc/gc.viewmodel.factory.ts @@ -11,7 +11,7 @@ export class GcViewModelFactory { let updateTime = new Date(job.update_time); gcViewModels.push({ id: job.id, - type: job.schedule.type, + type: job.schedule ? job.schedule.type : null, status: job.job_status, createTime: createTime, updateTime: updateTime, diff --git a/src/portal/src/i18n/lang/en-us-lang.json b/src/portal/src/i18n/lang/en-us-lang.json index f3f2f562a..df1d65ffb 100644 --- a/src/portal/src/i18n/lang/en-us-lang.json +++ b/src/portal/src/i18n/lang/en-us-lang.json @@ -818,6 +818,8 @@ "DETAILS":"Details", "PENDING":"Pending", "FINISHED":"Finished", + "STOPPED":"Stopped", + "ERROR":"Error", "SCHEDULE": { "NONE": "None", "DAILY": "Daily", @@ -836,8 +838,7 @@ "LOG_DETAIL":"Log Details", "MSG_SUCCESS":"Garbage Collection Successful", "MSG_SCHEDULE_SET":"Garbage Collection schedule has been set", - "MSG_SCHEDULE_RESET":"Garbage Collection schedule has been reset", - "MSG_ERROR":"Can not do Garbase Collection too often,please try again later." + "MSG_SCHEDULE_RESET":"Garbage Collection schedule has been reset" } } diff --git a/src/portal/src/i18n/lang/es-es-lang.json b/src/portal/src/i18n/lang/es-es-lang.json index f5ab6a557..522bd3239 100644 --- a/src/portal/src/i18n/lang/es-es-lang.json +++ b/src/portal/src/i18n/lang/es-es-lang.json @@ -815,6 +815,8 @@ "DETAILS":"Details", "PENDING":"Pending", "FINISHED":"Finished", + "STOPPED":"Stopped", + "ERROR":"Error", "SCHEDULE": { "NONE": "None", "DAILY": "Daily", @@ -833,7 +835,6 @@ "LOG_DETAIL":"Log Details", "MSG_SUCCESS":"Garbage Collection Successful", "MSG_SCHEDULE_SET":"Garbage Collection schedule has been set", - "MSG_SCHEDULE_RESET":"Garbage Collection schedule has been reset", - "MSG_ERROR":"Can not do Garbase Collection too often,please try again later." + "MSG_SCHEDULE_RESET":"Garbage Collection schedule has been reset" } } \ No newline at end of file diff --git a/src/portal/src/i18n/lang/fr-fr-lang.json b/src/portal/src/i18n/lang/fr-fr-lang.json index 513499ee6..6579d6cbe 100644 --- a/src/portal/src/i18n/lang/fr-fr-lang.json +++ b/src/portal/src/i18n/lang/fr-fr-lang.json @@ -778,6 +778,8 @@ "DETAILS":"Details", "PENDING":"Pending", "FINISHED":"Finished", + "STOPPED":"Stopped", + "ERROR":"Error", "SCHEDULE": { "NONE": "None", "DAILY": "Daily", @@ -796,7 +798,6 @@ "LOG_DETAIL":"Log Details", "MSG_SUCCESS":"Garbage Collection Successful", "MSG_SCHEDULE_SET":"Garbage Collection schedule has been set", - "MSG_SCHEDULE_RESET":"Garbage Collection schedule has been reset", - "MSG_ERROR":"Can not do Garbase Collection too often,please try again later." + "MSG_SCHEDULE_RESET":"Garbage Collection schedule has been reset" } } diff --git a/src/portal/src/i18n/lang/zh-cn-lang.json b/src/portal/src/i18n/lang/zh-cn-lang.json index 6d9d96686..f002b70fb 100644 --- a/src/portal/src/i18n/lang/zh-cn-lang.json +++ b/src/portal/src/i18n/lang/zh-cn-lang.json @@ -814,6 +814,8 @@ "DETAILS":"详情", "PENDING":"未开始", "FINISHED":"已完成", + "STOPPED":"已停止", + "ERROR":"错误", "SCHEDULE": { "NONE": "无", "DAILY": "每天", @@ -832,7 +834,6 @@ "LOG_DETAIL":"日志详情", "MSG_SUCCESS":"垃圾回收成功", "MSG_SCHEDULE_SET":"垃圾回收定时任务设置成功", - "MSG_SCHEDULE_RESET":"垃圾回收定时任务已被重置", - "MSG_ERROR":"您的垃圾回收请求提交过于频繁,请稍候重试" + "MSG_SCHEDULE_RESET":"垃圾回收定时任务已被重置" } } \ No newline at end of file