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 %}