github.com/kyleu/dbaudit@v0.0.2-0.20240321155047-ff2f2c940496/views/vparse/SQLServer.html (about)

     1  {% import (
     2    "github.com/kyleu/dbaudit/app"
     3    "github.com/kyleu/dbaudit/app/controller/cutil"
     4    "github.com/kyleu/dbaudit/app/parse"
     5    "github.com/kyleu/dbaudit/app/util"
     6    "github.com/kyleu/dbaudit/views/components"
     7    "github.com/kyleu/dbaudit/views/components/edit"
     8    "github.com/kyleu/dbaudit/views/layout"
     9  ) %}
    10  
    11  {% code type SQLServer struct {
    12    layout.Basic
    13    Path string
    14    Task string
    15    Limit int
    16    Result *parse.Result
    17  } %}
    18  
    19  {% func (p *SQLServer) Body(as *app.State, ps *cutil.PageState) %}
    20    <div class="card">
    21      <h3>{%= components.SVGRefIcon(`app`, ps) %}SQL Server Analysis</h3>
    22      <form action="" method="post">
    23        <table class="mt expanded min-200">
    24          <tbody>
    25            {%= edit.StringTable("path", "", "File Path", p.Path, 5, "Location of SQL Audit files") %}
    26            {%= edit.SelectTable("task", "", "Task", p.Task, []string{"testbed", "count", "top10"}, nil, 5, "Task to run") %}
    27            {%= edit.IntTable("limit", "", "Event Limit", p.Limit, 5, "Limit for returned events") %}
    28            <tr><td colspan="2"><button type="submit">Analyze</button></td></tr>
    29          </tbody>
    30        </table>
    31      </form>
    32    </div>
    33    {%- if p.Result != nil -%}
    34    <div class="card">
    35      <h3>{%= components.SVGRefIcon(`cog`, ps) %}{%s util.StringPlural(len(p.Result.Events), "Event") %}</h3>
    36      <div class="mt overflow full-width">
    37        <table class="expanded">
    38          <thead>
    39            <tr>
    40              <th>ID</th>
    41              <th>Action</th>
    42              <th>Statement</th>
    43              <th>Arguments</th>
    44              <th>Rows</th>
    45              <th>Duration</th>
    46              <th>Occurred</th>
    47            </tr>
    48          </thead>
    49          <tbody>
    50            {%- for _, st := range p.Result.Statements -%}
    51            <tr>
    52              <td>
    53                <a href="#modal-event-{%s st.ID.String() %}">{%s st.ID.String() %}</a>
    54                <div id="modal-event-{%s st.ID.String() %}" class="modal" style="display: none;">
    55                  <a class="backdrop" href="#"></a>
    56                  <div class="modal-content">
    57                    <div class="modal-header">
    58                      <a href="#" class="modal-close">×</a>
    59                      <h2>Event [{%s st.ID.String() %}]</h2>
    60                    </div>
    61                    <div class="modal-body">
    62                      <ul class="accordion">
    63                        <li>
    64                          <input id="accordion-event-{%s st.ID.String() %}-raw" type="checkbox" hidden="hidden" />
    65                          <label for="accordion-event-{%s st.ID.String() %}-raw">{%= components.ExpandCollapse(3, ps) %}Full Event</label>
    66                          <div class="bd"><div><div>
    67                            {%= components.JSON(st) %}
    68                          </div></div></div>
    69                        </li>
    70                        <li>
    71                          <input id="accordion-event-{%s st.ID.String() %}-sql" type="checkbox" hidden="hidden" />
    72                          <label for="accordion-event-{%s st.ID.String() %}-sql">{%= components.ExpandCollapse(3, ps) %}SQL Statement</label>
    73                          <div class="bd"><div><div>
    74                            <pre style="white-space: pre-wrap;">{%s st.SQL %}</pre>
    75                          </div></div></div>
    76                        </li>
    77                        <li>
    78                          <input id="accordion-event-{%s st.ID.String() %}-args" type="checkbox" hidden="hidden" />
    79                          <label for="accordion-event-{%s st.ID.String() %}-args">{%= components.ExpandCollapse(3, ps) %}Arguments</label>
    80                          <div class="bd"><div><div>
    81                            {%= components.JSON(st.Values) %}
    82                          </div></div></div>
    83                        </li>
    84                      </ul>
    85                    </div>
    86                  </div>
    87                </div>
    88              </td>
    89              <td>{%s st.Action.String() %}</td>
    90              <td>{%s util.ByteSizeSI(int64(len(st.SQL))) %}</td>
    91              <td>{%d len(st.Values) %}</td>
    92              <td>{%d st.RowsAffected %}</td>
    93              <td>{%s util.MicrosToMillis(st.Duration * 1000) %}</td>
    94              <td>{%s util.TimeToFullMS(&st.Occurred) %}</td>
    95            </tr>
    96            {%- endfor -%}
    97          </tbody>
    98        </table>
    99      </div>
   100    </div>
   101    {%- endif -%}
   102  {% endfunc %}