Reviewed-on: https://git.openi.org.cn/OpenI/aiforge/pulls/3090 Reviewed-by: chenshihai <chenshh@pcl.ac.cn>tags/v1.22.11.1^2
| @@ -1228,6 +1228,9 @@ modelarts.infer_job.select_model = Select Model | |||
| modelarts.infer_job.boot_file_helper=The startup file is the entry file for your program execution and must end in.py.Such as inference.py, main.py, example/inference.py, case/main.py. | |||
| modelarts.infer_job.tooltip = The model has been deleted and cannot be viewed. | |||
| modelarts.download_log=Download log file | |||
| modelarts.log_file = Log file | |||
| modelarts.fullscreen_log_file = View in full screen | |||
| modelarts.exit_full_screen = Exit fullscreen | |||
| modelarts.no_node_right = The value of 'Amount of Compute Node' is wrong, you have no right to use the current value of 'Amount of Compute Node'. | |||
| @@ -1242,6 +1242,9 @@ modelarts.infer_job.select_model = 选择模型 | |||
| modelarts.infer_job.boot_file_helper=启动文件是您程序执行的入口文件,必须是以.py结尾的文件。比如inference.py、main.py、example/inference.py、case/main.py。 | |||
| modelarts.infer_job.tooltip = 该模型已删除,无法查看。 | |||
| modelarts.download_log=下载日志文件 | |||
| modelarts.log_file=日志文件 | |||
| modelarts.fullscreen_log_file=全屏查看 | |||
| modelarts.exit_full_screen=退出全屏 | |||
| modelarts.no_node_right = 计算节点数的值配置错误,您没有权限使用当前配置的计算节点数。 | |||
| @@ -578,6 +578,7 @@ func CloudbrainGetLog(ctx *context.APIContext) { | |||
| endLine += 1 | |||
| } | |||
| } | |||
| result = getLogFromModelDir(job.JobName, startLine, endLine, resultPath) | |||
| if result == nil { | |||
| log.Error("GetJobLog failed: %v", err, ctx.Data["MsgID"]) | |||
| @@ -724,7 +725,6 @@ func getLogFromModelDir(jobName string, startLine int, endLine int, resultPath s | |||
| line, error := r.ReadString('\n') | |||
| if error == io.EOF { | |||
| if i >= startLine { | |||
| fileEndLine = i | |||
| re = re + line | |||
| count++ | |||
| } | |||
| @@ -0,0 +1,40 @@ | |||
| <div> | |||
| <div class="ui modal max-full-log{{.VersionName}} container" style="height: 90%;margin: 3rem auto;"> | |||
| <div class="file-info" style="padding: 2rem;justify-content: space-between;"> | |||
| <div id="log-file-title" style="font-size: 16px;font-weight:600"></div> | |||
| <div> | |||
| <div class="file-info close-log-dialog" data-version="{{.VersionName}}" style="margin-left: 1rem;color:#0366d6;cursor: pointer;"> | |||
| <i class="ri-fullscreen-exit-fill" style="font-size: 16px;"></i> | |||
| <span id="log-file-exit" style="margin-left: 0.3rem;font-size: 12px;"></span> | |||
| </div> | |||
| </div> | |||
| </div> | |||
| <div style="margin: 0 2rem;border: 1px solid #e8e8e8;height: 88%;position: relative;"> | |||
| <span> | |||
| <a style="position: absolute; right: -32px;cursor: pointer;" | |||
| class="log_top-max" data-version="{{.VersionName}}" data-max="-max"><i class="icon-to-top"></i></a> | |||
| </span> | |||
| <span class="log-info-{{.VersionName}}"> | |||
| <a style="position: absolute; bottom: 10px;right: -32px;cursor: pointer;" | |||
| class="log_bottom-max" data-version="{{.VersionName}}" data-max="-max"><i | |||
| class="icon-to-bottom"></i></a> | |||
| </span> | |||
| <div class="ui message message-max{{.VersionName}}" style="display: none;"> | |||
| <div id="header"></div> | |||
| </div> | |||
| <div class="log-scroll-max" id="log-max{{.VersionName}}" data-version="{{.VersionName}}" style="overflow: auto;max-height: 100%;"> | |||
| <div class="ui inverted active dimmer"> | |||
| <div class="ui loader"></div> | |||
| </div> | |||
| <pre id="log_file-max{{.VersionName}}"></pre> | |||
| </div> | |||
| </div> | |||
| </div> | |||
| </div> | |||
| <script> | |||
| $(".ui.modal .close-log-dialog").click(function () { | |||
| let version_name = $(this).data("version"); | |||
| $(`.ui.modal.max-full-log${version_name}`).modal("hide"); | |||
| }); | |||
| </script> | |||
| @@ -524,14 +524,17 @@ | |||
| </div> | |||
| </div> | |||
| <div class="ui tab" data-tab="second{{$k}}"> | |||
| <div> | |||
| <div class="file-info"> | |||
| <a id="{{.VersionName}}-log-down" | |||
| class='{{if $.canDownload}}ti-download-file{{else}}disabled{{end}}' | |||
| class='{{if $.canDownload}}ti-download-file{{else}}disabled{{end}} file-info' | |||
| href="/api/v1/repos/{{$.RepoRelPath}}/cloudbrain/{{.ID}}/download_log_file"> | |||
| <i class="ri-download-cloud-2-line"></i> | |||
| <span style="margin-left: 0.3rem;">{{$.i18n.Tr "repo.modelarts.download_log"}}</span> | |||
| </a> | |||
| <div class="file-info full-log-dialog" data-version="{{.VersionName}}" data-log="{{$.i18n.Tr "repo.modelarts.log_file"}}" data-exit="{{$.i18n.Tr "repo.modelarts.exit_full_screen"}}" style="margin-left: 1rem;color:#0366d6;cursor: pointer;"> | |||
| <i class="ri-aspect-ratio-line"></i> | |||
| <span style="margin-left: 0.3rem;">{{$.i18n.Tr "repo.modelarts.download_log"}}</span> | |||
| </div> | |||
| </div> | |||
| <div | |||
| style="position: relative;border: 1px solid rgba(0,0,0,.2);padding: 0 10px;margin-top: 10px;"> | |||
| @@ -549,12 +552,16 @@ | |||
| </div> | |||
| <div class="ui attached log log-scroll" id="log{{.VersionName}}" data-version="{{.VersionName}}" | |||
| style="height: 300px !important; overflow: auto;"> | |||
| <div class="ui inverted active dimmer"> | |||
| <div class="ui loader"></div> | |||
| </div> | |||
| <input type="hidden" name="end_line" value> | |||
| <input type="hidden" name="start_line" value> | |||
| <pre id="log_file{{.VersionName}}"></pre> | |||
| <div class="ui inverted active dimmer"> | |||
| <div class="ui loader"></div> | |||
| </div> | |||
| <input type="hidden" name="end_line" value> | |||
| <input type="hidden" name="end_line-max" value> | |||
| <input type="hidden" name="start_line-max" value> | |||
| <input type="hidden" name="start_line-max-copy" value> | |||
| <input type="hidden" name="start_line" value> | |||
| <input type="hidden" name="init_log" value> | |||
| <pre id="log_file{{.VersionName}}"></pre> | |||
| </div> | |||
| </div> | |||
| @@ -565,6 +572,7 @@ | |||
| </div> | |||
| </div> | |||
| </div> | |||
| {{template "custom/max_log" .}} | |||
| {{end}} {{template "base/paginate" .}} | |||
| </div> | |||
| <!-- 确认模态框 --> | |||
| @@ -535,14 +535,17 @@ | |||
| </div> | |||
| <div class="ui tab" data-tab="third"> | |||
| <div> | |||
| <div class="file-info"> | |||
| <a id="{{.VersionName}}-log-down" | |||
| class='{{if $.canDownload}}ti-download-file{{else}}disabled{{end}}' | |||
| class='{{if $.canDownload}}ti-download-file{{else}}disabled{{end}} file-info' | |||
| href="/api/v1/repos/{{$.RepoRelPath}}/cloudbrain/{{.ID}}/download_log_file"> | |||
| <i class="ri-download-cloud-2-line"></i> | |||
| <span style="margin-left: 0.3rem;">{{$.i18n.Tr "repo.modelarts.download_log"}}</span> | |||
| </a> | |||
| <div class="file-info full-log-dialog" data-version="{{.VersionName}}" data-log="{{$.i18n.Tr "repo.modelarts.log_file"}}" data-exit="{{$.i18n.Tr "repo.modelarts.exit_full_screen"}}" style="margin-left: 1rem;color:#0366d6;cursor: pointer;"> | |||
| <i class="ri-aspect-ratio-line"></i> | |||
| <span style="margin-left: 0.3rem;">{{$.i18n.Tr "repo.modelarts.fullscreen_log_file"}}</span> | |||
| </div> | |||
| </div> | |||
| <div | |||
| style="position: relative;border: 1px solid rgba(0,0,0,.2);padding: 0 10px;margin-top: 10px;"> | |||
| @@ -559,13 +562,17 @@ | |||
| <div id="header"></div> | |||
| </div> | |||
| <div class="ui attached log log-scroll" id="log{{.VersionName}}" data-version="{{.VersionName}}" | |||
| style="height: 300px !important; overflow: auto;"> | |||
| <div class="ui inverted active dimmer"> | |||
| style="height: 300px !important; overflow: auto;"> | |||
| <div class="ui inverted active dimmer"> | |||
| <div class="ui loader"></div> | |||
| </div> | |||
| <input type="hidden" name="end_line" value> | |||
| <input type="hidden" name="start_line" value> | |||
| <pre id="log_file{{.VersionName}}"></pre> | |||
| </div> | |||
| <input type="hidden" name="end_line" value> | |||
| <input type="hidden" name="end_line-max" value> | |||
| <input type="hidden" name="start_line-max" value> | |||
| <input type="hidden" name="start_line-max-copy" value> | |||
| <input type="hidden" name="start_line" value> <input type="hidden" name="start_line" value> | |||
| <input type="hidden" name="init_log" value> | |||
| <pre id="log_file{{.VersionName}}"></pre> | |||
| </div> | |||
| </div> | |||
| @@ -589,7 +596,7 @@ | |||
| </div> | |||
| </div> | |||
| </div> | |||
| {{template "custom/max_log" .}} | |||
| {{end}} | |||
| </div> | |||
| @@ -524,14 +524,17 @@ | |||
| </div> | |||
| <div class="ui tab" data-tab="third{{$k}}"> | |||
| <div> | |||
| <div class="file-info"> | |||
| <a id="{{.VersionName}}-log-down" | |||
| class='{{if $.canDownload}}ti-download-file{{else}}disabled{{end}}' | |||
| class='{{if $.canDownload}}ti-download-file{{else}}disabled{{end}} file-info' | |||
| href="/api/v1/repos/{{$.RepoRelPath}}/cloudbrain/{{.ID}}/download_log_file"> | |||
| <i class="ri-download-cloud-2-line"></i> | |||
| <span style="margin-left: 0.3rem;">{{$.i18n.Tr "repo.modelarts.download_log"}}</span> | |||
| </a> | |||
| <div class="file-info full-log-dialog" data-version="{{.VersionName}}" data-log="{{$.i18n.Tr "repo.modelarts.log_file"}}" data-exit="{{$.i18n.Tr "repo.modelarts.exit_full_screen"}}" style="margin-left: 1rem;color:#0366d6;cursor: pointer;"> | |||
| <i class="ri-aspect-ratio-line"></i> | |||
| <span style="margin-left: 0.3rem;">{{$.i18n.Tr "repo.modelarts.fullscreen_log_file"}}</span> | |||
| </div> | |||
| </div> | |||
| <div style="position: relative;border: 1px solid rgba(0,0,0,.2);padding: 0 10px;margin-top: 10px;"> | |||
| <span> | |||
| @@ -552,7 +555,11 @@ | |||
| <div class="ui loader"></div> | |||
| </div> | |||
| <input type="hidden" name="end_line" value> | |||
| <input type="hidden" name="start_line" value> | |||
| <input type="hidden" name="end_line-max" value> | |||
| <input type="hidden" name="start_line-max" value> | |||
| <input type="hidden" name="start_line-max-copy" value> | |||
| <input type="hidden" name="start_line" value> <input type="hidden" name="start_line" value> | |||
| <input type="hidden" name="init_log" value> | |||
| <pre id="log_file{{.VersionName}}"></pre> | |||
| </div> | |||
| @@ -581,6 +588,7 @@ | |||
| </div> | |||
| </div> | |||
| </div> | |||
| {{template "custom/max_log" .}} | |||
| {{end}} {{template "base/paginate" .}} | |||
| </div> | |||
| <!-- 确认模态框 --> | |||
| @@ -520,14 +520,17 @@ | |||
| </div> | |||
| </div> | |||
| <div class="ui tab" data-tab="second{{$k}}"> | |||
| <div> | |||
| <div class="file-info"> | |||
| <a id="{{.VersionName}}-log-down" | |||
| class='{{if $.canDownload}}ti-download-file{{else}}disabled{{end}}' | |||
| class='{{if $.canDownload}}ti-download-file{{else}}disabled{{end}} file-info' | |||
| href="/api/v1/repos/{{$.RepoRelPath}}/grampus/train-job/{{.JobID}}/download_log"> | |||
| <i class="ri-download-cloud-2-line"></i> | |||
| <span style="margin-left: 0.3rem;">{{$.i18n.Tr "repo.modelarts.download_log"}}</span> | |||
| </a> | |||
| <div class="file-info full-log-dialog" data-log-type="c2Net" data-version="{{.VersionName}}" data-log="{{$.i18n.Tr "repo.modelarts.log_file"}}" data-exit="{{$.i18n.Tr "repo.modelarts.exit_full_screen"}}" style="margin-left: 1rem;color:#0366d6;cursor: pointer;"> | |||
| <i class="ri-aspect-ratio-line"></i> | |||
| <span style="margin-left: 0.3rem;">{{$.i18n.Tr "repo.modelarts.fullscreen_log_file"}}</span> | |||
| </div> | |||
| </div> | |||
| <div style="position: relative;border: 1px solid rgba(0,0,0,.2);padding: 0 10px;margin-top: 10px;"> | |||
| <span> | |||
| @@ -548,7 +551,11 @@ | |||
| <div class="ui loader"></div> | |||
| </div> | |||
| <input type="hidden" name="end_line" value> | |||
| <input type="hidden" name="start_line" value> | |||
| <input type="hidden" name="end_line-max" value> | |||
| <input type="hidden" name="start_line-max" value> | |||
| <input type="hidden" name="start_line-max-copy" value> | |||
| <input type="hidden" name="start_line" value> | |||
| <input type="hidden" name="init_log" value> | |||
| <pre id="log_file{{.VersionName}}"></pre> | |||
| </div> | |||
| @@ -576,6 +583,7 @@ | |||
| </div> | |||
| </div> | |||
| </div> | |||
| {{template "custom/max_log" .}} | |||
| {{end}} {{template "base/paginate" .}} | |||
| </div> | |||
| <!-- 确认模态框 --> | |||
| @@ -460,14 +460,17 @@ td, th { | |||
| </div> | |||
| <div class="ui tab" data-tab="second"> | |||
| <div> | |||
| <div class="file-info"> | |||
| <a id="{{.VersionName}}-log-down" | |||
| class='{{if and ($.canDownload) (eq .Status "KILLED" "FAILED" "START_FAILED" "STOPPED" "COMPLETED") }}ti-download-file{{else}}disabled{{end}}' | |||
| class='{{if and ($.canDownload) (eq .Status "KILLED" "FAILED" "START_FAILED" "STOPPED" "COMPLETED") }}ti-download-file{{else}}disabled{{end}} file-info' | |||
| href="{{$.RepoLink}}/modelarts/train-job/{{.JobID}}/download_log_file?version_name={{.VersionName}}"> | |||
| <i class="ri-download-cloud-2-line"></i> | |||
| <span style="margin-left: 0.3rem;">{{$.i18n.Tr "repo.modelarts.download_log"}}</span> | |||
| </a> | |||
| <div class="file-info full-log-dialog" data-version="{{.VersionName}}" data-log="{{$.i18n.Tr "repo.modelarts.log_file"}}" data-exit="{{$.i18n.Tr "repo.modelarts.exit_full_screen"}}" style="margin-left: 1rem;color:#0366d6;cursor: pointer;"> | |||
| <i class="ri-aspect-ratio-line"></i> | |||
| <span style="margin-left: 0.3rem;">{{$.i18n.Tr "repo.modelarts.fullscreen_log_file"}}</span> | |||
| </div> | |||
| </div> | |||
| <div style="position: relative;border: 1px solid rgba(0,0,0,.2);padding: 0 10px;margin-top: 10px;"> | |||
| <span> | |||
| @@ -486,8 +489,12 @@ td, th { | |||
| <div class="ui inverted active dimmer"> | |||
| <div class="ui loader"></div> | |||
| </div> | |||
| <input type="hidden" name="end_line" value> | |||
| <input type="hidden" name="start_line" value> | |||
| <input type="hidden" name="end_line" value> | |||
| <input type="hidden" name="end_line-max" value> | |||
| <input type="hidden" name="start_line-max" value> | |||
| <input type="hidden" name="start_line-max-copy" value> | |||
| <input type="hidden" name="start_line" value> <input type="hidden" name="start_line" value> | |||
| <input type="hidden" name="init_log" value> | |||
| <pre id="log_file{{.VersionName}}"></pre> | |||
| </div> | |||
| @@ -510,12 +517,8 @@ td, th { | |||
| </div> | |||
| </div> | |||
| </div> | |||
| {{template "custom/max_log" .}} | |||
| {{end}} | |||
| </div> | |||
| <!-- 确认模态框 --> | |||
| </div> | |||
| @@ -548,14 +548,17 @@ | |||
| </div> | |||
| </div> | |||
| <div class="ui tab" data-tab="second{{$k}}"> | |||
| <div> | |||
| <div class="file-info"> | |||
| <a id="{{.VersionName}}-log-down" | |||
| class='{{if and (.CanModify) (eq .Status "KILLED" "FAILED" "START_FAILED" "STOPPED" "COMPLETED") }}ti-download-file{{else}}disabled{{end}}' | |||
| class='{{if and (.CanModify) (eq .Status "KILLED" "FAILED" "START_FAILED" "STOPPED" "COMPLETED") }}ti-download-file{{else}}disabled{{end}} file-info' | |||
| href="{{$.RepoLink}}/modelarts/train-job/{{.JobID}}/download_log_file?version_name={{.VersionName}}"> | |||
| <i class="ri-download-cloud-2-line"></i> | |||
| <span style="margin-left: 0.3rem;">{{$.i18n.Tr "repo.modelarts.download_log"}}</span> | |||
| </a> | |||
| <div class="file-info full-log-dialog" data-version="{{.VersionName}}" data-log="{{$.i18n.Tr "repo.modelarts.log_file"}}" data-exit="{{$.i18n.Tr "repo.modelarts.exit_full_screen"}}" style="margin-left: 1rem;color:#0366d6;cursor: pointer;"> | |||
| <i class="ri-aspect-ratio-line"></i> | |||
| <span style="margin-left: 0.3rem;">{{$.i18n.Tr "repo.modelarts.fullscreen_log_file"}}</span> | |||
| </div> | |||
| </div> | |||
| <div | |||
| style="position: relative;border: 1px solid rgba(0,0,0,.2);padding: 0 10px;margin-top: 10px;"> | |||
| @@ -577,7 +580,11 @@ | |||
| <div class="ui loader"></div> | |||
| </div> | |||
| <input type="hidden" name="end_line" value> | |||
| <input type="hidden" name="end_line-max" value> | |||
| <input type="hidden" name="start_line-max" value> | |||
| <input type="hidden" name="start_line-max-copy" value> | |||
| <input type="hidden" name="start_line" value> | |||
| <input type="hidden" name="init_log" value> | |||
| <pre id="log_file{{.VersionName}}"></pre> | |||
| </div> | |||
| @@ -609,6 +616,7 @@ | |||
| </div> | |||
| </div> | |||
| </div> | |||
| {{template "custom/max_log" .}} | |||
| {{end}} {{template "base/paginate" .}} | |||
| </div> | |||
| <!-- 确认模态框 --> | |||
| @@ -715,6 +723,7 @@ | |||
| </div> | |||
| </div> | |||
| </div> | |||
| {{template "base/footer" .}} | |||
| @@ -467,13 +467,17 @@ | |||
| </div> | |||
| </div> | |||
| <div class="ui tab" data-tab="second0"> | |||
| <div> | |||
| <div class="file-info"> | |||
| <a id="-log-down" | |||
| class='{{if $.canDownload}}ti-download-file{{else}}disabled{{end}}' | |||
| class='{{if $.canDownload}}ti-download-file{{else}}disabled{{end}} file-info' | |||
| href="/api/v1/repos/{{$.RepoRelPath}}/cloudbrain"> | |||
| <i class="ri-download-cloud-2-line"></i> | |||
| <span style="margin-left: 0.3rem;">{{$.i18n.Tr "repo.modelarts.download_log"}}</span> | |||
| </a> | |||
| <div class="file-info full-log-dialog" data-version="{{.VersionName}}" data-log="{{$.i18n.Tr "repo.modelarts.log_file"}}" data-exit="{{$.i18n.Tr "repo.modelarts.exit_full_screen"}}" style="margin-left: 1rem;color:#0366d6;cursor: pointer;"> | |||
| <i class="ri-aspect-ratio-line"></i> | |||
| <span style="margin-left: 0.3rem;">{{$.i18n.Tr "repo.modelarts.fullscreen_log_file"}}</span> | |||
| </div> | |||
| </div> | |||
| <div | |||
| style="position: relative;border: 1px solid rgba(0,0,0,.2);padding: 0 10px;margin-top: 10px;"> | |||
| @@ -490,13 +494,17 @@ | |||
| <div id="header"></div> | |||
| </div> | |||
| <div class="ui attached log log-scroll" id="log" data-version="" | |||
| style="height: 300px !important; overflow: auto;"> | |||
| <div class="ui inverted active dimmer"> | |||
| <div class="ui loader"></div> | |||
| </div> | |||
| <input type="hidden" name="end_line" value> | |||
| <input type="hidden" name="start_line" value> | |||
| <pre id="log_file"></pre> | |||
| style="height: 300px !important; overflow: auto;"> | |||
| <div class="ui inverted active dimmer"> | |||
| <div class="ui loader"></div> | |||
| </div> | |||
| <input type="hidden" name="end_line" value> | |||
| <input type="hidden" name="end_line-max" value> | |||
| <input type="hidden" name="start_line-max" value> | |||
| <input type="hidden" name="start_line-max-copy" value> | |||
| <input type="hidden" name="start_line" value> | |||
| <input type="hidden" name="init_log" value> | |||
| <pre id="log_file"></pre> | |||
| </div> | |||
| </div> | |||
| </div> | |||
| @@ -571,6 +579,7 @@ | |||
| </div> | |||
| </div> | |||
| </div> | |||
| {{template "custom/max_log" .}} | |||
| {{template "base/paginate" .}} | |||
| </div> | |||
| <!-- 确认模态框 --> | |||
| @@ -14,8 +14,8 @@ export default async function initCloudrainSow() { | |||
| }; | |||
| } | |||
| function logScroll(version_name, repoPath, ID) { | |||
| let container = document.querySelector(`#log${version_name}`); | |||
| function logScroll(version_name, repoPath, ID, max = "", lines = 60) { | |||
| let container = document.querySelector(`#log${max}${version_name}`); | |||
| let scrollTop = container.scrollTop; | |||
| let scrollHeight = container.scrollHeight; | |||
| let clientHeight = container.clientHeight; | |||
| @@ -26,46 +26,90 @@ export default async function initCloudrainSow() { | |||
| parseInt(scrollTop) + clientHeight - 1 == scrollHeight) && | |||
| scrollLeft === 0 | |||
| ) { | |||
| let end_line = $(`#log${version_name} input[name=end_line]`).val(); | |||
| let end_line = $(`#log${version_name} input[name=end_line${max}]`).val(); | |||
| $(`#log${max}${version_name} .ui.inverted.active.dimmer`).css({ | |||
| "background-color": "#fff", | |||
| display: "block", | |||
| }); | |||
| $.get( | |||
| `/api/v1/repos/${repoPath}/${ID}/log?version_name=${version_name}&base_line=${end_line}&lines=50&order=desc`, | |||
| `/api/v1/repos/${repoPath}/${ID}/log?version_name=${version_name}&base_line=${end_line}&lines=${lines}&order=desc`, | |||
| (data) => { | |||
| $(`#log${max}${version_name} .ui.inverted.active.dimmer`).css( | |||
| "display", | |||
| "none" | |||
| ); | |||
| if (data.Lines == 0) { | |||
| $(`.message${version_name} #header`).text("您已翻阅至日志底部"); | |||
| $(`.message${version_name}`).css("display", "block"); | |||
| setTimeout(function () { | |||
| $(`.message${version_name}`).css("display", "none"); | |||
| }, 1000); | |||
| if (max) { | |||
| $("body").toast({ | |||
| class: "info", | |||
| message: `您已翻阅至日志底部,请稍后再试!`, | |||
| }); | |||
| } else { | |||
| $(`.message${version_name} #header`).text("您已翻阅至日志底部"); | |||
| $(`.message${version_name}`).css("display", "block"); | |||
| setTimeout(function () { | |||
| $(`.message${version_name}`).css("display", "none"); | |||
| }, 1000); | |||
| } | |||
| } else { | |||
| if (end_line === data.EndLine) { | |||
| return; | |||
| } else { | |||
| $(`#log${version_name} input[name=end_line]`).val(data.EndLine); | |||
| $(`#log${version_name}`).append("<pre>" + data.Content); | |||
| $(`#log${version_name} input[name=end_line${max}]`).val( | |||
| data.EndLine | |||
| ); | |||
| $(`#log${max}${version_name}`).append("<pre>" + data.Content); | |||
| } | |||
| } | |||
| } | |||
| ).fail(function (err) { | |||
| $(`#log${max}${version_name} .ui.inverted.active.dimmer`).css( | |||
| "display", | |||
| "none" | |||
| ); | |||
| console.log(err); | |||
| }); | |||
| } | |||
| if (scrollTop == 0 && scrollLeft == 0) { | |||
| let start_line = $(`#log${version_name} input[name=start_line]`).val(); | |||
| let start_line = $( | |||
| `#log${version_name} input[name=start_line${max}]` | |||
| ).val(); | |||
| $(`#log${max}${version_name} .ui.inverted.active.dimmer`).css({ | |||
| "background-color": "#fff", | |||
| display: "block", | |||
| }); | |||
| $.get( | |||
| `/api/v1/repos/${repoPath}/${ID}/log?version_name=${version_name}&base_line=${start_line}&lines=50&order=asc`, | |||
| `/api/v1/repos/${repoPath}/${ID}/log?version_name=${version_name}&base_line=${start_line}&lines=${lines}&order=asc`, | |||
| (data) => { | |||
| $(`#log${max}${version_name} .ui.inverted.active.dimmer`).css( | |||
| "display", | |||
| "none" | |||
| ); | |||
| if (data.Lines == 0) { | |||
| $(`.message${version_name} #header`).text("您已翻阅至日志顶部"); | |||
| $(`.message${version_name}`).css("display", "block"); | |||
| setTimeout(function () { | |||
| $(`.message${version_name}`).css("display", "none"); | |||
| }, 1000); | |||
| if (max) { | |||
| $("body").toast({ | |||
| class: "info", | |||
| message: `您已翻阅至日志顶部,请稍后再试!`, | |||
| }); | |||
| } else { | |||
| $(`.message${version_name} #header`).text("您已翻阅至日志顶部"); | |||
| $(`.message${version_name}`).css("display", "block"); | |||
| setTimeout(function () { | |||
| $(`.message${version_name}`).css("display", "none"); | |||
| }, 1000); | |||
| } | |||
| } else { | |||
| $(`#log${version_name} input[name=start_line]`).val(data.StartLine); //如果变动就改变所对应的值 | |||
| $(`#log${version_name}`).prepend("<pre>" + data.Content); | |||
| $(`#log${version_name} input[name=start_line${max}]`).val( | |||
| data.StartLine | |||
| ); //如果变动就改变所对应的值 | |||
| $(`#log${max}${version_name}`).prepend("<pre>" + data.Content); | |||
| } | |||
| } | |||
| ).fail(function (err) { | |||
| $(`#log${max}${version_name} .ui.inverted.active.dimmer`).css( | |||
| "display", | |||
| "none" | |||
| ); | |||
| console.log(err); | |||
| }); | |||
| } | |||
| @@ -96,51 +140,71 @@ export default async function initCloudrainSow() { | |||
| }, 1); | |||
| } | |||
| $(".log_top").click(function () { | |||
| // let logContentDom = document.querySelector('.log') | |||
| // if(!logContentDom) | |||
| // return | |||
| // let version_name = $('.log_top').data('version') | |||
| function logTop(e) { | |||
| let max = e.currentTarget.getAttribute("data-max") || ""; | |||
| let lines = !!max ? 100 : 60; | |||
| let version_name = $(this).data("version"); | |||
| let logContentDom = document.querySelector(`#log${version_name}`); | |||
| let logContentDom = document.querySelector(`#log${max}${version_name}`); | |||
| let ID = $(`#accordion${version_name}`).data("jobid"); | |||
| let repoPath = $(`#accordion${version_name}`).data("repopath"); | |||
| $(`#log_file${version_name}`).siblings("pre").remove(); | |||
| $(`#log${version_name} .ui.inverted.active.dimmer`).css("display", "block"); | |||
| $(`#log_file${max}${version_name}`).siblings("pre").remove(); | |||
| $(`#log${max}${version_name} .ui.inverted.active.dimmer`).css({ | |||
| "background-color": "#fff", | |||
| display: "block", | |||
| }); | |||
| $.get( | |||
| `/api/v1/repos/${repoPath}/${ID}/log?version_name=${version_name}&base_line=&lines=50&order=asc`, | |||
| `/api/v1/repos/${repoPath}/${ID}/log?version_name=${version_name}&base_line=&lines=${lines}&order=asc`, | |||
| (data) => { | |||
| $(".ui.inverted.active.dimmer").css("display", "none"); | |||
| $(`#log${version_name} input[name=end_line]`).val(data.EndLine); //如果变动就改变所对应的值 | |||
| $(`#log${version_name} input[name=start_line]`).val(data.StartLine); | |||
| $(`#log${version_name}`).prepend("<pre>" + data.Content); | |||
| $(`.message${version_name} #header`).text("您已翻阅至日志顶部"); | |||
| $(`.message${version_name}`).css("display", "block"); | |||
| setTimeout(function () { | |||
| $(`.message${version_name}`).css("display", "none"); | |||
| }, 1000); | |||
| $(`#log${max}${version_name} .ui.inverted.active.dimmer`).css( | |||
| "display", | |||
| "none" | |||
| ); | |||
| $(`#log${version_name} input[name=end_line${max}]`).val(data.EndLine); //如果变动就改变所对应的值 | |||
| $(`#log${version_name} input[name=start_line${max}]`).val( | |||
| data.StartLine | |||
| ); | |||
| $(`#log${max}${version_name}`).prepend("<pre>" + data.Content); | |||
| if (data.Lines == 0) { | |||
| if (max) { | |||
| $("body").toast({ | |||
| class: "info", | |||
| message: `您已翻阅至日志顶部,请稍后再试!`, | |||
| }); | |||
| } else { | |||
| $(`.message${version_name} #header`).text("您已翻阅至日志顶部"); | |||
| $(`.message${version_name}`).css("display", "block"); | |||
| setTimeout(function () { | |||
| $(`.message${version_name}`).css("display", "none"); | |||
| }, 1000); | |||
| } | |||
| } | |||
| scrollAnimation(logContentDom, logContentDom.scrollTop, 0); | |||
| } | |||
| ).fail((err) => { | |||
| $(`#log${version_name} .ui.inverted.active.dimmer`).css( | |||
| $(`#log${max}${version_name} .ui.inverted.active.dimmer`).css( | |||
| "display", | |||
| "none" | |||
| ); | |||
| throw err; | |||
| }); | |||
| }); | |||
| $(".log_bottom").click(function (e) { | |||
| } | |||
| function logBottom(e) { | |||
| let max = e.currentTarget.getAttribute("data-max") || ""; | |||
| let lines = !!max ? 100 : 60; | |||
| let version_name = $(this).data("version"); | |||
| let logContentDom = document.querySelector(`#log${version_name}`); | |||
| let logContentDom = document.querySelector(`#log${max}${version_name}`); | |||
| let ID = $(`#accordion${version_name}`).data("jobid"); | |||
| let repoPath = $(`#accordion${version_name}`).data("repopath"); | |||
| $(`#log_file${version_name}`).siblings("pre").remove(); | |||
| let end_line = $(`#log${version_name} input[name=end_line]`).val(); | |||
| $(`#log${version_name} .ui.inverted.active.dimmer`).css("display", "block"); | |||
| $(`#log_file${max}${version_name}`).siblings("pre").remove(); | |||
| let end_line = $(`#log${version_name} input[name=end_line${max}]`).val(); | |||
| $(`#log${max}${version_name} .ui.inverted.active.dimmer`).css({ | |||
| "background-color": "#fff", | |||
| display: "block", | |||
| }); | |||
| $.get( | |||
| `/api/v1/repos/${repoPath}/${ID}/log?version_name=${version_name}&base_line=&lines=50&order=desc`, | |||
| `/api/v1/repos/${repoPath}/${ID}/log?version_name=${version_name}&base_line=&lines=${lines}&order=desc`, | |||
| (data) => { | |||
| $(`#log${version_name} .ui.inverted.active.dimmer`).css( | |||
| $(`#log${max}${version_name} .ui.inverted.active.dimmer`).css( | |||
| "display", | |||
| "none" | |||
| ); | |||
| @@ -153,39 +217,71 @@ export default async function initCloudrainSow() { | |||
| .addClass("ti-download-file") | |||
| .removeClass("disabled"); | |||
| } | |||
| $(`#log${version_name} input[name=end_line]`).val(data.EndLine); //如果变动就改变所对应的值 | |||
| $(`#log${version_name} input[name=start_line]`).val(data.StartLine); | |||
| $(`#log${version_name}`).append("<pre>" + data.Content); | |||
| $(`#log${version_name} input[name=end_line${max}]`).val(data.EndLine); //如果变动就改变所对应的值 | |||
| if ($(this)[0].hasAttribute("data-tab")) { | |||
| $(`#log${version_name} input[name=end_line-max]`).val(data.EndLine); | |||
| $(`#log${version_name} input[name=start_line-max]`).val( | |||
| data.StartLine | |||
| ); | |||
| $(`#log${version_name} input[name=start_line-max-copy]`).val( | |||
| data.StartLine | |||
| ); | |||
| } | |||
| $(`#log${version_name} input[name=start_line${max}]`).val( | |||
| data.StartLine | |||
| ); | |||
| $(`#log${max}${version_name}`).append("<pre>" + data.Content); | |||
| $.get( | |||
| `/api/v1/repos/${repoPath}/${ID}/log?version_name=${version_name}&base_line=${data.EndLine}&lines=50&order=desc`, | |||
| `/api/v1/repos/${repoPath}/${ID}/log?version_name=${version_name}&base_line=${data.EndLine}&lines=${lines}&order=desc`, | |||
| (data) => { | |||
| $(".ui.inverted.active.dimmer").css("display", "none"); | |||
| $(`#log${max}${version_name} .ui.inverted.active.dimmer`).css( | |||
| "display", | |||
| "none" | |||
| ); | |||
| if (data.Lines == 0) { | |||
| $(`.message${version_name} #header`).text("您已翻阅至日志底部"); | |||
| $(`.message${version_name}`).css("display", "block"); | |||
| setTimeout(function () { | |||
| $(`.message${version_name}`).css("display", "none"); | |||
| }, 1000); | |||
| if (max) { | |||
| $("body").toast({ | |||
| class: "info", | |||
| message: `您已翻阅至日志底部,请稍后再试!`, | |||
| }); | |||
| } else { | |||
| $(`.message${version_name} #header`).text("您已翻阅至日志底部"); | |||
| $(`.message${version_name}`).css("display", "block"); | |||
| setTimeout(function () { | |||
| $(`.message${version_name}`).css("display", "none"); | |||
| }, 1000); | |||
| } | |||
| } else { | |||
| if (end_line === data.EndLine || end_line === "") { | |||
| return; | |||
| } else { | |||
| $(`#log${version_name} input[name=end_line]`).val(data.EndLine); | |||
| $(`#log${version_name}`).append("<pre>" + data.Content); | |||
| $(`#log${version_name} input[name=end_line${max}]`).val( | |||
| data.EndLine | |||
| ); | |||
| if ($(this)[0].hasAttribute("data-tab")) { | |||
| $(`#log${version_name} input[name=end_line-max]`).val( | |||
| data.EndLine | |||
| ); | |||
| } | |||
| $(`#log${max}${version_name}`).append("<pre>" + data.Content); | |||
| } | |||
| } | |||
| } | |||
| ).fail(function (err) { | |||
| $(`#log${version_name} .ui.inverted.active.dimmer`).css( | |||
| $(`#log${max}${version_name} .ui.inverted.active.dimmer`).css( | |||
| "display", | |||
| "none" | |||
| ); | |||
| console.log(err); | |||
| }); | |||
| let test = $(`#log_file${version_name}`).nextAll(); | |||
| $(`#log${version_name} input[name=init_log]`).val(test[0].innerHTML); | |||
| scrollAnimation( | |||
| logContentDom, | |||
| logContentDom.scrollTop + 1, | |||
| logContentDom.scrollHeight - logContentDom.clientHeight | |||
| logContentDom.scrollHeight - logContentDom.clientHeight - 10 | |||
| ); | |||
| } | |||
| ).fail((err) => { | |||
| @@ -195,6 +291,68 @@ export default async function initCloudrainSow() { | |||
| ); | |||
| throw err; | |||
| }); | |||
| } | |||
| $(".log_top").click(logTop); | |||
| $(".log_bottom").click(logBottom); | |||
| // $(".log-scroll-max").scroll(); | |||
| $(".full-log-dialog").click(function () { | |||
| let version_name = $(this).data("version"); | |||
| let log_type = $(this).data("log-type") || ""; | |||
| let logContentDom = document.querySelector(`#log-max${version_name}`); | |||
| $(`.ui.modal.max-full-log${version_name}`) | |||
| .modal({ | |||
| closable: false, | |||
| onShow: function () { | |||
| $(".ui.dimmer.modals").css({ | |||
| "background-color": "rgb(136, 136, 136,0.7)", | |||
| }); | |||
| $(".log-scroll-max .ui.inverted.active.dimmer").css( | |||
| "display", | |||
| "none" | |||
| ); | |||
| $(".file-info #log-file-title").text( | |||
| $(".full-log-dialog").data("log") | |||
| ); | |||
| $(".file-info #log-file-exit").text( | |||
| $(".full-log-dialog").data("exit") | |||
| ); | |||
| }, | |||
| onVisible: function () { | |||
| $(`#log-max${version_name}`).append( | |||
| "<pre>" + $(`#log${version_name} input[name=init_log]`).val() | |||
| ); | |||
| scrollAnimation( | |||
| logContentDom, | |||
| logContentDom.scrollTop + 1, | |||
| logContentDom.scrollHeight - logContentDom.clientHeight | |||
| ); | |||
| if (log_type !== "c2Net") { | |||
| $(".log-scroll-max").bind("scroll", function () { | |||
| let version_name = $(this).data("version"); | |||
| let ID = $(`#accordion${version_name}`).data("jobid"); | |||
| let repoPath = $(`#accordion${version_name}`).data("repopath"); | |||
| fn(version_name, repoPath, ID, "-max", 100); | |||
| }); | |||
| } | |||
| $(".log_bottom-max").bind("click", logBottom); | |||
| $(".log_top-max").bind("click", logTop); | |||
| }, | |||
| onHide: function () { | |||
| let startLine = $( | |||
| `#log${version_name} input[name=start_line-max-copy]` | |||
| ).val(); | |||
| $(`#log_file-max${version_name}`).siblings("pre").remove(); | |||
| $(`#log${version_name} input[name=start_line-max]`).val(startLine); | |||
| $(".log-scroll-max").unbind("scroll"); | |||
| $(".log_bottom-max").unbind("click"); | |||
| $(".log_top-max").unbind("click"); | |||
| }, | |||
| }) | |||
| .modal("show"); | |||
| }); | |||
| function loadLog(version_name) { | |||
| @@ -245,7 +403,6 @@ export default async function initCloudrainSow() { | |||
| .modal({ | |||
| onApprove: function () { | |||
| $.post(url, { version_name: version_name }, (data) => { | |||
| console.log(data); | |||
| if (data.StatusOK === 0) { | |||
| if (data.VersionListCount === 0) { | |||
| location.href = `/${repoPath}`; | |||