File: //usr/local/packages/@appstore/StorageManager/ui/storage_wizard.js
/* Copyright (c) 2025 Synology Inc. All rights reserved. */
Ext.define("SYNO.SDS.StorageManager.Wizard.CacheSetting",{extend:"SYNO.SDS.ModalWindow",constructor:function(e){var t,i=this,s=[],a=function(e,t){return"<div>"+e+'</div><div class="sm-cache-config-opt-desc">'+t+"</div>"};if(i.appWin=e.appWin,i.owner=e.owner,i.skipSeqIO=e.skipSeqIO,i.maxDegradeFlush=e.maxDegradeFlush,i.metadataCache=e.metadataCache,i.ssdPath=e.ssdPath,i.mountSpaceId=e.mountSpaceId,i.configureOpts=e.configureOpts,i.metadataCacheAndAdvisorShowMsg=e.metadataCacheAndAdvisorShowMsg,i.configureOpts.includes("skipSeqIo")&&s.push({xtype:"syno_checkbox",name:"skip_seq_io",htmlEncode:!1,boxLabel:a(_T("volume","cache_skip_seq_io"),_T("volume","cache_skip_seq_io_desc")),value:0}),i.configureOpts.includes("maxDegradeFlush")&&s.push({xtype:"syno_checkbox",name:"max_degrade_flush",htmlEncode:!1,boxLabel:a(_T("volume","cache_max_degrade_flush"),_T("volume","cache_max_degrade_flush_desc")),value:0}),i.configureOpts.includes("metadataCache")){var n=SYNO.SDS.StorageUtils.GetSizeUnit(e.volume.metadata_cache_hard_lower_bound_byte);s.push({xtype:"syno_checkbox",name:"metadata_cache",htmlEncode:!1,disabled:!e.metadataCache&&e.totalSize<e.volume.metadata_cache_hard_lower_bound_byte,boxLabel:a(_T("volume","metadata_cache_enable")+" "+String.format(_T("volume","cache_metadata_required"),n.size+n.unit),_T("volume","metadata_cache_enable_desc")),value:0})}t={title:_T("common","configure"),width:700,minWidth:700,height:480,padding:"16px 20px 24px 20px",layout:"fit",items:[{xtype:"syno_formpanel",itemId:"main",border:!1,autoHeight:!0,trackResetOnLoad:!0,items:s}],buttons:[{xtype:"syno_button",text:_T("common","alt_cancel"),scope:this,handler:this.onCancel},{xtype:"syno_button",btnStyle:"blue",disabled:_S("demo_mode"),tooltip:_S("demo_mode")?_JSLIBSTR("uicommon","error_demo"):"",text:_T("common","save"),scope:this,handler:this.onSave}],listeners:{beforeclose:this.onBeforeCancel.bind(this)}},i.callParent([Ext.apply(t,e)])},getForm:function(){return this.getComponent("main").getForm()},onOpen:function(){var e=this;e.callParent(arguments),e.getForm().setValues({skip_seq_io:e.skipSeqIO}),e.getForm().setValues({max_degrade_flush:e.maxDegradeFlush}),e.getForm().setValues({metadata_cache:e.metadataCache})},__onSave:function(e=!0){var t,i=this,s=i.skipSeqIO,a=i.maxDegradeFlush,n=i.metadataCache;this.getForm().isDirty()?this.getForm().isValid()&&((t=i.getForm().findField("skip_seq_io"))&&(s=Boolean(t.getValue())),(t=i.getForm().findField("max_degrade_flush"))&&(a=Boolean(t.getValue())),(t=i.getForm().findField("metadata_cache"))&&(n=Boolean(t.getValue())),this.setStatusBusy(),SYNO.API.Request({api:"SYNO.Storage.CGI.Flashcache",method:"configure",version:1,params:{ssdPath:i.ssdPath,mountSpaceId:i.mountSpaceId,skipSeqIO:s,maxDegradeFlush:a,metadataCache:n,validate:e},callback:function(t,s,a,n){this.clearStatusBusy(),t?e&&s.failure_reasons.length>0?i.metadataCacheAndAdvisorShowMsg(i,s,"setting").then((function(e){e&&i.__onSave(!1)})):(this.isDataChanged=!0,this.skipCheckDirty=!0,this.close()):SYNO.SDS.StorageUtils.ReportWebapiFailure(this,s)},scope:this})):this.close()},onSave:function(){this.__onSave()},onCancel:function(){this.close()},onBeforeCancel:function(){var e=this;return!(!this.skipCheckDirty&&this.getForm().isDirty())||(this.confirmLostChangePromise({save:function(){e.onSave()},dontSave:function(){e.getForm().reset(),e.close()},cancel:Ext.emptyFn},e),!1)}}),Ext.namespace("SYNO.SDS.TaskScheduler.SMART"),Ext.namespace("SYNO.SDS.StorageManager.Disk"),SYNO.SDS.StorageManager.Disk.UTILIZATION_THRESHOLD=5,SYNO.SDS.StorageManager.Disk.COMPARE_WARN_THRESHOLD=5,SYNO.SDS.StorageManager.Disk.DISK_PERF_NUM_THRESHOLD=3,SYNO.SDS.StorageManager.Disk.ERR_DISK_IN_USE=403,SYNO.SDS.StorageManager.Disk.ERR_PERFORMANCE_TEST=404,SYNO.SDS.StorageManager.Disk.ERR_TESTING=406,SYNO.SDS.StorageManager.Disk.ERR_PERF_TESTING=407,SYNO.SDS.StorageManager.Disk.ERR_SECURITY_ERASING=408,SYNO.SDS.StorageManager.Disk.ERR_FW_UPGRADING=409,SYNO.SDS.StorageManager.Disk.ERR_DISK_NUM_INSUFFICIENT=410,SYNO.SDS.StorageManager.Disk.HISTORY_DAY_INTERVAL=1,SYNO.SDS.StorageManager.Disk.HISTORY_MONTH_INTERVAL=31,SYNO.SDS.StorageManager.Disk.HISTORY_SEASON_INTERVAL=92,SYNO.SDS.StorageManager.Disk.HISTORY_DAY_SKIP=0,SYNO.SDS.StorageManager.Disk.HISTORY_MONTH_SKIP=0,SYNO.SDS.StorageManager.Disk.HISTORY_YEAR_SKIP=0,SYNO.SDS.StorageManager.Disk.HISTORY_SEASON_SKIP=0,SYNO.SDS.TaskScheduler.SMART.LastTriggerTimeGet=function(e){var t=null;return e?(e.forEach((function(e){var i;e.next_trigger_time&&(i=Date.parseDate(e.next_trigger_time,"Y-m-d H:i"))&&(!t||t.getTime()>i.getTime())&&(t=i)})),null===t?null:SYNO.SDS.DateTimeFormatter(t)):null},Ext.define("SYNO.SDS.StorageManager.Wizard.SmartTest",{extend:"SYNO.SDS.ModalWindow",constructor:function(e){this.panel=new SYNO.SDS.StorageManager.SmartTestView(Ext.apply({appWin:this,parentWin:this,style:"padding: 16px 20px 0px;"},e));var t=Ext.apply({title:_T("smart","smart_toolbar_smart_test"),width:650,height:475,minHeight:380,minWidth:560,layout:"fit",dsmStyle:"v5",items:[{xtype:"syno_panel",autoFlexcroll:!0,items:this.panel}],buttons:[{text:_T("common","alt_close"),handler:this.close,scope:this}]},e);this.callParent([t])},onActivate:function(){this.panel.onActivate()}}),Ext.define("SYNO.SDS.StorageManager.SmartTestView",{extend:"SYNO.ux.Panel",constructor:function(e){var t,i=this;if(i.isPassiveDisk=e.isPassiveDisk,i.owner=e.owner,i.appWin=e.appWin,i.device=e.device,i.parent=e.parent,i.parentWin=e.parentWin,i.isHaPanel=e.isHaPanel,i.needRefresh=!1,i.needSchedule=!0!==e.isHaPanel&&e.needSchedule,i.adv_support=!1,!1===i.isHaPanel&&e.disks)for(var s=0;s<e.disks.length;s++)if("not_support"!==e.disks[s].adv_status){i.adv_support=!0;break}t=Ext.apply({title:!0===e.noTitle?null:_T("smart","smart_toolbar_smart_test"),items:[i.configForm({itemId:"form",noTitle:e.noTitle})],listeners:{scope:i,beforedestroy:i.pollingTaskStop}},e),i.TestLogPollingConf=i.getPollingConf(i.device),i.callParent([t]),i.mon(i,"afterlayout",i.onAfterlayout,i,{single:!0})},onActivate:function(e){this.onRenderScheduleStatus(),this.pollingTaskStart()},configForm:function(e){return Ext.apply({xtype:"syno_formpanel",trackResetOnLoad:!0,autoFlexcroll:!1,padding:0,border:!1,items:[{xtype:"syno_displayfield",value:_T("disk_info","disk_smart_test_desc")},{itemId:"quick_radio",xtype:"syno_radio",boxLabel:_T("smart","smart_quick_test"),name:"testStyle",inputValue:"quick",checked:!0},{xtype:"syno_displayfield",value:_T("disk_info","disk_smart_quick_desc"),itemId:"quick_desc",indent:1},{itemId:"extend_radio",xtype:"syno_radio",boxLabel:_T("smart","smart_extend_test"),name:"testStyle",inputValue:"extend"},{xtype:"syno_displayfield",value:_T("disk_info","disk_smart_extend_desc"),itemId:"extend_desc",indent:1},{xtype:"syno_displayfield",name:"testingStatus",hidden:!0,htmlEncode:!1},{xtype:"syno_button",disabled:_S("demo_mode"),tooltip:_S("demo_mode")?_JSLIBSTR("uicommon","error_demo"):"",itemId:"apply",id:this.testBtnId=Ext.id(),text:_T("smart","smart_test_button_start"),handler:this.onApply,scope:this},{xtype:"syno_displayfield",cls:"sm-disk-smart-secondary-title",value:_T("smart","smart_test_result")},{xtype:"syno_displayfield",name:"quickTestLog",htmlEncode:!1,fieldLabel:_T("smart","smart_quick_test_log")},{xtype:"syno_displayfield",name:"extendTestLog",htmlEncode:!1,fieldLabel:_T("smart","smart_extend_test_log")},{xtype:"syno_displayfield",cls:"sm-disk-smart-secondary-title",value:_T("common","schedule"),hidden:!this.needSchedule},{xtype:"syno_displayfield",name:"scheduleTimeField",hidden:!this.needSchedule,itemId:"scheduleStatus",htmlEncode:!1,fieldLabel:_T("schedule","next_trigger_time")}]},e)},getPollingConf:function(e){var t=this;if(!e)throw Error("param error: device is not set");return{interval:5,immediate:!0,webapi:SYNO.SDS.StorageUtils.ReplaceWebapiSHA(t.isPassiveDisk,{api:"SYNO.Core.Storage.Disk",version:1,method:"get_smart_test_log",params:{device:t.device}}),status_callback:function(e,i,s,a){if(t.cleanMask&&(t.appWin.clearStatusBusy(),t.cleanMask=!1),!e)return t.appWin.getMsgBox().alert("",_T("smart","smart_status_unknow")),void t.pollingTaskStop();t.fillData(i)},scope:t}},onAfterlayout:function(e){this.form=this.getComponent("form").getForm(),this.btn=this.getComponent("form").getComponent("apply"),this.radio_quick=this.getComponent("form").getComponent("quick_radio"),this.desc_quick=this.getComponent("form").getComponent("quick_desc"),this.radio_extend=this.getComponent("form").getComponent("extend_radio"),this.desc_extend=this.getComponent("form").getComponent("extend_desc")},pollingTaskStart:function(){void 0===this.TestLogPollingID&&(this.TestLogPollingID=this.pollReg(this.TestLogPollingConf))},pollingTaskStop:function(){void 0!==this.TestLogPollingID&&(this.pollUnreg(this.TestLogPollingID),this.TestLogPollingID=void 0)},testing:void 0,quickTime:void 0,extendTime:void 0,cleanMask:!1,fillData:function(e){var t,i,s,a=this,n=SYNO.SDS.StorageUtils;t=e.testInfo[0],i=n.smartTestStatusRender(t.quick),s=n.smartTestStatusRender(t.extend),"completed"!==t.quick&&"damage"!==t.quick&&"aborted"!==t.quick&&"interrupted"!==t.quick||0<e.quick_last.length&&(i=String.format("{0} ({1})",i,SYNO.SDS.DateTimeFormatter(Date.parseDate(e.quick_last,"Y/m/d H:i:s"),{type:"datetimesec"}))),"completed"!==t.extend&&"damage"!==t.extend&&"aborted"!==t.extend&&"interrupted"!==t.extend||0<e.extend_last.length&&(s=String.format("{0} ({1})",s,SYNO.SDS.DateTimeFormatter(Date.parseDate(e.extend_last,"Y/m/d H:i:s"),{type:"datetimesec"}))),this.form.findField("quickTestLog").setRawValue(i),this.form.findField("extendTestLog").setRawValue(s),this.quickTime=t.quickTime,this.extendTime=t.extendTime,this.testing=t.testing,this.testing?(this.form.findField("testingStatus").setVisible(!0),"-1"!==t.remain?this.form.findField("testingStatus").setRawValue(SYNO.SDS.StorageUtils.smartStatusRender("",t.remain)):SYNO.SDS.StorageUtils.setUpdateTimeAnimate(!0,this.form.findField("testingStatus"),_T("background_task","task_processing")),this.radio_quick.getEl().findParentNode("").parentNode.style.display="none",this.desc_quick.getEl().findParentNode("").parentNode.style.display="none",this.radio_extend.getEl().findParentNode("").parentNode.style.display="none",this.desc_extend.getEl().findParentNode("").parentNode.style.display="none",this.btn.setText(_T("smart","smart_test_button_stop")),a.needRefresh=!0):(this.form.findField("testingStatus").setVisible(!1),this.form.findField("testingStatus").setRawValue(""),this.radio_quick.getEl().findParentNode("").parentNode.style.display="",this.desc_quick.getEl().findParentNode("").parentNode.style.display="",this.radio_extend.getEl().findParentNode("").parentNode.style.display="",this.desc_extend.getEl().findParentNode("").parentNode.style.display="",this.btn.setText(_T("smart","smart_test_button_start")),a.needRefresh&&(a.appWin.healthOverviewPanel&&a.appWin.healthOverviewPanel.onHealthInfoRefresh({device:a.device,ignoreBusyMask:!0}),a.needRefresh=!1)),_S("demo_mode")?(Ext.getCmp(this.testBtnId).setDisabled(!0),Ext.getCmp(this.testBtnId).setTooltip(_JSLIBSTR("uicommon","error_demo"))):this.testing||!t.perf_testing&&!t.ihm_testing?(Ext.getCmp(this.testBtnId).setDisabled(!1),Ext.getCmp(this.testBtnId).setTooltip("")):(Ext.getCmp(this.testBtnId).setDisabled(!0),Ext.getCmp(this.testBtnId).setTooltip(_T("disk_info","other_is_testing"))),a.doLayout(),a.parentWin&&a.parentWin.doLayout()},onApply:function(){var e,t,i,s=this;this.testing?this.sendStopRequest():("quick"===(e=this.form.findField("testStyle").getGroupValue())?(t=_T("smart","smart_quick_test"),i=String.format(_T("smart","smart_test_time"),_T("smart","smart_quick_test"),this.quickTime,1===parseInt(this.quickTime,10)?_T("common","time_minute"):_T("common","time_minutes"))):"extend"===e&&(t=_T("smart","smart_extend_test"),i=String.format(_T("smart","smart_test_time"),_T("smart","smart_extend_test"),this.extendTime,1===parseInt(this.extendTime,10)?_T("common","time_minute"):_T("common","time_minutes"))),s.appWin.healthInfo&&s.appWin.healthInfo.overview&&s.appWin.healthInfo.overview.smart_test_limit?s.appWin.getMsgBox().confirm("",_T("disk_info","disk_smart_test_warn"),(function(a){"yes"===a&&s.sendTestRequest(t,i,e)}),s):s.sendTestRequest(t,i,e))},sendStopRequest:function(){this.appWin.setStatusBusy({text:_T("common","saving")}),this.appWin.sendWebAPI(SYNO.SDS.StorageUtils.ReplaceWebapiSHA(this.isPassiveDisk,{api:"SYNO.Core.Storage.Disk",version:1,method:"do_smart_test",params:{device:this.device,type:"stop"},callback:function(e,t,i,s){if(!e)return this.appWin.clearStatusBusy(),this.appWin.getMsgBox().alert("",_T("common","error_system")),void this.pollingTaskStop();this.cleanMask=!0,this.appWin.sendWebAPI(SYNO.SDS.StorageUtils.ReplaceWebapiSHA(this.isPassiveDisk,{api:"SYNO.Core.Storage.Disk",version:1,method:"get_smart_test_log",params:{device:this.device},callback:function(e,t,i,s){if(this.cleanMask&&(this.appWin.clearStatusBusy(),this.cleanMask=!1),!e)return this.appWin.getMsgBox().alert("",_T("common","error_system")),void this.pollingTaskStop();this.fillData(t)},scope:this}))},scope:this}))},sendTestRequest:function(e,t,i){this.appWin.getMsgBox().confirm(e,t,(function(e){"yes"===e&&(this.appWin.setStatusBusy({text:_T("common","saving")}),this.appWin.sendWebAPI(SYNO.SDS.StorageUtils.ReplaceWebapiSHA(this.isPassiveDisk,{api:"SYNO.Core.Storage.Disk",version:1,method:"do_smart_test",params:{device:this.device,type:i},callback:function(e,t,i,s){if(!e)return this.appWin.clearStatusBusy(),"smart_is_testing"===t.errors.reason?this.appWin.getMsgBox().alert("",_T("disk_info","smart_is_testing")):"busy"===t.errors.reason?this.appWin.getMsgBox().alert("",_T("disk_info","other_is_testing")):this.appWin.getMsgBox().alert("",_T("smart","smart_selftest_cmd_exec_failed")),void this.pollingTaskStop();this.cleanMask=!0,this.appWin.sendWebAPI(SYNO.SDS.StorageUtils.ReplaceWebapiSHA(this.isPassiveDisk,{api:"SYNO.Core.Storage.Disk",version:1,method:"get_smart_test_log",params:{device:this.device},callback:function(e,t,i,s){if(this.cleanMask&&(this.appWin.clearStatusBusy(),this.cleanMask=!1),!e)return this.appWin.getMsgBox().alert("",_T("common","error_system")),void this.pollingTaskStop();this.fillData(t)},scope:this}))},scope:this})))}),this)},onRenderScheduleStatus:function(){var e,t=this;!0===t.needSchedule&&t.appWin.healthInfo&&t.appWin.healthInfo.overview&&!0===t.appWin.healthInfo.overview.scheduled?e=SYNO.SDS.TaskScheduler.SMART.LastTriggerTimeGet(t.appWin.healthInfo.overview.smart_schedule_list):!0===t.needSchedule&&(e=_T("disk_info","health_info_smart_sched_guide")),t.form.findField("scheduleStatus").setRawValue(Ext.isEmpty(e)?"-":e),t.doLayout(),t.parentWin&&t.parentWin.doLayout()}}),Ext.define("SYNO.SDS.StorageManager.Wizard.AdvTest",{extend:"SYNO.SDS.ModalWindow",constructor:function(e){this.panel=new SYNO.SDS.StorageManager.AdvTestView(Ext.apply({appWin:this},e));var t=[];t.push({xtype:"syno_fieldset",title:_T("disk_info","disk_ironwolf_health"),items:this.panel});var i=Ext.apply({title:_T("disk_info","disk_ironwolf_health"),width:650,height:450,minHeight:380,minWidth:560,layout:"fit",dsmStyle:"v5",padding:"0px 20px",items:t,buttons:[{text:_T("common","alt_close"),handler:this.close,scope:this}]},e);this.callParent([i])},onActivate:function(){this.panel.onActivate()}}),Ext.define("SYNO.SDS.StorageManager.AdvTestView",{extend:"SYNO.ux.Panel",constructor:function(e){var t,i=this;i.owner=e.owner,i.appWin=e.appWin,i.device=e.device,i.parent=e.parent,i.cleanMask=!1,i.needRefresh=!1,i.needSchedule=!0!==e.isHaPanel&&e.needSchedule,t=Ext.apply({title:_T("disk_info","disk_ironwolf_health"),layout:"fit",items:[i.configForm({itemId:"form"})],listeners:{scope:i,beforedestroy:i.pollingTaskStop}},e),i.TestLogPollingConf=i.getPollingConf(i.device),i.callParent([t])},onActivate:function(e){this.onRenderScheduleStatus(),this.pollingTaskStart()},configForm:function(e){var t=this;return Ext.apply({xtype:"syno_formpanel",trackResetOnLoad:!0,border:!1,padding:0,items:[{xtype:"syno_fieldset",collapsible:!1,title:_T("disk_info","disk_ironwolf_health_manage"),htmlEncode:!1,itemId:"test_field",synodefaults:{width:200},items:[{xtype:"syno_displayfield",value:_T("disk_info","disk_adv_test_desc")},{xtype:"syno_displayfield",id:t.testingStatusId=Ext.id()},{xtype:"syno_button",disabled:_S("demo_mode"),tooltip:_S("demo_mode")?_JSLIBSTR("uicommon","error_demo"):"",id:t.testBtnId=Ext.id(),text:_T("smart","smart_test_button_start"),style:{marginBottom:"8px"},handler:t.onApply,scope:t},{xtype:"syno_displayfield",id:t.noteId=Ext.id(),htmlEncode:!1,value:_T("disk_info","disk_ironwolf_link_note")},{xtype:"syno_displayfield",cls:"sm-disk-smart-secondary-title",value:_T("smart","smart_test_result")},{xtype:"syno_displayfield",id:t.testResultId=Ext.id(),htmlEncode:!1,fieldLabel:_T("disk_info","disk_ironwolf_test_pre_result")},{xtype:"syno_displayfield",id:t.testOutputId=Ext.id(),htmlEncode:!1,fieldLabel:_T("disk_info","disk_adv_test_code")},{xtype:"syno_displayfield",cls:"sm-disk-smart-secondary-title",value:_T("common","schedule"),hidden:!t.needSchedule},{xtype:"syno_displayfield",name:"scheduleTimeField",itemId:"scheduleStatus",htmlEncode:!1,hidden:!t.needSchedule,fieldLabel:_T("schedule","next_trigger_time")}]}]},e)},getPollingConf:function(e){var t=this;if(!e)throw Error("param error: device is not set");return{interval:5,immediate:!0,webapi:SYNO.SDS.StorageUtils.ReplaceWebapiSHA(this.isPassiveDisk,{api:"SYNO.Core.Storage.Disk",version:1,method:"get_adv_test_log",params:{device:t.device}}),status_callback:function(e,i,s,a){if(t.cleanMask&&(t.appWin.clearStatusBusy(),t.cleanMask=!1),!e)return t.appWin.getMsgBox().alert("",_T("status","status_not_available")),void t.pollingTaskStop();t.fillData(i)},scope:t}},pollingTaskStart:function(){var e=this;void 0===e.TestLogPollingID&&(e.TestLogPollingID=e.pollReg(e.TestLogPollingConf))},pollingTaskStop:function(){var e=this;void 0!==e.TestLogPollingID&&(e.pollUnreg(e.TestLogPollingID),e.TestLogPollingID=void 0)},fillData:function(e){var t=this,i="",s="",a=SYNO.SDS.StorageUtils.DiskTestLogRender(e.test_result);switch(s=String.format('<span class="{0}">{1}</span>',a.color,a.text),""!==e.test_time&&(s+=String.format(" ({0})",SYNO.SDS.DateTimeFormatter(Date.parseDate(e.test_time,"Y/m/d H:i:s"),{type:"datetimesec"}))),Ext.getCmp(t.testResultId).setRawValue(s),i=""===a.code?a.tooltip:"unknown"===a.code?e.test_code+". "+a.tooltip:a.code+". "+a.tooltip,Ext.getCmp(t.testOutputId).setRawValue(i),e.disk_code){case"ironwolf":Ext.getCmp(t.noteId).setValue(_T("disk_info","disk_ironwolf_link_note"));break;case"ironwolf_pro":Ext.getCmp(t.noteId).setValue(_T("disk_info","disk_ironwolf_pro_link_note"));break;default:Ext.getCmp(t.noteId).setValue(""),Ext.getCmp(t.noteId).setVisible(!1)}t.testing=e.testing,t.testing?(SYNO.SDS.StorageUtils.setUpdateTimeAnimate(!0,Ext.getCmp(t.testingStatusId),_T("background_task","task_processing")),Ext.getCmp(t.testingStatusId).setVisible(!0),Ext.getCmp(t.testBtnId).setText(_T("smart","smart_test_button_stop")),t.needRefresh=!0):(Ext.getCmp(t.testingStatusId).setRawValue(""),Ext.getCmp(t.testingStatusId).setVisible(!1),Ext.getCmp(t.testBtnId).setText(_T("smart","smart_test_button_start")),t.needRefresh&&(t.appWin.healthOverviewPanel&&t.appWin.healthOverviewPanel.onHealthInfoRefresh({device:t.device,ignoreBusyMask:!0}),t.needRefresh=!1)),_S("demo_mode")?(Ext.getCmp(this.testBtnId).setDisabled(!0),Ext.getCmp(this.testBtnId).setTooltip(_JSLIBSTR("uicommon","error_demo"))):t.testing||!e.perf_testing&&!e.smart_testing?(Ext.getCmp(this.testBtnId).setDisabled(!1),Ext.getCmp(this.testBtnId).setTooltip("")):(Ext.getCmp(this.testBtnId).setDisabled(!0),Ext.getCmp(this.testBtnId).setTooltip(_T("disk_info","other_is_testing"))),t.doLayout()},onApply:function(){var e=this,t="";e.testing?(t="stop",e.sendTestRequest(t)):(t="start",e.confirmTestRequest(t))},confirmTestRequest:function(e){var t=this;t.appWin.getMsgBox().confirm("",_T("disk_info","disk_ironwolf_test_processing"),(function(i){"yes"===i&&t.sendTestRequest(e)}),t)},sendTestRequest:function(e){var t=this;t.appWin.setStatusBusy({text:_T("common","saving")}),t.appWin.sendWebAPI(SYNO.SDS.StorageUtils.ReplaceWebapiSHA(this.isPassiveDisk,{api:"SYNO.Core.Storage.Disk",version:1,method:"do_adv_test",params:{device:t.device,type:e},callback:function(e,i,s,a){if(!e)return t.appWin.clearStatusBusy(),t.appWin.getMsgBox().alert("",_T("error","error_error_system")),void t.pollingTaskStop();t.cleanMask=!0,t.appWin.sendWebAPI(SYNO.SDS.StorageUtils.ReplaceWebapiSHA(this.isPassiveDisk,{api:"SYNO.Core.Storage.Disk",version:1,method:"get_adv_test_log",params:{device:t.device},callback:function(e,i,s,a){if(t.cleanMask&&(t.appWin.clearStatusBusy(),t.cleanMask=!1),!e)return t.appWin.getMsgBox().alert("",_T("common","error_system")),void t.pollingTaskStop();t.needRefresh=!0,t.fillData(i)},scope:t}))},scope:t}))},onRenderScheduleStatus:function(){var e,t=this,i=t.getComponent("form").getComponent("test_field");!0===t.needSchedule&&t.appWin.healthInfo&&t.appWin.healthInfo.overview&&!0===t.appWin.healthInfo.overview.adv_scheduled?e=SYNO.SDS.TaskScheduler.SMART.LastTriggerTimeGet(t.appWin.healthInfo.overview.ihm_schedule_list):!0===t.needSchedule&&(e=_T("disk_info","health_info_ironwolf_sched_guide")),i.getComponent("scheduleStatus").setRawValue(Ext.isEmpty(e)?"-":e)}}),Ext.define("SYNO.SDS.StorageManager.WddaView",{extend:"SYNO.ux.Panel",constructor:function(e){var t,i=this;i.owner=e.owner,i.appWin=e.appWin,i.device=e.device,i.parent=e.parent,i.cleanMask=!1,t=Ext.apply({title:_T("disk_info","disk_wdda_title"),layout:"fit",items:[i.configForm({itemId:"form"})],listeners:{scope:i,beforedestroy:i.pollingTaskStop}},e),i.TestLogPollingConf=i.getPollingConf(i.device),i.callParent([t])},onActivate:function(){this.pollingTaskStart()},configForm:function(e){return Ext.apply({xtype:"syno_formpanel",border:!1,padding:0,items:[{xtype:"syno_fieldset",collapsible:!1,title:_T("disk_info","disk_wdda_full_title"),htmlEncode:!1,itemId:"testField",synodefaults:{width:200},items:[{xtype:"syno_displayfield",value:_T("disk_info","disk_wdda_description")},{xtype:"syno_displayfield",itemId:"status",fieldLabel:_T("common","status")},{xtype:"syno_displayfield",itemId:"result",htmlEncode:!1,fieldLabel:_T("smart","smart_test_result_sentence")},{xtype:"syno_displayfield",itemId:"recommend",htmlEncode:!1,fieldLabel:_T("smart","smart_test_recommend")}]}]},e)},getPollingConf:function(e){var t=this;if(!e)throw Error("param error: device is not set");return{interval:5,immediate:!0,webapi:SYNO.SDS.StorageUtils.ReplaceWebapiSHA(this.isPassiveDisk,{api:"SYNO.Core.Storage.Disk",version:1,method:"get_wdda_test_result",params:{device:t.device}}),status_callback:function(e,i,s,a){if(t.cleanMask&&(t.appWin.clearStatusBusy(),t.cleanMask=!1),!e)return t.appWin.getMsgBox().alert("",_T("status","status_not_available")),void t.pollingTaskStop();t.fillData(i)},scope:t}},pollingTaskStart:function(){var e=this;void 0===e.TestLogPollingID&&(e.TestLogPollingID=e.pollReg(e.TestLogPollingConf))},pollingTaskStop:function(){var e=this;void 0!==e.TestLogPollingID&&(e.pollUnreg(e.TestLogPollingID),e.TestLogPollingID=void 0)},fillData:function(e){var t,i="",s=SYNO.SDS.StorageUtils.DiskWddaRender(e.test_result),a=this.getComponent("form").getComponent("testField");a&&s&&(a.getComponent("status").setValue(e.is_wdda_enabled?_T("common","enabled"):_T("common","disabled")),i=String.format('<span class="{0}">{1}</span>',s.color,s.result),""!==e.test_time&&(i+=String.format(" ({0})",SYNO.SDS.DateTimeFormatter(Date.parseDate(e.test_time,"Y/m/d H:i:s"),{type:"datetimesec"}))),a.getComponent("result").setValue(e.is_wdda_enabled?i:"-"),t=s.recommend,a.getComponent("recommend").setValue(e.is_wdda_enabled&&!Ext.isEmpty(t)?t:"-"),this.doLayout())}}),Ext.define("SYNO.SDS.StorageManager.Wizard.HealthInfo",{extend:"SYNO.SDS.ModalWindow",constructor:function(e){var t=[];this.cfg=e,this.cfg.appWin=this,this.cfg.isPassiveDisk=e.isPassiveDisk||e.is_target_ha_passive,this.healthOverviewPanel=new SYNO.SDS.StorageManager.HealthOverview(Ext.apply({id:this.healthOverviewId=Ext.id()},this.cfg)),this.smartPanel=new SYNO.SDS.StorageManager.SmartPanel(Ext.apply({id:this.smartPanelId=Ext.id()},this.cfg)),this.smartInfoPanel=new SYNO.SDS.StorageManager.SmartInfo(Ext.apply({id:this.smartInfoId=Ext.id(),isNvme:!1},this.cfg)),this.smartInfoNVMePanel=new SYNO.SDS.StorageManager.SmartInfo(Ext.apply({id:this.smartInfoNVMeId=Ext.id(),isNvme:!0},this.cfg)),this.advPanel=new SYNO.SDS.StorageManager.AdvTestView(Ext.apply({id:this.advTestViewId=Ext.id(),needSchedule:!0},this.cfg)),this.wddaPanel=new SYNO.SDS.StorageManager.WddaView(Ext.apply({id:this.wddaViewId=Ext.id()},this.cfg)),t.push(this.healthOverviewPanel),t.push(this.smartInfoPanel),t.push(this.smartInfoNVMePanel),t.push(this.advPanel),t.push(this.wddaPanel),t.push(this.smartPanel),t.push(new SYNO.SDS.StorageManager.HealthHistory(Ext.apply({id:this.healthHistoryId=Ext.id()},this.cfg)));var i=new SYNO.SDS.Utils.TabPanel({id:this.tabPanelId=Ext.id(),activeTab:0,items:t}),s="";SYNO.SDS.StorageUtils.isSHA&&(s=" - "+(this.cfg.isPassiveDisk?_T("ui","passive"):_T("ui","active")));var a=Ext.apply({title:_T("disk_info","disk_health_info")+" - "+e.name+s,modal:!1,width:820,height:580,minWidth:820,minHeight:580,layout:"fit",items:i,buttons:[{text:_T("common","alt_close"),handler:this.close,scope:this}]},e);this.callParent([a]),Ext.getCmp(this.tabPanelId).hideTabStripItem(this.advTestViewId),Ext.getCmp(this.tabPanelId).hideTabStripItem(this.wddaViewId),Ext.getCmp(this.tabPanelId).hideTabStripItem(this.smartInfoId),Ext.getCmp(this.tabPanelId).hideTabStripItem(this.smartInfoNVMeId),Ext.getCmp(this.tabPanelId).hideTabStripItem(this.smartPanelId),Ext.getCmp(this.tabPanelId).hideTabStripItem(this.healthHistoryId)},removeTab:function(e){var t=0,i=40;void 0!==e&&(t+=40,t+=7*Ext.getCmp(this.healthOverviewId).title.length+i,"yes"===_D("support_ihm")&&"not_support"!==e.adv_status?(Ext.getCmp(this.tabPanelId).unhideTabStripItem(this.advTestViewId),t+=7*Ext.getCmp(this.advTestViewId).title.length+i):"yes"===_D("support_wdda")&&"not_support"!==e.wdda_status&&(Ext.getCmp(this.tabPanelId).unhideTabStripItem(this.wddaViewId),t+=7*Ext.getCmp(this.wddaViewId).title.length+i),this.supportSmartTest?(Ext.getCmp(this.tabPanelId).unhideTabStripItem(this.smartPanelId),t+=7*Ext.getCmp(this.smartPanelId).title.length+i,this.smartPanel.removePanel(e.smartInfo_support)):e.smartInfo_support&&(e.isNVMeDisk?(Ext.getCmp(this.tabPanelId).unhideTabStripItem(this.smartInfoNVMeId),t+=7*Ext.getCmp(this.smartInfoNVMeId).title.length+i):(Ext.getCmp(this.tabPanelId).unhideTabStripItem(this.smartInfoId),t+=7*Ext.getCmp(this.smartInfoId).title.length+i)),this.supportSmartTest&&(Ext.getCmp(this.tabPanelId).unhideTabStripItem(this.healthHistoryId),t+=7*Ext.getCmp(this.healthHistoryId).title.length+i),this.getWidth()<t&&this.setWidth(t))},onGotoTabPanel:function(e){var t,i={overview:this.healthOverviewId,nvme_info:this.smartInfoNVMeId,adv_test:this.advTestViewId,wdda:this.wddaViewId,smart_test:this.smartPanelId,history:this.healthHistoryId},s=this;if("smart_info"===e){var a=new SYNO.SDS.StorageManager.SmartInfo(Ext.apply({style:"padding: 0px 20px;",isNvme:!1,height:450},s.cfg)),n=new SYNO.SDS.ModalWindow({owner:s.appWin,dsmStyle:"v5",resizable:!1,width:700,height:510,hideLabel:!1,title:_T("smart","smart_toolbar_smart_info"),buttons:[{text:_T("common","alt_close"),scope:s,handler:function(){n.close()}}],items:a});return n.open(),void a.onActivate()}e in i?(t=i[e],Ext.getCmp(this.tabPanelId).setActiveTab(t)):SYNO.Debug.error("no such panel",e)}}),Ext.define("SYNO.SDS.StorageManager.HealthOverview",{extend:"SYNO.ux.Panel",loaded:!1,constructor:function(e){if(this.owner=e.owner,this.appWin=e.appWin,this.device=e.device,this.temp=e.temp,this.parent=e.parent,this.isPassiveDisk=e.isPassiveDisk,this.isHaPanel=e.isHaPanel,this.warningBtnRenderId=Ext.id(),this.scheduleBtnRenderId=Ext.id(),this.gotoSmartInfoPanelLinkId=Ext.id(),this.gotoSmartTestPanelLinkId=Ext.id(),this.gotoIronWolfPanelLinkId=Ext.id(),this.gotoHistoryPanelLinkId=Ext.id(),this.gotoWddaPanelLinkId=Ext.id(),this.predictLinkId=Ext.id(),this.supportSmartTest=e.supportSmartTest,this.diskHealth=new Ext.DataView({tpl:new Ext.XTemplate('<tpl for=".">','<div class="sm-overview-health-mini-status">','<div class="sm-overview-health-mini-icon-align ">','<div class="{iconCls} {iconCls}-{status}"></div>','<div class="{statusIconCls} {statusIconCls}-{status}"></div>',"</div>",'<div class="sm-overview-health-mini-textarea">','<div class="sm-overview-health-mini-text">{text}</div>','<div class="sm-overview-health-mini-desc">{desc}</div>',"<div id="+this.warningBtnRenderId+' class="sm-overview-health-button"></div>',"</div>","</div>","</tpl>"),store:this.healthStore=new Ext.data.JsonStore({autoDestroy:!0,fields:["status","text","desc","iconCls","statusIconCls"]})}),this.adv_support=!1,!1===this.isHaPanel)for(var t=0;t<e.disks.length;t++)if("not_support"!==e.disks[t].adv_status){this.adv_support=!0;break}var i=[];i.push({xtype:"syno_displayfield",htmlEncode:!1,itemId:"remainLifeDisplayField",fieldLabel:_T("disk_info","disk_remain_life")},{xtype:"syno_displayfield",htmlEncode:!1,itemId:"SBMonthLeftDisplayField",fieldLabel:_T("disk_info","ssd_bundle_useful_time")},{xtype:"syno_displayfield",itemId:"tempDisplayField",fieldLabel:_T("status","temperature")}),i.push({xtype:"syno_displayfield",itemId:"poweronDisplayField",fieldLabel:_T("disk_info","disk_poweron_hours")},{xtype:"syno_displayfield",itemId:"retryDisplayField",fieldLabel:_T("disk_info","disk_retry_ct")},{xtype:"syno_displayfield",itemId:"idnfDisplayField",fieldLabel:_T("disk_info","disk_identify_failed_ct")});var s=Ext.apply({title:_T("helptoc","logcenter_overview"),border:!1,autoFlexcroll:!0,items:[this.diskHealth,{xtype:"syno_fieldset",cls:"sm-health-statistics-fieldset",hidden:!0,itemId:"statisticsFieldSet",title:_T("disk_info","disk_health_statistics"),border:!1,labelWidth:300,items:i},{border:!1,xtype:"syno_fieldset",hidden:!0,id:this.description_field_id=Ext.id(),title:_T("disk_info","disk_health_description_and_other_warning"),items:[{xtype:"syno_displayfield",htmlEncode:!1,fieldLabel:"",id:this.system_long_desc_id=Ext.id(),hideLabel:!0}]}],listeners:{activate:this.onActivate,scope:this}},e);this.callParent([s])},onActivate:function(e){this.loaded||this.onHealthInfoRefresh(e)},onHealthInfoRefresh:function(e){!0!==e.ignoreBusyMask&&this.appWin.setStatusBusy(),this.appWin.sendWebAPI(SYNO.SDS.StorageUtils.ReplaceWebapiSHA(this.isPassiveDisk,{api:"SYNO.Storage.CGI.Smart",method:"get_health_info",version:1,params:{device:e.device},scope:this,callback:function(t,i){!0!==e.ignoreBusyMask&&this.appWin.clearStatusBusy();var s;t?(this.loaded=!0,this.appWin.healthInfo=i.healthInfo,(s=this.appWin.healthInfo.overview)?(this.onLoadSuccess(s),this.onRenderGotoLink(s),this.appWin.smartInfoPanel.onActivate(),this.appWin.smartInfoNVMePanel.onActivate(),"not_support"!==s.adv_status&&this.appWin.advPanel.onActivate(),this.supportSmartTest&&this.appWin.smartPanel.onActivate(),"not_support"!==s.wdda_status&&this.appWin.wddaPanel.onActivate()):this.onLoadFail()):this.onLoadFail()}}))},onRenderGotoLink:function(e){var t=Ext.fly(this.gotoSmartInfoPanelLinkId);Ext.isObject(t)&&e.smartInfo_support&&(e.isNVMeDisk?this.mon(t,"click",(function(){this.appWin.onGotoTabPanel("nvme_info")}),this):this.mon(t,"click",(function(){this.appWin.onGotoTabPanel("smart_info")}),this)),t=Ext.fly(this.gotoSmartTestPanelLinkId),Ext.isObject(t)&&this.supportSmartTest&&this.mon(t,"click",(function(){this.appWin.onGotoTabPanel("smart_test")}),this),t=Ext.fly(this.gotoIronWolfPanelLinkId),Ext.isObject(t)&&"not_support"!==e.adv_status&&this.mon(t,"click",(function(){this.appWin.onGotoTabPanel("adv_test")}),this),t=Ext.fly(this.gotoHistoryPanelLinkId),Ext.isObject(t)&&this.supportSmartTest&&this.mon(t,"click",(function(){this.appWin.onGotoTabPanel("history")}),this),t=Ext.fly(this.gotoWddaPanelLinkId),Ext.isObject(t)&&"not_support"!==e.wdda_status&&this.mon(t,"click",(function(){this.appWin.onGotoTabPanel("wdda")}),this),t=Ext.fly(this.predictLinkId),Ext.isObject(t)&&this.mon(t,"click",(function(){this.openHelper()}),this)},onRenderButton:function(e){var t,i=this,s=!1,a=0,n=[];const o=SYNO.SDS.StorageUtils.DiskCompIssueCheck(e.compatibility);for(t=0<e.smart_suppress||0<e.smart_disable||!0===e.adv_modified||(0<e.smart_test_suppress||0<e.smart_test_disable)&&"normal"===e.smart_test||(0<e.wdda_suppress||0<e.wdda_disable)&&"warning"!==e.wdda_status||(0<e.nvme_perc_used_suppress||0<e.nvme_perc_used_disable)&&!1===e.nvme_perc_used_full,a=0;a<e.smart_fail.length;a++)if("critical"!==e.smart_fail[a].type){s=!0;break}!0!==e.adv_modifiable&&!0!==e.wdda_modifiable&&!0!==e.nvme_perc_used_full&&"normal_past"!==e.smart_test||(s=!0),o||!s&&!t?i.diskHealth.getNode(i.warningBtnRenderId).classList.add("sm-overview-display-none"):(i.modifyWarningBtn=new Ext.menu.Item({text:_T("disk_info","disk_remove_warning_title"),id:i.modifyWarningId=Ext.id(),handler:i.onHandleWarning,disabled:!s,scope:i}),n.push(i.modifyWarningBtn),i.recoverWarningBtn=new Ext.menu.Item({text:_T("disk_info","disk_recover_warning_title"),id:i.recoverWarningId=Ext.id(),handler:i.onEnableWarning,disabled:!t,scope:i}),n.push(i.recoverWarningBtn),i.warningMenu=new SYNO.ux.Menu({items:n}),i.warningBtn=new SYNO.ux.Button({id:i.warningBtnId=Ext.id(),text:_T("disk_info","disk_modify_warning_title"),menu:i.warningMenu,renderTo:i.warningBtnRenderId,scope:i}),i.diskHealth.getNode(i.warningBtnRenderId).classList.remove("sm-overview-display-none"))},onHandleWarning:function(){var e=this,t={owner:e.appWin,appWin:e.appWin,device:e.device,isPassiveDisk:e.isPassiveDisk};new SYNO.SDS.StorageManager.Wizard.SmartWarning(t).open(t)},onEnableWarning:function(){var e=this,t={owner:e.appWin,appWin:e.appWin,device:e.device,isPassiveDisk:e.isPassiveDisk};new SYNO.SDS.StorageManager.Wizard.EnableWarning(t).open(t)},smartOtherNormalJudge:function(e){return"fail"!==e.smart_test&&"warning"!==e.adv_status&&"critical"!==e.adv_status&&"failing"!==e.adv_status},renderOverviewStatus:function(e){var t=function(e,t,i){var s;return s=String.format('<a class="link-font" href="#" id="{0}">{1}</a>',e,t),String.format(i,s)},i="",s="",a="",n="",o="";switch(e.overview_status){case"normal":i="normal",s=_T("disk_info","disk_status_healthy"),a=_T("disk_info","disk_smart_ok_desc"),o="normal","life_below_thr"===e.smart_info?(a=_T("disk_info","disk_status_remain_life_desc"),o="life_below_thr"):!0===e.sb_days_left_warning&&(a=_T("disk_info","ssd_bundle_useful_time_desc"),o="sb_days_left_warning");break;case"warning":i="warning",s=_T("disk_info","disk_status_warning"),n=_T("disk_info","disk_status_warning_action"),!0===e.smart_fail_repeat?(a=t(this.gotoSmartInfoPanelLinkId,_T("smart","smart_toolbar_smart_info"),_T("disk_info","disk_status_smart_repeat_fail_main_desc")),o="smart_info_repeat"):!0===e.smart_fail_past?(a=t(this.gotoSmartInfoPanelLinkId,_T("smart","smart_toolbar_smart_info"),_T("disk_info","disk_status_smart_info_normal_past_main_desc")),o="smart_info_past"):"normal_past"===e.smart_test?(a=t(this.gotoSmartTestPanelLinkId,_T("smart","smart_toolbar_smart_test"),_T("disk_info","disk_status_smart_test_normal_past_main_desc")),o="smart_test_past"):"warning"===e.adv_status?(a=t(this.gotoIronWolfPanelLinkId,_T("disk_info","disk_ironwolf_test")+": ","{0}"+_T(e.adv_section,e.adv_key)),o="ihm_test_warning",n=""):"warning"===e.wdda_status?(a=t(this.gotoWddaPanelLinkId,_T("disk_info","disk_wdda_title"),_T("disk_info","disk_status_wdda_warning_main_desc")),o="wdda_warning",n=_T("disk_info","disk_status_wdda_warning_action")):e.isNVMeDisk&&e.nvme_perc_used_full?(a=_T("disk_info","nvme_percentage_used_full"),o="nvme_warning_perctage_used_full"):e.isNVMeDisk&&e.critical_warning.temp_over_thr&&(a=_T("notification_event","DiskTemperatureAbnormal"),o="nvme_warning_temp",n=_T("disk_info","disk_status_temperature_warning_action"));break;case"critical":i="critical",s=_T("disk_info","disk_status_critical"),n=_T("disk_info","disk_status_critical_action"),"yes"===_S("support_synodrive_ability")&&("fail"===e.smart_test?(a=t(this.gotoSmartTestPanelLinkId,_T("smart","smart_toolbar_smart_test"),_T("disk_info","disk_status_critical_smart_fail_main_desc")),o="smart_test_fail"):"failing"===e.adv_status?(a=t(this.gotoIronWolfPanelLinkId,_T("disk_info","disk_ironwolf_test")+": ","{0}"+_T(e.adv_section,e.adv_key)),o="ihm_test_fail",n=""):e.isNVMeDisk&&e.critical_warning.read_only&&(a=_T("disk_info","nvme_critical_warning_read_only_mode"),o="nvme_fail")),"life_danger"===e.smart_info?(a=_T("disk_info","disk_status_remain_life_severe_main_desc"),o="life_danger"):!0===e.sb_days_left_critical?(a=_T("disk_info","ssd_bundle_useful_time_severe_desc"),o="sb_days_left_critical"):!0===e.smart_fail_critical?(a=t(this.gotoSmartInfoPanelLinkId,_T("smart","smart_toolbar_smart_info"),_T("disk_info","disk_status_smart_critical_fail_main_desc")),o="smart_info_critical"):"critical"===e.health_prediction?(a=this.preparePredictDesc(e.health_prediction_factor),n="",o="health_prediction_critical"):"critical"===e.adv_status?(a=t(this.gotoIronWolfPanelLinkId,_T("disk_info","disk_ironwolf_test")+": ","{0}"+_T(e.adv_section,e.adv_key)),o="ihm_test_critical",n=""):!0===e.isNVMeDisk?e.critical_warning.spare_below_thr?(a=String.format(_T("disk_info","nvme_critical_warning_reach_vendor_threshold"),e.remain_life,e.remain_life_thr),o="nvme_critical_below_vender_thr"):e.critical_warning.degraded?(a=_T("disk_info","nvme_critical_warning_media_error"),o="nvme_critical_degraded"):e.critical_warning.vm_backup_fail&&(a=_T("disk_info","nvme_critical_warning_volatile_memory_backup_device_fail"),o="nvme_critical_vm_backup_fail"):"critical"===e.disk_error_unc_status?(a=_T("disk_info","disk_status_unc_critical_main_desc_guide"),n="",o="disk_error_critical_unc"):"critical"===e.disk_error_timeout_status?(a=_T("disk_info","disk_status_timeout_critical_main_desc_guide"),n="",o="disk_error_critical_timeout"):"critical"===e.disk_error_reset_fail_status&&(a=_T("disk_info","disk_status_reset_fail_critical_main_desc_guide"),n="",o="disk_error_critical_reset_fail");break;case"failing":i="failing",s=_T("disk_info","disk_status_failing"),n=_T("disk_info","disk_status_failing_action"),"fail"===e.smart_test?(a=t(this.gotoSmartTestPanelLinkId,_T("smart","smart_toolbar_smart_test"),_T("disk_info","disk_status_critical_smart_fail_main_desc")),o="smart_test_fail"):"failing"===e.adv_status?(a=t(this.gotoIronWolfPanelLinkId,_T("disk_info","disk_ironwolf_test")+": ","{0}"+_T(e.adv_section,e.adv_key)),o="ihm_test_fail",n=""):e.isNVMeDisk&&e.critical_warning.read_only&&(a=_T("disk_info","nvme_critical_warning_read_only_mode"),o="nvme_fail");break;case"not_support":i="critical",s=_T("disk_info","disk_compatibility_incompatible"),n=_T("disk_info","disk_status_forbidden_action"),a=_T("disk_info","disk_compatibility_incompatible_status");break;case"not_in_support":i="critical",s=_T("disk_info","disk_compatibility_unverified"),n=_T("disk_info","disk_status_unverified_action"),a=_T("disk_info","disk_compatibility_unverified_status");break;case"fw_upgrade_required":i="critical",s=_T("disk_info","disk_compatibility_fwupgrade_required"),n=_T("disk_info","disk_status_fwupgrade_action"),a=_T("disk_info","disk_compatibility_fwupgrade_required_status");break;default:SYNO.Debug.error("no such status",e.overview_status),i=""}return Ext.isEmpty(n)||(a+="<br>"+n),{diskStatus:i,text:s,desc:a,mainStatus:o}},onLoadSuccess:function(e){var t,i={},s=[],a=SYNO.SDS.StorageUtils,n="",o=this.getComponent("statisticsFieldSet"),r=o.getComponent("tempDisplayField"),l=o.getComponent("poweronDisplayField"),d=o.getComponent("retryDisplayField"),_=o.getComponent("idnfDisplayField"),p=o.getComponent("remainLifeDisplayField"),c=o.getComponent("SBMonthLeftDisplayField");let u=a.DiskCompIssueCheck(e.compatibility);const m=a.DiskCanShowInfo(e.compatibility);r.setValue(a.DiskTemperatureRender(this.temp)),(e.isSataDisk||e.isNVMeDisk)&&l.setValue(String.format("{0} {1}",e.poweron,1===parseInt(e.poweron,10)?_T("common","time_hour"):_T("common","time_hours"))),e.isSataDisk&&(d.setValue(e.retry),_.setValue(e.idnf)),l.setVisible(e.isSataDisk||e.isNVMeDisk),d.setVisible(e.isSataDisk),_.setVisible(e.isSataDisk),this.appWin.removeTab(e),-1!==e.remain_life&&m?(p.setVisible(!0),p.setValue(a.RemainLifeRenderOld(e.remain_life,e.below_remain_life_show_thr,e.remain_life_danger)),SYNO.ux.AddWhiteTipWithMsg(p,String.format(_T("disk_info","disk_remain_life_info"),e.remain_life_attr))):p.setVisible(!1),e.sb_days_left_warning&&m?(c.setVisible(!0),c.setValue(a.SBTimeStringRender(e.remain_life,e.sb_days_left,e.sb_days_left_critical,!0)),SYNO.ux.AddWhiteTipWithMsg(c,_T("disk_info","ssd_bundle_option_info"))):c.setVisible(!1),m||(r.setValue("-"),l.setValue("-"),d.setValue("-"),_.setValue("-"),p.setValue("-"),c.setValue("-")),o.show(),i.iconCls="sm-overview-health-mini-icon",i.statusIconCls="sm-overview-health-mini-status-icon",u&&(e.overview_status=e.compatibility);var h=this.renderOverviewStatus(e);i.status=h.diskStatus,i.text=h.text,i.desc=h.desc,t=h.mainStatus,""!==i.status&&(s.push(i),this.healthStore.loadData(s),this.onRenderButton(e),0!==e.retry&&m&&SYNO.ux.AddWhiteTipWithMsg(d,String.format(_T("disk_info","disk_retry_info_guide"))),0!==e.idnf&&m&&SYNO.ux.AddWhiteTipWithMsg(_,String.format(_T("disk_info","disk_identify_failed_info_guide"))),n+=this.addBottomDescFailing(e,t),n+=this.addBottomDescCritical(e,t),n+=this.addBottomDescWarning(e,t),n+=this.addBottomDescInfo(e,t),u&&(n=""),""===n?(Ext.getCmp(this.system_long_desc_id).hide(),Ext.getCmp(this.description_field_id).hide()):(Ext.getCmp(this.system_long_desc_id).setValue(n),Ext.getCmp(this.system_long_desc_id).show(),Ext.getCmp(this.description_field_id).show()),this.doLayout())},onLoadFail:function(){var e={},t=[];this.appWin.removeTab(),e.status="access_error",e.text=_T("disk_info","disk_status_access_err"),e.desc=_T("disk_info","disk_status_access_err_desc"),"yes"===_S("support_synodrive_ability")&&(e.status="critical",e.text=_T("disk_info","disk_status_critical")),e.iconCls="sm-overview-health-mini-icon",e.statusIconCls="sm-overview-health-mini-status-icon",t.push(e),this.healthStore.loadData(t),Ext.getCmp(this.system_long_desc_id).hide(),Ext.getCmp(this.description_field_id).hide(),this.doLayout()},addBottomDescFailing:function(e,t){var i="";return"smart_test_fail"!==t&&(i+="fail"===e.smart_test?_T("disk_info","disk_status_critical_smart_fail_desc")+"<br><br>":""),"ihm_test_fail"!==t&&(i+="failing"===e.adv_status?_T(e.adv_section,e.adv_key)+"<br><br>":""),"nvme_fail"!==t&&(i+=e.isNVMeDisk&&e.critical_warning.read_only?_T("disk_info","nvme_critical_warning_read_only_mode")+"<br><br>":""),i},addBottomDescCritical:function(e,t){var i="",s=0;for("life_danger"!==t&&"nvme_fail"!=t&&(i+="life_danger"===e.smart_info?_T("disk_info","disk_status_remain_life_severe_main_desc")+"<br><br>":""),"sb_days_left_critical"===t||"life_danger"===e.smart_info||e.isNVMeDisk&&e.critical_warning.read_only||(i+=!0===e.sb_days_left_critical?_T("disk_info","ssd_bundle_useful_time_severe_desc")+"<br><br>":""),s=0;s<e.smart_fail.length;s++)"critical"==e.smart_fail[s].type&&(i+="smart_info_critical"!==t?String.format(_T("disk_info","disk_status_smart_critical_fail_mask_desc"),e.smart_fail[s].id,e.smart_fail[s].name)+"<br><br>":String.format(_T("disk_info","disk_status_smart_critical_fail_bottom_desc"),e.smart_fail[s].id,e.smart_fail[s].name)+"<br><br>");return"health_prediction_critical"!==t&&(i+="critical"===e.health_prediction?this.preparePredictDesc(e.health_prediction_factor)+"<br><br>":""),"ihm_test_critical"!==t&&(i+="critical"===e.adv_status?_T(e.adv_section,e.adv_key)+"<br>":""),i+=!0===e.read_only?_T("disk_info","disk_ro_protect_bad_block_thr_desc")+"<br>":"",!0===e.isNVMeDisk&&("nvme_critical_below_vender_thr"!==t&&(i+=e.critical_warning.spare_below_thr?String.format(_T("disk_info","nvme_critical_warning_reach_vendor_threshold"),e.remain_life,e.remain_life_thr)+"<br><br>":""),"nvme_critical_degraded"!==t&&(i+=e.critical_warning.degraded?_T("disk_info","nvme_critical_warning_media_error")+"<br><br>":""),"nvme_critical_vm_backup_fail"!==t&&(i+=e.critical_warning.vm_backup_fail?_T("disk_info","nvme_critical_warning_volatile_memory_backup_device_fail")+"<br><br>":"")),"disk_error_critical_unc"!==t&&(i+="critical"===e.disk_error_unc_status?_T("disk_info","disk_status_unc_critical_main_desc_guide")+"<br><br>":""),"disk_error_critical_timeout"!==t&&(i+="critical"===e.disk_error_timeout_status?_T("disk_info","disk_status_timeout_critical_main_desc_guide")+"<br><br>":""),"disk_error_critical_reset_fail"!==t&&(i+="critical"===e.disk_error_reset_fail_status?_T("disk_info","disk_status_reset_fail_critical_main_desc_guide")+"<br><br>":""),i},addBottomDescWarning:function(e,t){var i="",s=0;for(s=0;s<e.smart_fail.length;s++)"repeat"==e.smart_fail[s].type?i+="smart_info_repeat"!==t?String.format(_T("disk_info","disk_status_smart_repeat_fail_mask_desc"),e.smart_fail[s].id,e.smart_fail[s].name)+"<br><br>":String.format(_T("disk_info","disk_status_smart_repeat_fail_bottom_desc"),e.smart_fail[s].id,e.smart_fail[s].name)+"<br><br>":"past"===e.smart_fail[s].type&&(i+=String.format(_T("disk_info","disk_status_smart_info_normal_past_bottom_desc"),e.smart_fail[s].id,e.smart_fail[s].name)+"<br><br>");return"smart_test_past"!==t&&"normal_past"===e.smart_test&&(i+=String.format(_T("disk_info","disk_status_smart_test_normal_past_main_desc"),_T("smart","smart_toolbar_smart_test"))+"<br><br>"),"ihm_test_warning"!==t&&(i+="warning"===e.adv_status?_T(e.adv_section,e.adv_key)+"<br><br>":""),"wdda_warning"!==t&&"warning"===e.wdda_status&&(i+=String.format(_T("disk_info","disk_status_wdda_warning_main_desc"),_T("disk_info","disk_wdda_title"))+"<br><br>"),"nvme_warning_perctage_used_full"!==t&&(i+=e.isNVMeDisk&&e.nvme_perc_used_full?_T("disk_info","nvme_percentage_used_full")+"<br><br>":""),"nvme_warning_temp"!==t&&(i+=e.isNVMeDisk&&e.critical_warning.temp_over_thr?_T("notification_event","DiskTemperatureAbnormal")+"<br><br>":""),i},addBottomDescInfo:function(e,t){var i,s="",a=[],n=[];Ext.isEmpty(e.low_performance_in_raid_disk_list)||(n=e.low_performance_in_raid_disk_list.split(",")),"life_below_thr"!==t&&"nvme_fail"!=t&&"life_danger"!==t&&"nvme_critical_below_vender_thr"!==t&&!0===e.below_remain_life_thr&&(s+=_T("disk_info","disk_status_remain_life_desc")+"<br><br>"),"sb_days_left_warning"===t||"life_danger"===e.smart_info||e.isNVMeDisk&&e.critical_warning.read_only||!0===e.sb_days_left_warning&&!1===e.sb_days_left_critical&&(s+=_T("disk_info","ssd_bundle_status_useful_time_desc")+"<br><br>"),"low"===e.seq_status?s+=_T("disk_info","disk_low_seq_perf_desc")+"<br><br>":"past"===e.seq_status&&(s+=_T("disk_info","disk_past_seq_perf_desc")+"<br><br>");for(var o=0;o<n.length;++o)(i=this.appWin.diskMap[n[o]])&&a.push(SYNO.SDS.StorageUtils.DiskDisplayNameGet(i));return("normal_suppress"===e.smart_info||"normal_repeat_suppress"===e.smart_info||!0===e.adv_modified||"normal"===e.smart_test&&1<=e.smart_test_suppress&&0===e.smart_test_disable||1<=e.wdda_suppress&&0===e.wdda_disable&&"warning"!==e.wdda_status||1<=e.nvme_perc_used_suppress&&0===e.nvme_perc_used_disable&&!1===e.nvme_perc_used_full)&&(s+=_T("disk_info","disk_status_suppress_detail")+"<br><br>"),("normal_disable"===e.smart_info||"normal"===e.smart_test&&0<e.smart_test_disable||0<e.wdda_disable&&"warning"!==e.wdda_status||0<e.nvme_perc_used_disable&&!1===e.nvme_perc_used_full)&&(s+=_T("disk_info","disk_status_disable_detail")+"<br><br>"),this.supportSmartTest&&!e.scheduled&&(s+=_T("disk_info","disk_no_sched_smart_test_desc")+"<br><br>"),s},preparePredictDesc:function(e){var t=String.format('<a class="link-font" href="#" id="{0}">',this.predictLinkId),i="</a>",s="",a="";return Ext.isEmpty(e)?a=String.format(_T("disk_info","disk_status_health_prediction_critical_main_desc"),t,i):(s=SYNO.SDS.StorageUtils.DiskPredictionMainFactorRender(e,this.appWin.healthInfo.smartInfo),a=String.format(_T("disk_info","disk_status_health_prediction_critical_main_desc_with_cause"),t,i,s)),a},openHelper:function(){SYNO.SDS.AppLaunch("SYNO.SDS.HelpBrowser.Application",{topic:"SYNO.SDS.StorageManager.Instance:StorageManager/disk.html"})}}),Ext.define("SYNO.SDS.StorageManager.SmartPanel",{extend:"SYNO.ux.Panel",constructor:function(e){var t,i=this,s=[];i.owner=e.owner,i.appWin=e.appWin,i.device=e.device,i.parent=e.parent,i.disks=e.disks,i.isHaPanel=e.isHaPanel,i.isPassiveDisk=e.isPassiveDisk,i.smartTestPanel=new SYNO.SDS.StorageManager.SmartTestView({needSchedule:!0,noTitle:!0,parentWin:i,owner:i.owner,appWin:i.appWin,parent:i.parent,device:i.device,disks:i.disks,smartSchedulerTable:e.smartSchedulerTable,isHaPanel:i.isHaPanel,isPassiveDisk:i.isPassiveDisk}),s.push({xtype:"syno_fieldset",title:_T("smart","smart_toolbar_smart_test"),id:i.smartTestId=Ext.id(),items:i.smartTestPanel}),i.smartInfoPanel=new SYNO.SDS.StorageManager.SmartInfoPanel({owner:i.owner,appWin:i.appWin,device:i.device,isHaPanel:i.isHaPanel,height:100,isPassiveDisk:i.isPassiveDisk}),s.push({xtype:"syno_fieldset",style:{marginTop:"16px"},title:_T("smart","smart_toolbar_smart_info"),id:i.smartInfoId=Ext.id(),items:i.smartInfoPanel}),t=Ext.apply({autoFlexcroll:!0,title:_T("smart","smart_name"),dsmStyle:"v5",items:s,listeners:{activate:i.onActivate,scope:i}},e),i.callParent([t]),i.mon(i,"resize",(function(e,t){e.smartTestPanel.setWidth(t-16),e.smartInfoPanel.setWidth(t-16),e.doLayout()}),i)},removePanel:function(e){e?Ext.getCmp(this.smartInfoId).setVisible(!0):Ext.getCmp(this.smartInfoId).setVisible(!1)},onActivate:function(){var e,t=this;t.appWin.healthInfo&&t.appWin.healthInfo.overview?(e=t.appWin.healthInfo.overview.smartInfo_support,t.removePanel(e),t.smartTestPanel.onActivate()):SYNO.Debug.error("Failed to read disk overview status",t.appWin)}}),SYNO.SDS.StorageManager.monthOffset=0,SYNO.SDS.StorageManager.convertToMonth=function(e){return[_JSLIBSTR("extlang","jan").substr(0,3),_JSLIBSTR("extlang","feb").substr(0,3),_JSLIBSTR("extlang","mar").substr(0,3),_JSLIBSTR("extlang","apr").substr(0,3),_JSLIBSTR("extlang","may").substr(0,3),_JSLIBSTR("extlang","jun").substr(0,3),_JSLIBSTR("extlang","jul").substr(0,3),_JSLIBSTR("extlang","aug").substr(0,3),_JSLIBSTR("extlang","sep").substr(0,3),_JSLIBSTR("extlang","oct").substr(0,3),_JSLIBSTR("extlang","nov").substr(0,3),_JSLIBSTR("extlang","dec").substr(0,3)][(e+SYNO.SDS.StorageManager.monthOffset)%12]},SYNO.SDS.StorageManager.getMonth=function(e){return["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"][e%12]},Ext.define("SYNO.SDS.StorageManager.HealthHistory",{extend:"SYNO.ux.Panel",constructor:function(e){var t,i=this,s=[];i.owner=e.owner,i.appWin=e.appWin,i.device=e.device,i.isHaPanel=e.isHaPanel,i.isPassiveDisk=e.isPassiveDisk,i.healthTestHistoryPanel=new SYNO.SDS.StorageManager.HealthTestHistory({appWin:i.appWin,device:i.device,isHaPanel:i.isHaPanel,isPassiveDisk:i.isPassiveDisk}),s.push({xtype:"syno_fieldset",title:_T("disk_info","disk_health_test_history_title"),bwrapCfg:{cls:"sm-health-history-field-wrap"},cls:"sm-health-history-fieldset",collapsible:!0,collapsed:!1,id:i.healthTestHistoryId=Ext.id(),items:i.healthTestHistoryPanel}),i.smartInfoHistoryPanel=new SYNO.SDS.StorageManager.SmartInfoHistory({appWin:i.appWin,showLifetimeChart:e.showLifetimeChart}),s.push({xtype:"syno_fieldset",title:_T("disk_info","disk_smart_info_history_title"),cls:"sm-health-history-fieldset",collapsible:!0,collapsed:!0,id:i.smartInfoHistoryId=Ext.id(),items:i.smartInfoHistoryPanel}),t=Ext.apply({title:_T("disk_info","disk_history_title"),dsmStyle:"v5",autoFlexcroll:!0,items:s,listeners:{activate:i.onActivate,scope:i}},e),i.callParent([t]),i.mon(i,"resize",(function(e,t){var i=t-20;e.healthTestHistoryPanel.setWidth(i),e.smartInfoHistoryPanel.setWidth(i),e.smartInfoHistoryPanel.chartResize(t-16)}),i),i.mon(Ext.getCmp(i.healthTestHistoryId),"expand",(function(){i.smartInfoHistoryPanel.setVisible(!1),Ext.getCmp(i.smartInfoHistoryId).collapse()})),i.mon(Ext.getCmp(i.smartInfoHistoryId),"expand",(function(){i.smartInfoHistoryPanel.setVisible(!0),i.smartInfoHistoryPanel.drawChart(),Ext.getCmp(i.healthTestHistoryId).collapse()}),i),i.mon(Ext.getCmp(i.smartInfoHistoryId),"collapse",(function(){i.smartInfoHistoryPanel.setVisible(!1)}),i)},onActivate:function(){var e=this;e.healthTestHistoryPanel.onActivate(),e.smartInfoSupport=!SYNO.SDS.StorageUtils.IsOnlySupportSas()&&e.appWin.healthInfo.overview.isSataDisk,e.smartInfoSupport?(Ext.getCmp(e.smartInfoHistoryId).setVisible(!0),e.smartInfoHistoryPanel.onActivate()):Ext.getCmp(e.smartInfoHistoryId).setVisible(!1)}}),Ext.define("SYNO.SDS.StorageManager.HealthPredictionHistory",{extend:"SYNO.ux.Panel",constructor:function(e){this.chartData=null,this.historyData=null,this.appWin=e.appWin,this.device=e.device,this.needRefresh=!0,this.threshold=0,this.HistoryChartInstance=null,this.validDataIndex=0,this.chartLeft=28;var t=SYNO.SDS.StorageManager.Disk.HISTORY_DAY_INTERVAL,i=SYNO.SDS.StorageManager.Disk.HISTORY_MONTH_INTERVAL,s=SYNO.SDS.StorageManager.Disk.HISTORY_SEASON_INTERVAL,a=SYNO.SDS.StorageManager.Disk.HISTORY_DAY_SKIP,n=SYNO.SDS.StorageManager.Disk.HISTORY_MONTH_SKIP,o=SYNO.SDS.StorageManager.Disk.HISTORY_YEAR_SKIP,r=SYNO.SDS.StorageManager.Disk.HISTORY_SEASON_SKIP,l=15*(t+1)+a+1,d=6*(i+1)+n+1,_=12*(i+1)+o+1,p=12*(s+1)+r+1;this.modeConfig={one_month:{limit:l,interval:t,skip:a,type:"date"},six_month:{limit:d,interval:i,skip:n,type:"month"},one_year:{limit:_,interval:i,skip:o,type:"month"},three_year:{limit:p,interval:s,skip:r,type:"season"}};this.historyPanel=new Ext.Panel({width:644,height:197,border:!1,resizable:!0}),this.ModeLabel=new SYNO.ux.DisplayField({margins:{top:0,right:0,bottom:0,left:20},cls:"sm-disk-health-combo-label",value:_T("rsrcmonitor","time_range")+_T("common","colon")}),this.ModeCombo=new SYNO.ux.ComboBox({displayField:"display",valueField:"value",value:this.modeConfig.one_month,width:150,listWidth:150,store:new Ext.data.ArrayStore({fields:["value","display"],data:[[this.modeConfig.one_month,_T("time","past_time_one_month")],[this.modeConfig.six_month,_T("time","past_time_six_month")],[this.modeConfig.one_year,_T("time","past_time_one_year")],[this.modeConfig.three_year,_T("time","past_time_three_year")]]}),listeners:{select:{scope:this,fn:this.modeChange}}});var c=Ext.apply({tbar:{style:{padding:"0px","margin-bottom":"6px"},items:["->",this.ModeLabel,this.ModeCombo]},items:[this.historyPanel,{xtype:"syno_displayfield",htmlEncode:!1,height:59,value:'<span class="syno-ux-note">'+_T("common","note")+_T("common","colon")+" </span>"+_T("disk_info","disk_health_prediction_history_note")}]},e);this.callParent([c])},genHistoryData:function(e,t,i){function s(e,t,s){var a="";switch(t){case"year":a=e.getFullYear();break;case"month":a=SYNO.SDS.StorageManager.getMonth(e.getMonth());break;case"day":a=e.getDate();break;default:SYNO.Debug.error("Invalid mode type at xais data",i.type),a=""}return{value:a,textStyle:{fontSize:12,fontWeight:s?"bold":"normal"}}}var a,n,o,r,l,d=i.limit,_=[],p=0,c=new Date,u=i.interval+1;c.setDate(c.getDate()-d),a="date"===i.type?c.getMonth():c.getFullYear();for(var m=0;m<d;m++){var h,g={};if(c.setDate(c.getDate()+1),o=void 0,r=void 0,l=void 0,o=new Date(c),r=o.getMonth()+1,l=o.getDate(),h=[o.getFullYear(),(r>9?"":"0")+r,(l>9?"":"0")+l].join("-"),g.ui_score=-100,g.observe=0,h in e){var f=e[h];g.ui_score=f.ui_score,g.observe=f.observe,g.factor=Ext.isEmpty(f.factor)?null:SYNO.SDS.StorageUtils.DiskPredictionMainFactorRender(f.factor,this.appWin.healthInfo.smartInfo),g.fail=g.ui_score>=t?1:0,p=m}if(i.skip<=m&&0==(m-i.skip)%u){var S;switch(i.type){case"date":S=(n=c.getMonth())!==a?s(c,"month",!0):s(c,"day",!1),a=n;break;case"month":case"season":S=(n=c.getFullYear())!==a?s(c,"year",!0):s(c,"month",!1),a=n;break;default:SYNO.Debug.error("Invalid mode type at gen history data",i.type)}g.xData=S}else g.xData="";g.time=h,_.push(g)}return{data:_,index:p}},loadHistoryData:function(e){this.appWin.setStatusBusy(),this.appWin.sendWebAPI({api:"SYNO.Core.Storage.Disk",method:"disk_health_prediction_log_get",version:1,params:{device:e.device,limit:e.mode.limit},scope:this,callback:function(t,i){if(this.appWin.clearStatusBusy(),t){this.needRefresh=!1;var s=this.genHistoryData(i.prediction_log,i.threshold,e.mode);this.historyData=s.data,this.validDataIndex=s.index,this.threshold=i.threshold,this.drawChart()}else SYNO.Debug.error("Failed to get history data",i)}})},onActivate:function(e){var t=this.ModeCombo.value;this.needRefresh&&this.loadHistoryData({device:this.device,mode:t}),this.setDefaultTip()},modeChange:function(){this.loadHistoryData({device:this.device,mode:this.ModeCombo.value})},setDefaultTip:function(){null!==this.HistoryChartInstance&&this.HistoryChartInstance.dispatchAction({type:"showTip",seriesIndex:0,dataIndex:this.validDataIndex})},drawChart:function(){var e;this.HistoryChartInstance=echarts.init(this.historyPanel.body.dom),null!==this.historyData&&!1!==this.isVisible()&&null!==this.HistoryChartInstance&&(e=this.getChartOpt({title:_T("disk_info","disk_health_prediction_history_yaxis"),chartData:this.historyData,threshold:this.threshold,mode:this.ModeCombo.value}),this.HistoryChartInstance.setOption(e),this.HistoryChartInstance.setOption(this.adjustChartConfig(this.threshold)),this.doLayout(),this.appWin.doLayout(),this.setDefaultTip())},chartResize:function(e){var t=this;null!==t.HistoryChartInstance&&(t.isDestroyed||(t.setWidth(e),t.historyPanel.setWidth(e),t.HistoryChartInstance.setOption(t.adjustChartConfig(t.threshold)),t.doLayout(),t.HistoryChartInstance.resize()))},adjustChartConfig:function(e){var t=this,i=t.historyPanel.getWidth()-1;return{series:[{markLine:{data:[{name:"danger_threshold",yAxis:e,x:t.chartLeft},{yAxis:e,x:i}]},markArea:{data:[[{x:t.chartLeft+1},{x:i-1}]]}},{markLine:{data:[{yAxis:100,x:t.chartLeft},{yAxis:100,x:i},{yAxis:0,x:t.chartLeft},{yAxis:0,x:i}]}}]}},getChartOpt:function(e){var t=this,i=e.chartData,s=15,a=t.chartLeft+s,n=t.chartLeft,o=t.chartLeft+9;return{grid:{top:20,right:17,left:a,bottom:22},xAxis:{type:"category",data:i.map((function(e){return e.xData})),boundaryGap:!1,splitLine:{show:!1},axisLabel:{interval:0,color:"#323C46",showMinLabel:!0,showMaxLabel:!0,margin:6},axisLine:{show:!1},axisTick:{show:!1}},yAxis:[{type:"value",offset:s,min:0,max:100,splitLine:{show:!0,lineStyle:{color:"#C6D4E0",width:1}},axisLabel:{color:"#323C46",margin:6},axisLine:{lineStyle:{color:"#C6D4E0",opacity:.7,width:1}},axisTick:{inside:!0,length:s,lineStyle:{color:"#C6D4E0",width:1}}},{type:"value",offset:s,position:"right",min:0,max:100,axisLine:{lineStyle:{color:"#C6D4E0",opacity:.7,width:1}},axisLabel:{show:!1},splitLine:{show:!1},axisTick:{inside:!0,length:s,lineStyle:{color:"#C6D4E0",width:1}}}],tooltip:{trigger:"axis",position:[o,28],transitionDuration:0,backgroundColor:"rgba(255,255,255,0.85)",borderColor:"rgba(198,212,224,0.70)",borderWidth:1,triggerOn:"mousemove|click",axisPointer:{type:"line",snap:!0,lineStyle:{color:"#315FCC"}},padding:0,formatter:function(e,t,s){if(null!==e){var a=i[e[0].dataIndex],n=a.time.replace(new RegExp("-","g"),"/"),o='<div class="sm-disk-health-tooltip-panel">',r='<p class="{0}">{1}</p>';return o+=String.format(r,"sm-disk-health-tooltip-date sm-font-bold",_T("time","time_date")+_T("common","colon")+" "+n),0>a.ui_score?0===a.observe?o+=String.format(r,"sm-disk-health-tooltip-desc",_T("disk_info","disk_prediction_main_factor_no_record")):o+=String.format(r,"sm-disk-health-tooltip-desc",_T("disk_info","disk_prediction_main_factor_observe")):(o+=String.format(r,(1===a.fail?"sm-disk-health-tooltip-score-critical":"sm-disk-health-tooltip-score-normal")+" sm-font-medium",_T("status","header_value")+_T("common","colon")+" "+Math.round(a.ui_score)),Ext.isEmpty(a.factor)||1!==a.fail||(o+='<div class="sm-disk-health-tooltip-top-hr"></div><div class="sm-disk-health-tooltip-bottom-hr"></div>',o+=String.format(r,"sm-disk-health-tooltip-desc",a.factor))),o+="</div>"}SYNO.Debug.error("Invalid argument")}},series:[{data:i.map((function(e){return 0<=e.ui_score?e.ui_score:"-"})),type:"line",symbol:"none",lineStyle:{width:1},animation:!1,markLine:{silent:!0,animation:!1,symbol:"none",label:{show:!1},lineStyle:{type:"solid",color:"#FC9B98",width:1}},markArea:{silent:!0,animation:!1,itemStyle:{color:"#FAFCFF",opacity:.6}}},{type:"line",markLine:{silent:!0,animation:!1,symbol:"none",label:{show:!1},lineStyle:{type:"solid",color:"#C6D4E0",width:1}}}],visualMap:{show:!1,pieces:[{gt:0,lte:e.threshold,color:"#009FD5"}],outOfRange:{color:"#F94B4B"}},title:{text:e.title,top:0,left:n,padding:0,textStyle:{color:"#323C46",fontSize:12,verticalAlign:"middle",align:"left",lineHeight:20}}}}}),Ext.define("SYNO.SDS.StorageManager.SmartInfoHistory",{extend:"SYNO.ux.Panel",constructor:function(e){this.chartData=null,this.appWin=e.appWin,this.showLifetimeChart=e.showLifetimeChart;var t={width:644,height:158,border:!1,resizable:!0,style:{marginBottom:"18px"}};this.RemainLifePanel=new Ext.Panel(Ext.apply({id:this.remain_life_panel_id=Ext.id(),hidden:!0},t)),this.UncPanel=new Ext.Panel(Ext.apply({id:this.unc_panel_id=Ext.id(),hidden:!0},t)),this.RetryPanel=new Ext.Panel(t),this.IdnfPanel=new Ext.Panel(t),this.RemainLifeChartInstance=null,this.UncChartInstance=null,this.RetryChartInstance=null,this.IdnfChartInstance=null,this.ModeCombo=new SYNO.ux.ComboBox({displayField:"display",valueField:"value",value:"single",width:150,listWidth:150,store:new Ext.data.ArrayStore({fields:["value","display"],data:[["single",_T("disk_info","disk_history_mode_sigle")],["incremental",_T("disk_info","disk_history_mode_incremental")]]}),listeners:{select:{scope:this,fn:this.modeChange}}});var i=Ext.apply({tbar:{style:{padding:"0px","margin-bottom":"6px","border-style":"none"},items:["->",this.ModeCombo]},items:[this.RemainLifePanel,this.UncPanel,this.RetryPanel,this.IdnfPanel]},e);this.callParent([i])},onActivate:function(e){var t=this.ModeCombo.value;this.appWin.healthInfo&&this.appWin.healthInfo.history?(this.chartData=this.appWin.healthInfo.history,this.displayData="incremental"===t?this.chartData.incremental:this.chartData.single,SYNO.SDS.StorageManager.monthOffset=this.displayData.offset,this.drawChart()):this.appWin.getMsgBox().alert("",_T("status","status_not_available"))},modeChange:function(){var e=this.ModeCombo.value;this.displayData="incremental"===e?this.chartData.incremental:this.chartData.single,this.drawChart()},showRemainLifePanel:function(){!1!==this.showLifetimeChart&&-1!==this.appWin.healthInfo.overview.remain_life&&"incremental"==this.ModeCombo.value?Ext.getCmp(this.remain_life_panel_id).show():Ext.getCmp(this.remain_life_panel_id).hide()},showUncPanel:function(){var e=!this.appWin.healthInfo.overview.isSsd;Ext.getCmp(this.unc_panel_id).setVisible(e)},genTicks:function(){var e=[],t=0;for(t=0;t<12;t++)e.push(SYNO.SDS.StorageManager.convertToMonth(t));return e},genMouseTrack:function(e){var t=SYNO.SDS.StorageManager.convertToMonth(e.x-1)+": "+e.y;return e.y<0&&(t+="<br>"+_T("disk_info","disk_history_unc_tooltip")),t},chartResize:function(e){var t=this;t.isDestroyed||(t.setWidth(e),t.RemainLifePanel.setWidth(e),t.UncPanel.setWidth(e),t.RetryPanel.setWidth(e),t.IdnfPanel.setWidth(e),t.doLayout(),null!==t.RemainLifeChartInstance&&t.RemainLifeChartInstance.resize(),null!==t.UncChartInstance&&t.UncChartInstance.resize(),null!==t.RetryChartInstance&&t.RetryChartInstance.resize(),null!==t.IdnfChartInstance&&t.IdnfChartInstance.resize())},getChartOpt:function(e,t,i){for(var s,a=28+8*(i.toString().length-3),n=a,o=a+9,r=0,l=[],d=0;d<t.length;d++){var _=new Date;_.setMonth(SYNO.SDS.StorageManager.monthOffset-(t.length-d));var p=_.getMonth()+1,c=[_.getFullYear(),(p>9?"":"0")+p].join("/");l.push([t[d][1],c]),r+=void 0!==t[d][1]?1:0}return s={grid:{top:20,left:a,bottom:20,right:2,backgroundColor:"#FAFCFF",show:!0},xAxis:{type:"category",data:this.genTicks(),splitNumber:12,axisLine:{show:!1},axisLabel:{margin:6},axisTick:{show:!1}},yAxis:{type:"value",splitNumber:5,max:function(e){return Math.max(e.max,100)},min:0},tooltip:{trigger:"axis",position:[o,28],transitionDuration:0,backgroundColor:"rgba(255,255,255,0.85)",borderColor:"rgba(198,212,224,0.70)",borderWidth:1,triggerOn:"mousemove|click",axisPointer:{type:"line",lineStyle:{color:"#E64040",width:1}},padding:0,formatter:function(e,t,i){if(null!==e){var s=l[e[0].dataIndex],a=s[1],n=s[0],o='<div class="sm-disk-health-tooltip-panel" style="width:110px">',r='<p class="{0}">{1}</p>';if(s[0]||0==s[0])return o+=String.format(r,"sm-disk-health-tooltip-date sm-font-bold",_T("time","time_date")+_T("common","colon")+" "+a),o+=String.format(r,"sm-disk-health-tooltip-score-normal sm-font-medium",_T("status","header_value")+_T("common","colon")+" "+Math.round(n)),o+="</div>"}else SYNO.Debug.error("Invalid argument")}},series:{data:l.map((function(e){return e[0]})),type:"line",animation:!1,symbol:1<r?"none":"circle",symbolSize:4,lineStyle:{width:1,color:"#009FD5"},name:e.title,itemStyle:{color:"#0086e5"}},title:{text:e.title,top:0,left:n,padding:0,textStyle:{color:"#414B55",fontSize:12,verticalAlign:"middle",align:"left",lineHeight:20}}},s},drawChart:function(){var e,t,i,s;if(this.showRemainLifePanel(),this.showUncPanel(),this.RetryChartInstance=echarts.init(this.RetryPanel.body.dom),this.IdnfChartInstance=echarts.init(this.IdnfPanel.body.dom),e=Math.max(100,...this.displayData.remainLife.map((e=>e[1]||0)),...this.displayData.unc.map((e=>e[1]||0)),...this.displayData.retry.map((e=>e[1]||0)),...this.displayData.idnf.map((e=>e[1]||0))),null!==this.chartData&&!1!==this.isVisible()&&null!==this.RetryChartInstance&&null!==this.IdnfChartInstance){for(var a=0;a<this.displayData.remainLife.length;a++)-1==this.displayData.remainLife[a][1]&&(this.displayData.remainLife[a][1]=null);if(Ext.getCmp(this.remain_life_panel_id).isVisible()){if(this.RemainLifeChartInstance=echarts.init(this.RemainLifePanel.body.dom),null===this.RemainLifeChartInstance)return;var n=this.getChartOpt({title:_T("disk_info","disk_remain_life")},this.displayData.remainLife,e);this.RemainLifeChartInstance.setOption(echarts.syno.getDefaultOptions()),this.RemainLifeChartInstance.setOption(n)}if(Ext.getCmp(this.unc_panel_id).isVisible()){if(this.UncChartInstance=echarts.init(this.UncPanel.body.dom),null===this.UncChartInstance)return;t=this.getChartOpt({title:_T("disk_info","disk_bad_sector_ct")},this.displayData.unc,e),this.UncChartInstance.setOption(echarts.syno.getDefaultOptions()),this.UncChartInstance.setOption(t)}i=this.getChartOpt({title:_T("disk_info","disk_retry_ct")},this.displayData.retry,e),this.RetryChartInstance.setOption(echarts.syno.getDefaultOptions()),this.RetryChartInstance.setOption(i),s=this.getChartOpt({title:_T("disk_info","disk_identify_failed_ct")},this.displayData.idnf,e),this.IdnfChartInstance.setOption(echarts.syno.getDefaultOptions()),this.IdnfChartInstance.setOption(s),this.doLayout(),this.appWin.doLayout()}}}),Ext.define("SYNO.SDS.StorageManager.HealthTestHistory",{extend:"SYNO.ux.Panel",constructor:function(e){var t=this,i=[["all",_T("common","show_all")],["smart",_T("smart","smart_toolbar_smart_test")]];t.appWin=e.appWin,t.device=e.device,t.isHaPanel=e.isHaPanel,t.isPassiveDisk=e.isPassiveDisk,t.pageSize=8,t.exportBtn=new SYNO.ux.SplitButton({text:_T("autoblock","autoblock_export_ip_list"),handler:t.onExportHtml,disabled:!0,scope:t,menu:{items:[{text:_T("log","html_type"),handler:t.onExportHtml,scope:t},{text:_T("log","csv_type"),handler:t.onExportCSV,scope:t}]}}),t.ModeCombo=new SYNO.ux.ComboBox({displayField:"display",valueField:"value",value:"all",width:150,listWidth:150,store:new Ext.data.ArrayStore({fields:["value","display"],data:i}),listeners:{select:{scope:t,fn:t.modeChange}}}),t.colModel=new Ext.grid.ColumnModel({defaults:{sortable:!1},columns:[{header:_T("time","time_time"),dataIndex:"time",renderer:function(e){return SYNO.SDS.DateTimeFormatter(Date.parseDate(e,"Y/m/d H:i:s"),{type:"datetimesec"})}},{header:_T("report","report_type"),dataIndex:"displayType"},{header:_T("smart","smart_test_result"),dataIndex:"displayResult",renderer:function(e,t,i){return"ihm"===i.data.type&&"ihm_000"!==i.data.result?t.attr='ext:qtip="'+Ext.util.Format.htmlEncode(i.data.tooltip)+'"':t.attr='ext:qtip="'+Ext.util.Format.htmlEncode(e)+'"',e}}]}),t.healthTestHistoryStore=t.createStore(e),t.gridPanel=new SYNO.ux.GridPanel({layout:"fit",colModel:t.colModel,store:t.healthTestHistoryStore,style:{paddingTop:"0px"},enableHdMenu:!1,disableSelection:!0,height:274}),t.paging=new SYNO.ux.PagingToolbar({store:t.healthTestHistoryStore,pageSize:t.pageSize,displayInfo:!0,showRefreshBtn:!0});var s=Ext.apply({layout:"fit",tbar:{style:{"border-style":"none"},items:[t.exportBtn,"->",t.ModeCombo]},items:[t.gridPanel],bbar:t.paging},e);t.callParent([s])},createStore:function(e){var t,i=this,s=i.isPassiveDisk?"SYNO.SHA.Util":"SYNO.Core.Storage.Disk",a=i.isPassiveDisk?"send_remote_webapi":"disk_test_log_get";return t=i.isPassiveDisk?{remote_api:"SYNO.Core.Storage.Disk",remote_method:"disk_test_log_get",remote_version:"1",remote_params:{device:i.device,offset:0,limit:i.pageSize,sort_by:"time",sort_direction:"DESC"}}:{device:i.device,offset:0,limit:i.pageSize,sort_by:"time",sort_direction:"DESC"},new SYNO.API.JsonStore({api:s,method:a,version:"1",autoDestroy:!0,remoteSort:!0,appWindow:e.appWin,baseParams:t,totalProperty:"total",root:"testLog",fields:["id","time","type","test_type","result",{name:"displayType",convert:function(e,t){return i.onRenderTestType(t.type,t.test_type)}},{name:"displayResult",convert:function(e,t){var i=SYNO.SDS.StorageUtils.DiskTestLogRender(t.result);return i?""===i.code?String.format('<span class="{0}">{1}</span>',i.color,i.text):"unknown"===i.code?String.format('<span class="{0}">{1}. {2}</span>',i.color,t.test_code,i.text):String.format('<span class="{0}">{1}. {2}</span>',i.color,i.code,i.text):""}},{name:"tooltip",convert:function(e,t){var i=SYNO.SDS.StorageUtils.DiskTestLogRender(t.result);return i?i.tooltip:""}}],listeners:{scope:i,exception:i.onException}})},onException:function(e,t,i,s,a){this.appWin.clearStatusBusy(),"LogFailed"===a.errors.reason?this.appWin.setStatusError({text:_T("metadata","metadata_err_enable"),clear:!0}):"SerialFailed"===a.errors.reason?this.appWin.setStatusError({text:_T("disk_info","disk_log_event_retrieve_fail"),clear:!0}):this.appWin.setStatusError({text:_T("error","error_error_system"),clear:!0})},onActivate:function(){var e=this,t=[];t.push(["all",_T("common","show_all")],["smart",_T("smart","smart_toolbar_smart_test")]),"not_support"!==e.appWin.healthInfo.overview.adv_status&&t.push(["ihm",_T("disk_info","disk_ironwolf_test")]),e.ModeCombo.store.loadData(t),e.mon(e.healthTestHistoryStore,"load",e.onAfterStoreLoad,e),e.mon(e.healthTestHistoryStore,"beforeload",e.onBeforeStoreLoad,e),e.isPassiveDisk?Ext.apply(e.healthTestHistoryStore.baseParams.remote_params,{type:e.ModeCombo.value}):Ext.apply(e.healthTestHistoryStore.baseParams,{type:e.ModeCombo.value}),e.healthTestHistoryStore.load()},modeChange:function(){var e=this;e.isPassiveDisk?Ext.apply(e.healthTestHistoryStore.baseParams.remote_params,{type:e.ModeCombo.value}):Ext.apply(e.healthTestHistoryStore.baseParams,{type:e.ModeCombo.value}),e.healthTestHistoryStore.load()},onAfterStoreLoad:function(e,t,i){var s=this;s.appWin.clearStatusBusy(),0<e.getCount()?s.exportBtn.setDisabled(!1):s.exportBtn.setDisabled(!0)},onBeforeStoreLoad:function(e,t){this.appWin.setStatusBusy()},onRenderTestType:function(e,t){return"smart"===e?"quick"===t?_T("smart","smart_smart_quick_test"):"extend"===t?_T("smart","smart_smart_extend_test"):_T("disk_info","disk_status_unknown"):"ihm"===e?_T("disk_info","disk_ironwolf_test"):_T("disk_info","disk_status_unknown")},onExportHtml:function(){this.onExport("html")},onExportCSV:function(){this.onExport("csv")},onExport:function(e){var t=this;t.downloadWebAPI({webapi:SYNO.SDS.StorageUtils.ReplaceWebapiSHADownload(this.isPassiveDisk,{api:"SYNO.Core.Storage.Disk",method:"export_test_log",version:1,params:{device:t.device,type:e,testType:t.ModeCombo.value}}),scope:t})}}),Ext.define("SYNO.SDS.StorageManager.SmartInfoPanel",{extend:"SYNO.ux.Panel",constructor:function(e){var t=this;t.smartInfoBtn=new SYNO.ux.Button({text:_T("securityscan","detail"),handler:function(){t.openSmartInfo()},scope:t});var i=Ext.apply({items:[{xtype:"syno_displayfield",style:{marginBottom:"6px"},value:_T("disk_info","disk_smart_info_desc")},t.smartInfoBtn]},e);t.callParent([i])},openSmartInfo:function(){var e=this;e.appWin&&e.owner&&e.appWin.healthInfo&&e.appWin.healthInfo.overview?(e.infoFormPanel=new SYNO.SDS.StorageManager.SmartInfo({owner:e.appWin,appWin:e.appWin,style:"padding: 0px 20px;",isNvme:e.appWin.healthInfo.overview.isNVMeDisk,resizable:!0,width:740,height:450}),e.infoDialog=new SYNO.SDS.ModalWindow({owner:e.appWin,dsmStyle:"v5",resizable:!0,width:740,height:520,minWidth:740,minHeight:520,hideLabel:!1,title:_T("smart","smart_toolbar_smart_info"),buttons:[{text:_T("common","alt_close"),scope:e,handler:function(){e.infoDialog.close()}}],items:e.infoFormPanel}),e.mon(e.infoDialog,"resize",(function(e,t,i){e.items&&(e.items.items[0].setHeight(i-70),e.items.items[0].setWidth(t))}),e),e.infoDialog.open(),e.infoFormPanel.onActivate()):SYNO.Debug.error("Invalid arguments",e)}}),Ext.define("SYNO.SDS.StorageManager.SmartInfo",{extend:"SYNO.ux.Panel",constructor:function(e){var t;this.owner=e.owner,this.appWin=e.appWin,t=e.isNvme?this.configGridNvme({itemId:"grid"}):this.configGrid({itemId:"grid"});var i=Ext.apply({title:_T("smart","smart_toolbar_smart_info"),autoFlexcroll:!1,resizable:!0,items:[{xtype:"syno_displayfield",itemId:"smartInfodesc",style:{marginTop:"16px",marginBottom:"12px"},value:!0===e.isNvme?_T("disk_info","disk_smart_info_desc"):_T("disk_info","disk_smart_info_detail_desc")},t],listeners:{activate:this.onActivate,scope:this}},e);this.callParent([i]),this.mon(this,"resize",(function(e,t,i){Ext.getCmp(e.smartInfoGridId).setWidth(t-40),e.onAdjustGridHeight()}),this)},configGrid:function(e){return Ext.apply({layout:"fit",border:!1,xtype:"syno_gridpanel",columns:[{header:_T("smart","smart_id"),dataIndex:"id",width:50,sortable:!1},{id:"name",header:_T("smart","smart_attribute"),dataIndex:"name",width:150,sortable:!1,renderer:function(e,t,i){return'<div ext:qtip="'+e+'">'+e+" </div>"}},{header:_T("smart","smart_current"),dataIndex:"current",width:75,sortable:!1},{header:_T("smart","smart_worst"),dataIndex:"worst",width:75,sortable:!1},{header:_T("smart","smart_threshold"),dataIndex:"threshold",width:75,sortable:!1},{header:_T("smart","smart_raw"),dataIndex:"raw",width:150,sortable:!1}],viewConfig:{forceFit:!0},enableHdMenu:!1,autoExpandColumn:"name",sm:new Ext.grid.RowSelectionModel,store:new Ext.data.JsonStore({root:"smartInfo",fields:["id","name","current","worst","threshold","raw"]}),id:this.smartInfoGridId=Ext.id()},e)},configGridNvme:function(e){return Ext.apply({layout:"fit",border:!1,xtype:"syno_gridpanel",style:{marginTop:"8px"},columns:[{id:"name",header:_T("smart","smart_attribute"),dataIndex:"name",width:150,sortable:!1},{header:_T("smart","smart_current"),dataIndex:"current",width:75,sortable:!1},{header:_T("volume","volume_diskstatus"),dataIndex:"status",width:75,sortable:!1,renderer:function(e,t,i){return"Airflow_Temperature_Cel"===i.get("name")&&"In_the_past"===i.get("status")||"OK"===i.get("status")?e:'<font class="red-status"> '+e+" </font>"}}],viewConfig:{forceFit:!0},enableHdMenu:!1,autoExpandColumn:"name",sm:new Ext.grid.RowSelectionModel,store:new Ext.data.JsonStore({root:"smartInfo",fields:["name","current","status"]}),id:this.smartInfoGridId=Ext.id()},e)},onActivate:function(){var e=this.getComponent("grid");this.appWin.healthInfo&&this.appWin.healthInfo.smartInfo&&this.appWin.healthInfo.overview?(e.getStore().loadData(this.appWin.healthInfo),e.view.updateScroller(),this.onAdjustGridHeight()):this.appWin.getMsgBox().alert("",_T("status","status_not_available"))},onAdjustGridHeight:function(){var e,t=this;e=t.getHeight()-t.getComponent("smartInfodesc").getHeight()-30,Ext.getCmp(t.smartInfoGridId).setHeight(e)}}),Ext.define("SYNO.SDS.StorageManager.Wizard.TaskPanel",{extend:"SYNO.ux.EditorGridPanel",btnEdit:null,btnDel:null,btnRun:null,constructor:function(e){var t=this.fillConfig(e);this.callParent([Ext.apply(t,e)]),this.mon(this.getSelectionModel(),"selectionchange",this.onSelectionChange,this),this.btnEdit=this.getTopToolbar().getComponent("edit"),this.btnDel=this.getTopToolbar().getComponent("delete"),this.btnRun=this.getTopToolbar().getComponent("run"),this.loadData()},fillConfig:function(e){this.appWin=e.appWin,this.adv_support=!1;for(var t=0;t<this.appWin.disks.count;t++)if("not_support"!==this.appWin.disks.dataArray[t].json.adv_status){this.adv_support=!0;break}this.enableColumn=new SYNO.ux.EnableColumn({header:_T("common","enabled"),dataIndex:"enabled",width:50,align:"center",enableFastSelectAll:!0}),this.columnModel=new Ext.grid.ColumnModel([this.enableColumn,{header:_T("localbkp","localbkp_bkpset_name"),dataIndex:"task_name",renderer:function(e){var t=Ext.util.Format.htmlEncode(e);return'<div ext:qtip="'+Ext.util.Format.htmlEncode(t)+'">'+t+"</div>"},sortable:!0},{header:_T("common","action"),dataIndex:"action",renderer:function(e){return e.replace(/#(.*?):(.*?)#/g,(function(e,t,i){return _T(t,i)}))}},{header:_T("schedule","next_trigger_time"),dataIndex:"next_trigger_time",renderer:function(e){return SYNO.SDS.DateTimeFormatter(Date.parseDate(e,"Y-m-d H:i"))},align:"center",sortable:!0}]),this.taskStore=new SYNO.API.Store({api:"SYNO.Storage.CGI.Smart.Scheduler",method:"list",version:1,appWindow:this.appWin,reader:new Ext.data.JsonReader({root:"items",totalProperty:"total"},["enabled","id","can_run","task_name","app_name","simple_edit_form","edit_form","edit_app","action","next_trigger_time"]),sortInfo:{field:"id",direction:"ASC"},remoteSort:!1,pruneModifiedRecords:!0}),this.toolbar=new Ext.Toolbar({defaultType:"syno_button"}),this.toolbar.add({text:_T("common","create"),itemId:"create",btnStyle:"blue",handler:this.onCreate,scope:this},{text:_T("common","alt_edit"),itemId:"edit",disabled:!0,handler:this.onEdit,scope:this},{text:_T("common","delete"),itemId:"delete",disabled:!0,handler:this.onDelete,scope:this},{text:_T("common","run"),itemId:"run",disabled:!0,handler:this.onRun,scope:this});var i={title:_T("schedule","task_scheduler"),header:!1,cm:this.columnModel,ds:this.taskStore,height:225,tbar:this.toolbar,cls:"sm-test-schedule-tctab",style:{paddingTop:"0px"},bwrapCssClass:"sm-grid-no-border",autoScroll:!0,selModel:new Ext.grid.RowSelectionModel,plugins:[this.enableColumn]};return Ext.apply(i,e),i},isDirty:function(){return this.getStore().getModifiedRecords().length>0},onSelectionChange:function(){var e=this.getSelectionModel().getCount();0<e?(this.btnDel.enable(),this.btnRun.enable()):(this.btnDel.disable(),this.btnRun.disable()),1==e?this.btnEdit.enable():this.btnEdit.disable()},loadData:function(){this.taskStore.removeAll(),this.taskStore.load()},onOpenEditDialog:function(e){new SYNO.SDS.StorageManager.Wizard.EditDialog({owner:this.owner,owner_grid:this,disks:this.owner.disks,schedule_id:e,basic_limitation:!1,adv_support:this.adv_support,test_type:"all"}).open()},onCreate:function(){this.onOpenEditDialog(-1)},onEdit:function(){var e=this.getSelectionModel().getSelections();this.onOpenEditDialog(e[0].id)},getApplyApiCfg:function(){var e=[],t=this.getStore().getModifiedRecords();if(0!==t.length){for(var i=0;i<t.length;++i)e.push({id:t[i].data.id,enabled:t[i].data.enabled});return{api:"SYNO.Storage.CGI.Smart.Scheduler",method:"change_state",version:1,params:{tasks:e}}}},applyCallback:function(e,t){this.getStore().commitChanges(),this.loadData()},onDelete:function(){for(var e=this,t=e.getSelectionModel().getSelections(),i=[],s=[],a=null,n=0;n<t.length;n++){var o=t[n].data;i.push(o.task_name),s.push(o.id)}(a&&!a.isDestroyed||(a=new SYNO.SDS.MessageBoxV5({renderTo:e.owner.body})),a.getWrapper()).confirmDelete("",_T("schedule","confirm_delete_task")+"<br>"+i.join(", "),(function(t){if("yes"===t){var i={tasks:s};e.owner.setStatusBusy(),e.sendWebAPI({api:"SYNO.Storage.CGI.Smart.Scheduler",method:"delete",version:1,params:i,scope:e,callback:function(){e.loadData(),e.owner.clearStatusBusy()}})}}))},onRun:function(){for(var e=this.getSelectionModel().getSelections(),t=":",i=0;i<e.length;++i)0!==i&&(t+=","),t+=" "+e[i].data.task_name;this.owner.getMsgBox().confirm(_T("schedule","run_task"),_T("schedule","confirm_run_task")+t,this.runTasks,this)},runTasks:function(e){if("no"!==e){var t=this.getSelectionModel().getSelections(),i=[],s=0;for(s=0;s<t.length;++s)i.push(t[s].id);var a={tasks:i};this.owner.setStatusBusy(),this.appWin.sendWebAPI({api:"SYNO.Storage.CGI.Smart.Scheduler",method:"run",version:1,params:a,scope:this,callback:function(){this.loadData(),this.owner.clearStatusBusy()}})}},validate:function(){return!0},reset:function(){Ext.isDefined(this.taskStore.reader.jsonData)&&this.taskStore.loadData(this.taskStore.reader.jsonData)}}),Ext.define("SYNO.SDS.StorageManager.Wizard.EditDialog",{extend:"SYNO.SDS.ModalWindow",EditPanelBasic:null,EditPanelSchedule:null,tabpanel:null,constructor:function(e){var t=this.fillConfig(e);this.callParent([t])},fillConfig:function(e){this.EditPanelBasic=new SYNO.SDS.StorageManager.Disk.Dialog.EditBasicPanel({owner:this,diskMap:e.diskMap,adv_support:e.adv_support,test_type:e.test_type}),this.EditPanelSchedule=new SYNO.SDS.TaskScheduler2.EditSchedulePanel({needTitle:!0}),this.tabpanel=new SYNO.ux.TabPanel({activeTab:0,height:450,items:[this.EditPanelBasic,this.EditPanelSchedule]});var t={title:-1==e.schedule_id?_T("schedule","create_task"):_T("schedule","edit_task"),width:550,minWidth:550,autoHeight:!0,items:this.tabpanel,dsmStyle:"v5",buttons:[{text:_T("common","cancel"),scope:this,btnStyle:"gray",handler:this.onClickCancel},{text:_T("common","apply"),scope:this,btnStyle:"blue",handler:this.onClickOK}],listeners:{beforeclose:this.onBeforeClose.bind(this)},forceClose:!1};return Ext.apply(t,e),t},onClickOK:function(){if(this.EditPanelBasic.isValid()&&this.EditPanelSchedule.isValid()){var e={basic:this.EditPanelBasic.getData(),schedule:this.EditPanelSchedule.getData(),app:this.EditPanelBasic.getData()};e.schedule=this.scheduleToOld(e.schedule),this.setStatusBusy(),this.sendWebAPI({api:"SYNO.Storage.CGI.Smart.Scheduler",method:"set",version:1,params:e,scope:this,callback:this.applyDone})}else this.tabpanel.setActiveTab(this.EditPanelBasic.isValid()?this.EditPanelSchedule:this.EditPanelBasic)},applyDone:function(e,t){this.clearStatusBusy(),this.owner_grid.loadData(),e?(null!==this.caller&&void 0!==this.caller&&this.caller.appWin&&this.caller.appWin.healthOverviewPanel&&this.caller.appWin.healthOverviewPanel.onHealthInfoRefresh({device:this.caller.device}),this.forceClose=!0,this.close()):("name repeat"===t.errors.reason&&(this.tabpanel.setActiveTab(this.EditPanelBasic),this.EditPanelBasic.getForm().findField("task_name").markInvalid(_T("schedule","msg_duplicate_name"))),this.setStatusError({text:_T("common","forminvalid"),clear:!0}))},onClickCancel:function(){this.close()},onBeforeClose:function(){var e=this;return!(!e.forceClose&&(e.EditPanelBasic.isDirty()||e.EditPanelSchedule.getForm().isDirty()))||(e.confirmLostChangePromise({save:function(){e.onClickOK()},dontSave:function(){e.forceClose=!0,e.close()},cancel:Ext.emptyFn},e),!1)},onOpen:function(){this.loadTask(this.schedule_id),this.callParent(arguments)},loadTask:function(e){this.setStatusBusy(),this.sendWebAPI({api:"SYNO.Storage.CGI.Smart.Scheduler",method:"get",version:1,params:{id:e},scope:this,callback:function(e,t){this.clearStatusBusy(),e?(this.respTask=t.task[0],this.EditPanelBasic.setDataBasic(this.respTask.basic),this.EditPanelBasic.setDataApp(this.respTask.app),this.EditPanelBasic.initialDataSetting(),this.EditPanelSchedule.setData(this.scheduleToNew(this.respTask.schedule))):this.getMsgBox().alert("",_T("schedule","load_task_error"),(function(){this.close()}),this)}})},scheduleToNew:function(e){return e.hasOwnProperty("week_name")&&(e.week_day=e.week_name,delete e.week_name),e.hasOwnProperty("repeat")&&(e.repeat_data=e.repeat,e.repeat_date=e.repeat,delete e.repeat),e.hasOwnProperty("min")&&(e.minute=e.min,delete e.min),e},scheduleToOld:function(e){return e.hasOwnProperty("week_day")&&(e.week_name=e.week_day,delete e.week_day),e.hasOwnProperty("repeat_data")&&(e.repeat=e.repeat_data,delete e.repeat_data),e.hasOwnProperty("minute")&&(e.min=e.minute,delete e.minute),e.hasOwnProperty("repeat_date")&&(e.repeat=e.repeat_date,delete e.repeat_date),e}}),Ext.define("SYNO.SDS.StorageManager.Disk.Dialog.EditBasicPanel",{extend:"SYNO.ux.FormPanel",DataSetting:null,constructor:function(e){this.owner=e.owner,this.diskMap=e.diskMap,this.adv_support=e.adv_support,this.test_type=e.test_type;var t=this.fillConfig(e);this.callParent([t]),this.mon(Ext.getCmp(this.selected_disks_id),"additem",this.diskStoreSort,this),this.mon(Ext.getCmp(this.selected_disks_id),"removeitem",this.diskStoreSort,this),this.mon(Ext.getCmp(this.selected_adv_disks_id),"additem",this.advDiskStoreSort,this),this.mon(Ext.getCmp(this.selected_adv_disks_id),"removeitem",this.advDiskStoreSort,this),this.displayGeneralSettings()},fillConfig:function(e){var t=this.displayNameGet.createDelegate(this);this.owner_store=new Ext.data.Store({reader:new Ext.data.JsonReader({root:"owner_store"},["display"])}),this.disk_store=new Ext.data.Store({reader:new Ext.data.JsonReader({root:"disk_store"},[{name:"device",mapping:"device"},{name:"id",mapping:"id"},{name:"i18nNamingInfo",convert:t},{name:"ctnOrder",mapping:"container.order"},{name:"numId",mapping:"num_id"},{name:"portType",mapping:"portType"},{name:"smart_test_limit",mapping:"smart_test_limit"},{name:"serial",mapping:"serial"}]),listeners:{load:this.onStoreLoad,scope:this}}),this.adv_disk_store=new Ext.data.Store({reader:new Ext.data.JsonReader({root:"disk_store"},[{name:"device",mapping:"device"},{name:"id",mapping:"id"},{name:"i18nNamingInfo",convert:t},{name:"ctnOrder",mapping:"container.order"},{name:"numId",mapping:"num_id"},{name:"portType",mapping:"portType"},{name:"serial",mapping:"serial"}])});var i={title:_T("schedule","basic_info"),items:[{xtype:"syno_fieldset",title:_T("vpnc","basic_setting"),items:[{xtype:"syno_displayfield",hidden:!0,id:this.test_type_smart_desc_id=Ext.id(),fieldLabel:_T("disk_info","disk_test_task_type"),value:_T("smart","smart_name")},{xtype:"syno_displayfield",hidden:!0,id:this.test_type_adv_desc_id=Ext.id(),fieldLabel:_T("disk_info","disk_test_task_type"),value:_T("disk_info","disk_ironwolf_health")},{xtype:"syno_radio",boxLabel:_T("smart","smart_name"),name:"test_type",id:this.test_type_smart_id=Ext.id(),inputValue:"smart",fieldLabel:_T("disk_info","disk_test_task_type"),hideLabel:!1,listeners:{check:function(e,t){t&&this.refreshPage("smart")},scope:this}},{xtype:"syno_radio",boxLabel:_T("disk_info","disk_ironwolf_health"),name:"test_type",id:this.test_type_adv_id=Ext.id(),inputValue:"adv",hidden:!0,fieldLabel:"adv"===this.test_type?_T("disk_info","disk_test_task_type"):"",hideLabel:!1,listeners:{check:function(e,t){t&&this.refreshPage("adv")},scope:this}},{xtype:"syno_radio",boxLabel:_T("schedule","event_all"),name:"test_type",id:this.test_type_all_id=Ext.id(),inputValue:"all",checked:!0,hidden:!0,hideLabel:!1,listeners:{check:function(e,t){t&&this.refreshPage("all")},scope:this}},{xtype:"syno_textfield",allowBlank:!1,emptyText:"Task name",id:this.task_name_id=Ext.id(),fieldLabel:_T("s2s","s2s_lbl_task_name"),name:"task_name",width:200,itemId:"task_name",validator:function(e){return e==Ext.util.Format.stripTags(e)}},{xtype:"hidden",name:"id"},{xtype:"syno_combobox",hidden:!0,triggerAction:"all",width:200,id:this.task_owner_id=Ext.id(),listWidth:200,fieldLabel:_T("common","owner"),name:"owner",hiddenName:"owner",itemId:"owner",editable:!1,valueField:"display",displayField:"display",disabled:!0,mode:"local",store:this.owner_store},{xtype:"syno_checkbox",hidden:!0,boxLabel:_T("common","enabled"),name:"enabled",itemId:"enabled"}]},{xtype:"syno_fieldset",title:_T("schedule","smart_schedule_type"),id:this.smart_test_type_id=Ext.id(),items:[{xtype:"syno_radio",boxLabel:_T("smart","smart_quick_test"),id:this.test_style_quick=Ext.id(),checked:!0,name:"test_style",inputValue:"quick"},{xtype:"syno_radio",boxLabel:_T("smart","smart_extend_test"),id:this.test_style_extend=Ext.id(),name:"test_style",inputValue:"extend"}]},{xtype:"syno_fieldset",title:_T("schedule","smart_schedule_range"),id:this.test_range_id=Ext.id(),items:[{xtype:"syno_radio",boxLabel:_T("disk_info","disk_test_all_support_disk"),id:this.test_range_all=Ext.id(),name:"test_range",inputValue:"all",listeners:{check:function(e,t){t?Ext.getCmp(this.selected_disks_id).setDisabled(!0):Ext.getCmp(this.selected_disks_id).setDisabled(!1)},scope:this}},{xtype:"syno_radio",boxLabel:_T("schedule","smart_schedule_apply_sel"),id:this.test_range_sel=Ext.id(),name:"test_range",inputValue:"sel",scope:this},{xtype:"syno_superboxselect",hideLabel:!0,fieldLabel:"",displayField:"i18nNamingInfo",id:this.selected_disks_id=Ext.id(),resizable:!0,valueField:"serial",name:"selected_disks",triggerAction:"all",mode:"local",store:this.disk_store}]},{xtype:"syno_fieldset",title:_T("disk_info","disk_ironwolf_test"),id:this.test_adv_range_id=Ext.id(),items:[{xtype:"syno_radio",boxLabel:_T("disk_info","disk_adv_test_all_support_disk"),id:this.adv_test_range_all=Ext.id(),name:"adv_test_range",inputValue:"all",listeners:{check:function(e,t){t?Ext.getCmp(this.selected_adv_disks_id).setDisabled(!0):Ext.getCmp(this.selected_adv_disks_id).setDisabled(!1)},scope:this}},{xtype:"syno_radio",boxLabel:_T("schedule","smart_schedule_apply_sel"),id:this.adv_test_range_sel=Ext.id(),name:"adv_test_range",inputValue:"sel",scope:this},{xtype:"syno_superboxselect",hideLabel:!0,fieldLabel:"",displayField:"i18nNamingInfo",id:this.selected_adv_disks_id=Ext.id(),resizable:!0,valueField:"serial",name:"selected_adv_disks",triggerAction:"all",mode:"local",store:this.adv_disk_store}]}]};return Ext.apply(i,e),i},displayNameGet:function(e,t){var i=this.diskMap[t.id];return SYNO.SDS.StorageUtils.DiskDisplayNameGet(i)},isDirty:function(){var e=this.getForm().getValues(),t=Object.getOwnPropertyNames(Object.assign({},e)),i=!1;for(var s of t){if("object"!=typeof e[s]&&e[s]!=this.DataSetting[s]){i=!0;break}if("object"==typeof e[s]&&e[s].valueOf()!=this.DataSetting[s].valueOf()){i=!0;break}}return i},getData:function(){return this.getForm().getValues()},setDataBasic:function(e){this.owner_store.loadData(e),this.getForm().setValues(e)},initialDataSetting:function(e){this.DataSetting||(this.DataSetting=this.getForm().getValues())},displayGeneralSettings:function(){"smart"!==this.test_type&&this.adv_support?"adv"===this.test_type?(Ext.getCmp(this.test_type_smart_desc_id).setVisible(!1),Ext.getCmp(this.test_type_adv_desc_id).setVisible(!0),Ext.getCmp(this.test_type_smart_id).setVisible(!1),Ext.getCmp(this.test_type_adv_id).setVisible(!1),Ext.getCmp(this.test_type_all_id).setVisible(!1)):(Ext.getCmp(this.test_type_smart_desc_id).setVisible(!1),Ext.getCmp(this.test_type_adv_desc_id).setVisible(!1),Ext.getCmp(this.test_type_smart_id).setVisible(!0),Ext.getCmp(this.test_type_adv_id).setVisible(!0),Ext.getCmp(this.test_type_all_id).setVisible(!0)):(Ext.getCmp(this.test_type_smart_desc_id).setVisible(!0),Ext.getCmp(this.test_type_adv_desc_id).setVisible(!1),Ext.getCmp(this.test_type_smart_id).setVisible(!1),Ext.getCmp(this.test_type_adv_id).setVisible(!1),Ext.getCmp(this.test_type_all_id).setVisible(!1))},setDataApp:function(e){var t=[],i=e;this.displayGeneralSettings(),"extend"===e.test_style?Ext.getCmp(this.test_style_extend).setValue(!0):Ext.getCmp(this.test_style_quick).setValue(!0),(Ext.getCmp(this.test_type_smart_id).isVisible()||Ext.getCmp(this.test_type_smart_desc_id).isVisible())&&this.disk_store.loadData(e),(Ext.getCmp(this.test_type_adv_id).isVisible()||Ext.getCmp(this.test_type_adv_desc_id).isVisible())&&(Ext.each(e.disk_store,(function(e){"not_support"!==e.adv_status&&t.push(e)})),i.disk_store=t,this.adv_disk_store.loadData(i)),this.refreshPage(e.test_type),Ext.isArray(e.selected_disks)&&0!==e.selected_disks.length&&Ext.getCmp(this.selected_disks_id).setValue(e.selected_disks),"all"===e.test_range?(Ext.getCmp(this.test_range_all).setValue(!0),Ext.getCmp(this.selected_disks_id).setDisabled(!0)):(Ext.getCmp(this.test_range_sel).setValue(!0),Ext.getCmp(this.selected_disks_id).setDisabled(!1)),e.selected_adv_disks&&Ext.getCmp(this.selected_adv_disks_id).setValue(e.selected_adv_disks),"all"===e.adv_test_range?(Ext.getCmp(this.adv_test_range_all).setValue(!0),Ext.getCmp(this.selected_adv_disks_id).setDisabled(!0)):(Ext.getCmp(this.adv_test_range_sel).setValue(!0),Ext.getCmp(this.selected_adv_disks_id).setDisabled(!1)),this.diskStoreSort(),this.advDiskStoreSort()},refreshPage:function(e){void 0===e&&(e="smart"!==this.test_type&&this.adv_support?"adv"===this.test_type?"adv":"all":"smart"),"smart"===e?(Ext.getCmp(this.test_type_smart_id).setValue(!0),Ext.getCmp(this.smart_test_type_id).setVisible(!0),Ext.getCmp(this.test_range_id).setVisible(!0),Ext.getCmp(this.test_range_all).setVisible(!0),Ext.getCmp(this.test_range_sel).setVisible(!0),Ext.getCmp(this.selected_disks_id).setVisible(!0),Ext.getCmp(this.test_adv_range_id).setVisible(!1),Ext.getCmp(this.adv_test_range_all).setVisible(!1),Ext.getCmp(this.adv_test_range_sel).setVisible(!1),Ext.getCmp(this.selected_adv_disks_id).setVisible(!1)):"adv"===e?(Ext.getCmp(this.test_type_adv_id).setValue(!0),Ext.getCmp(this.smart_test_type_id).setVisible(!1),Ext.getCmp(this.test_range_id).setVisible(!1),Ext.getCmp(this.test_range_all).setVisible(!1),Ext.getCmp(this.test_range_sel).setVisible(!1),Ext.getCmp(this.selected_disks_id).setVisible(!1),Ext.getCmp(this.test_adv_range_id).setVisible(!0),Ext.getCmp(this.adv_test_range_all).setVisible(!0),Ext.getCmp(this.adv_test_range_sel).setVisible(!0),Ext.getCmp(this.selected_adv_disks_id).setVisible(!0)):"all"===e&&(Ext.getCmp(this.test_type_all_id).setValue(!0),Ext.getCmp(this.smart_test_type_id).setVisible(!0),Ext.getCmp(this.test_range_id).setVisible(!0),Ext.getCmp(this.test_range_all).setVisible(!0),Ext.getCmp(this.test_range_sel).setVisible(!0),Ext.getCmp(this.selected_disks_id).setVisible(!0),Ext.getCmp(this.test_adv_range_id).setVisible(!0),Ext.getCmp(this.adv_test_range_all).setVisible(!0),Ext.getCmp(this.adv_test_range_sel).setVisible(!0),Ext.getCmp(this.selected_adv_disks_id).setVisible(!0)),this.doLayout()},isValid:function(){var e=this,t=!1;return Ext.getCmp(e.task_name_id).isValid()||(t=!0),Ext.getCmp(e.test_range_sel).getValue()&&Ext.getCmp(e.selected_disks_id).isVisible()&&""===Ext.getCmp(e.selected_disks_id).getValue()&&(Ext.getCmp(e.selected_disks_id).markInvalid(_T("volume","volume_add_warningnodisk")),t=!0),Ext.getCmp(e.adv_test_range_sel).getValue()&&Ext.getCmp(e.selected_adv_disks_id).isVisible()&&""===Ext.getCmp(e.selected_adv_disks_id).getValue()&&(Ext.getCmp(e.selected_adv_disks_id).markInvalid(_T("volume","volume_add_warningnodisk")),t=!0),!t||(e.owner.setStatusError({text:_T("error","error_bad_field"),clear:!0}),!1)},diskStoreSort:function(){this.disk_store.sort([{field:"ctnOrder",direction:"ASC"},{field:"portType",direction:"DESC"},{field:"numId",direction:"ASC"}],"ASC")},advDiskStoreSort:function(){this.adv_disk_store.sort([{field:"ctnOrder",direction:"ASC"},{field:"portType",direction:"DESC"},{field:"numId",direction:"ASC"}],"ASC")},onStoreLoad:function(e,t){e.filterBy((function(e){return!e.get("smart_test_limit")})),delete e.snapshot}}),Ext.define("SYNO.SDS.StorageManager.Wizard.Benchmark",{extend:"SYNO.SDS.ModalWindow",constructor:function(e){var t,i=this;i.owner=e.owner,i.appWin=e.appWin,i.disks=e.disks,i.selectIdx=e.selectIdx,i.pollingId=void 0,i.processing=!1,i.diskPerf=new Ext.DataView({tpl:new Ext.XTemplate('<tpl for=".">','<div class="sm-disk-perf-status">','<div id="prev-btn-id"></div>','<div class="sm-disk-perf-disk-icon"></div>','<div class="sm-disk-perf-textarea">','<div class="sm-disk-perf-title">','<div class="title-text">{text}</div>',SYNO.SDS.StorageUtils.isSHA?'<div class="disk-server-loc vertical-middle">':'<div style="display: none;">','<div class="loc-text">{diskServerLoc}</div>',"</div>","</div>",'<div class="sm-disk-perf-desc">',"{diskVendor} {diskModel}</br>",'<div class="sm-disk-perf-desc-label">{latestLabel}:</div>{latestValue}</br>','<div class="sm-disk-perf-desc-label">{compareLabel}:</div>{compareValue}</br>','<div class="sm-disk-perf-desc-label">{typeLabel}:</div>{typeValue}</br>',"</div>",'<div id="run-test-btn-id"></div>',"</div>",'<div id="next-btn-id"></div>',"</div>","</tpl>"),store:i.perfStore=new Ext.data.JsonStore({autoDestroy:!0,fields:["text","latestLabel","latestValue","compareLabel","compareValue","typeLabel","typeValue","diskVendor","diskModel","diskServerLoc"]})});var s='<div class="sm-disk-perf-result-box-{position}"><div class="sm-disk-perf-result-box-title sm-font-bold">{title}</div><div class="sm-disk-perf-result-box-content"><div class="sm-disk-perf-result-box-content-value sm-disk-perf-result-box-content-value-{contentStatus}" data-unit="{unit}">{value}</div></div><div class="sm-disk-perf-result-box-status"><div class="sm-disk-perf-result-box-status-icon sm-disk-perf-result-box-status-icon-{direction}-{status}"></div><div class="sm-disk-perf-result-box-status-value sm-disk-perf-result-box-status-value-{status}">{comparison}</div></div></div>';i.diskPerfResult=new Ext.DataView({tpl:new Ext.XTemplate('<tpl for=".">','<div class="sm-disk-perf-fieldset">{readTitle}</div>','<div class="sm-disk-perf-result-box" style="margin-bottom: 16px;">','<tpl for="diskReadPerf">',s,"</tpl>","</div>",'<div class="sm-disk-perf-fieldset">{writeTitle}','<span class="sm-tip-placeholder" tip="{writeInfo}"></span>',"</div>",'<div class="sm-disk-perf-result-box" style="margin-bottom: 20px;">','<tpl for="diskWritePerf">',s,"</tpl>","</div>","</tpl>"),store:i.perfResultStore=new Ext.data.JsonStore({autoDestroy:!0,fields:["readTitle","writeTitle","writeInfo","diskReadPerf","diskWritePerf"]})}),t=Ext.apply({title:_T("disk_info","disk_perf_benchmark"),width:660,height:610,minWidth:660,minHeight:610,dsmStyle:"v5",layout:"fit",resizable:!1,items:[{xtype:"syno_formpanel",trackResetOnLoad:!0,border:!1,items:[i.diskPerf,i.diskPerfResult]}],buttons:[{text:_T("common","alt_close"),handler:i.close,scope:i}],listeners:{beforedestroy:i.pollingTaskStop,scope:i}},e),i.callParent([t])},onOpen:function(){for(var e=this,t=0;t<e.disks.length;t++)e.disks[t].selectCompareLog=!1,e.disks[t].selectIdx=-1,e.disks[t].compareLog={time:"-",testType:"-",readIopsValue:0,readIopsUnit:"",readBwValue:0,readBwUnit:"",readLatencyValue:0,readLatencyUnit:"",writeIopsValue:0,writeIopsUnit:"",writeBwValue:0,writeBwUnit:"",writeLatencyValue:0,writeLatencyUnit:""};e.pollingTaskStart(),e.onUpdateStore(),e.callParent(arguments)},onUpdatePerfStore:function(){var e=this,t={},i=[],s={},a=e.perfHistoryStore.getCount(),n=0;if(e.latestLog={time:"-",testType:"-",readIopsValue:0,readIopsUnit:"",readBwValue:0,readBwUnit:"",readLatencyValue:0,readLatencyUnit:"",writeIopsValue:0,writeIopsUnit:"",writeBwValue:0,writeBwUnit:"",writeLatencyValue:0,writeLatencyUnit:""},0<a&&(s=e.perfHistoryStore.getAt(a-1),e.latestLog=s.data),e.disks[e.selectIdx].selectCompareLog&&e.disks[e.selectIdx].compareLog.testType!=e.latestLog.testType&&(e.disks[e.selectIdx].selectCompareLog=!1,e.disks[e.selectIdx].selectIdx=-1,e.disks[e.selectIdx].compareLog={time:"-",testType:"-",readIopsValue:0,readIopsUnit:"",readBwValue:0,readBwUnit:"",readLatencyValue:0,readLatencyUnit:"",writeIopsValue:0,writeIopsUnit:"",writeBwValue:0,writeBwUnit:"",writeLatencyValue:0,writeLatencyUnit:""}),!e.disks[e.selectIdx].selectCompareLog)for(n=a-2;n>=0;n--)if((s=e.perfHistoryStore.getAt(n)).data.testType===e.latestLog.testType){e.disks[e.selectIdx].compareLog=s.data,e.disks[e.selectIdx].selectCompareLog=!0,e.disks[e.selectIdx].selectIdx=n;break}e.testType=a?e.latestLog.testType:"-","internal"===e.disks[e.selectIdx].diskContainer.type?t.text=e.disks[e.selectIdx].diskName+" ("+e.disks[e.selectIdx].diskContainer.str+")":t.text=e.disks[e.selectIdx].diskName,t.latestLabel=_T("disk_info","disk_perf_latest_test"),t.latestValue=a?SYNO.SDS.DateTimeFormatter(Date.parseDate(e.latestLog.time,"Y/m/d H:i:s"),{type:"datetimesec"}):"-",t.compareLabel=_T("disk_info","disk_perf_compare_with"),e.compareValueId=Ext.id(),t.compareValue=e.disks[e.selectIdx].selectCompareLog?SYNO.SDS.DateTimeFormatter(Date.parseDate(e.disks[e.selectIdx].compareLog.time,"Y/m/d H:i:s"),{type:"datetimesec"})+' (<a id="'+e.compareValueId+'" class="link-font" href="#">'+_T("common","choose")+"</a>)":"-",t.typeLabel=_T("disk_info","disk_perf_test_type"),t.typeValue=e.testType,t.diskVendor=e.disks[e.selectIdx].vendor,t.diskModel=e.disks[e.selectIdx].model,t.diskServerLoc=e.disks[e.selectIdx].isPassiveDisk?_T("ui","passive"):_T("ui","active"),i.push(t),e.perfStore.loadData(i)},onUpdatePerfResultStore:function(){var e=this,t={},i=[];t.readTitle=_T("disk_info","disk_perf_read_performance"),t.writeTitle=_T("disk_info","disk_perf_write_performance"),t.writeInfo=_T("disk_info","disk_perf_write_performance_info"),t.diskReadPerf=[],e.processing?(t.diskReadPerf.push(e.onRenderResultBoxWithoutValue("left",_T("rsrcmonitor","iops"),"processing")),t.diskReadPerf.push(e.onRenderResultBoxWithoutValue("center",_T("rsrcmonitor","throughput"),"processing")),t.diskReadPerf.push(e.onRenderResultBoxWithoutValue("right",_T("rsrcmonitor","latency"),"processing"))):(t.diskReadPerf.push(e.onRenderResultBox("left",_T("rsrcmonitor","iops"),e.latestLog.readIopsValue,e.latestLog.readIopsUnit,e.disks[e.selectIdx].compareLog.readIopsValue,e.disks[e.selectIdx].compareLog.readIopsUnit)),t.diskReadPerf.push(e.onRenderResultBox("center",_T("rsrcmonitor","throughput"),e.latestLog.readBwValue,e.latestLog.readBwUnit,e.disks[e.selectIdx].compareLog.readBwValue,e.disks[e.selectIdx].compareLog.readBwUnit)),t.diskReadPerf.push(e.onRenderResultBox("right",_T("rsrcmonitor","latency"),e.latestLog.readLatencyValue,e.latestLog.readLatencyUnit,e.disks[e.selectIdx].compareLog.readLatencyValue,e.disks[e.selectIdx].compareLog.readLatencyUnit))),t.diskWritePerf=[],e.processing?(t.diskWritePerf.push(e.onRenderResultBoxWithoutValue("left",_T("rsrcmonitor","iops"),"processing")),t.diskWritePerf.push(e.onRenderResultBoxWithoutValue("center",_T("rsrcmonitor","throughput"),"processing")),t.diskWritePerf.push(e.onRenderResultBoxWithoutValue("right",_T("rsrcmonitor","latency"),"processing"))):(t.diskWritePerf.push(e.onRenderResultBox("left",_T("rsrcmonitor","iops"),e.latestLog.writeIopsValue,e.latestLog.writeIopsUnit,e.disks[e.selectIdx].compareLog.writeIopsValue,e.disks[e.selectIdx].compareLog.writeIopsUnit)),t.diskWritePerf.push(e.onRenderResultBox("center",_T("rsrcmonitor","throughput"),e.latestLog.writeBwValue,e.latestLog.writeBwUnit,e.disks[e.selectIdx].compareLog.writeBwValue,e.disks[e.selectIdx].compareLog.writeBwUnit)),t.diskWritePerf.push(e.onRenderResultBox("right",_T("rsrcmonitor","latency"),e.latestLog.writeLatencyValue,e.latestLog.writeLatencyUnit,e.disks[e.selectIdx].compareLog.writeLatencyValue,e.disks[e.selectIdx].compareLog.writeLatencyUnit))),i.push(t),e.perfResultStore.loadData(i)},onRenderResultBoxWithoutValue:function(e,t,i){var s={};switch(i){case"processing":s={position:e,title:t,contentStatus:i,unit:"",value:"",status:"",direction:"",comparison:""};break;case"na":s={position:e,title:t,contentStatus:i,unit:"",value:"N/A",status:"",direction:"",comparison:""};break;case"no":s={position:e,title:t,contentStatus:i,unit:"",value:"--",status:"",direction:"",comparison:""};break;case"notsup":s={position:e,title:t,contentStatus:i,unit:"",value:"Not Supported",status:"",direction:"",comparison:""}}return s},onRenderResultBox:function(e,t,i,s,a,n){var o,r=this,l="",d="",_="",p="";return 0>Number(i)?r.onRenderResultBoxWithoutValue(e,t,"notsup"):Number(i)?(s!=n&&("MB/s"===s?(i*=1024,s="KB/s"):"MB/s"===n?(a*=1024,n="KB/s"):"ms"===s?(i*=1e3,s="us"):"ms"===n?(a*=1e3,n="us"):"K"==s?(i*=1e3,s=""):"K"==n&&(a*=1e3,n="")),p="normal",Number(a)?(0>(l=r.onRenderValueToOneDecimal((i-a)/a*100))?(d="down",_=_T("rsrcmonitor","latency")==t?"good":"bad"):0<l?(d="up",_=_T("rsrcmonitor","latency")==t?"bad":"good"):(d="normal",_="normal"),l=Math.abs(l),SYNO.SDS.StorageManager.Disk.COMPARE_WARN_THRESHOLD<=l&&(p=_),l+="%"):_="normal",{position:e,title:t,contentStatus:p,unit:(o=r.onRenderValueAndUnit(i,s)).unit,value:o.value,status:_,direction:d,comparison:l}):r.onRenderResultBoxWithoutValue(e,t,"na")},onRenderValueAndUnit:function(e,t){var i=this;switch(1024<e&&"KB/s"===t?(e/=1024,t="MB/s"):1e3<e&&"us"===t?(e/=1e3,t="ms"):1e3<e&&""===t&&(e/=1e3,t="K"),t){case"MB/s":case"KB/s":e=i.onRenderValueToInt(e);break;case"ms":case"us":case"K":e=i.onRenderValueToOneDecimal(e)}return{value:e=i.onRenderMilliFormat(e),unit:t}},onRenderValueToOneDecimal:function(e){return(Math.round(e*Math.pow(10,1))/Math.pow(10,1)).toFixed(1)},onRenderValueToInt:function(e){return Math.round(e)},onRenderMilliFormat:function(e){return e&&e.toString().replace(/^\d+/g,(function(e){return e.replace(/(?=(?!^)(\d{3})+$)/g,",")}))},onRenderButton:function(){var e=this;0<e.selectIdx&&(e.prevBtn=new Ext.Container({cls:"sm-disk-perf-prev-btn",id:e.prevBtnId=Ext.id(),renderTo:"prev-btn-id"}),Ext.get(e.prevBtnId).addListener("click",(function(t,i){e.onChangeDisk(!1)}),e)),e.disks.length-1>e.selectIdx&&(e.nextBtn=new Ext.Container({cls:"sm-disk-perf-next-btn",id:e.nextBtnId=Ext.id(),renderTo:"next-btn-id"}),Ext.get(e.nextBtnId).addListener("click",(function(t,i){e.onChangeDisk(!0)}),e)),e.disks[e.selectIdx].selectCompareLog&&Ext.get(e.compareValueId).addListener("click",(function(t,i){e.onOpenHistoryWizard()}),e),e.runTestBtn=new SYNO.ux.Button({id:e.runTestBtnId=Ext.id(),text:_T("disk_info","disk_perf_run_test_now"),handler:function(){e.onHandleTest()},renderTo:"run-test-btn-id",scope:e}),e.processing?Ext.getCmp(e.runTestBtnId).setText(_T("disk_info","disk_perf_stop_test")):Ext.getCmp(e.runTestBtnId).setText(_T("disk_info","disk_perf_run_test_now"))},onChangeDisk:function(e){var t=this;e&&t.disks.length-1<=t.selectIdx||!e&&0>=t.selectIdx||(e?t.selectIdx++:t.selectIdx--,t.pollingTaskStop(),t.onUpdateStore(),t.pollingTaskStart())},onHandleTest:function(){var e=this,t=e.disks[e.selectIdx];_T("disk_info","disk_perf_run_test_now")===Ext.getCmp(e.runTestBtnId).getText()?(e.setStatusBusy(),e.sendWebAPI(SYNO.SDS.StorageUtils.ReplaceWebapiSHA(t.isPassiveDisk,{api:"SYNO.Core.Storage.Disk",method:"get_performance_test_status",version:1,params:{device:t.device},scope:e,callback:e.checkStatus}))):e.stopPerfTest()},checkStatus:function(e,t){var i=this;i.clearStatusBusy(),e?t.is_erasing?i.getMsgBox().alert("",String.format(_T("volume","disk_secure_erasing"))):t.smart_testing||t.ihm_testing?i.getMsgBox().alert("",String.format(_T("disk_info","other_is_testing"))):t.fw_upgrading?i.getMsgBox().alert("",String.format(_T("disk_info","fwupgrade_result_upgrading_title"))):i.checkUtilization():SYNO.Debug.error("Failed to get disk current status",t)},checkUtilization:function(){var e=this,t=e.disks[e.selectIdx];e.sendWebAPI(SYNO.SDS.StorageUtils.ReplaceWebapiSHA(t.isPassiveDisk,{api:"SYNO.Core.Storage.Disk",method:"get_performance_test_info",version:1,params:{device:t.device,spare:t.spare},scope:e,callback:function(t,i){e.clearStatusBusy(),t?SYNO.SDS.StorageManager.Disk.DISK_PERF_NUM_THRESHOLD<=i.num?e.getMsgBox().alert("",String.format(_T("disk_info","disk_perf_system_busy_warn"),SYNO.SDS.StorageManager.Disk.DISK_PERF_NUM_THRESHOLD)):e.startPerfTest(i.type):SYNO.Debug.error("Failed to get performance num",i)}}))},pollingTaskStart:function(){var e=this;if(!e.pollingId){var t=e.disks[e.selectIdx],i=SYNO.SDS.StorageUtils.ReplaceWebapiSHA(t.isPassiveDisk,{api:"SYNO.Core.Storage.Disk",method:"get_performance_test_status",version:1,params:{device:t.device}});e.pollingId=e.pollReg({webapi:i,interval:60,immediate:!0,scope:e,status_callback:function(t,i){t?("processing"!==i.status?(e.processing=!1,e.pollingTaskStop()):e.processing=!0,e.onUpdateStore()):SYNO.Debug.error("Get performance status error",i)}})}},pollingTaskStop:function(){var e=this;e.pollingId&&(e.pollUnreg(e.pollingId),e.pollingId=void 0,e.processing=!1)},startPerfTest:function(e){var t=this,i=t.disks[t.selectIdx];t.setStatusBusy(),t.sendWebAPI(SYNO.SDS.StorageUtils.ReplaceWebapiSHA(i.isPassiveDisk,{api:"SYNO.Core.System.Utilization",method:"get",version:1,params:{type:"current",resource:["disk"]},scope:t,callback:function(s,a){if(t.clearStatusBusy(),s){var n=i.device.replace("/dev/",""),o={no:{text:_T("disk_info","disk_perf_do_test_continue"),btnStyle:"grey"},yes:{text:Ext.MessageBox.buttonText.no,btnStyle:"blue"}},r=0,l=-1;for(r=0;r<a.disk.disk.length;r++)if(n==a.disk.disk[r].device){l=a.disk.disk[r].utilization;break}0>l?SYNO.Debug.error("Failed to get utilization of "+i.device):SYNO.SDS.StorageManager.Disk.UTILIZATION_THRESHOLD<l?t.getMsgBox({btnStyle:"blue"}).confirm(_T("disk_info","disk_perf_do_test_warn_title"),String.format(_T("disk_info","disk_perf_do_test_warn_info"),l,SYNO.SDS.StorageManager.Disk.UTILIZATION_THRESHOLD),(function(i){"no"===i&&t.confirmPerfTest(l,e)}),t,o):t.confirmPerfTest(l,e)}else SYNO.Debug.error("Failed to get utilization",a)}}))},confirmPerfTest:function(e,t){var i=this;if("quick"===t)i.doPerfTest(e,t);else{var s={yes:{text:_T("disk_info","disk_perf_do_test_continue"),btnStyle:"red"},no:{text:Ext.MessageBox.buttonText.no}};i.getMsgBox().confirm("",_T("disk_info","disk_perf_confirm_full_test_text"),(function(i){"yes"===i&&SYNO.SDS.Utils.PasswordConfirmDialog.openDialog(this,this.doPerfTest,[e,t])}),i,s)}},doPerfTest:function(e,t){var i=this,s=i.disks[i.selectIdx];i.setStatusBusy(),i.sendWebAPI(SYNO.SDS.StorageUtils.ReplaceWebapiSHA(s.isPassiveDisk,{api:"SYNO.Core.Storage.Disk",method:"do_performance_test",version:1,params:{device:i.disks[i.selectIdx].device,type:t,utilization:e},scope:i,callback:function(e,t){if(i.clearStatusBusy(),!e){var s=SYNO.SDS.StorageManager.Disk;if(s.ERR_PERF_TESTING!==t.code)return s.ERR_TESTING===t.code?void i.getMsgBox().alert("",String.format(_T("disk_info","other_is_testing"))):s.ERR_SECURITY_ERASING===t.code?void i.getMsgBox().alert("",_T("volume","disk_secure_erasing")):s.ERR_FW_UPGRADING===t.code?void i.getMsgBox().alert("",String.format(_T("disk_info","fwupgrade_result_upgrading_title"))):s.ERR_DISK_NUM_INSUFFICIENT===t.code?void i.getMsgBox().alert("",String.format(_T("disk_info","disk_perf_insufficient_num"))):void i.getMsgBox().alert("",_T("disk_info","disk_perf_do_test_warn_title"));i.getMsgBox().alert("",String.format(_T("disk_info","disk_perf_already_testing")))}Ext.getCmp(i.runTestBtnId).setText(_T("disk_info","disk_perf_stop_test")),i.pollingTaskStart(),i.onUpdateStore()}}))},stopPerfTest:function(){var e=this,t=e.disks[e.selectIdx];e.setStatusBusy(),e.sendWebAPI(SYNO.SDS.StorageUtils.ReplaceWebapiSHA(t.isPassiveDisk,{api:"SYNO.Core.Storage.Disk",method:"stop_performance_test",version:1,params:{device:t.device},scope:e,callback:function(t,i){e.clearStatusBusy(),t?(Ext.getCmp(e.runTestBtnId).setText(_T("disk_info","disk_perf_run_test_now")),e.pollingTaskStop(),e.onUpdateStore()):SYNO.Debug.error("Failed to stop performance test",i)}}))},onOpenHistoryWizard:function(){var e=this,t=new SYNO.SDS.StorageManager.Wizard.PerfHistory({owner:e,appWin:e,testType:e.testType,perfHistoryStore:e.perfHistoryStore,latestLog:e.latestLog,selectIdx:e.disks[e.selectIdx].selectIdx});e.mon(t,"close",(function(){t.isSelected&&(e.disks[e.selectIdx].compareLog=t.compareLog,e.disks[e.selectIdx].selectCompareLog=!0,e.disks[e.selectIdx].selectIdx=t.selectIdx,e.onUpdateStore())}),e,{single:!0}),t.open()},onUpdateStore:function(){var e=this,t=e.disks[e.selectIdx],i={model:t.model,serial:t.serial};e.setStatusBusy(),e.sendWebAPI(SYNO.SDS.StorageUtils.ReplaceWebapiSHA(t.isPassiveDisk,{api:"SYNO.Core.Storage.Disk",method:"get_performance_test_log",version:1,params:i,scope:e,callback:function(t,i){e.clearStatusBusy(),t?(e.onUpdatePerfHistoryStore(i.diskPerfLog),e.onUpdatePerfStore(),e.onUpdatePerfResultStore(),e.onRenderButton(),SYNO.SDS.StorageUtils.DataViewToolTipsAdd(e.diskPerfResult)):SYNO.Debug.error("Failed to get performance test log",i)}}))},onUpdatePerfHistoryStore:function(e){var t=this;t.perfHistoryStore&&t.perfHistoryStore.destroy(),t.perfHistoryStore=new SYNO.SDS.StorageManager.Disk.PerfHistoryStore,delete t.perfLogs,t.perfLogs=[],Ext.each(e,(function(e){var i={};i.time=e.time,i.testType="quick"===e.type?_T("disk_info","disk_perf_test_type_basic"):_T("disk_info","disk_perf_test_type_full"),i.readIopsValue=e.read.iops,i.readIopsUnit=e.read.iops_unit,i.readIops=i.readIopsValue?t.onRenderMilliFormat(e.read.iops)+i.readIopsUnit:"-",i.readBwValue=t.onRenderValueToInt(e.read.bw),i.readBwUnit=e.read.bw_unit,-1===i.readBwValue?i.readBw="-":i.readBw=t.onRenderMilliFormat(i.readBwValue)+i.readBwUnit,i.readLatencyValue=t.onRenderValueToOneDecimal(e.read.latency),i.readLatencyUnit=e.read.latency_unit,i.readLatency=t.onRenderMilliFormat(i.readLatencyValue)+i.readLatencyUnit,i.writeIopsValue=e.write.iops,i.writeIopsUnit=e.write.iops_unit,i.writeIops=i.writeIopsValue?t.onRenderMilliFormat(e.write.iops)+i.writeIopsUnit:"-",i.writeBwValue=t.onRenderValueToInt(e.write.bw),i.writeBwUnit=e.write.bw_unit,-1===i.writeBwValue?i.writeBw="-":i.writeBw=i.writeBwUnit?t.onRenderMilliFormat(i.writeBwValue)+i.writeBwUnit:"-",i.writeLatencyValue=t.onRenderValueToOneDecimal(e.write.latency),i.writeLatencyUnit=e.write.latency_unit,i.writeLatency=i.writeLatencyUnit?t.onRenderMilliFormat(i.writeLatencyValue)+i.writeLatencyUnit:"-",t.perfLogs.push(i)})),t.perfHistoryStore.loadData(t.perfLogs)}}),Ext.define("SYNO.SDS.StorageManager.Wizard.PerfHistory",{extend:"SYNO.SDS.ModalWindow",constructor:function(e){var t,i=this;i.owner=e.owner,i.appWin=e.appWin,i.testType=e.testType,i.perfHistoryStore=e.perfHistoryStore,i.latestLog=e.latestLog,i.selectIdx=e.selectIdx,i.isSelected=!1,i.colModel=new Ext.grid.ColumnModel({defaults:{sortable:!0},columns:[{header:_T("time","time_time"),dataIndex:"time",renderer:function(e){return SYNO.SDS.DateTimeFormatter(Date.parseDate(e,"Y/m/d H:i:s"),{type:"datetimesec"})},width:140},{header:_T("rsrcmonitor","read"),dataIndex:"readIops",width:70},{header:_T("rsrcmonitor","write"),dataIndex:"writeIops",width:70},{header:_T("rsrcmonitor","read"),dataIndex:"readBw",width:70},{header:_T("rsrcmonitor","write"),dataIndex:"writeBw",width:70},{header:_T("rsrcmonitor","read"),dataIndex:"readLatency",width:70},{header:_T("rsrcmonitor","write"),dataIndex:"writeLatency",width:70},{header:_T("disk_info","disk_perf_test_type"),dataIndex:"testType",width:70}]}),i.selModel=new Ext.grid.RowSelectionModel({singleSelect:!0,listeners:{selectionchange:i.onSelectionChange,scope:i}}),i.gridPanel=new SYNO.ux.GridPanel({layout:"fit",colModel:i.colModel,selModel:i.selModel,enableHdMenu:!1,store:i.perfHistoryStore,plugins:[new SYNO.ux.plugin.GroupHeaderGrid({groups:[{header:_T("rsrcmonitor","iops"),dataIndex:["readIops","writeIops"]},{header:_T("rsrcmonitor","throughput"),dataIndex:["readBw","writeBw"]},{header:_T("rsrcmonitor","latency"),dataIndex:["readLatency","writeLatency"]}]})]}),t=Ext.apply({title:_T("disk_info","disk_perf_choose_title"),width:800,height:400,minWidth:800,minHeight:400,dsmStyle:"v5",layout:"fit",items:[i.gridPanel],buttons:[{text:_T("common","close"),scope:i,handler:i.close},{text:_T("common","apply"),scope:i,disabled:!0,id:i.applySelectId=Ext.id(),handler:i.onApply,btnStyle:"blue"}],listeners:{scope:i,afterlayout:i.onAfterlayout}},e),i.callParent([t])},onAfterlayout:function(){var e=this;e.gridPanel.view.updateScroller(),e.gridPanel.getSelectionModel().selectRow(e.selectIdx)},onApply:function(){var e=this;e.compareLog.testType==e.testType?e.latestLog.time!=e.compareLog.time?(e.isSelected=!0,e.close()):e.getMsgBox().alert("",_T("disk_info","disk_perf_same_log_warn")):e.getMsgBox().alert("",_T("disk_info","disk_perf_diff_type_warn"))},onSelectionChange:function(){var e=this,t=e.selModel.getSelected();void 0!==t?(e.selectIdx=e.gridPanel.store.indexOf(t),e.compareLog=t.data,Ext.getCmp(e.applySelectId).setDisabled(!1)):Ext.getCmp(e.applySelectId).setDisabled(!0)}}),Ext.define("SYNO.SDS.StorageManager.Disk.PerfHistoryStore",{extend:"Ext.data.JsonStore",constructor:function(e){this.callParent([Ext.apply({idProperty:"time",fields:["time","testType","readIops","readIopsValue","readIopsUnit","writeIops","writeIopsValue","writeIopsUnit","readBw","readBwValue","readBwUnit","writeBw","writeBwValue","writeBwUnit","readLatency","readLatencyValue","readLatencyUnit","writeLatency","writeLatencyValue","writeLatencyUnit"]},e)])}}),Ext.define("SYNO.SDS.StorageManager.Disk.AdvHistoryStore",{extend:"Ext.data.JsonStore",constructor:function(e){this.callParent([Ext.apply({autoDestroy:!0,idProperty:"id",fields:["id","time","result"]},e)])}}),Ext.define("SYNO.SDS.StorageManager.Wizard.SmartWarning",{extend:"SYNO.SDS.ModalWindow",constructor:function(e){var t,i=this,s=[];i.device=e.device,i.owner=e.owner,i.appWin=e.appWin,s.push({xtype:"syno_combobox",id:i.typeId=Ext.id(),displayField:"display",valueField:"warning",fieldLabel:"",hideLabel:!0,width:494,listWidth:494,store:new Ext.data.ArrayStore({autoDestroy:!0,fields:["warning","display","smartId"],data:[]}),listeners:{select:{scope:i,fn:i.onTypeChange}}},{xtype:"syno_radio",boxLabel:_T("disk_info","disk_suppress_warning_btn"),name:"warning_action",inputValue:"suppress",checked:!0},{xtype:"syno_displayfield",indent:1,tabIndex:-1,value:_T("disk_info","disk_suppress_warning_short_desc")},{xtype:"syno_radio",boxLabel:_T("disk_info","disk_disable_warning_btn"),name:"warning_action",inputValue:"disable"},{xtype:"syno_displayfield",htmlEncode:!1,value:String.format('<span class="red-status">{0}</span>',_T("disk_info","disk_suppress_disable_warning_desc"))},{xtype:"syno_checkbox",boxLabel:_T("disk_info","disk_suppress_warning_confirm"),listeners:{check:{scope:i,fn:i.onCheckboxCheck}}}),t=Ext.apply({title:_T("disk_info","disk_remove_warning_title"),width:550,height:370,dsmStyle:"v5",layout:"fit",items:[{xtype:"syno_formpanel",id:i.formId=Ext.id(),border:!1,items:s}],buttons:[{text:_T("common","cancel"),scope:i,btnStyle:"gray",handler:i.onClickCancel},{text:_T("common","apply"),id:i.confirmId=Ext.id(),scope:i,disabled:!0,btnStyle:"red",cls:"syno-ux-button-blue",handler:i.onClickConfirm}],listeners:{activate:i.onActivate,scope:i}},e),i.callParent([t])},onActivate:function(){var e,t=this,i=[],s=0;if(t.appWin.healthInfo&&t.appWin.healthInfo.overview){for(e=t.appWin.healthInfo.overview,s=0;s<e.smart_fail.length;s++)"critical"!==e.smart_fail[s].type&&i.push(["smart",SYNO.SDS.StorageUtils.WarningTitleStringGet("smart",e.smart_fail[s].id),e.smart_fail[s].id]);"normal_past"===e.smart_test&&i.push(["smart_test",SYNO.SDS.StorageUtils.WarningTitleStringGet("smart_test",-1),-1]),!0===e.adv_modifiable&&i.push(["adv",SYNO.SDS.StorageUtils.WarningTitleStringGet("adv",-1),-1]),!0===e.wdda_modifiable&&i.push(["wdda",SYNO.SDS.StorageUtils.WarningTitleStringGet("wdda",-1),-1]),!0===e.nvme_perc_used_full&&i.push(["nvme_perc_used_full",SYNO.SDS.StorageUtils.WarningTitleStringGet("nvme_perc_used_full",-1),-1]),Ext.getCmp(t.typeId).store.loadData(i),Ext.getCmp(t.typeId).setValue(Ext.getCmp(t.typeId).getStore().getAt(0).get("warning")),t.onTypeChange(Ext.getCmp(t.typeId),Ext.getCmp(t.typeId).getStore().getAt(0))}else t.appWin.getMsgBox().alert("",_T("status","status_not_available"))},onClickConfirm:function(){var e,t,i=this;t=Ext.getCmp(i.formId).getForm().findField("warning_action").getGroupValue(),e={device:i.device,action:t,type:i.type,smartId:-1===i.smartId?"":i.smartId.toString()},i.appWin.setStatusBusy(),i.appWin.sendWebAPI(SYNO.SDS.StorageUtils.ReplaceWebapiSHA(this.isPassiveDisk,{api:"SYNO.Storage.CGI.Smart",method:"smart_warning_set",version:1,params:e,scope:i,callback:function(e,t){i.appWin.clearStatusBusy(),e?(i.appWin.healthOverviewPanel.onHealthInfoRefresh({device:i.device}),i.close()):SYNO.Debug.error("send webapi smart_warning_set error")}}))},onClickCancel:function(){this.close()},onCheckboxCheck:function(e,t){Ext.getCmp(this.confirmId).setDisabled(!t)},onTypeChange:function(e,t){var i=this;Ext.getCmp(i.typeId).setValue(t.get("display")),i.type=t.get("warning"),i.smartId=t.get("smartId")}}),Ext.define("SYNO.SDS.StorageManager.Wizard.EnableWarning",{extend:"SYNO.SDS.ModalWindow",constructor:function(e){var t,i=this;i.device=e.device,i.owner=e.owner,i.appWin=e.appWin,i.isPassiveDisk=e.isPassiveDisk,t=Ext.apply({title:_T("disk_info","disk_recover_warning_title"),width:500,height:200,dsmStyle:"v5",layout:"fit",items:[{xtype:"syno_formpanel",border:!1,id:i.formId=Ext.id(),items:[{xtype:"syno_combobox",id:i.typeId=Ext.id(),displayField:"display",valueField:"warning",fieldLabel:"",hideLabel:!0,width:444,listWidth:444,store:new Ext.data.ArrayStore({autoDestroy:!0,fields:["warning","display","action","smartId","descDisplay"],data:[],listeners:{load:i.onStoreLoad,scope:i}}),listeners:{select:{scope:i,fn:i.onTypeChange}}},{xtype:"syno_displayfield",id:i.descId=Ext.id()}]}],buttons:[{text:_T("common","cancel"),id:i.confirmId=Ext.id(),scope:i,handler:i.onClickCancel},{text:_T("disk_info","disk_enable_warning_title"),cls:"syno-ux-button-blue",scope:i,handler:i.onClickConfirm}],listeners:{activate:i.onActivate,scope:i}},e),i.callParent([t])},onActivate:function(){var e,t=this,i=[],s=0;e={device:t.device},t.setStatusBusy(),t.sendWebAPI(SYNO.SDS.StorageUtils.ReplaceWebapiSHA(t.isPassiveDisk,{api:"SYNO.Storage.CGI.Smart",method:"smart_warning_get",version:1,params:e,scope:t,callback:function(e,a){if(t.clearStatusBusy(),e){for(t.actionInfo=a,s=0;s<t.actionInfo.length;s++)i.push([t.actionInfo[s].warning,SYNO.SDS.StorageUtils.WarningTitleStringGet(t.actionInfo[s].warning,t.actionInfo[s].id),t.actionInfo[s].action,t.actionInfo[s].id,t.descStringGet(t.actionInfo[s].warning,t.actionInfo[s].action,t.actionInfo[s].id)]);Ext.getCmp(t.typeId).store.loadData(i),Ext.getCmp(t.typeId).setValue(Ext.getCmp(t.typeId).getStore().getAt(0).get("warning")),t.onTypeChange(Ext.getCmp(t.typeId),Ext.getCmp(t.typeId).getStore().getAt(0))}else SYNO.Debug.error("send webapi smart_warning_get error")}}))},descStringGet:function(e,t,i){var s="";switch(e){case"smart":s="suppress"===t?String.format(_T("disk_info","disk_warning_smart_info_past_suppress"),i):String.format(_T("disk_info","disk_warning_smart_info_past_disable"),i);break;case"life":s="suppress"===t?_T("disk_info","disk_warning_life_suppress"):_T("disk_info","disk_warning_life_disable");break;case"adv":s="suppress"===t?_T("disk_info","disk_warning_ironwolf_suppress"):_T("disk_info","disk_warning_ironwolf_disable");break;case"smart_test":s="suppress"===t?_T("disk_info","disk_warning_smart_test_past_suppress"):_T("disk_info","disk_warning_smart_test_past_disable");break;case"wdda":s="suppress"===t?_T("disk_info","disk_warning_wdda_suppress"):_T("disk_info","disk_warning_wdda_disable");break;case"nvme_perc_used_full":s="suppress"===t?_T("disk_info","disk_warning_nvme_perc_used_suppress"):_T("disk_info","disk_warning_nvme_perc_used_disable");break;default:return void SYNO.Debug.error("no such value",e)}return s},onClickConfirm:function(){var e,t=this;e={device:t.device,action:t.action,type:t.type,smartId:t.smartId},t.appWin.setStatusBusy(),t.appWin.sendWebAPI(SYNO.SDS.StorageUtils.ReplaceWebapiSHA(t.isPassiveDisk,{api:"SYNO.Storage.CGI.Smart",method:"smart_warning_set",version:1,params:e,scope:t,callback:function(e,i){t.appWin.clearStatusBusy(),e?(t.appWin.healthOverviewPanel.onHealthInfoRefresh({device:t.device}),t.close()):SYNO.Debug.error("send webapi smart_warning_set error")}}))},onClickCancel:function(){this.close()},onTypeChange:function(e,t){var i=this;Ext.getCmp(i.typeId).setValue(t.get("display")),Ext.getCmp(i.descId).setValue(t.get("descDisplay")),i.type=t.get("warning"),i.action="suppress"===t.get("action")?"remove":"enable",i.smartId=t.get("smartId")},onStoreLoad:function(e,t){var i={},s="";e.filterBy((function(e){return s=e.get("warning")+e.get("smartId"),!i[s]&&(i[s]=!0,!0)})),delete e.snapshot}}),Ext.define("SYNO.SDS.StorageManager.Wizard.SwitchDiskLed",{extend:"SYNO.SDS.ModalWindow",constructor:function(e){var t,i=this;i.device=e.device,i.owner=e.owner,i.appWin=e.appWin,i.isPassiveDisk=e.isPassiveDisk,t=Ext.apply({title:_T("disk_info","switch_led_light_title"),width:550,height:320,minWidth:550,minHeight:250,autoFlexcroll:!0,dsmStyle:"v5",layout:"fit",items:[{xtype:"syno_formpanel",padding:0,border:!1,items:[{xtype:"syno_displayfield",value:_T("disk_info","switch_led_light_desc")},{xtype:"syno_displayfield",value:_T("disk_info","switch_led_light_time")},{xtype:"syno_combobox",id:i.ledRemainTime=Ext.id(),fieldLabel:_T("time","time_time"),store:i.getRemainTimeStore(),displayField:"display",valueField:"value",labelWidth:50,width:200},{xtype:"syno_displayfield",id:i.remainText=Ext.id(),hidden:!0}]}],buttons:[{text:_T("common","alt_close"),handler:i.onClickClose,scope:i},{text:_T("disk_info","switch_led_light_btn"),id:i.confirmId=Ext.id(),handler:i.onClickConfirm,cls:"syno-ux-button-blue",scope:i}],listeners:{scope:i,beforedestroy:i.pollingTaskStop}},e),i.callParent([t]),i.mon(i,"afterlayout",i.onAfterlayout,i,{single:!0})},onActivate:function(){var e=this;this.callParent(arguments),Ext.getCmp(e.ledRemainTime).setValue(60)},onAfterlayout:function(e){var t=this;if(!(t.device=e.device))throw Error("param error: device is not set");t.GetStatusPollingConf={interval:5,immediate:!0,webapi:SYNO.SDS.StorageUtils.ReplaceWebapiSHA(t.isPassiveDisk,{api:"SYNO.Core.Storage.Disk",version:1,method:"get_disk_led_status",params:{device:t.device}}),status_callback:function(e,i,s,a){if(t.cleanMask&&(t.clearStatusBusy(),t.cleanMask=!1),!e)return t.appWin.getMsgBox().alert("",_T("status","status_not_available")),void t.pollingTaskStop();t.fillData(i)},scope:t},t.setStatusBusy(),t.cleanMask=!0,t.pollingTaskStart()},getRemainTimeStore:function(){return new Ext.data.SimpleStore({fields:["value","display"],data:[[60,"1 "+_T("common","time_minute")],[300,"5 "+_T("hddsleep","hddsleep_min")],[900,"15 "+_T("hddsleep","hddsleep_min")],[1800,"30 "+_T("hddsleep","hddsleep_min")],[3600,"60 "+_T("hddsleep","hddsleep_min")]]})},pollingTaskStart:function(){var e=this;void 0===e.GetStatusPollingId&&(e.GetStatusPollingId=e.pollReg(e.GetStatusPollingConf))},pollingTaskStop:function(){var e=this;void 0!==e.GetStatusPollingId&&(e.pollUnreg(e.GetStatusPollingId),e.GetStatusPollingId=void 0)},fillData:function(e){var t=this,i="",s=Ext.getCmp(t.ledRemainTime);if(0<e.time){var a=Math.ceil(e.time/60);i=1<a?String.format(_T("disk_info","switch_led_light_remain"),a):String.format(_T("disk_info","switch_led_light_remain_singular"),a),Ext.getCmp(t.remainText).setValue(i),Ext.getCmp(t.remainText).setVisible(!0),s.setValue(e.duration),s.disable(),t.action="restore",Ext.getCmp(t.confirmId).setText(_T("disk_info","restore_led_light_btn"))}else Ext.getCmp(t.remainText).setVisible(!1),t.action="switch",!0===s.disabled&&s.setValue(60),s.enable(),Ext.getCmp(t.confirmId).setText(_T("disk_info","switch_led_light_btn"))},onClickConfirm:function(){var e=Ext.getCmp(this.ledRemainTime).getValue();this.onSwitchDiskLed(e)},onClickClose:function(){this.close()},onSwitchDiskLed:function(e){var t=this,i={device:t.device,action:t.action,time:e};t.setStatusBusy(),t.sendWebAPI(SYNO.SDS.StorageUtils.ReplaceWebapiSHA(t.isPassiveDisk,{api:"SYNO.Core.Storage.Disk",method:"set_disk_led_status",version:1,params:i,scope:t,callback:function(e,i){var s=function(){t.clearStatusBusy(),t.pollingTaskStop(),t.pollingTaskStart()}.createDelegate(t);t.isDataChanged=!0,setTimeout(s,1e3),e||t.appWin.getMsgBox().alert("",_T("status","status_not_available"))}}))}}),Ext.define("SYNO.SDS.StorageManager.Wizard.DiskConfig",{extend:"SYNO.SDS.ModalWindow",constructor:function(e){var t,i=this,s=[];i.device=e.device,i.owner=e.owner,i.appWin=e.appWin,i.isPassiveDisk=e.isPassiveDisk;var a=e.isWCacheSwitchable;s.push({xtype:"syno_checkbox",scope:i,id:i.CacheCheckboxId=Ext.id(),boxLabel:_T("hddsleep","dcache_config"),name:"wcache_en",disabled:!a,value:!0},{xtype:"syno_displayfield",scope:i,value:_T("hddsleep","dcache_desc"),hidden:!a},{xtype:"syno_displayfield",scope:i,id:i.CacheDescnoteId=Ext.id(),value:"",htmlEncode:!1,hidden:a}),t=Ext.apply({title:_T("volume","configuration"),width:600,height:280,minWidth:600,minHeight:280,dsmStyle:"v5",layout:"fit",items:[{xtype:"syno_formpanel",border:!1,padding:0,items:s}],buttons:[{text:_T("common","cancel"),handler:i.onClickClose,scope:i},{text:_T("common","commit"),id:i.confirmId=Ext.id(),handler:i.onClickConfirm,cls:"syno-ux-button-blue",scope:i}]},e),i.callParent([t])},fillData:function(e){var t=this;Ext.getCmp(t.CacheCheckboxId).setValue(e.wcache_en),Ext.getCmp(t.CacheDescnoteId).setValue(e.wcache_en?_T("hddsleep","dwcache_suggest_enable"):_T("hddsleep","dwcache_suggest_disable")),t.saveWriteEnConfig()},isDirty:function(){return this.oldWriteEnConfig!==Ext.getCmp(this.CacheCheckboxId).getValue()},saveWriteEnConfig:function(){this.oldWriteEnConfig=Ext.getCmp(this.CacheCheckboxId).getValue()},onClickConfirm:function(){var e=this,t={device:e.device,wcache_en:Ext.getCmp(e.CacheCheckboxId).getValue()};e.isDirty()?(e.setStatusBusy(),e.sendWebAPI(SYNO.SDS.StorageUtils.ReplaceWebapiSHA(e.isPassiveDisk,{api:"SYNO.Core.Storage.Disk",method:"wcache_set",version:1,params:t,scope:e,callback:function(t,i){e.clearStatusBusy(),t?e.close():i.errors&&i.errors.errinfo.sec&&i.errors.errinfo.key?e.setStatusError({text:_T(i.errors.errinfo.sec,i.errors.errinfo.key)}):e.setStatusError({text:_T("disk_info","disk_err_set_wcache")})}}))):e.setStatusError({text:_T("error","nochange_subject")})},onClickClose:function(){this.close()},onActivate:function(){this.callParent(arguments);var e=this,t={device:e.device};e.setStatusBusy(),e.sendWebAPI(SYNO.SDS.StorageUtils.ReplaceWebapiSHA(e.isPassiveDisk,{api:"SYNO.Core.Storage.Disk",method:"wcache_get",version:1,params:t,scope:e,callback:function(t,i){e.clearStatusBusy(),t?e.fillData(i):e.appWin.getMsgBox().alert("",_T("status","status_not_available"))}}))}}),Ext.define("SYNO.SDS.StorageManager.Wizard.FirmwareUpgradeGridPanel",{extend:"SYNO.ux.Panel",constructor:function(e){var t,i=this;i.owner=e.owner,i.grid=i.createGrid({owner:i,appWin:i.appWin}),t=Ext.apply({cls:"sm-fwupgrade-grid",padding:0,items:[{xtype:"syno_displayfield",cls:"sm-fwupgrade-grid-title",hidden:!0,htmlEncode:!1,ref:"titleCmp"},{xtype:"container",cls:"sm-fwupgrade-grid-loading-desc",hidden:!0,htmlEncode:!1,ref:"loadingDescCmp"},{xtype:"syno_displayfield",cls:"sm-fwupgrade-grid-desc",hidden:!0,htmlEncode:!1,ref:"descCmp"},i.grid]},e),i.callParent([t])},createGrid:function(e){var t,i=this,s=SYNO.SDS.Utils.StorageUtils.UiRenderHelper;i.colModel=new Ext.grid.ColumnModel({columns:[{header:_T("disk_info","fwupgrade_drive_location"),dataIndex:"location",renderer:function(e){return s.DiskDisplayNameGet(e)}},{header:_T("disk_info","fwupgrade_drive_model"),dataIndex:"model"},{header:_T("disk_info","fwupgrade_drive_used_by"),dataIndex:"used_by",useHtmlEncodeRender:!1,renderer:function(e){var t=SYNO.SDS.StorageUtils.SpaceIDParser(e).str||"-";return"-"===t?String.format('<span class="disable-font">{0}</span>',_T("disk_info","fwupgrade_no_in_use")):t}},{header:_T("disk_info","fwupgrade_current_version"),dataIndex:"current_version",useHtmlEncodeRender:!1},{header:_T("disk_info","fwupgrade_latest_version"),dataIndex:"available_version"},{header:_T("disk_info","fwupgrade_firmware_status"),dataIndex:"status",useHtmlEncodeRender:!1,renderer:function(e){return"required"===e?String.format('<span class="red-status">{0}</span>',_T("disk_info","fwupgrade_firmware_status_required")):String.format('<span class="green-status">{0}</span>',_T("disk_info","fwupgrade_firmware_status_optional"))}},{header:_T("disk_info","fwupgrade_firmware_status"),dataIndex:"summary_result",useHtmlEncodeRender:!1,renderer:function(e,t,i){var s,a;return e?(s=String.format(_T("disk_info","fwupgrade_result_firmware_status_successful"),i.data.available_version),a=String.format('<div class="sm-fwupgrade-grid-result-image sm-fwupgrade-grid-result-success"></div><div class="sm-fwupgrade-grid-result-content green-status">{0}</div>',s)):(s=String.format(_T("disk_info","fwupgrade_result_firmware_status_failed"),i.data.current_version,i.data.available_version),a=String.format('<div class="sm-fwupgrade-grid-result-image sm-fwupgrade-grid-result-fail"></div><div class="sm-fwupgrade-grid-result-content red-status">{0}</div>',s)),t.attr=String.format('ext:qtip="{0}"',s),t.css="sm-fwupgrade-grid-result",a}}]});var a=Ext.apply({enableHdMenu:!0,padding:0,colModel:i.colModel,store:new Ext.data.JsonStore({autoDestroy:!0,fields:["id","serial","location","model","used_by","order","current_version","available_version","status","summary_result"]})},e);return t=new SYNO.ux.GridPanel(a),i.originColCfg=i.colModel.config.map((function(e){return e})),t},setType:function(e){var t=this,i=["location","model","used_by","current_version","available_version","status"],s=[120,120,120,120,120,184];"successful_summary"===e?(i=["location","model","summary_result"],s=[150,150,494]):"failed_summary"===e&&(i=["location","model","used_by","summary_result"],s=[150,150,150,344]),t.colModel.setConfig(t.originColCfg.filter((function(e){return i.some((function(t){return t===e.dataIndex}))}))),s.forEach((function(e,i){t.grid.colModel.setColumnWidth(i,e)}))},setTableTitle:function(e){this.titleCmp.setValue(e)},setTitleVisible:function(e){this.titleCmp.setVisible(e)},setLoadingDesc:function(e){this.loadingDescCmp.el&&this.loadingDescCmp.el.update(e)},setLoadingDescVisible:function(e){this.loadingDescCmp.setVisible(e)},setDesc:function(e){this.descCmp.setValue(e)},setDescVisible:function(e){this.descCmp.setVisible(e)},setGridVisible:function(e){this.grid.setVisible(e)},loadDrivesInfo:function(e){var t=e.map((function(e){var t=Ext.decode(e.ui_json);return{id:e.id,used_by:t.used_by,location:t.location,model:t.model,order:t.order,current_version:e.firmware,available_version:e.available_firmware,summary_result:e.success}}));this.updateDrives(t,!0)},updateDrives:function(e,t){if(t=t||!1)e.sort((function(e,t){var i=e.order,s=t.order;return i>s?1:i<s?-1:0}));else{var i=0;e.sort(SYNO.SDS.StorageUtils.DiskSort),e=e.map((function(e){return delete e.numId,delete e.ctnOrder,delete e.portType,delete e.pciSlot,e.order=i,i++,e}))}this.grid.setHeight(45+29*e.length),this.grid.getStore().loadData(e,!1)},dumpDrivesInfo:function(){return this.getDriveInfoByKey(["id","serial","location","model","used_by","order"]).map((function(e){return{id:e.id,serial:e.serial,ui_json:{location:e.location,model:e.model,used_by:e.used_by,order:e.order}}}))},getDriveInfoByKey:function(e){var t=this.grid.getStore(),i=[];return t.each((function(t){var s={};e.forEach((function(e){s[e]=t.get(e)})),i.push(s)})),i}}),Ext.define("SYNO.SDS.StorageManager.Wizard.FirmwareUpgrade",{extend:"SYNO.SDS.ModalWindow",constructor:function(e){var t,i=this;i.param=e.param||{},i.utils=i.createUtils(),i.defaultCmp=i.createBeforListDriveResponseCmp(),i.upToDateCmp=i.createUpToDateCmp(),i.noNetworkCmp=i.createNoNetworkCmp(),i.singleCmp=new SYNO.SDS.StorageManager.Wizard.FWUpgradePanel({itemId:"single",owner:i,appWin:e.appWin}),i.singleSummaryCmp=new SYNO.SDS.StorageManager.Wizard.FWUpgradePanelSummary({itemId:"single_summary",owner:i}),i.shaCmp=new SYNO.SDS.StorageManager.Wizard.SHAFWUpgradePanel({itemId:"sha",owner:i,appWin:e.appWin}),i.shaSummaryCmp=new SYNO.SDS.StorageManager.Wizard.SHAFWUpgradePanelSummary({itemId:"sha_summary",owner:i}),t=Ext.apply({layout:"card",title:_T("disk_info","fwupgrade_title"),width:860,height:540,resizable:!1,padding:"0px 20px",dsmStyle:"v5",items:[i.defaultCmp,i.upToDateCmp,i.noNetworkCmp,i.singleCmp,i.singleSummaryCmp,i.shaCmp,i.shaSummaryCmp],buttons:[i.createButtons("../")]},e),i.callParent([t])},createBeforListDriveResponseCmp:function(){return new Ext.Container({itemId:"default"})},createUpToDateCmp:function(){return new Ext.Container({xtype:"container",itemId:"up_to_date",cls:"sm-fwupgrade-headline-body",items:[{height:"auto",cls:"sm-fwupgrade-headline-panel",border:!1,items:[{xtype:"container",cls:"sm-fwupgrade-image sm-fwupgrade-up-to-date"},{xtype:"syno_displayfield",cls:"sm-fwupgrade-center-context sm-fwupgrade-title",value:_T("disk_info","fwupgrade_up_to_date_title")},{xtype:"syno_displayfield",cls:"sm-fwupgrade-center-context sm-fwupgrade-opacity",value:_T("disk_info","fwupgrade_up_to_date_desc")}]}]})},createNoNetworkCmp:function(){var e=this,t=Ext.id();return new Ext.Container({xtype:"container",itemId:"no_network",cls:"sm-fwupgrade-headline-body",items:[{height:"auto",cls:"sm-fwupgrade-headline-panel",border:!1,items:[{xtype:"container",cls:"sm-fwupgrade-image sm-fwupgrade-unable-to-check"},{xtype:"syno_displayfield",cls:"sm-fwupgrade-center-context sm-fwupgrade-title",value:_T("disk_info","fwupgrade_no_availiable_title")},{xtype:"syno_displayfield",cls:"sm-fwupgrade-center-context",htmlEncode:!1,value:e.utils.formatLinkToSetting(t,_T("disk_info","fwupgrade_no_available_desc"),"sm-fwupgrade-opacity"),listeners:{afterrender:function(){e.utils.addLinktoSettingEvent(t)}}}]}]})},createUtils:function(){var e=this;return{formatLinkToSetting:function(e,t,i){var s,a="";return i&&(a=String.format(' class="{0}"',i)),s=String.format('</span><a class="link-font sm-fwupgrade-font-bold" id="{0}" href="#">',e),"<span"+a+">"+String.format(t,s,"</a><span"+a+">")+"</span>"},addLinktoSettingEvent:function(t){var i=Ext.fly(t);e.mon(i,"click",(function(){e.onClickClose(),SYNO.SDS.AppLaunch("SYNO.SDS.StorageManager.Instance",{fn:"SYNO.SDS.StorageManager.Disk.Main",tab:"settings-tab"})}),e)}}},createButtons:function(e){var t=this;return[{ref:e+"closeBtnCmp",handler:t.onClickClose,scope:t},{text:_T("disk_info","fwupgrade_upgrade_btn"),btnStyle:"blue",ref:e+"upgradeBtnCmp",hidden:!0,handler:t.onClickUpgrade,scope:t}]},handleParam:function(e){var t=this;e=e||t.param,["single_summary","sha_summary"].includes(e.ui_state)?(t.changeCard(e.ui_state),t.current.showSummary(e.summaryList),!0===e.cancelAutoLaunch&&t.current.sendCancelAutoLaunch()):SYNO.SDS.StorageUtils.isSHA?t.shaCmp.loadDrive():t.singleCmp.loadDrive()},onOpen:function(e){var t=this;t.changeCard("default"),t.callParent(arguments),t.handleParam(e)},onRequest:function(e){var t=this;t.callParent(arguments),t.handleParam(e),t.blinkShadow(3)},onClickUpgrade:function(){var e=this,t={yes:_T("disk_info","fwupgrade_upgrade_btn"),no:_T("common","cancel")},i=e.getMsgBox();i.show({title:"",msg:_T("disk_info","fwupgrade_confirm_upgrade"),buttons:t,fn:function(t){"yes"===t&&e.current.upgrade()},scope:e,minWidth:i.minWidth})},onClickClose:function(){var e=this;e.current.stopPollTask&&e.current.stopPollTask(),e.close()},changeCard:function(e,t){var i=this,s=i.layout;switch(e){case"default":s.setActiveItem("default"),i.current=i.defaultCmp,t=t||!1;break;case"up_to_date":s.setActiveItem("up_to_date"),i.current=i.upToDateCmp,t=t||!1;break;case"no_network":s.setActiveItem("no_network"),i.current=i.noNetworkCmp,t=t||!1;break;case"single":s.setActiveItem("single"),i.current=i.singleCmp,t=t||!0;break;case"sha":s.setActiveItem("sha"),i.current=i.shaCmp,t=t||!0;break;case"single_summary":s.setActiveItem("single_summary"),i.current=i.singleSummaryCmp,t=t||!1;break;case"sha_summary":s.setActiveItem("sha_summary"),i.current=i.shaSummaryCmp,t=t||!1;break;default:return void SYNO.Debug.error("Unknown case: ",e)}i.changeBtnState(t),this.doLayout()},changeBtnState:function(e){this.upgradeBtnCmp.setVisible(e),this.closeBtnCmp.setText(e?_T("common","cancel"):_T("common","close"))}}),Ext.define("SYNO.SDS.StorageManager.Wizard.FWUpgradePanelTemplate",{extend:"SYNO.ux.FormPanel",interval:1e3,timeout:300,constructor:function(e){var t,i=this;i.owner=e.owner,i.headlineCmp=i.createHeadlineCmp(),i.gridsCnt=new Ext.Container({cls:"sm-fwupgrade-grids-panel",items:[]}),t=Ext.apply({height:456,padding:"0px 0px",items:[i.headlineCmp,i.gridsCnt]},e),i.callParent([t])},createHeadlineCmp:function(){var e=this,t=Ext.id();return new Ext.Container({cls:"sm-fwupgrade-desc-panel",items:[{xtype:"syno_displayfield",value:_T("disk_info","fwupgrade_has_new_firmware_title"),cls:"sm-fwupgrade-title",ref:"./titleCmp"},{xtype:"syno_displayfield",value:_T("disk_info","fwupgrade_has_new_firmware_desc"),hidden:!0,htmlEncode:!1,ref:"./descCommonCmp"},{xtype:"syno_displayfield",value:_T("disk_info","fwupgrade_has_new_firmware_desc")+'</br><span class="syno-ux-note">'+_T("common","note")+_T("common","colon")+"</span>"+e.owner.utils.formatLinkToSetting(t,_T("disk_info","fwupgrade_no_available_desc")),hidden:!0,htmlEncode:!1,ref:"./descNoNetworkCmp",listeners:{afterrender:function(){e.owner.utils.addLinktoSettingEvent(t)}}}]})},createNewGridPanel:function(e){var t=this,i=new SYNO.SDS.StorageManager.Wizard.FirmwareUpgradeGridPanel({owner:t,appWin:t.appWin});return i.setType(e),t.gridsCnt.add(i),t.doLayout(),i},resetGrids:function(){this.gridsCnt.removeAll()},changeTitleAndDescState:function(e,t,i){var s=this;e?s.owner.changeCard(t?"up_to_date":"no_network"):(s.descCommonCmp.setVisible(t),s.descNoNetworkCmp.setVisible(!t),s.owner.changeCard(i))},getCompoundCfg:function(e,t){return{api:"SYNO.Entry.Request",version:1,method:"request",compound:{mode:"parallel",params:e},callback:t,scope:this}},sendCompound:function(e,t){SYNO.API.Request(this.getCompoundCfg(e,t))},getBasicWebapiCfg:function(e){return{api:"SYNO.Core.Storage.Disk.FWUpgrade",method:e,version:1}},alertError:function(e,t){var i=this;i.owner.clearStatusBusy(),i.stopPollTask(),i.owner.getEl().unmask(),SYNO.SDS.StorageUtils.ReportWebapiFailure(e,t)},startPollTask:function(){var e=this;e.pollTask=e.pollTask||e.owner.addWebAPITask(Ext.apply(e.getCompoundCfg(e.getPollCfg(),e.stepPoll),{interval:e.interval})),e.timeSpent=0,e.pollTask.start(),e.owner.getEl().mask(_T("disk_info","fwupgrade_upgrading"),"x-mask-loading")},stopPollTask:function(){this.pollTask&&this.pollTask.stop()},genDefDiskInfo:function(e){if(e)return{numId:e.get("num_id"),ctnOrder:parseInt(e.get("container").order,10),ctnType:e.get("container").type,portType:e.get("portType"),pciSlot:e.get("pciSlot"),location:e.get("i18nNamingInfo"),model:e.get("model"),used_by:e.get("used_by")}},loadDrive:function(){var e=this;e.owner.setStatusBusy(),e.sendCompound(e.getListDriveCfg(),e.stepListDrive)},getBasicListDriveCfg:function(){return this.getBasicWebapiCfg("list_drive")},stepListDrive:function(e,t,i,s){var a=this;a.handleListDrive(e,t,i,s,(function(e){"start_polling"===e?(a.owner.clearStatusBusy(),a.startPollTask()):"finish_list_drive"===e?a.owner.clearStatusBusy():"alert_error"===e&&a.alertError(a.owner,t)}))},upgrade:function(){var e=this;e.owner.setStatusBusy(),e.sendCompound(e.getPrepareCfg(),e.stepPrepare)},getBasicPrepareCfg:function(e){return Ext.apply(this.getBasicWebapiCfg("prepare"),{params:{drives:e}})},stepPrepare:function(e,t,i,s){var a=this;a.handlePrepare(e,t,i,s,(function(e){var i=a.owner.getMsgBox(),s={alert_drive_busy:"fwupgrade_drive_acting_alert",alert_not_enough_space:"fwupgrade_not_enough_space_alert",alert_lock_failed:"fwupgrade_lock_failed_alert"},n={alert_no_network:"fwupgrade_no_available_alert",alert_cant_get_from_server:"fwupgrade_firmware_not_match_alert"};if("reload_list_drive"===e)a.owner.clearStatusBusy(),i.show({title:"",msg:_T("disk_info","fwupgrade_drive_no_match_alert"),buttons:{yes:_T("common","refresh")},fn:function(){a.loadDrive()},scope:a,minWidth:i.minWidth});else if(s[e])a.owner.clearStatusBusy(),i.alert("",_T("disk_info",s[e]));else if(n[e]){var o=Ext.id(),r=a.owner.utils.formatLinkToSetting(o,_T("disk_info",n[e]));a.owner.clearStatusBusy(),i.alert("",r),a.owner.utils.addLinktoSettingEvent(o)}else if("start_upgrade"===e)a.sendCompound(a.getStartUpgradeCfg(),a.stepStartUpgrade);else if("defer_upgrade"===e){var l={yes:_T("system","reboot_opt"),no:_T("common","cancel")};a.owner.clearStatusBusy(),i.confirm("",a.getRebootConfirmMsg(),(function(e){"yes"===e&&a.handleReboot()}),a,l)}else"alert_error"===e&&a.alertError(a.owner,t)}))},getBasicStartUpgradeCfg:function(){return this.getBasicWebapiCfg("start_upgrade")},stepStartUpgrade:function(e,t,i,s){var a=this;a.handleStartUpgrade(e,t,i,s,(function(e){"start_polling"===e?(a.owner.clearStatusBusy(),a.startPollTask()):"alert_error"===e&&a.alertError(a.owner,t)}))},getBasicPollCfg:function(){return this.getBasicWebapiCfg("poll")},stepPoll:function(e,t,i,s){var a,n=this;if(n.timeSpent+=n.interval/1e3,n.timeSpent>n.timeout)return n.stopPollTask(),n.owner.getEl().unmask(),void n.alertError(n.owner,t);a=function(e){"show_summary"===e?(n.stopPollTask(),n.sendCompound(n.getWarmUpgradeSummaryCfg(),n.stepWarmUpgradeSummary)):"alert_error"===e&&n.alertError(n.owner,t)},n.handlePoll(e,t,i,s,a)},getBasicSummaryCfg:function(e){return Ext.apply(this.getBasicWebapiCfg("get_summary"),{params:{source:e}})},getBasicWarmUpgradeSummaryCfg:function(){return this.getBasicSummaryCfg("current")},stepWarmUpgradeSummary:function(e,t,i,s){var a=this;a.handleWarmUpgradeSummary(e,t,i,s,(function(e){"cancel_auto_launch"===e?(a.sendCancelAutoLaunch(),a.owner.getEl().unmask(),a.owner.clearStatusBusy()):"alert_error"===e&&a.alertError(a.owner,t)}))},getBasicCancelAutoLaunchCfg:function(){return this.getBasicWebapiCfg("cancel_auto_launch")},sendCancelAutoLaunch:function(){this.sendCompound(this.owner.current.getCancelAutoLaunchCfg())}}),Ext.define("SYNO.SDS.StorageManager.Wizard.FWUpgradePanel",{extend:"SYNO.SDS.StorageManager.Wizard.FWUpgradePanelTemplate",getListDriveCfg:function(){return[Ext.apply(this.getBasicListDriveCfg(),{}),Ext.apply(this.getBasicPollCfg(),{})]},handleListDrive:function(e,t,i,s,a){var n,o,r=this,l="alert_error";if(e&&t.result[0].success){if(o=t.result[0].data,"upgrading"===t.result[1].data.status)return r.owner.changeCard("default",!0),void a(l="start_polling");r.resetGrids(),r.gridPanel=r.createNewGridPanel(),r.changeTitleAndDescState(0===o.drives.length,o.access_network,"single"),n=o.drives.reduce((function(e,t){var i=r.owner.diskMap[t.id];return void 0!==i&&e.push(Ext.apply({id:t.id,serial:t.serial,current_version:t.current_fw,available_version:t.available_fw,status:t.status},r.genDefDiskInfo(i))),e}),[]),r.gridPanel.updateDrives(n),a(l="finish_list_drive")}else a(l)},getPrepareCfg:function(){var e=this.gridPanel.dumpDrivesInfo();return[Ext.apply(this.getBasicPrepareCfg(e),{})]},handlePrepare:function(e,t,i,s,a){var n,o="alert_error";e&&t.result[0].success?("need_reload"===(n=t.result[0].data.status)?o="reload_list_drive":"drive_busy"===n?o="alert_drive_busy":"not_enough_space_download_firmware"===n?o="alert_not_enough_space":"no_available_firmware"===n?o="alert_no_network":"lock_failed"===n?o="alert_lock_failed":"cant_get_from_server"===n?o="alert_cant_get_from_server":"need_reboot"===n?o="defer_upgrade":"normal"===n&&(o="start_upgrade"),a(o)):a(o)},getStartUpgradeCfg:function(){return[Ext.apply(this.getBasicStartUpgradeCfg(),{})]},getRebootConfirmMsg:function(){var e=SYNO.SDS.StorageUtils.isXA?"fwupgrade_confirm_reboot_cluster":"fwupgrade_confirm_reboot";return _T("disk_info",e)},handleStartUpgrade:function(e,t,i,s,a){var n="alert_error";e&&t.result[0].success&&(n="start_polling"),a(n)},handleReboot:function(){SYNO.SDS.System.FirmwareUpgradeReboot()},getPollCfg:function(){return[Ext.apply(this.getBasicPollCfg(),{})]},handlePoll:function(e,t,i,s,a){var n,o="alert_error";e&&t.result[0].success?"upgrading"!==(n=t.result[0].data.status)&&("finished"===n&&(o="show_summary"),a(o)):a(o)},getWarmUpgradeSummaryCfg:function(){return[Ext.apply(this.getBasicWarmUpgradeSummaryCfg(),{})]},handleWarmUpgradeSummary:function(e,t,i,s,a){var n="alert_error";e&&t.result[0].success?(this.owner.singleSummaryCmp.showSummary([t.result[0].data]),this.owner.changeCard("single_summary"),a(n="cancel_auto_launch")):a(n)}}),Ext.define("SYNO.SDS.StorageManager.Wizard.FWUpgradePanelSummaryTemplate",{extend:"SYNO.SDS.StorageManager.Wizard.FWUpgradePanelTemplate",createHeadlineCmp:function(){return new Ext.Container({cls:"sm-fwupgrade-desc-panel",items:[{xtype:"syno_displayfield",cls:"sm-fwupgrade-title",htmlEncode:!1,ref:"../titleCmp"},{xtype:"syno_displayfield",value:_T("disk_info","fwupgrade_has_new_firmware_desc"),ref:"../descCmp"}]})},changeType:function(e){var t,i,s;switch(e){case"success":t="fwupgrade_result_successful_title",i="green-status",s="fwupgrade_result_successful_desc";break;case"fail":t="fwupgrade_result_failed_title",i="red-status",s="fwupgrade_result_failed_desc";break;case"upgrading":t="fwupgrade_result_upgrading_title",i="blue-status",s="fwupgrade_result_upgrading_desc";break;default:return void SYNO.Debug.error("Unknown type: ",e)}this.titleCmp.setValue(String.format('<span class="{0}">{1}</span>',i,_T("disk_info",t))),this.descCmp.setValue(_T("disk_info",s))}}),Ext.define("SYNO.SDS.StorageManager.Wizard.FWUpgradePanelSummary",{extend:"SYNO.SDS.StorageManager.Wizard.FWUpgradePanelSummaryTemplate",showSummary:function(e){var t,i=this,s=e[0];t=s.drives.every((function(e){return!0===e.success})),i.changeType(t?"success":"fail"),i.resetGrids(),i.createNewGridPanel(t?"successful_summary":"failed_summary").loadDrivesInfo(s.drives)},getCancelAutoLaunchCfg:function(){return[Ext.apply(this.getBasicCancelAutoLaunchCfg(),{})]}}),Ext.define("SYNO.SDS.StorageManager.Wizard.SHAFWUpgradePanel",{extend:"SYNO.SDS.StorageManager.Wizard.FWUpgradePanelTemplate",NODES:2,constructor:function(e){var t=this,i=Array.apply(null,{length:t.NODES});t.involve_list=i.map(Function.call,(function(){return!1})),t.hostname_list=i.map(Function.call,(function(){return""})),t.drive_grid_list=[],t.callParent([e])},getListDiskCfg:function(){return{api:"SYNO.Core.Storage.Disk",method:"list",version:"1",params:{offset:0,limit:-1}}},getRebootConfirmMsg:function(){return _T("disk_info","fwupgrade_confirm_reboot_cluster")},genRemoteWebapi:function(e){return{api:"SYNO.SHA.Util",method:"send_remote_webapi",version:1,params:{remote_api:e.api,remote_method:e.method,remote_version:e.version,remote_params:e.params?e.params:{}}}},updateGridList:function(e,t,i,s){var a=this,n=t.reduce((function(e,t){if(void 0!==i[t.id]){let s=Ext.apply({id:t.id,serial:t.serial,current_version:t.current_fw,available_version:t.available_fw,status:t.status},a.genDefDiskInfo(i[t.id]));e.push(s)}return e}),[]);e.updateDrives(n),e.setTitleVisible(!0),e.setTableTitle(s)},groupByNodeNum:function(e){var t=this;return e.reduce((function(e,i,s){return e[s%t.NODES].push(i),e}),Array.apply(null,{length:t.NODES}).map(Function.call,(function(){return[]})))},genWebapiGroup:function(e){var t=this,i=function(e,i){switch(i){case 0:return e;case 1:return t.genRemoteWebapi(e);default:return{}}};return Array.isArray(e)?e.map(i):Array.apply(null,{length:t.NODES}).map(Function.call,(function(){return e})).map(i)},getListDriveCfg:function(){var e=[];return(e=e.concat(this.genWebapiGroup(this.getBasicListDriveCfg()))).push({api:"SYNO.SHA.Firmware.Upgrade",method:"get",version:1}),e.push({api:"SYNO.SHA.Panel.Overview",method:"load",version:1}),e},handleListDrive:function(e,t,i,s,a){var n=this,o=t.result[t.result.length-1],r=t.result[t.result.length-2];if(e&&o.success&&o.data.success&&r.success){if(n.hostname_list=["active"===o.data.lnode.role?o.data.lnode.hostname:o.data.rnode.hostname,"active"===o.data.lnode.role?o.data.rnode.hostname:o.data.lnode.hostname],r.data.summary_data&&r.data.summary_data.ui_json.summaryList.reduce((function(e,t,i){var s=n.involve_list[i]="upgrading"===t.status;return e||s}),!1))return n.owner.shaSummaryCmp.showSummary(r.data.summary_data.ui_json.summaryList),n.owner.changeCard("sha_summary"),void n.owner.clearStatusBusy();n.resetGrids(),n.drive_grid_list=Array.apply(null,{length:n.NODES}).map(Function.call,(function(){return n.createNewGridPanel()}));var l=[n.owner.diskMap,n.owner.passiveDiskMap],d=n.groupByNodeNum(t.result.slice(0,t.result.length-2)).reduce((function(e,t,i){var s=t[0];if(!s.success)return n.drive_grid_list[i].setGridVisible(!1),n.involve_list[i]=!1,e;var a=s.data,o=l[i],r=0===a.drives.length;if(n.drive_grid_list[i].setGridVisible(!r),n.involve_list[i]=!r,!r){var d=String.format('{0} <span class="sm-fwupgrade-grid-subtitle">({1})</span>',n.hostname_list[i],0===i?_TT("SYNO.SDS.HA.Instance","ui","active"):_TT("SYNO.SDS.HA.Instance","ui","passive"));n.updateGridList(n.drive_grid_list[i],a.drives,o,d)}return e.up_to_date=e.up_to_date&&r,e.access_network=e.access_network&&a.access_network,e}),{up_to_date:!0,access_network:!0});n.changeTitleAndDescState(d.up_to_date,d.access_network,"sha"),a("finish_list_drive")}else a("alert_error")},getPrepareCfg:function(){var e=this,t=e.drive_grid_list.map((function(t){var i=t.dumpDrivesInfo();return e.getBasicPrepareCfg(i)}));return e.genWebapiGroup(t)},handlePrepare:function(e,t,i,s,a){var n=this;if(e){a({error:"alert_error",need_reload:"reload_list_drive",drive_busy:"alert_drive_busy",not_enough_space_download_firmware:"alert_not_enough_space",lock_failed:"alert_lock_failed",cant_get_from_server:"alert_cant_get_from_server",no_available_firmware:"alert_no_network",need_reboot:"defer_upgrade",normal:"start_upgrade"}[t.result.reduce((function(e,t,i){if(n.involve_list[i]&&!t.success)return"error";if("error"===e)return e;var s=n.involve_list[i]?t.data.status:"normal";return"need_reload"===e||"need_reload"===s?"need_reload":"drive_busy"===e||"drive_busy"===s?"drive_busy":"not_enough_space_download_firmware"===e||"not_enough_space_download_firmware"===s?"not_enough_space_download_firmware":"no_available_firmware"===e||"no_available_firmware"===s?"no_available_firmware":"lock_failed"===e||"lock_failed"===s?"lock_failed":"cant_get_from_server"===e||"cant_get_from_server"===s?"cant_get_from_server":"need_reboot"===e||"need_reboot"===s?"need_reboot":("normal"===e&&"normal"===s||(n.involve_list[i]=function(e){return"defer_upgrade"===e||"start_upgrade"===e}(s)),"normal")}),"normal")])}else a("alert_error")},getStartUpgradeCfg:function(){return[{api:"SYNO.SHA.Firmware.Upgrade",method:"set",version:1,params:{firmware_upgrade_list:this.involve_list,upgrade_type:"start_upgrade"}}]},handleStartUpgrade:function(e,t,i,s,a){var n="alert_error";e&&(n="start_polling"),a(n)},handleReboot:function(){var e={firmware_upgrade_list:this.involve_list,upgrade_type:"defer_upgrade"};SYNO.SDS.HA.RebootHA(this,e)},getPollCfg:function(){return this.genWebapiGroup(this.getBasicPollCfg())},handlePoll:function(e,t,i,s,a){var n=this;e?t.result.every((function(e,t){return!n.involve_list[t]||(!e.success||"finished"===e.data.status)}))&&a("show_summary"):a("alert_error")},getWarmUpgradeSummaryCfg:function(){return this.genWebapiGroup(this.getBasicWarmUpgradeSummaryCfg())},handleWarmUpgradeSummary:function(e,t,i,s,a){var n=this,o="alert_error";if(e){var r=t.result.map((function(e,t){return{involve:n.involve_list[t],drives:e.success?e.data.drives:[],hostname:n.hostname_list[t],status:"finished"}}));n.owner.shaSummaryCmp.showSummary(r),n.owner.changeCard("sha_summary"),a(o="cancel_auto_launch")}else a(o)}}),Ext.define("SYNO.SDS.StorageManager.Wizard.SHAFWUpgradePanelSummary",{extend:"SYNO.SDS.StorageManager.Wizard.FWUpgradePanelSummaryTemplate",NODES:2,showSummary:function(e){var t=this;t.resetGrids();var i=e.map((function(e,i){var s=t.createNewGridPanel(),a=e.involve,n="upgrading"===e.status,o=function(){if(a)return n?"upgrading":0===e.drives.length?"error":e.drives.every((function(e){return!0===e.success}))?"success":"fail"}(),r=String.format('{0} <span class="sm-fwupgrade-grid-subtitle">({1})</span>',e.hostname,0===i?_TT("SYNO.SDS.HA.Instance","ui","active"):_TT("SYNO.SDS.HA.Instance","ui","passive"));return s.setTitleVisible(a),s.setDescVisible(a&&"error"===o),s.setLoadingDescVisible(a&&"upgrading"===o),s.setGridVisible(a&&("success"===o||"fail"===o)),s.setTableTitle(r),s.setDesc(_T("disk_info","fwupgrade_result_failed_desc")),s.setLoadingDesc(_T("disk_info","fwupgrade_result_upgrading_desc")),a&&("success"!==o&&"fail"!==o||(s.loadDrivesInfo(e.drives),s.setType("success"===o?"successful_summary":"failed_summary"))),o})),s=i.some((function(e){return"upgrading"===e}));t.changeType(s?"upgrading":i.every((function(e){return void 0===e||"success"===e}))?"success":"fail"),s?t.startPolling():t.stopPolling()},genPollingTask:function(){return{interval:3,immediate:!0,webapi:{api:"SYNO.SHA.Firmware.Upgrade",method:"get",version:1},status_callback:function(e,t,i){e&&this.showSummary(t.summary_data.ui_json.summaryList)},scope:this}},startPolling:function(){this.poll||(this.poll=this.pollReg(this.genPollingTask()))},stopPolling:function(){this.poll&&(this.pollUnreg(this.poll),this.poll=null)},getCancelAutoLaunchCfg:function(){return[{api:"SYNO.SHA.Firmware.Upgrade",method:"cancel_auto_launch",version:1}]}}),Ext.define("SYNO.SDS.StorageManager.Wizard.UploadDBDialog",{extend:"SYNO.SDS.ModalWindow",constructor:function(e){this.owner=e.owner,this.updateLastUpdateTime=e.updateLastUpdateTime;var t=Ext.apply({dsmStyle:"v5",title:_T("disk_info","disk_upload_db_title"),resizable:!1,closable:!0,width:600,height:350,useStatusBar:!0,padding:"16px 20px 0px 20px",items:this.getItems(),layout:{type:"vbox",align:"stretch"},buttons:[{text:_T("common","cancel"),scope:this,handler:function(){this.close()}},{text:_T("disk_info","disk_upload_db_apply_btn"),scope:this,btnStyle:"blue",handler:this.onSubmit}]},e);this.callParent([t])},getItems:function(){var e=[];return e.push(this.createMainUploadForm()),e.push({xtype:"box",flex:1}),e.push({xtype:"syno_displayfield",htmlEncode:!1,margins:{top:0,right:0,bottom:12,left:0},value:_T("disk_info","disk_upload_db_note")}),e},createMainUploadForm:function(){return new SYNO.SDS.Utils.FormPanel({itemId:"upload_main",padding:"0px 0px",fileUpload:!0,trackResetOnLoad:!0,frame:!1,border:!1,webapi:{api:"SYNO.Core.Storage.Disk",method:"upload_offlinekit",version:1},items:[{xtype:"syno_displayfield",htmlEncode:!1,value:_T("disk_info","disk_upload_db_desc")},{xtype:"syno_filebutton",fieldLabel:_T("itunes","itunes_path"),name:"offline_kit_file"}],onApiSuccess:Ext.createDelegate(this.onMainUploadSuccess,this),onApiFailure:Ext.createDelegate(this.onUploadFailed,this)})},onSubmit:function(){var e=this.get("upload_main");this.validFileName(e.getForm().findField("offline_kit_file"))&&(this.setStatusBusy({text:_T("update","update_uploading")}),e.upload())},validFileName:function(e){if(!e)return!1;if(!e.isDirty())return this.getMsgBox().alert("",_T("error","error_nochoosefile")),!1;var t=e.getValue();return".sa"==t.substr(t.length-3,3)||(this.getMsgBox().alert("",_T("disk_info","disk_upload_db_error_verify")),!1)},onMainUploadSuccess:function(e,t,i){var s=this;s.clearStatusBusy(),s.updateLastUpdateTime(t.db_last_update_time),s.appWin.getToastBox(_T("disk_info","disk_update_db_finish"),!1,null,{delay:3e3}),s.close()},onUploadFailed:function(e,t,i){this.clearStatusBusy(),this.getMsgBox().alert("",SYNO.API.getErrorString(t.code))}}),Ext.define("SYNO.SDS.StorageManager.Wizard.EditPool",{extend:"SYNO.SDS.ModalWindow",constructor:function(e){var t,i=this;i.isDataChanged=!1,i.appWin=e.appWin,i.owner=e.owner,i.pool=e.pool,i.allSsdcaches=e.allSsdcaches,i.isVirtualPool=e.isVirtualPool,this.forceClose=!1;var s={xtype:"syno_fieldset",collapsible:!1,title:_T("common","general"),itemId:"general",name:"general",hidden:i.isVirtualPool,items:[{xtype:"syno_textfield",validateOnBlur:!0,validationEvent:"blur",name:"desc",itemId:"desc",fieldLabel:_T("share","share_comment"),disabled:!0,width:250,maxLength:64}]},a={xtype:"syno_fieldset",collapsible:!1,ref:"../stripeCacheFieldset",title:_T("volume","stripe_cache_size"),hidden:!0,items:[{xtype:"syno_radio",name:"stripe_cache_size",ref:"../../radio_default",boxLabel:_T("volume","stripe_cache_size_default"),inputValue:"default"},{xtype:"syno_displayfield",value:_T("storage_pool","stripe_cache_size_default_scenario"),indent:1},{xtype:"syno_radio",name:"stripe_cache_size",ref:"../../radio_small",boxLabel:_T("volume","stripe_cache_size_small"),inputValue:"small"},{xtype:"syno_displayfield",value:_T("storage_pool","stripe_cache_size_small_scenario"),indent:1},{xtype:"syno_displayfield",htmlEncode:!1,value:String.format('<span class="syno-ux-note">{0}{1} </span>{2}',_T("common","note"),_T("common","colon"),_T("volume","stripe_cache_size_notice"))}]},n={xtype:"syno_fieldset",collapsible:!1,title:_T("volume","ssd_trim_title"),ref:"../ssdTrimFieldset",hidden:!0,items:[{xtype:"syno_displayfield",value:_T("storage_pool","pool_setting_ssd_trim_desc")},{xtype:"syno_checkbox",boxLabel:_T("volume","ssd_trim_en"),handler:i.onEnableSSDTrim,name:"ssd_trim_enable",hideLabel:!0,scope:i},{xtype:"syno_displayfield",fieldLabel:_T("schedule","next_trigger_time"),value:i.nextTriggerTime,ref:"../../triggerTimeDisplayField"},{xtype:"syno_button",ref:"../../setScheduleBtn",text:_T("wireless_ap","ap_set_schedule"),handler:i.onSetSchedule,disabled:!0,scope:i}]};t={title:_T("common","common_settings"),items:[new SYNO.ux.FormPanel({itemId:"settingPanel",border:!1,trackResetOnLoad:!0,labelWidth:130,items:[s,a,n]})],width:700,height:480,resizable:!1,layout:"fit",buttons:[{xtype:"syno_button",text:_T("common","alt_cancel"),scope:i,handler:i.onCancel},{xtype:"syno_button",btnStyle:"blue",disabled:_S("demo_mode"),tooltip:_S("demo_mode")?_JSLIBSTR("uicommon","error_demo"):"",text:_T("common","save"),scope:i,handler:i.onSave}],listeners:{beforeclose:this.onBeforeClose.bind(this)}},i.callParent([Ext.apply(t,e)]),i.fieldDesc=i.getComponent("settingPanel").getComponent("general").getComponent("desc")},onEnableSSDTrim:function(e,t){t?(this.setScheduleBtn.enable(),this.setNextTriggerTime(this.nextTriggerTime)):(this.setScheduleBtn.disable(),this.setNextTriggerTime("-"),this.ssdTrim.schedule.next_trigger_time=null)},setNextTriggerTime:function(e){var t;t="-"===e||"N/A"===e?e:SYNO.SDS.DateTimeFormatter(Date.parseDate(e,"Y-n-j h:i")),this.triggerTimeDisplayField.setValue(t),this.triggerTimeDisplayField.initValue()},updateNextTriggerTime:function(e){var t=this,i={},s=this.ssdTrim.schedule,a=this.schedule;"-"===this.nextTriggerTime||this.isScheduleEdited?(i.schedule=this.isScheduleEdited?this.scheduleToOld(a):s,t.setStatusBusy(),SYNO.API.Request({api:"SYNO.Storage.CGI.Volume",method:"next_trim_time_get",version:1,params:i,callback:function(i,s,a,n){t.clearStatusBusy(),i?(this.nextTriggerTime=s.next_trigger_time,e&&t.setNextTriggerTime(this.nextTriggerTime)):SYNO.SDS.StorageUtils.ReportWebapiFailure(this,s)},scope:this})):e&&t.setNextTriggerTime(this.nextTriggerTime)},onSetSchedule:function(){var e=this,t=e;if(this.supportSSDTrim){var i=new SYNO.SDS.TaskScheduler2.ScheduleDialog({title:_T("schedule","schedule_advance"),height:500,listeners:{close:{scope:e,fn:function(){e.schedule=t.schedule,e.isScheduleEdited=!!e.schedule,e.updateNextTriggerTime(!0)}}},owner:t});e.schedule=t.schedule;var s=this.ssdTrim.schedule,a=this.schedule,n=this.isScheduleEdited?a:s;i.open(this.scheduleToNew(n))}},getFirstVolume:function(){return this.pool.volumes.find((e=>!e.isUnstableSpace()))},isSupportSSDTrim:function(e){if("yes"!==_D("support_trim","no"))return!1;if("not support"===e)return!1;if(SYNO.SDS.StorageUtils.supportSsdCache&&this.pool.volumes.every(function(e){return!!e.ssdcache}.bind(this)))return!1;return"disabled by time backup"!==e&&"partial support"!==e},scheduleToNew:function(e){if(e.hasOwnProperty("week_name")&&(e.week_day=e.week_name,delete e.week_name),e.hasOwnProperty("repeat")&&(e.repeat_data=e.repeat,e.repeat_date=e.repeat,delete e.repeat),e.hasOwnProperty("min")&&(e.minute=e.min,delete e.min),!e.hasOwnProperty("date")){var t=new Date;e.date=t.getYear()+1900+"/"+(t.getMonth()+1)+"/"+t.getDate(),e.repeat_date=0}return e},scheduleToOld:function(e){return e.hasOwnProperty("week_day")&&(e.week_name=e.week_day,delete e.week_day),e.hasOwnProperty("repeat_data")&&(e.repeat=e.repeat_data,delete e.repeat_data),e.hasOwnProperty("minute")&&(e.min=e.minute,delete e.minute),e.hasOwnProperty("repeat_date")&&(e.repeat=e.repeat_date,delete e.repeat_date),e},updateValues:function(e){e.desc=this.pool.desc,this.fieldDesc.setDisabled(!1),this.getComponent("settingPanel").getForm().setValues(e),this.stripeCacheFieldset.setVisible(this.supportStripeCacheSize),this.ssdTrimFieldset.setVisible(this.supportSSDTrim),this.supportSSDTrim&&(this.setNextTriggerTime(this.nextTriggerTime),"-"===this.nextTriggerTime&&this.updateNextTriggerTime(!1)),this.getComponent("settingPanel").updateFleXcroll()},onOpen:function(){var e=this,t=[];e.isVirtualPool||(t=t.concat({api:"SYNO.Storage.CGI.Pool",method:"get_setting",version:1,params:{pool_path:this.pool.get("space_path")}}));var i=e.getFirstVolume();i&&(t=t.concat({api:"SYNO.Storage.CGI.Volume",method:"ssd_trim_get",version:1,params:{space_path:i.vol_path}})),e.callParent(arguments),e.setStatusBusy({text:_T("common","loading")}),synowebapi.promises.request({api:"SYNO.Entry.Request",version:1,method:"request",compound:{params:t}}).then((function(t){if(t.has_fail)throw new Error("unknown");var i={},s=e.isVirtualPool?0:1;t.result.map((function(e){if(!e.success)throw new Error(e)}));var a=e.isVirtualPool?{stripe_cache_size:"not_support"}:t.result[0].data,n={ssd_trim:{support:"not support"}};(1<t.result.length||e.isVirtualPool)&&(n=t.result[s].data),Ext.apply(i,a),e.ssdTrim=n.ssd_trim,e.supportStripeCacheSize="not_support"!==a.stripe_cache_size,e.supportSSDTrim=e.isSupportSSDTrim(n.ssd_trim.support),e.supportSSDTrim&&(i.ssd_trim_enable=1===n.ssd_trim.enable,e.nextTriggerTime=n.ssd_trim.schedule.next_trigger_time||"-"),e.clearStatusBusy(),e.updateValues(i)})).catch((function(t){e.clearStatusBusy(),SYNO.SDS.StorageUtils.ReportWebapiFailure(e.findWindow(),t)}))},isDirty:function(){return this.getComponent("settingPanel").getForm().isDirty()||this.isScheduleEdited},onSave:function(){if(this.getComponent("settingPanel").getForm().isValid())if(this.isDirty()){var e=[],t={},i=this.getComponent("settingPanel").getForm().getValues();!this.isVirtualPool&&this.getComponent("settingPanel").getForm().isDirty()&&(t={pool_path:this.pool.space_path,desc:i.desc},this.supportStripeCacheSize&&(this.radio_default.isDirty()||this.radio_small.isDirty())&&(t.stripe_cache_size=i.stripe_cache_size),e.push({api:"SYNO.Storage.CGI.Pool",method:"set_setting",version:1,params:t})),this.supportSSDTrim&&e.push({api:"SYNO.Storage.CGI.Volume",method:"ssd_trim_save",version:1,params:{enable:"true"===i.ssd_trim_enable?1:0,space_path:this.pool.space_path,uuid:this.pool.uuid,num_id:this.pool.num_id,is_pool_child:!this.isVirtualPool,schedule:this.scheduleToOld(this.isScheduleEdited?this.schedule:this.ssdTrim.schedule)}}),this.setStatusBusy({text:_T("common","saving")}),synowebapi.promises.request({api:"SYNO.Entry.Request",version:1,method:"request",compound:{params:e}}).then(function(e){this.clearStatusBusy(),this.isDataChanged=!0,this.forceClose=!0,this.close()}.bind(this)).catch(function(e){this.clearStatusBusy(),SYNO.SDS.StorageUtils.ReportWebapiFailure(this.findWindow(),e)}.bind(this))}else this.setStatusError({text:_T("error","nochange_subject"),clear:!0})},onCancel:function(){this.close()},onBeforeClose:function(){return!(this.isDirty()&&!this.forceClose)||(this.confirmLostChangePromise({save:function(){this.onSave()},dontSave:function(){this.forceClose=!0,this.close()},cancel:function(){}},this),!1)}}),Ext.define("SYNO.SDS.StorageManager.Wizard.RemoveDetected",{extend:"SYNO.SDS.ModalWindow",constructor:function(e){var t,i=this;i.appWin=e.appWin,i.owner=e.owner,i.parent=e.parent,i.pool=e.pool,i.passivePool=e.passivePool,i.getHCLMigratedDiskList=e.getHCLMigratedDiskList,t={title:_T("storage_pool","pool_remove_detected_title"),width:640,height:350,resizable:!1,layout:"fit",items:[{itemId:"main",border:!1,style:{padding:"16px 20px 0px 20px"},items:[{xtype:"syno_displayfield",value:_T("storage_pool","pool_delete_summary_desc"),itemId:"desc"},i.gridPanel=i.gridPanelConfig()]}],buttons:[{xtype:"syno_button",text:_T("common","alt_cancel"),scope:i,handler:i.onCancel},{xtype:"syno_button",btnStyle:"red",disabled:_S("demo_mode"),tooltip:_S("demo_mode")?_JSLIBSTR("uicommon","error_demo"):"",text:_T("common","remove"),id:i.applyButtonID=Ext.id(),scope:i,handler:i.onSave}]},i.callParent([Ext.apply(t,e)])},gridPanelConfig:function(e){var t=Ext.apply({border:!1,xtype:"syno_gridpanel",height:220,style:{marginTop:"8px"},columns:[{header:_T("status","header_item"),dataIndex:"item",sortable:!1},{header:_T("status","header_value"),dataIndex:"value",sortable:!1,renderer:function(e,t,i){return t.attr='ext:qtip="'+Ext.util.Format.htmlEncode(e)+'"',String.format('<font class="sm-font-normal">{0}</font>',e)}}],enableHdMenu:!1,sm:new Ext.grid.RowSelectionModel,store:new Ext.data.JsonStore({autoDestroy:!0,idProperty:"item",fields:["item","value"]})},e);return new SYNO.ux.GridPanel(t)},onOpen:function(){var e=this;e.callParent(arguments),e.loadData()},loadData:function(){var e=this,t=SYNO.SDS.StorageUtils,i=[],s=[],a=[],n=e.diskMap;i.push({item:_T("storage_pool","pool_previous_location"),value:e.pool.get("hostname")}),Ext.isEmpty(e.pool.get("desc"))||i.push({item:_T("volume","pool_desc"),value:Ext.util.Format.htmlEncode(e.pool.get("desc"))}),i.push({item:_T("volume","volume_raid_type"),value:t.SpaceTypeRender(e.pool.get("device_type"),!1)}),Ext.each(e.pool.get("disks"),(function(e){var i=n[e];s.push(t.DiskDisplayNameGet(i))})),i.push({item:_T("volume","volume_disk"),value:s.join(", ")}),Ext.each(e.pool.SSDCacheDisks,(function(e){a.push(e.name)})),0<a.length&&i.push({item:_T("storage_pool","pool_cache_drives"),value:a.join(", ")}),e.gridPanel.getStore().loadData(i)},onSave:function(){var e,t,i=this;e={pool_id:i.pool.get("num_id")};var s=i.getHCLMigratedDiskList(i.pool);t=s.length>0?_T("storage_pool","pool_remove_detected_warn_hcl_migrated"):_T("storage_pool","pool_remove_detected_warn_general"),i.getMsgBox().confirmDelete("",String.format(t,s),(function(t){"yes"===t&&SYNO.SDS.Utils.PasswordConfirmDialog.openDialog(i,i.applySettings,["SYNO.Storage.CGI.DetectedPool","remove",e])}),i)},onCancel:function(){this.close()},applySettings:function(e,t,i){var s=this;s.setStatusBusy({text:_T("common","saving")}),s.sendWebAPI({api:e,method:t,version:1,params:i,callback:function(e,t,i,a){var n=function(){s.clearStatusBusy(),s.close()}.createDelegate(s);setTimeout(n,6e3)},scope:s})}}),Ext.define("SYNO.SDS.StorageManager.Wizard.RemoveMissing",{extend:"SYNO.SDS.ModalWindow",constructor:function(e){var t,i=this;i.appWin=e.appWin,i.owner=e.owner,i.parent=e.parent,i.pool=e.pool,i.passivePool=e.passivePool,i.getHCLMigratedDiskList=e.getHCLMigratedDiskList,t={title:_T("storage_pool","pool_remove_missing_title"),width:640,height:350,resizable:!1,layout:"fit",items:[{itemId:"main",border:!1,style:{padding:"16px 20px 0px 20px"},items:[{xtype:"syno_displayfield",value:_T("storage_pool","pool_delete_summary_desc"),itemId:"desc"},i.gridPanel=i.gridPanelConfig()]}],buttons:[{xtype:"syno_button",text:_T("common","alt_cancel"),scope:i,handler:i.onCancel},{xtype:"syno_button",btnStyle:"red",disabled:_S("demo_mode"),tooltip:_S("demo_mode")?_JSLIBSTR("uicommon","error_demo"):"",text:_T("common","remove"),id:i.applyButtonID=Ext.id(),scope:i,handler:i.onSave}]},i.callParent([Ext.apply(t,e)])},gridPanelConfig:function(e){var t=Ext.apply({border:!1,xtype:"syno_gridpanel",height:220,style:{marginTop:"8px"},columns:[{header:_T("status","header_item"),dataIndex:"item",sortable:!1},{header:_T("status","header_value"),dataIndex:"value",sortable:!1,renderer:function(e,t,i){return t.attr='ext:qtip="'+Ext.util.Format.htmlEncode(e)+'"',String.format('<font class="sm-font-normal">{0}</font>',e)}}],enableHdMenu:!1,sm:new Ext.grid.RowSelectionModel,store:new Ext.data.JsonStore({autoDestroy:!0,idProperty:"item",fields:["item","value"]})},e);return new SYNO.ux.GridPanel(t)},onOpen:function(){var e=this;e.callParent(arguments),e.loadData()},loadData:function(){var e=this,t=SYNO.SDS.StorageUtils,i=[],s=[],a=[],n=e.diskMap;Ext.isEmpty(e.pool.get("desc"))||i.push({item:_T("volume","pool_desc"),value:Ext.util.Format.htmlEncode(e.pool.get("desc"))}),i.push({item:_T("volume","volume_raid_title"),value:t.SpaceTypeRender(e.pool.get("device_type"),!1)}),Ext.each(e.pool.get("disks"),(function(e){var i=n[e];s.push(t.DiskDisplayNameGet(i))})),0<s.length&&i.push({item:_T("volume","volume_disk"),value:s.join(", ")}),Ext.each(e.pool.SSDCacheDisks,(function(e){a.push(e.name)})),0<a.length&&i.push({item:_T("volume","volume_cache_disk"),value:a.join(", ")}),e.gridPanel.getStore().loadData(i)},onSave:function(){var e,t,i=this;e={space_uuid:i.pool.get("uuid")};var s=i.getHCLMigratedDiskList(i.pool);t=s.length>0?_T("storage_pool","warning_remove_missing_pool_hcl_migrated"):_T("storage_pool","warning_remove_missing_pool_general"),i.getMsgBox().confirmDelete("",String.format(t,s),(function(t){"yes"===t&&SYNO.SDS.Utils.PasswordConfirmDialog.openDialog(i,i.applySettings,["SYNO.Storage.CGI.Pool","remove_missing_pool",e])}),i)},onCancel:function(){this.close()},applySettings:function(e,t,i){var s=this;s.setStatusBusy({text:_T("common","saving")}),s.sendWebAPI({api:e,method:t,version:1,params:i,callback:function(e,t,i,a){var n=function(){s.clearStatusBusy(),s.close()}.createDelegate(s);setTimeout(n,6e3)},scope:s})}}),Ext.define("SYNO.SDS.StorageManager.Wizard.EnclosureInfo",{extend:"SYNO.SDS.ModalWindow",constructor:function(e){var t,i=this;i.appWin=e.appWin,i.owner=e.owner,t={title:_T("home","home_subject"),width:420,height:126+28*(e.data.length+1),layout:"fit",dsmStyle:"v5",border:!1,items:[{layout:"fit",xtype:"syno_gridpanel",border:!1,columns:[{header:_T("smart","smart_attribute"),dataIndex:"item",width:200,sortable:!1},{header:_T("relayservice","status"),dataIndex:"status",width:180,useHtmlEncodeRender:!1,sortable:!1}],enableHdMenu:!1,store:new Ext.data.JsonStore({autoDestroy:!0,fields:["item","status"],data:e.data})}],buttons:[{xtype:"syno_button",text:_T("common","alt_close"),handler:this.close,scope:this}]},i.callParent([Ext.apply(t,e)])}}),Ext.define("SYNO.SDS.StorageManager.Wizard.DualEnclosureInfo",{extend:"SYNO.SDS.ModalWindow",constructor:function(e){var t,i=this;i.appWin=e.appWin,i.owner=e.owner,t={title:_T("home","home_subject"),width:420,height:126+28*(e.data.length+1),resizable:!1,layout:"fit",dsmStyle:"v5",border:!1,items:[{layout:"fit",xtype:"syno_gridpanel",border:!1,columns:[{header:_T("smart","smart_attribute"),dataIndex:"item",width:200,sortable:!1},{header:_T("relayservice","status"),dataIndex:"status",width:180,useHtmlEncodeRender:!1,sortable:!1}],enableHdMenu:!1,store:new Ext.data.JsonStore({autoDestroy:!0,fields:["item","status"],data:e.data})}],buttons:[{xtype:"syno_button",text:_T("common","alt_close"),handler:this.close,scope:this}]},i.callParent([Ext.apply(t,e)])}}),Ext.define("SYNO.SDS.StorageManager.Wizard.CreateVolumeMain",{extend:"SYNO.SDS.StorageManager.Wizard.ModalWindow",constructor:function(e){var t,i,s=this,a=SYNO.SDS.StorageUtils;s.appWin=e.appWin,s.owner=e.owner,s.supportBtrfs="yes"===_D("support_btrfs","no"),s.isDataChanged=!1,t=e.option,i={title:_T("volume","volume_add_volmgr_title"),cls:"sm-wizard-main",mode:"volume_create",width:640,height:560,minHeight:560,minWidth:640,resizable:!0,border:!1,steps:[]},a.supportRaidGroup||(a.isSingleBay()||i.steps.push(new SYNO.SDS.StorageManager.Wizard.CreateVolumeModeStep({appWin:s.appWin,option:t,itemId:"create_mode",nextId:{quick:"property",custom:"pool_from"}})),a.isSingleBay()&&!a.isSingleBayWithEbox()||i.steps.push(new SYNO.SDS.StorageManager.Wizard.PoolFromStep({appWin:s.appWin,itemId:"pool_from",nextId:{create:"raid_type",existing:"pool_choosing"}}))),a.isSingleBay()&&!a.isSingleBayWithEbox()||(i.steps.push(new SYNO.SDS.StorageManager.Wizard.PoolChoosingStep({appWin:s.appWin,itemId:"pool_choosing",nextId:"allocate_size_step"})),i.steps.push(new SYNO.SDS.StorageManager.Wizard.PoolTypeStep({appWin:s.appWin,itemId:"raid_type",nextId:"property"}))),i.steps.push(new SYNO.SDS.StorageManager.Wizard.PoolPropertyStep({appWin:s.appWin,itemId:"property",nextId:"disk"})),i.steps.push(new SYNO.SDS.StorageManager.Wizard.DiskStep({appWin:s.appWin,itemId:"disk",nextId:"check"})),i.steps.push(new SYNO.SDS.StorageManager.Wizard.DiskCheckStep({appWin:s.appWin,itemId:"check",getNext:function(){return this.getData("quick_mode",!1)||a.isSingleBay()?"fsstep":"allocate_size_step"}})),i.steps.push(new SYNO.SDS.StorageManager.Wizard.VolumePropertyStep({appWin:s.appWin,itemId:"allocate_size_step",deviceType:"volume",nextId:"fsstep"})),i.steps.push(new SYNO.SDS.StorageManager.Wizard.VolumeFsTypeStep({appWin:s.appWin,itemId:"fsstep",nextId:"summary"})),i.steps.push(new SYNO.SDS.StorageManager.Wizard.CreateVolumeSummaryStep({appWin:s.appWin,isOneBay:a.isSingleBay(),headline:_T("volume","volume_wizard_summary_title"),itemId:"summary",nextId:null})),s.callParent([Ext.apply(i,e)])},onOpen:function(){this.callParent(arguments),SYNO.SDS.StorageUtils.supportRaidGroup&&(this.setData("quick_mode",!1),this.setData("pool_from","existing")),SYNO.SDS.StorageUtils.isSingleBay()&&(this.setData("quick_mode",!1),this.setData("pool_from","create"),this.setData("raid_type","single")),this.setData("create_for","volume")},isQuickMode:function(){return this.getData("quick_mode",!1)},getSpaceType:function(){return"volume"},getDiskIds:function(){return this.getData("disk_ids",[])},getRaidLevel:function(){var e=this.getData("raid_level",""),t=this.getData("disk_ids",[]);return"shr_2"===e?e="shr_with_2_disk_protect":"shr"===e&&(e=1===t.length?"shr_without_disk_protect":"shr_with_1_disk_protect"),e},getPoolPath:function(){return this.getData("selected_pool_id","")},getDescription:function(){return this.getData("volume_description")||this.getData("pool_description")||""},isChooseExistingPool:function(){return"existing"===this.getData("pool_from")},getFsType:function(){return this.getData("fs_type",_D("defaultfs","ext4"))},getAllocateSizeMB:function(){var e=this.getData("allocate_byte",0);return Math.floor(e/1024/1024).toString()},getDiskCheck:function(){return this.getData("disk_check",!1)},isPoolChild:function(){return"multiple"===this.getData("raid_type")},applySettings:function(e){var t,i,s=this.getData("raid_type"),a=this.getData("deploy_space_path"),n={},o={};n.force=e||!1,this.isChooseExistingPool()?("single"===s?(i="deploy_unused",n.space_path=a):(i="create_on_existing_pool",n.pool_path=this.getPoolPath(),n.allocate_size=this.getAllocateSizeMB()),n.fs_type=this.getFsType(),n.vol_desc=this.getDescription(),n.atime_opt="noatime"):(t=this.getRaidLevel(),i="create",n.pool_path=this.getPoolPath(),n.fs_type=this.getFsType(),n.allocate_size=this.getAllocateSizeMB(),n.disk_id=this.getDiskIds(),n.is_disk_check=this.getDiskCheck(),n.device_type=t,n.is_pool_child=this.isPoolChild(),n.spare_disk_count="0",n.vol_desc=this.getDescription(),n.desc=SYNO.SDS.StorageUtils.RaidLevelRender(t),n.atime_opt="noatime"),this.getButton("next").disable(),this.setStatusBusy({text:_T("common","saving")}),SYNO.API.Request({api:"SYNO.Storage.CGI.Volume",method:i,version:1,params:n,callback:function(e,t,i,s){this.clearStatusBusy(),e?(this.getButton("next").enable(),this.getButton("next").setText(_T("common","alt_finish")),this.isDataChanged=!0,this.close()):SYNO.SDS.StorageUtils.IsFeasibilityFail(t,o)?SYNO.SDS.StorageUtils.ConfirmFeasibilityFail(this,o,this.applySettings,!0):(SYNO.SDS.StorageUtils.HARemoteCheckErrParsing(t),SYNO.SDS.StorageUtils.ReportWebapiFailure(this,t))},scope:this})}}),Ext.define("SYNO.SDS.StorageManager.Wizard.ManageVolume",{extend:"SYNO.SDS.StorageManager.Wizard.ModalWindow",constructor:function(e){var t,i=this;i.appWin=e.appWin,i.owner=e.owner,i.volume=e.volume||null,i.manageAction=e.manageAction,(t=Ext.apply({title:_T("volume","volume_raid_management_title"),mode:"pool_manage",width:700,height:520,minHeight:475,minWidth:700,resizable:!0,border:!1,steps:[]},e)).steps.push(new SYNO.SDS.StorageManager.Wizard.ManageSummaryStep({appWin:i.appWin,itemId:"summary",nextId:null})),i.callParent([t])},activate:function(){this.callParent(arguments)},onOpen:function(){var e=this;this.setData("manage_action",e.manageAction),e.callParent(arguments)},getPoolObject:function(){return this.volume},getActionType:function(){return this.manageAction},applySettings:function(e){var t="";if("stop_in_minutes"===e)t=String.format(_T("volume","volume_change_service_stop_in_minutes"),_T("common","ask_cont"));if(""!==t)return"yes"===_D("support_share_encryption","no")&&(t=String.format("1. {0}<p>2. {1}",_T("volume","volume_share_encryption_unmount_warning"),t)),void this.getMsgBox().confirm(this.title,t,(function(e){"yes"===e&&this.sendRequestVolume()}),this);this.sendRequestVolume()},sendRequestVolume:function(){var e,t={};t.pool_path=this.volume.get("pool_path"),t.space_id=this.volume.id,"expand_with_unalloc_size"===this.manageAction?(e="expand_unallocated",this.getButton("next").disable(),this.setStatusBusy({text:_T("common","saving")}),SYNO.API.Request({api:"SYNO.Storage.CGI.Volume",method:e,version:1,params:t,callback:function(e,t,i,s){if(this.clearStatusBusy(),!e)return SYNO.SDS.StorageUtils.HARemoteCheckErrParsing(t),void SYNO.SDS.StorageUtils.ReportWebapiFailure(this,t);this.getButton("next").enable(),this.getButton("next").setText(_T("common","alt_finish")),this.close()},scope:this})):SYNO.Debug("unknown add type")}}),Ext.define("SYNO.SDS.StorageManager.Wizard.CreateVolumeModeStep",{extend:"SYNO.SDS.StorageManager.Wizard.Step",constructor:function(e){var t,i=this,s=String.format('<span class="syno-ux-note">{0}{1} </span>{2}',_T("common","note"),_T("common","colon"),"{0}");i.loaded=!1,i.option=e.option||{},i.appWin=e.appWin,i.owner=e.owner,t={headline:_T("volume","volume_add_mode_title"),items:[{xtype:"syno_radio",boxLabel:_T("volume","volume_add_mode_systemdefault"),name:"choose_mode",itemId:"quick",inputValue:"quick",disabled:!0},{xtype:"syno_displayfield",htmlEncode:!1,indent:1,value:_T("volume","volume_add_mode_systemdefault_help")},{xtype:"syno_displayfield",htmlEncode:!1,indent:1,value:String.format(s,_T("volume","volume_type_shr_support_note")),hidden:!SYNO.SDS.StorageUtils.supportHA},{xtype:"syno_displayfield",cls:"sm-empty-line"},{xtype:"syno_radio",boxLabel:_T("volume","volume_add_mode_customized"),name:"choose_mode",itemId:"custom",inputValue:"custom",disabled:!0},{xtype:"syno_displayfield",indent:1,value:_T("volume","volume_add_mode_customized_help")},{xtype:"syno_displayfield",htmlEncode:!1,indent:1,value:String.format(s,_T("volume","volume_add_mode_customized_note"))}]},this.callParent([Ext.apply(t,e)])},isQuickMode:function(){return"quick"===this.getForm().getValues().choose_mode},activate:function(){this.loaded||(this.option.can_create_volume?(_S("ha_running")?(this.getComponent("quick").disable(),this.getComponent("custom").setValue(!0)):(this.getComponent("quick").enable(),this.getComponent("quick").setValue(!0)),this.getComponent("custom").enable()):this.option.can_create_volume_on_existing_pool?(this.getComponent("quick").disable(),this.getComponent("custom").enable(),this.getComponent("custom").setValue(!0)):(this.getComponent("quick").disable(),this.getComponent("custom").disable()),this.loaded=!0)},getNext:function(){return this.nextId[this.getForm().getValues().choose_mode]},updateData:function(e){e.quick_mode=this.isQuickMode()},summary:function(e){e.append(_T("volume","volume_space"),_T("volume","volume"))}}),Ext.define("SYNO.SDS.StorageManager.Wizard.VolumeFsTypeStep",{extend:"SYNO.SDS.StorageManager.Wizard.Step",constructor:function(e){var t,i=this;i.loaded=!1,i.option=e.option||{},i.appWin=e.appWin,i.owner=e.owner,t={headline:_T("volume","volume_add_fs_title"),cls:"sm-custom-form",items:[{xtype:"syno_radio",boxLabel:_T("volume","volume_add_fs_btrfs"),name:"choose_fs",itemId:"btrfs",inputValue:"btrfs"},{xtype:"syno_displayfield",indent:1,value:_T("volume","volume_add_fs_btrfs_help")},{xtype:"syno_displayfield",cls:"sm-empty-line"},{xtype:"syno_radio",boxLabel:_T("volume","volume_add_fs_ext4"),name:"choose_fs",itemId:"ext4",inputValue:"ext4"},{xtype:"syno_displayfield",indent:1,value:_T("volume","volume_add_fs_ext4_help")},{xtype:"syno_displayfield",htmlEncode:!1,style:{"text-decoration":"underline",marginTop:"18px"},value:_T("volume","volume_choose_fs_info")}]},this.callParent([Ext.apply(t,e)])},isSkip:function(){return!SYNO.SDS.StorageUtils.supportBtrfs},getFsType:function(){return this.getForm().getValues().choose_fs},activate:function(){this.loaded||(SYNO.SDS.StorageUtils.supportBtrfs&&"btrfs"===_D("defaultfs")?this.getComponent("btrfs").setValue(!0):this.getComponent("ext4").setValue(!0),this.loaded=!0)},updateData:function(e){e.fs_type=this.getFsType()},getNext:function(){return this.nextId},summary:function(e){var t;this.isSkip()||(t="btrfs"===this.getFsType()?_T("volume","volume_add_fs_btrfs_type"):_T("volume","volume_add_fs_ext4_type"),e.append(_T("volume","volume_add_fs_type"),t))}}),Ext.define("SYNO.SDS.StorageManager.Wizard.CreateVolumeSummaryStep",{extend:"SYNO.SDS.StorageManager.Wizard.SummaryStep",constructor:function(e){this.isOneBay=!1;var t={headline:_T("volume","volume_wizard_summary_title")};t=Ext.apply(t,e),this.callParent([t])},estimateSize:function(){var e="multiple"===this.getData("raid_type","single");this.owner.setStatusBusy(),this.owner.getButton("next").disable(),SYNO.API.Request({api:"SYNO.Storage.CGI.Volume",method:"estimate_size",version:1,params:{estimate_for:"create",disk_id:this.owner.getDiskIds(),device_type:this.owner.getRaidLevel()},callback:function(t,i,s,a){if(this.owner.clearStatusBusy(),!t)return SYNO.SDS.StorageUtils.ReportWebapiFailure(this,i),void this.owner.getButton("next").disable();this.getStore().append(_T("volume","volume_totalsize"),_T("volume","volume_add_warningabout")+" "+SYNO.SDS.StorageUtils.SizeRender(i.size)),this.checkSize(e?this.getData("allocate_byte",0):parseInt(i.size,10))},scope:this})},checkSize:function(e){var t=this,i=parseInt(SYNO.SDS.StorageUtils.getMaxVolumeSize(),10),s={};e>i&&(s.text=_T("error","error_volume_oversize"),s.text=String.format(s.text,SYNO.SDS.StorageUtils.SizeRender(i)),SYNO.SDS.StorageUtils.ReportWebapiFailure(this,s,(function(){t.owner.getButton("next").disable()})))},activate:function(){var e=this,t=this.getData("pool_from","create"),i=this.getData("quick_mode",!1),s=this.getData("allocate_byte",0);e.callParent(arguments),"create"===t||i?this.estimateSize():this.checkSize(s)},getNext:function(){return this.owner.applySettings(),!1}}),Ext.define("SYNO.SDS.StorageManager.Wizard.DeleteVolume",{extend:"SYNO.SDS.ModalWindow",serviceNameMap:{media:_T("tree","leaf_mediaservice"),itunes:_T("tree","leaf_itunes"),audio:_T("tree","leaf_audio"),photo:_T("tree","leaf_photo"),netbkp:_T("tree","leaf_netbkp"),web:_T("tree","leaf_web"),download:_T("tree","node_download"),mysql:_T("tree","leaf_mysql"),surveillance:_T("tree","leaf_surveillance"),userhome:_T("user","user_home")},constructor:function(e){var t,i=this;i.isDataChanged=!1,i.appWin=e.appWin,i.owner=e.owner,i.volumeIds=e.volumeIds||[],i.services=void 0,i.deleteFrom=e.deleteFrom,i.isInternalVolume=e.isInternalVolume,t={title:"virtualPool"===i.deleteFrom?_T("volume","volume_remove_raid_group"):_T("volume","volume_delete_volmgr_title"),width:640,height:350,resizable:!1,layout:"fit",items:[{itemId:"main",border:!1,style:{padding:"16px 20px 0px 20px"},items:[{xtype:"syno_displayfield",value:"",id:i.descID=Ext.id(),itemId:"desc"},i.grid=new SYNO.SDS.Wizard.SummaryStep({layout:"fit",height:200,style:{paddingTop:"8px"}})]}],buttons:[{xtype:"syno_button",text:_T("common","alt_cancel"),scope:i,handler:i.onCancel},{xtype:"syno_button",btnStyle:"red",disabled:_S("demo_mode"),tooltip:_S("demo_mode")?_JSLIBSTR("uicommon","error_demo"):"",text:_T("common","remove"),id:i.applyButtonID=Ext.id(),scope:i,handler:i.onSave}]},i.callParent([Ext.apply(t,e)])},onOpen:function(){var e,t=this,i=SYNO.SDS.StorageUtils;t.callParent(arguments),0!==t.volumeIds.length&&(e=t.grid.getStore(),t.isInternalVolume&&i.isSingleBay()&&e.append(_T("volume","volume_storage_pool"),i.SpaceIDParser("reuse_").str),e.append(_T("volume","volume"),i.getVolumeNames(t.volumeIds)),t.setStatusBusy(),SYNO.API.Request({api:"SYNO.Storage.CGI.Volume",method:"enum_resource",version:1,params:{space_id:t.volumeIds},callback:function(e,i,s,a){t.clearStatusBusy(),e?t.loadData(i,s):SYNO.SDS.StorageUtils.ReportWebapiFailure(this,i)},scope:t}))},onSave:function(){var e,t,i=this;e={space_id:i.volumeIds,force:!0},t='1. <font class="red-status">'+_T("volume","volume_delete_warning")+"</font><br/>2. ",t+=_T("volume","volume_all_service_stop"),i.setStatusBusy(),SYNO.API.Request({api:"SYNO.Storage.CGI.Volume",method:"pre_delete_check",version:1,params:{space_id:e.space_id},callback:function(s,a,n,o){i.clearStatusBusy(),s?i.getMsgBox().confirmDelete("",t,(function(t){"yes"===t&&SYNO.SDS.Utils.PasswordConfirmDialog.openDialog(i,i.apply,["delete",e])}),i):SYNO.SDS.StorageUtils.ReportWebapiFailure(i,a)},scope:i})},onCancel:function(){this.close()},loadData:function(e,t){var i=this,s=i.grid.getStore(),a=SYNO.SDS.StorageUtils,n={},o=[],r=a.CheckFailedMsg(e.check),l=!1;"hard_failed"===r?(l=!0,Ext.getCmp(i.applyButtonID).disable(),Ext.getCmp(i.descID).setValue(_T("volume","del_hard_check_fail")),function(e){var t=!0;e.space_id.forEach((function(e){if("crashed"!==i.volumeMap[e].get("status"))return t=!1,!1})),t&&(Ext.getCmp(i.applyButtonID).enable(),Ext.getCmp(i.descID).setValue(_T("volume","del_soft_check_fail")))}(t)):"soft_failed"===r?Ext.getCmp(i.descID).setValue(_T("volume","del_soft_check_fail")):"virtualPool"===i.deleteFrom?Ext.getCmp(i.descID).setValue(_T("storage_pool","pool_delete_summary_desc")):i.isInternalVolume&&a.isSingleBay()?Ext.getCmp(i.descID).setValue(_T("volume","volume_delete_summary_single_bay_internal_desc")):Ext.getCmp(i.descID).setValue(_T("volume","volume_delete_summary_desc")),a.CheckMsg(e.check,l,"volumes",s),e.services&&e.services.length>0&&s.append(_T("volume","volume_warninglistservice"),a.getServiceNames(e.services)),e.iscsiluns&&e.iscsiluns.length>0&&(s.append(_T("volume","volume_iscsitrg_lun"),a.getNamesString(e.iscsiluns)),a.CheckMsg(e.check,l,"iscsiluns",s)),e.shares&&e.shares.length>0&&(s.append(_T("volume","volume_status_warningdelinfo"),a.getNamesString(e.shares)),a.CheckMsg(e.check,l,"shares",s)),e.pkgs&&e.pkgs.length>0&&s.append(_T("pkgmgr","title_packages"),a.getNamesString(e.pkgs)),i.services=e.services,"yes"===_D("support_ssd_cache","no")&&(Ext.each(i.volumeIds,(function(e){n[e]=!0})),Ext.each(i.allSsdcaches,(function(e){n[e.get("mountSpaceId")]&&o.push(SYNO.SDS.Utils.StorageUtils.SpaceIDParser(e.get("id")).str)}),i),0<o.length&&s.append(_T("volume","ssd_cache_string2"),o.join(", ")))},apply:function(e,t){var i=this,s={};i.setStatusBusy({text:_T("common","saving")}),SYNO.API.Request({api:"SYNO.Storage.CGI.Volume",method:e,version:1,params:t,callback:function(t,a,n,o){i.clearStatusBusy(),t?(SYNO.SDS.StorageUtils.disableServices(i.services),i.isDataChanged=!0,i.close()):SYNO.SDS.StorageUtils.IsFeasibilityFail(a,s)?SYNO.SDS.StorageUtils.ConfirmFeasibilityFail(this,s,this.apply,e,n):(SYNO.SDS.StorageUtils.HARemoteCheckErrParsing(a),SYNO.SDS.StorageUtils.ReportWebapiFailure(this,a))},scope:i})}}),Ext.define("SYNO.SDS.StorageManager.Wizard.UnmountVolumeWarnWizard",{extend:"SYNO.SDS.ModalWindow",constructor:function(e){var t,i=this;i.isDataChanged=!1,i.appWin=e.appWin,i.owner=e.owner,i.volumeId=e.volumeId,i.opType=e.opType,i.data=void 0,i.execution_time=void 0,t={title:_T("volume",e.opType),width:640,height:350,resizable:!1,layout:"fit",items:[{itemId:"main",border:!1,style:{padding:"16px 20px 0px 20px"},items:[{xtype:"syno_displayfield",value:"",id:i.descID=Ext.id(),itemId:"desc"},i.grid=new SYNO.SDS.Wizard.SummaryStep({layout:"fit",height:200,style:{paddingTop:"8px"}})]}],buttons:[{xtype:"syno_button",text:_T("common","alt_cancel"),scope:i,handler:i.onCancel},{xtype:"syno_button",btnStyle:"blue",text:_T("common","ok"),id:i.applyButtonID=Ext.id(),scope:i,handler:i.onDoubleConfirm}]},i.callParent([Ext.apply(t,e)])},socketRegister:function(e,t,i){return SYNO.SDS.SocketInst.register(e,t,i),()=>{SYNO.SDS.SocketInst.unregister(e,t)}},onOpen:function(){var e=this;e.callParent(arguments),e.setStatusBusy();const t=this.socketRegister({api:"SYNO.Storage.CGI.Volume.OfflineOp",version:1,method:"pre_estimate",params:{op_type:e.opType,space_id:e.volumeId}},(t=>{t&&t.success&&(t.data&&(e.data=t.data),t.execution_time&&t.volume_id===e.volumeId&&(e.execution_time=t.execution_time),e.clearStatusBusy(),e.loadData(e.data))}),!0);this.on("destroy",t)},onDoubleConfirm:function(){var e,t,i=this;e={op_type:i.opType,space_id:i.volumeId},t="1. "+_T("volume","volume_service_stop_warning")+"<br/>",t+="2. "+_T("volume","volume_unmount_warning"),i.getMsgBox().confirm("",t,(function(t){"yes"===t&&i.execute(e)}),i)},onCancel:function(){this.close()},loadData:function(e){var t=this,i=t.grid.getStore(),s=SYNO.SDS.StorageUtils,a=s.CheckFailedMsg(e.check),n=!1;i.removeAll(!0),i.append(_T("volume","volume"),s.getVolumeNames([t.volumeId])),"hard_failed"===a?(n=!0,Ext.getCmp(t.applyButtonID).disable(),Ext.getCmp(t.descID).setValue(String.format(_T("volume","volume_op_hard_check_fail_desc"),s.SpaceIDParser(t.volumeId).num,_T("volume",t.opType)))):"soft_failed"===a?Ext.getCmp(t.descID).setValue(String.format(_T("volume","volume_op_soft_check_fail_desc"),s.SpaceIDParser(t.volumeId).num,_T("volume",t.opType))):Ext.getCmp(t.descID).setValue(String.format(_T("volume","volume_op_unmount_msg"),_T("volume",t.opType))),s.CheckMsg(e.check,n,"volumes",i),e.services&&e.services.length>0&&i.append(_T("volume","volume_warninglistservice"),s.getServiceNames(e.services)),e.iscsiluns&&e.iscsiluns.length>0&&(i.append(_T("volume","volume_iscsitrg_lun"),s.getNamesString(e.iscsiluns)),s.CheckMsg(e.check,n,"iscsiluns",i)),e.shares&&e.shares.length>0&&(i.append(_T("volume","volume_status_warningdelinfo"),s.getNamesString(e.shares)),s.CheckMsg(e.check,n,"shares",i)),e.pkgs&&e.pkgs.length>0&&i.append(_T("pkgmgr","title_packages"),s.getNamesString(e.pkgs)),t.execution_time?i.append(_T("volume","volume_op_time_estimation_desc"),s.TimeRender(t.execution_time)):i.append(_T("volume","volume_op_time_estimation_desc"),_T("volume","volume_op_time_estimating"))},execute:function(e){var t=this;t.setStatusBusy({text:_T("common","saving")}),SYNO.API.Request({api:"SYNO.Storage.CGI.Volume.OfflineOp",method:"execute",version:1,params:e,callback:function(e,i,s,a){t.clearStatusBusy(),e?(t.isDataChanged=!0,t.close()):SYNO.SDS.StorageUtils.ReportWebapiFailure(this,i)},scope:t})}}),Ext.define("SYNO.SDS.StorageManager.Wizard.PoolChoosingStep",{extend:"SYNO.SDS.StorageManager.Wizard.Step",constructor:function(e){var t,i=this;i.appWin=e.appWin,i.loaded=!1,t={headline:_T("volume","volume_choose_raid_title"),items:[{xtype:"syno_message_combobox",fieldLabel:_T("volume","volume_pool"),width:250,name:"pools",itemId:"pools",valueField:"id",displayField:"display",descriptionField:"desc",store:i.poolStore=new Ext.data.JsonStore({autoDestroy:!0,idProperty:"id",fields:["id","display","avail","total","desc","raidLevel","multipleSupport","spacePath"]}),listeners:{select:this.onSelect,scope:this}},{xtype:"syno_displayfield",itemId:"raid_level",fieldLabel:_T("volume","volume_raid_type"),htmlEncode:!1},{xtype:"syno_displayfield",itemId:"multiple_volume_support",fieldLabel:_T("volume","volume_multiple_vol_lun_support")},{xtype:"syno_displayfield",itemId:"total_size",fieldLabel:_T("volume","volume_totalsize")},{xtype:"syno_displayfield",itemId:"free_size",fieldLabel:_T("volume","volume_freesize")}]},i.callParent([Ext.apply(t,e)])},activate:function(){var e,t,i=this,s=SYNO.SDS.StorageUtils,a=[];i.loaded||(e=i.appWin.storagePools.getMatched("isFreeSizeBiggerThan1GB","isWritable"),Ext.each(e,(function(e){var t,i,n,o,r;r=e.get("id"),t=e.get("size"),n=parseInt(t.used,10),o=(i=parseInt(t.total,10))-n,a.push({id:r,display:String.format("{0} ({1}: {2})",s.SpaceIDParser(r).str,_T("volume","volume_freesize"),s.SizeRenderWithFloor(o)),desc:e.get("desc"),avail:o,total:i,numId:e.get("num_id"),raidLevel:e.get("device_type"),multipleSupport:e.supportMultiple(),spacePath:e.get("space_path")})})),a.sort((function(e,t){return e.numId>t.numId?1:e.numId===t.numId?0:-1})),i.poolStore.loadData(a),(t=i.poolStore.getAt(0))&&(i.getComponent("pools").setValue(t.get("id")),i.onSelect(i,t,0)),i.loaded=!0)},onSelect:function(e,t,i){var s=SYNO.SDS.StorageUtils,a=this.getComponent("raid_level"),n=this.getComponent("multiple_volume_support"),o=this.getComponent("total_size"),r=this.getComponent("free_size");a.setValue(s.SpaceTypeRender(t.data.raidLevel)),n.setValue(t.data.multipleSupport?_T("common","yes"):_T("common","no")),o.setValue(s.SizeRender(t.data.total)),r.setValue(s.SizeRender(t.data.avail))},updateData:function(e){var t=this.getComponent("pools"),i=t.getValue(),s=t.getStore().getById(i);e.selected_pool_id=i,e.raid_level=s.data.raidLevel,e.raid_type=s.data.multipleSupport?"multiple":"single",e.deploy_space_path=s.data.spacePath},getNext:function(){return this.nextId},summary:function(e){}}),Ext.namespace("SYNO.SDS.StorageManager.Pool"),Ext.define("SYNO.SDS.StorageManager.Pool.Settings.Dialog",{extend:"SYNO.SDS.ModalWindow",constructor:function(e){let t=e.owner,i=e.appWin;this.settingPanel=new SYNO.SDS.StorageManager.Pool.ConfigPanel({appWin:i,owner:t});var s=Ext.apply({width:700,height:580,minWidth:700,minHeight:580,layout:"fit",items:this.settingPanel,buttons:[{xtype:"syno_button",btnStyle:"grey",text:_T("common","cancel"),scope:this,handler:this.cancelHandler},{xtype:"syno_button",btnStyle:"blue",text:_T("common","save"),scope:this,handler:this.applyHandler}],listeners:{activate:()=>{this.settingPanel.fireEvent("initData",this)},beforeclose:this.onBeforeClose}},e);this.callParent([s]),this.addManagedComponent(this.settingPanel)},onBeforeClose:function(){if(!this.skipCheckDirty&&this.settingPanel.getForm().isDirty())return this.confirmLostChangePromise({save:function(){this.applyHandler()},dontSave:function(){this.settingPanel.getForm().reset(),this.close()},cancel:function(){}},this),!1},cancelHandler:function(){this.close()},applyHandler:function(){this.settingPanel.applyForm()},forceClose:function(){this.skipCheckDirty=!0,this.close()}}),Ext.define("SYNO.SDS.StorageManager.Pool.ConfigPanel",{extend:"SYNO.SDS.Utils.FormPanel",constructor:function(e){var t,i=this;this.appWin=e.appWin,this.owner=e.owner,this.getFastRepairConfigApi={api:"SYNO.Storage.CGI.Storage",method:"get_fast_repair_config",version:1,params:{}},this.getAutoRepairConfigApi={api:"SYNO.Storage.CGI.Storage",method:"get_auto_repair_config",version:1,params:{}},this.getResyncSpeedApi={api:"SYNO.Storage.CGI.Storage",method:"get_resync_speed",version:1,params:{}};var s={xtype:"syno_fieldset",itemId:"adv_repair",title:_T("storage_pool","repair_adv_setting_title"),listeners:{},items:[]},a={xtype:"syno_fieldset",itemId:"speed_limit",title:_T("data_scrubbing","speed_limit"),items:[{xtype:"syno_radio",name:"speed_option",itemId:"speed_limit_slow",boxLabel:_T("data_scrubbing","speed_limit_slow"),value:!1,inputValue:"resync_slower"},{xtype:"syno_radio",name:"speed_option",itemId:"speed_limit_fast",boxLabel:_T("data_scrubbing","speed_limit_fast"),value:!1,inputValue:"resync_faster"},{xtype:"syno_radio",name:"speed_option",itemId:"speed_limit_manual",boxLabel:_T("data_scrubbing","manual"),value:!1,inputValue:"resync_manual",listeners:{scope:this,check:function(e,t){t?(this.getField("speed_max_comp").setDisabled(!1),this.getField("speed_min_comp").setDisabled(!1),this.getField("speed_max_comp").show(),this.getField("speed_min_comp").show()):(this.getField("speed_max_comp").hide(),this.getField("speed_min_comp").hide(),this.getField("speed_max_comp").setDisabled(!0),this.getField("speed_min_comp").setDisabled(!0)),i.updateFleXcroll()}}},{xtype:"syno_compositefield",itemId:"speed_max_comp",hidden:!0,hideLabel:!0,items:[{xtype:"syno_displayfield",width:70,indent:1,value:_T("data_scrubbing","speed_limit_max")},{xtype:"syno_numberfield",name:"speed_max",itemId:"speed_max",indent:1,validator:function(){return i.speedChecker()},minValue:0},{xtype:"syno_displayfield",width:10,indent:1,value:""},{xtype:"syno_displayfield",indent:1,value:"MB/s"}]},{xtype:"syno_compositefield",itemId:"speed_min_comp",hidden:!0,hideLabel:!0,items:[{xtype:"syno_displayfield",width:70,indent:1,value:_T("data_scrubbing","speed_limit_min")},{xtype:"syno_numberfield",name:"speed_min",itemId:"speed_min",indent:1,validator:function(){return i.speedChecker()},minValue:0},{xtype:"syno_displayfield",width:10,indent:1,value:""},{xtype:"syno_displayfield",indent:1,value:"MB/s"}]},{xtype:"syno_displayfield",htmlEncode:!1,value:'<span class="syno-ux-note">'+_T("common","note")+_T("common","colon")+" </span>"+_T("data_scrubbing","resync_speed_note")}]};this.getConfigApis=[];var n=[];i.getConfigApis.push(i.getResyncSpeedApi),n.push(a),"yes"===_D("support_fast_repair","no")&&(s.items.push({xtype:"syno_displayfield",htmlEncode:!1,value:'<span class="sm-storage-setting-subtitle">'+_T("storage_pool","fast_repair")+"</span>"},{xtype:"syno_displayfield",htmlEncode:!1,value:_T("storage_pool","fast_repair_tip")},{xtype:"syno_checkbox",name:"fast_repair_enable",itemId:"fast_repair_enable",boxLabel:_T("storage_pool","fast_repair_enable")}),i.getConfigApis.push(i.getFastRepairConfigApi)),"yes"===_D("support_auto_repair","no")&&(s.items.push({xtype:"syno_displayfield",htmlEncode:!1,value:'<span class="sm-storage-setting-subtitle">'+_T("storage_pool","auto_repair_title")+"</span>"},{xtype:"syno_displayfield",htmlEncode:!1,value:_T("storage_pool","auto_repair_desc")},{xtype:"syno_checkbox",name:"auto_repair_enable",itemId:"auto_repair_enable",boxLabel:_T("storage_pool","auto_repair_enable")}),i.getConfigApis.push(i.getAutoRepairConfigApi)),s.items.length>0&&n.push(s),t={title:_T("volume","configuration"),items:n,useDefaultBtn:!1,itemId:"config_panel"},this.callParent([Ext.apply(t,e)]),this.on("initData",(()=>{this.onActivate()}),this,{single:!0})},getField:function(e){return this.getForm().findField(e)},speedChecker:function(){return this.getField("speed_min").getValue()>=this.getField("speed_max").getValue()?_T("data_scrubbing","resync_speed_setting_warning"):!(1e4<this.getField("speed_min").getValue()||1e4<this.getField("speed_max").getValue())||_T("data_scrubbing","resync_speed_range_warning")},getConfigCallBack:function(e,t,i){var s,a=this;if(a.ownerCt.clearStatusBusy(),e&&!t.has_fail){for(s=0;s<t.result.length;s++){var n=t.result[s];SYNO.ux.Utils.checkApiConsistency(n,a.getFastRepairConfigApi)&&"yes"===_D("support_fast_repair","no")?a.getForm().setValues({fast_repair_enable:n.data.is_fast_repair_enable}):"yes"===_D("support_auto_repair","no")&&SYNO.ux.Utils.checkApiConsistency(n,a.getAutoRepairConfigApi)?a.getForm().setValues({auto_repair_enable:n.data.enable}):SYNO.ux.Utils.checkApiConsistency(n,a.getResyncSpeedApi)&&a.getForm().setValues({speed_option:n.data.speed_option,speed_max:n.data.speed_max,speed_min:n.data.speed_min})}a.updateFleXcroll()}else a.ownerCt.getMsgBox().alert("",_T("common","commfail"))},onActivate:function(){var e=this;this.ownerCt.setStatusBusy(),SYNO.API.Request({compound:{params:e.getConfigApis},callback:e.getConfigCallBack,scope:e})},getResyncSpeedParams:function(){var e=this.getForm().getValues().speed_option,t={speed_option:e};return"resync_manual"===e&&(t.speed_max=this.getField("speed_max").getValue(),t.speed_min=this.getField("speed_min").getValue()),t},getAutoRepairParams:function(){return{enable:this.getField("auto_repair_enable").getValue()}},applyForm:function(){var e="yes"===_D("support_auto_repair","no");if(this.getForm().isValid())if(this.getForm().isDirty()){var t=[{api:"SYNO.Storage.CGI.Storage",method:"set_resync_speed",version:1,params:this.getResyncSpeedParams()}];if("yes"===_D("support_fast_repair","no")){var i=this.getField("fast_repair_enable").getValue();t.push({api:"SYNO.Storage.CGI.Storage",version:1,method:"set_fast_repair_config",params:{is_fast_repair_enable:i,is_auto_scrubbing_enable:i}})}e&&t.push({api:"SYNO.Storage.CGI.Storage",version:1,method:"set_auto_repair_config",params:this.getAutoRepairParams()});var s=function(){this.ownerCt.setStatusBusy(),SYNO.API.Request({compound:{params:t},callback:function(e,t,i,s){this.ownerCt.clearStatusBusy(),e&&!t.has_fail?this.ownerCt.forceClose():this.ownerCt.getMsgBox().alert("",_T("common","commfail"))},scope:this})},a=this.getField("auto_repair_enable");e&&a.isDirty()&&a.getValue()?this.ownerCt.getMsgBox().confirm(this.title,_T("storage_pool","auto_repair_confirm_desc"),(function(e){"yes"===e?s.call(this):a.setValue(!1)}),this,{yes:{text:_T("common","save")},no:{text:_T("common","cancel")}}):s.call(this)}else this.ownerCt.forceClose();else this.ownerCt.setStatusError({text:_T("common","forminvalid"),clear:!0})}});