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>