1
0
Fork 0
mirror of https://codeberg.org/forgejo/forgejo.git synced 2025-01-21 16:55:06 -05:00
forgejo/templates/admin/stacktrace-row.tmpl
Gusted 3f44b97b5f
feat: add limited execution tracing support
- For every process that is spawned (every new non-trivial goroutine
such as http requests, queues or tasks) start a [execution
tracer](https://pkg.go.dev/runtime/trace). This allows very precise
diagnosis of how each individual process over a time period.
- It's safe and [fast](https://go.dev/blog/execution-traces-2024#low-overhead-tracing) to
be run in production, hence no setting to disable this. There's only
noticable overhead when tracing is actually performed and not continuous.
- Proper tracing support would mean the codebase would be full of
`trace.WithRegion` and `trace.Log`, which feels premature for this patch
as there's no real-world usage yet to indicate which places would need
this the most. So far only Git commands and SQL queries receive somewhat
proper tracing support given that these are used throughout the codebase.
- Make git commands a new process type.
- Add tracing to diagnosis zip file.
2025-01-05 04:07:49 +01:00

68 lines
2.1 KiB
Go HTML Template

<div class="item">
<div class="tw-flex tw-items-center">
<div class="icon tw-ml-2 tw-mr-2">
{{if eq .Process.Type "request"}}
{{svg "octicon-globe" 16}}
{{else if eq .Process.Type "system"}}
{{svg "octicon-cpu" 16}}
{{else if eq .Process.Type "normal"}}
{{svg "octicon-terminal" 16}}
{{else if eq .Process.Type "git"}}
{{svg "octicon-git-branch" 16}}
{{else}}
{{svg "octicon-code" 16}}
{{end}}
</div>
<div class="content tw-flex-1">
<div class="header">{{.Process.Description}}</div>
<div class="description">{{if ne .Process.Type "none"}}{{DateUtils.TimeSince .Process.Start}}{{end}}</div>
</div>
<div>
{{if or (eq .Process.Type "request") (eq .Process.Type "normal")}}
<a class="delete-button icon" href="" data-url="{{.root.Link}}/cancel/{{.Process.PID}}" data-id="{{.Process.PID}}" data-name="{{.Process.Description}}">{{svg "octicon-trash" 16 "text-red"}}</a>
{{end}}
</div>
</div>
{{if .Process.Stacks}}
<div class="divided list tw-ml-2">
{{range .Process.Stacks}}
<div class="item">
<details>
<summary>
<div class="flex-text-inline">
<div class="header tw-ml-2">
<span class="icon tw-mr-2">{{svg "octicon-code" 16}}</span>{{.Description}}{{if gt .Count 1}} * {{.Count}}{{end}}
</div>
<div class="description">
{{range .Labels}}
<div class="ui label">{{.Name}}<div class="detail">{{.Value}}</div></div>
{{end}}
</div>
</div>
</summary>
<div class="list">
{{range .Entry}}
<div class="item tw-flex tw-items-center">
<span class="icon tw-mr-4">{{svg "octicon-dot-fill" 16}}</span>
<div class="content tw-flex-1">
<div class="header"><code>{{.Function}}</code></div>
<div class="description"><code>{{.File}}:{{.Line}}</code></div>
</div>
</div>
{{end}}
</div>
</details>
</div>
{{end}}
</div>
{{end}}
{{if .Process.Children}}
<div class="divided list">
{{range .Process.Children}}
{{template "admin/stacktrace-row" dict "Process" . "root" $.root}}
{{end}}
</div>
{{end}}
</div>