Browse Source

Merge pull request '云脑任务日志放大查看' (#3090) from fix-2902 into V20221102

Reviewed-on: https://git.openi.org.cn/OpenI/aiforge/pulls/3090
Reviewed-by: chenshihai <chenshh@pcl.ac.cn>
tags/v1.22.11.1^2
chenshihai 3 years ago
parent
commit
b1b7a4dfc0
12 changed files with 367 additions and 112 deletions
  1. +3
    -0
      options/locale/locale_en-US.ini
  2. +3
    -0
      options/locale/locale_zh-CN.ini
  3. +1
    -1
      routers/api/v1/repo/cloudbrain.go
  4. +40
    -0
      templates/custom/max_log.tmpl
  5. +17
    -9
      templates/repo/cloudbrain/benchmark/show.tmpl
  6. +17
    -10
      templates/repo/cloudbrain/inference/show.tmpl
  7. +12
    -4
      templates/repo/cloudbrain/trainjob/show.tmpl
  8. +12
    -4
      templates/repo/grampus/trainjob/show.tmpl
  9. +13
    -10
      templates/repo/modelarts/inferencejob/show.tmpl
  10. +12
    -3
      templates/repo/modelarts/trainjob/show.tmpl
  11. +18
    -9
      templates/repo/modelsafety/show.tmpl
  12. +219
    -62
      web_src/js/features/cloudbrainShow.js

+ 3
- 0
options/locale/locale_en-US.ini View File

@@ -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'.




+ 3
- 0
options/locale/locale_zh-CN.ini View File

@@ -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 = 计算节点数的值配置错误,您没有权限使用当前配置的计算节点数。




+ 1
- 1
routers/api/v1/repo/cloudbrain.go View File

@@ -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++
}


+ 40
- 0
templates/custom/max_log.tmpl View File

@@ -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>

+ 17
- 9
templates/repo/cloudbrain/benchmark/show.tmpl View File

@@ -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>
<!-- 确认模态框 -->


+ 17
- 10
templates/repo/cloudbrain/inference/show.tmpl View File

@@ -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>



+ 12
- 4
templates/repo/cloudbrain/trainjob/show.tmpl View File

@@ -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>
<!-- 确认模态框 -->


+ 12
- 4
templates/repo/grampus/trainjob/show.tmpl View File

@@ -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>
<!-- 确认模态框 -->


+ 13
- 10
templates/repo/modelarts/inferencejob/show.tmpl View File

@@ -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>


+ 12
- 3
templates/repo/modelarts/trainjob/show.tmpl View File

@@ -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" .}}



+ 18
- 9
templates/repo/modelsafety/show.tmpl View File

@@ -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>
<!-- 确认模态框 -->


+ 219
- 62
web_src/js/features/cloudbrainShow.js View File

@@ -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}`;


Loading…
Cancel
Save