github.com/grafana/pyroscope@v1.18.0/pkg/operations/v2/tool.blocks.dataset.profiles.gohtml (about) 1 <!DOCTYPE html> 2 <html class="h-100" data-bs-theme="dark"> 3 <head> 4 <meta charset="UTF-8"> 5 <meta http-equiv="X-UA-Compatible" content="IE=edge"> 6 <meta name="viewport" content="width=device-width, initial-scale=1"> 7 8 <title>Bucket Blocks Explorer (v2): Dataset Profiles - {{ .Dataset.Name }}</title> 9 10 <link rel="stylesheet" href="/static/bootstrap-5.3.3.min.css"> 11 <link rel="stylesheet" href="/static/bootstrap-icons-1.8.1.css"> 12 <link rel="stylesheet" href="/static/pyroscope-styles.css"> 13 <script src="/static/bootstrap-5.3.3.bundle.min.js"></script> 14 </head> 15 <body class="d-flex flex-column h-100"> 16 <main class="flex-shrink-0"> 17 <div class="container"> 18 <div class="header row border-bottom py-3 flex-column-reverse flex-sm-row"> 19 <div class="col-12 col-sm-9 text-center text-sm-start"> 20 <h3>Bucket Blocks Explorer (v2): Dataset Profiles</h3> 21 </div> 22 <div class="col-12 col-sm-3 text-center text-sm-end mb-3 mb-sm-0"> 23 <a href="/ops/object-store/tenants"> 24 <img alt="Pyroscope logo" class="pyroscope-brand" src="/static/pyroscope-logo.png"> 25 </a> 26 </div> 27 </div> 28 <div class="row my-3"> 29 <p> 30 <a href="/ops/object-store/tenants/{{ .User }}/blocks/{{ .BlockID }}/datasets?dataset={{ if .Dataset.Name }}{{ .Dataset.Name }}{{ else }}_empty{{ end }}&shard={{ .Shard }}&block_tenant={{ .BlockTenant }}">Back to dataset</a> 31 </p> 32 33 <div class="card bg-dark border-secondary info-card mb-3"> 34 <div class="card-header"> 35 <h5 class="mb-0">Dataset Information</h5> 36 </div> 37 <div class="card-body"> 38 <ul> 39 <li>Dataset Name: {{ if .Dataset.Name }}{{ .Dataset.Name }}{{ else }}<em>(empty)</em>{{ end }}</li> 40 <li>Dataset Tenant: {{ .Dataset.Tenant }}</li> 41 <li>Block ID: {{ .BlockID }}</li> 42 <li>Shard: {{ .Shard }}</li> 43 </ul> 44 </div> 45 </div> 46 47 <div class="d-flex justify-content-between align-items-center mt-3 mb-3"> 48 <h5 class="mb-0">Profiles</h5> 49 <div class="text-muted"> 50 Total: <strong>{{ .TotalCount }}</strong> profiles 51 {{ if gt .TotalCount 0 }} 52 | Showing {{ add (mul (add .Page -1) .PageSize) 1 }}-{{ if lt (mul .Page .PageSize) .TotalCount }}{{ mul .Page .PageSize }}{{ else }}{{ .TotalCount }}{{ end }} 53 {{ end }} 54 </div> 55 </div> 56 57 {{ if .Profiles }} 58 {{ if gt .TotalPages 1 }} 59 <div class="mb-3"> 60 {{ $datasetName := "_empty" }} 61 {{ if .Dataset.Name }}{{ $datasetName = .Dataset.Name }}{{ end }} 62 {{ template "pagination" dict "BaseURL" (printf "?dataset=%s&shard=%d&block_tenant=%s" $datasetName .Shard .BlockTenant) "Page" .Page "PageSize" .PageSize "TotalPages" .TotalPages "HasPrevPage" .HasPrevPage "HasNextPage" .HasNextPage }} 63 </div> 64 {{ end }} 65 66 <div class="table-responsive"> 67 <table class="table table-striped table-sm table-dark"> 68 <thead> 69 <tr> 70 <th>Timestamp</th> 71 <th>Series Index</th> 72 <th>Profile Type</th> 73 <th>Samples</th> 74 <th>Actions</th> 75 </tr> 76 </thead> 77 <tbody> 78 {{ range .Profiles }} 79 <tr> 80 <td><code class="small">{{ .Timestamp }}</code></td> 81 <td><code>{{ .SeriesIndex }}</code></td> 82 <td>{{ if .ProfileType }}<code class="small">{{ .ProfileType }}</code>{{ else }}<span class="text-muted">-</span>{{ end }}</td> 83 <td>{{ .SampleCount }}</td> 84 <td> 85 <a href="/ops/object-store/tenants/{{ $.User }}/blocks/{{ $.BlockID }}/datasets/profiles/call-tree?dataset={{ if $.Dataset.Name }}{{ $.Dataset.Name }}{{ else }}_empty{{ end }}&shard={{ $.Shard }}&block_tenant={{ $.BlockTenant }}&row={{ .RowNumber }}" 86 class="btn btn-sm btn-success me-1"> 87 <i class="bi bi-eye"></i> Call Tree 88 </a> 89 <a href="/ops/object-store/tenants/{{ $.User }}/blocks/{{ $.BlockID }}/datasets/profiles/download?dataset={{ if $.Dataset.Name }}{{ $.Dataset.Name }}{{ else }}_empty{{ end }}&shard={{ $.Shard }}&block_tenant={{ $.BlockTenant }}&row={{ .RowNumber }}" 90 class="btn btn-sm btn-primary" 91 download> 92 <i class="bi bi-download"></i> Download 93 </a> 94 </td> 95 </tr> 96 {{ end }} 97 </tbody> 98 </table> 99 </div> 100 101 {{ if gt .TotalPages 1 }} 102 {{ $datasetName := "_empty" }} 103 {{ if .Dataset.Name }}{{ $datasetName = .Dataset.Name }}{{ end }} 104 {{ template "pagination" dict "BaseURL" (printf "?dataset=%s&shard=%d&block_tenant=%s" $datasetName .Shard .BlockTenant) "Page" .Page "PageSize" .PageSize "TotalPages" .TotalPages "HasPrevPage" .HasPrevPage "HasNextPage" .HasNextPage }} 105 {{ end }} 106 {{ else }} 107 <div class="alert alert-warning" role="alert"> 108 No profiles found in this dataset. 109 </div> 110 {{ end }} 111 </div> 112 </div> 113 </main> 114 <footer class="footer mt-auto py-3 bg-dark"> 115 <div class="container"> 116 <small class="text-white-50">Status @ {{ .Now }}</small> 117 </div> 118 </footer> 119 </body> 120 </html>