github.com/grafana/pyroscope@v1.18.0/pkg/operations/v2/tool.blocks.dataset.symbols.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 Symbols</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 Symbols</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 <ul class="nav nav-tabs mb-3" id="symbolsTabs" role="tablist"> 48 <li class="nav-item" role="presentation"> 49 <a class="nav-link {{ if eq .Tab "strings" }}active{{ end }}" href="?dataset={{ if .Dataset.Name }}{{ .Dataset.Name }}{{ else }}_empty{{ end }}&shard={{ .Shard }}&block_tenant={{ .BlockTenant }}&tab=strings&page=1&page_size={{ .PageSize }}"> 50 Strings ({{ .Symbols.TotalStrings }}) 51 </a> 52 </li> 53 <li class="nav-item" role="presentation"> 54 <a class="nav-link {{ if eq .Tab "functions" }}active{{ end }}" href="?dataset={{ if .Dataset.Name }}{{ .Dataset.Name }}{{ else }}_empty{{ end }}&shard={{ .Shard }}&block_tenant={{ .BlockTenant }}&tab=functions&page=1&page_size={{ .PageSize }}"> 55 Functions ({{ .Symbols.TotalFunctions }}) 56 </a> 57 </li> 58 <li class="nav-item" role="presentation"> 59 <a class="nav-link {{ if eq .Tab "locations" }}active{{ end }}" href="?dataset={{ if .Dataset.Name }}{{ .Dataset.Name }}{{ else }}_empty{{ end }}&shard={{ .Shard }}&block_tenant={{ .BlockTenant }}&tab=locations&page=1&page_size={{ .PageSize }}"> 60 Locations ({{ .Symbols.TotalLocations }}) 61 </a> 62 </li> 63 <li class="nav-item" role="presentation"> 64 <a class="nav-link {{ if eq .Tab "mappings" }}active{{ end }}" href="?dataset={{ if .Dataset.Name }}{{ .Dataset.Name }}{{ else }}_empty{{ end }}&shard={{ .Shard }}&block_tenant={{ .BlockTenant }}&tab=mappings&page=1&page_size={{ .PageSize }}"> 65 Mappings ({{ .Symbols.TotalMappings }}) 66 </a> 67 </li> 68 </ul> 69 70 <div class="tab-content" id="symbolsTabContent"> 71 {{ if eq .Tab "strings" }} 72 <div class="tab-pane fade show active" id="strings" role="tabpanel"> 73 <div class="d-flex justify-content-between align-items-center mt-3 mb-3"> 74 <h5 class="mb-0">Strings</h5> 75 <div class="text-muted"> 76 {{ if gt .Symbols.TotalStrings 0 }} 77 Showing {{ add (mul (add .Page -1) .PageSize) 1 }}-{{ if lt (mul .Page .PageSize) .Symbols.TotalStrings }}{{ mul .Page .PageSize }}{{ else }}{{ .Symbols.TotalStrings }}{{ end }} of {{ .Symbols.TotalStrings }} 78 {{ end }} 79 </div> 80 </div> 81 82 {{ if gt .TotalPages 1 }} 83 <div class="mb-3"> 84 {{ $datasetName := "_empty" }} 85 {{ if .Dataset.Name }}{{ $datasetName = .Dataset.Name }}{{ end }} 86 {{ template "pagination" dict "BaseURL" (printf "?dataset=%s&shard=%d&block_tenant=%s&tab=strings" $datasetName .Shard .BlockTenant) "Page" .Page "PageSize" .PageSize "TotalPages" .TotalPages "HasPrevPage" .HasPrevPage "HasNextPage" .HasNextPage }} 87 </div> 88 {{ end }} 89 90 <div class="table-responsive"> 91 <table class="table table-sm table-dark table-striped"> 92 <thead> 93 <tr> 94 <th style="width: 100px;">Index</th> 95 <th>String</th> 96 </tr> 97 </thead> 98 <tbody> 99 {{ range .Symbols.Strings }} 100 <tr> 101 <td>{{ .Index }}</td> 102 <td><code class="text-break">{{ .Symbol }}</code></td> 103 </tr> 104 {{ end }} 105 </tbody> 106 </table> 107 </div> 108 109 {{ if gt .TotalPages 1 }} 110 {{ $datasetName := "_empty" }} 111 {{ if .Dataset.Name }}{{ $datasetName = .Dataset.Name }}{{ end }} 112 {{ template "pagination" dict "BaseURL" (printf "?dataset=%s&shard=%d&block_tenant=%s&tab=strings" $datasetName .Shard .BlockTenant) "Page" .Page "PageSize" .PageSize "TotalPages" .TotalPages "HasPrevPage" .HasPrevPage "HasNextPage" .HasNextPage }} 113 {{ end }} 114 </div> 115 {{ end }} 116 117 {{ if eq .Tab "functions" }} 118 <div class="tab-pane fade show active" id="functions" role="tabpanel"> 119 <div class="d-flex justify-content-between align-items-center mt-3 mb-3"> 120 <h5 class="mb-0">Functions</h5> 121 <div class="text-muted"> 122 {{ if gt .Symbols.TotalFunctions 0 }} 123 Showing {{ add (mul (add .Page -1) .PageSize) 1 }}-{{ if lt (mul .Page .PageSize) .Symbols.TotalFunctions }}{{ mul .Page .PageSize }}{{ else }}{{ .Symbols.TotalFunctions }}{{ end }} of {{ .Symbols.TotalFunctions }} 124 {{ end }} 125 </div> 126 </div> 127 128 {{ if gt .TotalPages 1 }} 129 <div class="mb-3"> 130 {{ $datasetName := "_empty" }} 131 {{ if .Dataset.Name }}{{ $datasetName = .Dataset.Name }}{{ end }} 132 {{ template "pagination" dict "BaseURL" (printf "?dataset=%s&shard=%d&block_tenant=%s&tab=functions" $datasetName .Shard .BlockTenant) "Page" .Page "PageSize" .PageSize "TotalPages" .TotalPages "HasPrevPage" .HasPrevPage "HasNextPage" .HasNextPage }} 133 </div> 134 {{ end }} 135 136 <div class="table-responsive"> 137 <table class="table table-sm table-dark table-striped"> 138 <thead> 139 <tr> 140 <th style="width: 80px;">Index</th> 141 <th style="width: 100px;">ID</th> 142 <th>Name</th> 143 <th>System Name</th> 144 <th>Filename</th> 145 <th style="width: 100px;">Line</th> 146 </tr> 147 </thead> 148 <tbody> 149 {{ range .Symbols.Functions }} 150 <tr> 151 <td>{{ .Index }}</td> 152 <td>{{ .ID }}</td> 153 <td><code class="text-break small">{{ .Name }}</code></td> 154 <td><code class="text-break small">{{ .SystemName }}</code></td> 155 <td><code class="text-break small">{{ .Filename }}</code></td> 156 <td>{{ .StartLine }}</td> 157 </tr> 158 {{ end }} 159 </tbody> 160 </table> 161 </div> 162 163 {{ if gt .TotalPages 1 }} 164 {{ $datasetName := "_empty" }} 165 {{ if .Dataset.Name }}{{ $datasetName = .Dataset.Name }}{{ end }} 166 {{ template "pagination" dict "BaseURL" (printf "?dataset=%s&shard=%d&block_tenant=%s&tab=functions" $datasetName .Shard .BlockTenant) "Page" .Page "PageSize" .PageSize "TotalPages" .TotalPages "HasPrevPage" .HasPrevPage "HasNextPage" .HasNextPage }} 167 {{ end }} 168 </div> 169 {{ end }} 170 171 {{ if eq .Tab "locations" }} 172 <div class="tab-pane fade show active" id="locations" role="tabpanel"> 173 <div class="d-flex justify-content-between align-items-center mt-3 mb-3"> 174 <h5 class="mb-0">Locations</h5> 175 <div class="text-muted"> 176 {{ if gt .Symbols.TotalLocations 0 }} 177 Showing {{ add (mul (add .Page -1) .PageSize) 1 }}-{{ if lt (mul .Page .PageSize) .Symbols.TotalLocations }}{{ mul .Page .PageSize }}{{ else }}{{ .Symbols.TotalLocations }}{{ end }} of {{ .Symbols.TotalLocations }} 178 {{ end }} 179 </div> 180 </div> 181 182 {{ if gt .TotalPages 1 }} 183 <div class="mb-3"> 184 {{ $datasetName := "_empty" }} 185 {{ if .Dataset.Name }}{{ $datasetName = .Dataset.Name }}{{ end }} 186 {{ template "pagination" dict "BaseURL" (printf "?dataset=%s&shard=%d&block_tenant=%s&tab=locations" $datasetName .Shard .BlockTenant) "Page" .Page "PageSize" .PageSize "TotalPages" .TotalPages "HasPrevPage" .HasPrevPage "HasNextPage" .HasNextPage }} 187 </div> 188 {{ end }} 189 190 <div class="table-responsive"> 191 <table class="table table-sm table-dark table-striped"> 192 <thead> 193 <tr> 194 <th style="width: 80px;">Index</th> 195 <th style="width: 100px;">ID</th> 196 <th style="width: 150px;">Address</th> 197 <th style="width: 100px;">Mapping</th> 198 <th>Lines (Function @ Line)</th> 199 </tr> 200 </thead> 201 <tbody> 202 {{ range .Symbols.Locations }} 203 <tr> 204 <td>{{ .Index }}</td> 205 <td>{{ .ID }}</td> 206 <td><code>0x{{ printf "%x" .Address }}</code></td> 207 <td>{{ .MappingID }}</td> 208 <td> 209 {{ if .Lines }} 210 {{ range $i, $line := .Lines }} 211 {{ if $i }}<br>{{ end }}<code class="small">{{ $line.FunctionName }}</code>{{ if gt $line.Line 0 }} @ L{{ $line.Line }}{{ end }} 212 {{ end }} 213 {{ else }} 214 <em>none</em> 215 {{ end }} 216 </td> 217 </tr> 218 {{ end }} 219 </tbody> 220 </table> 221 </div> 222 223 {{ if gt .TotalPages 1 }} 224 {{ $datasetName := "_empty" }} 225 {{ if .Dataset.Name }}{{ $datasetName = .Dataset.Name }}{{ end }} 226 {{ template "pagination" dict "BaseURL" (printf "?dataset=%s&shard=%d&block_tenant=%s&tab=locations" $datasetName .Shard .BlockTenant) "Page" .Page "PageSize" .PageSize "TotalPages" .TotalPages "HasPrevPage" .HasPrevPage "HasNextPage" .HasNextPage }} 227 {{ end }} 228 </div> 229 {{ end }} 230 231 {{ if eq .Tab "mappings" }} 232 <div class="tab-pane fade show active" id="mappings" role="tabpanel"> 233 <div class="d-flex justify-content-between align-items-center mt-3 mb-3"> 234 <h5 class="mb-0">Mappings</h5> 235 <div class="text-muted"> 236 {{ if gt .Symbols.TotalMappings 0 }} 237 Showing {{ add (mul (add .Page -1) .PageSize) 1 }}-{{ if lt (mul .Page .PageSize) .Symbols.TotalMappings }}{{ mul .Page .PageSize }}{{ else }}{{ .Symbols.TotalMappings }}{{ end }} of {{ .Symbols.TotalMappings }} 238 {{ end }} 239 </div> 240 </div> 241 242 {{ if gt .TotalPages 1 }} 243 <div class="mb-3"> 244 {{ $datasetName := "_empty" }} 245 {{ if .Dataset.Name }}{{ $datasetName = .Dataset.Name }}{{ end }} 246 {{ template "pagination" dict "BaseURL" (printf "?dataset=%s&shard=%d&block_tenant=%s&tab=mappings" $datasetName .Shard .BlockTenant) "Page" .Page "PageSize" .PageSize "TotalPages" .TotalPages "HasPrevPage" .HasPrevPage "HasNextPage" .HasNextPage }} 247 </div> 248 {{ end }} 249 250 <div class="table-responsive"> 251 <table class="table table-sm table-dark table-striped"> 252 <thead> 253 <tr> 254 <th style="width: 80px;">Index</th> 255 <th style="width: 100px;">ID</th> 256 <th style="width: 150px;">Memory Range</th> 257 <th style="width: 120px;">File Offset</th> 258 <th>Filename</th> 259 <th>Build ID</th> 260 </tr> 261 </thead> 262 <tbody> 263 {{ range .Symbols.Mappings }} 264 <tr> 265 <td>{{ .Index }}</td> 266 <td>{{ .ID }}</td> 267 <td><code class="small">0x{{ printf "%x" .MemoryStart }}-0x{{ printf "%x" .MemoryLimit }}</code></td> 268 <td><code class="small">0x{{ printf "%x" .FileOffset }}</code></td> 269 <td><code class="text-break small">{{ .Filename }}</code></td> 270 <td><code class="text-break small">{{ .BuildID }}</code></td> 271 </tr> 272 {{ end }} 273 </tbody> 274 </table> 275 </div> 276 277 {{ if gt .TotalPages 1 }} 278 {{ $datasetName := "_empty" }} 279 {{ if .Dataset.Name }}{{ $datasetName = .Dataset.Name }}{{ end }} 280 {{ template "pagination" dict "BaseURL" (printf "?dataset=%s&shard=%d&block_tenant=%s&tab=mappings" $datasetName .Shard .BlockTenant) "Page" .Page "PageSize" .PageSize "TotalPages" .TotalPages "HasPrevPage" .HasPrevPage "HasNextPage" .HasNextPage }} 281 {{ end }} 282 </div> 283 {{ end }} 284 </div> 285 </div> 286 </div> 287 </main> 288 <footer class="footer mt-auto py-3 bg-dark"> 289 <div class="container"> 290 <small class="text-white-50">Status @ {{ .Now }}</small> 291 </div> 292 </footer> 293 </body> 294 </html>