forked from morrning/hesabixCore
26 lines
17 KiB
JavaScript
26 lines
17 KiB
JavaScript
import{_ as N,a as y}from"./main-9b36f05f.js";import{r as d,a as u,o as $,s as x,b as s,w as a,q,d as r,t as i,e as l,c as X,A as B,v as O}from"./vendor-adef9cb4.js";const P={name:"UpdateSoftware",setup(){const t=d(!1),o=d(!1),n=d(!1),e=d(!1),c=d(!1),p=d(""),f=d(""),w=d("primary"),h=d("idle"),b=d(null),v=d(null),C=d("unknown"),_=d("unknown"),T=d({osName:"unknown",osRelease:"unknown",osVersion:"unknown",osMachine:"unknown",cpuInfo:"unknown",distroName:"unknown",distroVersion:"unknown",webServer:"unknown",dbName:"unknown",dbVersion:"unknown"}),S=d(!1),k=d(""),m=d(""),M=d(""),V=d("prod"),D=d("prod"),I=d(["dev","prod"]),E=d(0),U=d(""),L=d(!1),R=d(!1),g=d(!1);return{isUpdating:t,isClearingCache:o,isChangingEnv:n,showOutput:e,showEnvDialog:c,output:p,buttonText:f,buttonColor:w,status:h,updateUuid:b,outputPre:v,currentCommit:C,targetCommit:_,systemInfo:T,showResultDialog:S,dialogTitle:k,dialogMessage:m,dialogColor:M,selectedEnv:V,tempSelectedEnv:D,envOptions:I,activeTab:E,systemLogs:U,isLoadingLogs:L,isClearingLogs:R,isPolling:g}},computed:{formattedLogs(){return this.systemLogs?this.systemLogs.split(`
|
|
`).map(o=>{const n=o.match(/\[([^\]]+)\] (\w+)\.(\w+): (.+?) (\[.*\]) (\[.*\])/);if(!n)return`<span class="log-line">${o}</span>`;const[e,c,p,f,w,h,b]=n;let v="";switch(f.toUpperCase()){case"INFO":v="log-info";break;case"DEBUG":v="log-debug";break;case"ERROR":v="log-error";break;default:v="log-default"}return`
|
|
<span class="log-line" dir="ltr">
|
|
<span class="log-timestamp">[${c}]</span>
|
|
<span class="log-channel">${p}</span>.<span class="${v}">${f}</span>:
|
|
<span class="log-message">${w}</span>
|
|
<span class="log-context">${h}</span>
|
|
<span class="log-extra">${b}</span>
|
|
</span>
|
|
`}).join("<br>"):""}},methods:{async startUpdate(){var t,o;if(!(this.isUpdating||this.status==="running")){this.isUpdating=!0,this.buttonText=this.$t("updateSoftware.updatingButton"),this.buttonColor="primary",this.showOutput=!0,this.output=this.$t("updateSoftware.startingMessage")+`
|
|
`;try{const n=await y.post("/api/admin/updatecore/run",{},{headers:{"X-Requested-With":"XMLHttpRequest"}});n.data.status==="started"?(this.updateUuid=n.data.uuid,this.output+=this.$t("updateSoftware.startedMessage")+`
|
|
`,this.startLogStream()):n.data.status==="error"&&(this.output+=`
|
|
`+this.$t("updateSoftware.errorPrefix")+n.data.message,this.buttonColor="error",this.buttonText=this.$t("updateSoftware.failedButton"),this.isUpdating=!1,this.showResultDialog=!0,this.dialogTitle=this.$t("updateSoftware.dialogErrorTitle"),this.dialogMessage=this.$t("updateSoftware.dialogErrorSimpleMessage"),this.dialogColor="error")}catch(n){this.output+=`
|
|
`+this.$t("updateSoftware.errorPrefix")+(((o=(t=n.response)==null?void 0:t.data)==null?void 0:o.message)||n.message),this.buttonColor="error",this.buttonText=this.$t("updateSoftware.failedButton"),this.isUpdating=!1,this.showResultDialog=!0,this.dialogTitle=this.$t("updateSoftware.dialogErrorTitle"),this.dialogMessage=this.$t("updateSoftware.dialogErrorSimpleMessage"),this.dialogColor="error"}}},async startLogStream(){let o=!0;this.isUpdating=!0;const n=async()=>{if(o)try{const c=(await y.get("/api/admin/updatecore/stream",{params:{uuid:this.updateUuid}})).data;if(typeof c=="string"&&c.startsWith("data: "))try{const p=c.substring(c.indexOf("{")),f=JSON.parse(p);if(f.output&&f.output!==this.output){const w=f.output.split(`
|
|
`).filter(h=>h.trim()).map(h=>h.includes("INFO")?`<span class="log-info">${h}</span>`:h.includes("DEBUG")?`<span class="log-debug">${h}</span>`:h.includes("ERROR")?`<span class="log-error">${h}</span>`:h).join(`
|
|
`);this.output=w}this.status=f.status}catch(p){console.error("خطا در پردازش پاسخ:",p)}if(await q(),this.$refs.outputPre&&(this.$refs.outputPre.scrollTop=this.$refs.outputPre.scrollHeight),this.status==="success"||this.status==="error"){o=!1,this.isUpdating=!1,this.buttonText=this.status==="success"?this.$t("updateSoftware.completedButton"):this.$t("updateSoftware.failedButton"),this.buttonColor=this.status==="success"?"success":"error",this.showResultDialog=!0,this.dialogTitle=this.status==="success"?this.$t("updateSoftware.dialogSuccessTitle"):this.$t("updateSoftware.dialogErrorTitle"),this.dialogMessage=this.status==="success"?this.$t("updateSoftware.successMessage"):this.$t("updateSoftware.dialogErrorSimpleMessage"),this.dialogColor=this.status==="success"?"success":"error";return}setTimeout(n,1e3)}catch(e){console.error("خطا در دریافت جریان داده:",e),o=!1,this.output+=`
|
|
`+this.$t("updateSoftware.streamError"),this.isUpdating=!1,this.buttonColor="error",this.buttonText=this.$t("updateSoftware.failedButton")}};n(),this.isPolling=o},async clearCache(){var t,o;this.isClearingCache=!0,this.showOutput=!0,this.output=this.$t("updateSoftware.clearingCacheMessage")+`
|
|
`;try{const n=await y.post("/api/admin/updatecore/clear-cache",{},{headers:{"X-Requested-With":"XMLHttpRequest"}});this.output+=n.data.output||this.$t("updateSoftware.cacheClearedMessage")+`
|
|
`,this.showResultDialog=!0,this.dialogTitle=this.$t("updateSoftware.dialogSuccessTitle"),this.dialogMessage=this.$t("updateSoftware.cacheClearedMessage"),this.dialogColor="success"}catch(n){this.output+=this.$t("updateSoftware.errorPrefix")+(((o=(t=n.response)==null?void 0:t.data)==null?void 0:o.message)||n.message)+`
|
|
`,this.showResultDialog=!0,this.dialogTitle=this.$t("updateSoftware.dialogErrorTitle"),this.dialogMessage=this.$t("updateSoftware.dialogErrorSimpleMessage"),this.dialogColor="error"}finally{this.isClearingCache=!1}},openEnvDialog(){this.tempSelectedEnv=this.selectedEnv,this.showEnvDialog=!0},async changeEnvironment(){var t,o;if(this.isChangingEnv=!0,this.showOutput=!0,this.output=`در حال تغییر حالت سیستم...
|
|
`,!this.tempSelectedEnv||!["dev","prod"].includes(this.tempSelectedEnv)){this.output+=`خطا: لطفاً یک حالت معتبر (dev یا prod) انتخاب کنید
|
|
`,this.isChangingEnv=!1,this.showResultDialog=!0,this.dialogTitle="خطا",this.dialogMessage="لطفاً یک حالت معتبر انتخاب کنید",this.dialogColor="error";return}try{const n=await y.post("/api/admin/updatecore/change-env",{env:this.tempSelectedEnv},{headers:{"X-Requested-With":"XMLHttpRequest"}});this.output+=n.data.output||n.data.message+`
|
|
`,this.selectedEnv=this.tempSelectedEnv,this.showResultDialog=!0,this.dialogTitle="موفقیت",this.dialogMessage=n.data.message,this.dialogColor="success"}catch(n){this.output+="خطا: "+(((o=(t=n.response)==null?void 0:t.data)==null?void 0:o.message)||n.message)+`
|
|
`,this.showResultDialog=!0,this.dialogTitle="خطا",this.dialogMessage="خطایی در تغییر حالت رخ داد",this.dialogColor="error"}finally{this.isChangingEnv=!1,this.showEnvDialog=!1}},async fetchCommits(){try{const t=await y.get("/api/admin/updatecore/commits",{headers:{"X-Requested-With":"XMLHttpRequest"}});this.currentCommit=t.data.currentCommit||"unknown",this.targetCommit=t.data.targetCommit||"unknown"}catch(t){console.error("Failed to fetch commits:",t),this.currentCommit="خطا در دریافت",this.targetCommit="خطا در دریافت"}},async fetchSystemInfo(){try{const t=await y.get("/api/admin/updatecore/system-info",{headers:{"X-Requested-With":"XMLHttpRequest"}});this.systemInfo={osName:t.data.osName||"unknown",osRelease:t.data.osRelease||"unknown",osVersion:t.data.osVersion||"unknown",osMachine:t.data.osMachine||"unknown",cpuInfo:t.data.cpuInfo||"unknown",distroName:t.data.distroName||"unknown",distroVersion:t.data.distroVersion||"unknown",webServer:t.data.webServer||"unknown",dbName:t.data.dbName||"unknown",dbVersion:t.data.dbVersion||"unknown"}}catch(t){console.error("Failed to fetch system info:",t),this.systemInfo={osName:"خطا در دریافت",osRelease:"خطا در دریافت",osVersion:"خطا در دریافت",osMachine:"خطا در دریافت",cpuInfo:"خطا در دریافت",distroName:"خطا در دریافت",distroVersion:"خطا در دریافت",webServer:"خطا در دریافت",dbName:"خطا در دریافت",dbVersion:"خطا در دریافت"}}},async fetchCurrentEnv(){try{const t=await y.get("/api/admin/updatecore/current-env",{headers:{"X-Requested-With":"XMLHttpRequest"}});this.selectedEnv=t.data.env,this.tempSelectedEnv=t.data.env}catch(t){console.error("Failed to fetch current env:",t)}},copyToClipboard(){navigator.clipboard.writeText(this.output).then(()=>{alert(this.$t("updateSoftware.copySuccess"))}).catch(t=>{console.error("Failed to copy: ",t),alert(this.$t("updateSoftware.copyFailed"))})},async refreshLogs(){var t,o;this.isLoadingLogs=!0;try{const n=await y.get("/api/admin/updatecore/system-logs",{headers:{"X-Requested-With":"XMLHttpRequest"}});this.systemLogs=n.data.logs||n.data.message}catch(n){console.error("Failed to fetch system logs:",n),this.systemLogs=((o=(t=n.response)==null?void 0:t.data)==null?void 0:o.message)||"خطا در دریافت لاگهای سیستم"}finally{this.isLoadingLogs=!1}},async clearLogs(){var t,o,n,e;this.isClearingLogs=!0;try{const c=await y.post("/api/admin/updatecore/clear-logs",{},{headers:{"X-Requested-With":"XMLHttpRequest"}});if(c.data.status==="success")this.systemLogs="لاگها پاک شدند",this.showResultDialog=!0,this.dialogTitle="موفقیت",this.dialogMessage=c.data.message,this.dialogColor="success";else throw new Error(c.data.message)}catch(c){console.error("Failed to clear logs:",c),this.systemLogs=((o=(t=c.response)==null?void 0:t.data)==null?void 0:o.message)||"خطا در پاک کردن لاگها",this.showResultDialog=!0,this.dialogTitle="خطا",this.dialogMessage=((e=(n=c.response)==null?void 0:n.data)==null?void 0:e.message)||"خطایی رخ داد",this.dialogColor="error"}finally{this.isClearingLogs=!1}},copyLogsToClipboard(){const t=this.systemLogs.replace(/\[\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d+\+\d{2}:\d{2}\]/g,`
|
|
[$&]`).replace(/\s+\[\]/g," []").trim();navigator.clipboard.writeText(t).then(()=>{this.showResultDialog=!0,this.dialogTitle=this.$t("updateSoftware.dialogSuccessTitle"),this.dialogMessage=this.$t("updateSoftware.copySuccess"),this.dialogColor="success"}).catch(o=>{console.error("Failed to copy logs:",o),this.showResultDialog=!0,this.dialogTitle=this.$t("updateSoftware.dialogErrorTitle"),this.dialogMessage=this.$t("updateSoftware.copyFailed"),this.dialogColor="error"})}},mounted(){this.fetchCommits(),this.fetchSystemInfo(),this.fetchCurrentEnv(),this.buttonText=this.$t("updateSoftware.startButton"),this.refreshLogs()},beforeUnmount(){this.isPolling=!1}},F={class:"font-weight-bold primary--text"},H={class:"font-weight-bold primary--text"},W={class:"font-weight-bold primary--text"},z={class:"font-weight-bold primary--text"},j={class:"font-weight-bold primary--text"},G={class:"font-weight-bold primary--text"},A={class:"font-weight-bold primary--text"},J={class:"font-weight-bold primary--text"},K={class:"font-weight-bold primary--text"},Q={class:"font-weight-bold primary--text"},Y={class:"font-weight-bold primary--text"},Z={class:"font-weight-bold primary--text"},tt={class:"font-weight-bold primary--text"},et={class:"system-logs-container"},st=["innerHTML"];function ot(t,o,n,e,c,p){const f=u("v-toolbar-title"),w=u("v-toolbar"),h=u("v-tab"),b=u("v-tabs"),v=u("v-divider"),C=u("v-card-text"),_=u("v-card"),T=u("v-window-item"),S=u("v-spacer"),k=u("v-icon"),m=u("v-btn"),M=u("v-btn-group"),V=u("v-col"),D=u("v-row"),I=u("v-window"),E=u("v-card-title"),U=u("v-select"),L=u("v-card-actions"),R=u("v-dialog");return $(),x("div",null,[s(w,{flat:""},{default:a(()=>[s(f,null,{default:a(()=>[r(i(t.$t("updateSoftware.title")),1)]),_:1})]),_:1}),s(_,{flat:""},{default:a(()=>[s(b,{modelValue:e.activeTab,"onUpdate:modelValue":o[0]||(o[0]=g=>e.activeTab=g)},{default:a(()=>[s(h,null,{default:a(()=>[r(i(t.$t("updateSoftware.infoTab")),1)]),_:1}),s(h,null,{default:a(()=>[r(i(t.$t("updateSoftware.logsTab")),1)]),_:1}),s(h,null,{default:a(()=>[r(i(t.$t("updateSoftware.updateTab")),1)]),_:1})]),_:1},8,["modelValue"]),s(I,{modelValue:e.activeTab,"onUpdate:modelValue":o[1]||(o[1]=g=>e.activeTab=g)},{default:a(()=>[s(T,null,{default:a(()=>[s(_,{flat:"",class:"mt-1"},{default:a(()=>[s(C,null,{default:a(()=>[l("p",null,i(t.$t("updateSoftware.infoDescription")),1),l("p",null,i(t.$t("updateSoftware.safetyTips")),1),l("p",null,[l("span",F,i(t.$t("updateSoftware.currentCommit"))+":",1),r(" "+i(e.currentCommit),1)]),l("p",null,[l("span",H,i(t.$t("updateSoftware.targetCommit"))+":",1),r(" "+i(e.targetCommit),1)]),s(v,{class:"my-2"}),l("p",null,i(t.$t("updateSoftware.systemInfoTitle")),1),l("p",null,[l("span",W,i(t.$t("updateSoftware.osName"))+":",1),r(" "+i(e.systemInfo.osName),1)]),l("p",null,[l("span",z,i(t.$t("updateSoftware.osRelease"))+":",1),r(" "+i(e.systemInfo.osRelease),1)]),l("p",null,[l("span",j,i(t.$t("updateSoftware.osVersion"))+":",1),r(" "+i(e.systemInfo.osVersion),1)]),l("p",null,[l("span",G,i(t.$t("updateSoftware.osMachine"))+":",1),r(" "+i(e.systemInfo.osMachine),1)]),l("p",null,[l("span",A,i(t.$t("updateSoftware.cpuInfo"))+":",1),r(" "+i(e.systemInfo.cpuInfo),1)]),l("p",null,[l("span",J,i(t.$t("updateSoftware.distroName"))+":",1),r(" "+i(e.systemInfo.distroName),1)]),l("p",null,[l("span",K,i(t.$t("updateSoftware.distroVersion"))+":",1),r(" "+i(e.systemInfo.distroVersion),1)]),l("p",null,[l("span",Q,i(t.$t("updateSoftware.webServer"))+":",1),r(" "+i(e.systemInfo.webServer),1)]),l("p",null,[l("span",Y,i(t.$t("updateSoftware.dbName"))+":",1),r(" "+i(e.systemInfo.dbName),1)]),l("p",null,[l("span",Z,i(t.$t("updateSoftware.dbVersion"))+":",1),r(" "+i(e.systemInfo.dbVersion),1)]),l("p",null,[l("span",tt,i(t.$t("updateSoftware.currentEnv"))+":",1),r(" "+i(e.selectedEnv),1)])]),_:1})]),_:1})]),_:1}),s(T,null,{default:a(()=>[s(_,{flat:""},{default:a(()=>[s(C,null,{default:a(()=>[l("div",et,[s(w,{flat:"",color:"grey-darken-4",density:"compact"},{default:a(()=>[s(S),s(m,{icon:"",size:"small",onClick:p.copyLogsToClipboard,color:"grey-lighten-1"},{default:a(()=>[s(k,null,{default:a(()=>o[7]||(o[7]=[r("mdi-content-copy")])),_:1})]),_:1},8,["onClick"])]),_:1}),l("pre",{class:"system-logs",innerHTML:p.formattedLogs},null,8,st)]),s(m,{color:"primary",onClick:p.refreshLogs,loading:e.isLoadingLogs,class:"mt-2 mr-2",size:"small"},{default:a(()=>[r(i(t.$t("updateSoftware.refreshLogs")),1)]),_:1},8,["onClick","loading"]),s(m,{color:"error",onClick:p.clearLogs,loading:e.isClearingLogs,class:"mt-2",size:"small"},{default:a(()=>[r(i(t.$t("updateSoftware.clearLogs")),1)]),_:1},8,["onClick","loading"])]),_:1})]),_:1})]),_:1}),s(T,null,{default:a(()=>[s(_,{flat:""},{default:a(()=>[s(C,null,{default:a(()=>[s(D,{justify:"end",class:"mb-4"},{default:a(()=>[s(V,{cols:"auto"},{default:a(()=>[s(M,{size:"small"},{default:a(()=>[s(m,{color:e.buttonColor,loading:e.isUpdating,disabled:e.isUpdating||e.status==="running",onClick:p.startUpdate},{default:a(()=>[r(i(e.buttonText),1)]),_:1},8,["color","loading","disabled","onClick"]),s(m,{color:"warning",loading:e.isClearingCache,disabled:e.isUpdating||e.isClearingCache,onClick:p.clearCache},{default:a(()=>[r(i(t.$t("updateSoftware.clearCacheButton")),1)]),_:1},8,["loading","disabled","onClick"]),s(m,{color:"info",disabled:e.isUpdating||e.isChangingEnv,onClick:p.openEnvDialog},{default:a(()=>[r(i(t.$t("updateSoftware.changeEnvButton")),1)]),_:1},8,["disabled","onClick"])]),_:1})]),_:1})]),_:1}),e.showOutput||e.output.trim()!==""?($(),X(_,{key:0,class:"mt-1"},{default:a(()=>[s(w,{flat:"",color:"white",density:"compact"},{default:a(()=>[s(f,null,{default:a(()=>[r(i(t.$t("updateSoftware.progressTitle")),1)]),_:1}),s(S),s(m,{icon:"",size:"small",onClick:p.copyToClipboard},{default:a(()=>[s(k,null,{default:a(()=>o[8]||(o[8]=[r("mdi-content-copy")])),_:1})]),_:1},8,["onClick"])]),_:1}),s(C,null,{default:a(()=>[l("pre",{class:"output-pre",ref:"outputPre"},i(e.output),513)]),_:1})]),_:1})):B("",!0)]),_:1})]),_:1})]),_:1})]),_:1},8,["modelValue"])]),_:1}),s(R,{modelValue:e.showEnvDialog,"onUpdate:modelValue":o[4]||(o[4]=g=>e.showEnvDialog=g),"max-width":"400"},{default:a(()=>[s(_,null,{default:a(()=>[s(E,{class:"info--text"},{default:a(()=>o[9]||(o[9]=[r("تغییر حالت سیستم")])),_:1}),s(C,null,{default:a(()=>[s(U,{modelValue:e.tempSelectedEnv,"onUpdate:modelValue":o[2]||(o[2]=g=>e.tempSelectedEnv=g),items:e.envOptions,label:"حالت سیستم",outlined:"",dense:""},null,8,["modelValue","items"])]),_:1}),s(L,null,{default:a(()=>[s(S),s(m,{color:"grey",text:"",onClick:o[3]||(o[3]=g=>e.showEnvDialog=!1)},{default:a(()=>o[10]||(o[10]=[r("لغو")])),_:1}),s(m,{color:"info",loading:e.isChangingEnv,onClick:p.changeEnvironment},{default:a(()=>o[11]||(o[11]=[r("تأیید")])),_:1},8,["loading","onClick"])]),_:1})]),_:1})]),_:1},8,["modelValue"]),s(R,{modelValue:e.showResultDialog,"onUpdate:modelValue":o[6]||(o[6]=g=>e.showResultDialog=g),"max-width":"400"},{default:a(()=>[s(_,null,{default:a(()=>[s(E,{class:O(e.dialogColor+"--text")},{default:a(()=>[r(i(e.dialogTitle),1)]),_:1},8,["class"]),s(C,null,{default:a(()=>[r(i(e.dialogMessage),1)]),_:1}),s(L,null,{default:a(()=>[s(S),s(m,{color:"primary",text:"",onClick:o[5]||(o[5]=g=>e.showResultDialog=!1)},{default:a(()=>[r(i(t.$t("updateSoftware.closeDialog")),1)]),_:1})]),_:1})]),_:1})]),_:1},8,["modelValue"])])}const nt=N(P,[["render",ot],["__scopeId","data-v-01f79f16"]]);export{nt as default};
|