1 // performance_schema - library routines for pstop.
3 // This file contains the library routines for managing the
4 // table_io_waits_by_table table.
5 package table_io_waits_summary_by_table
11 "github.com/sjmudd/pstop/lib"
12 ps "github.com/sjmudd/pstop/performance_schema"
16 type Table_io_waits_summary_by_table struct {
20 initial table_io_waits_summary_by_table_rows // initial data for relative values
21 current table_io_waits_summary_by_table_rows // last loaded values
22 results table_io_waits_summary_by_table_rows // results (maybe with subtraction)
23 totals table_io_waits_summary_by_table_row // totals of results
26 func (t *Table_io_waits_summary_by_table) SetWantsLatency(want_latency bool) {
27 t.want_latency = want_latency
30 func (t Table_io_waits_summary_by_table) WantsLatency() bool {
34 // Collect() collects data from the db, updating initial
35 // values if needed, and then subtracting initial values if we want
36 // relative values, after which it stores totals.
37 func (t *Table_io_waits_summary_by_table) Collect(dbh *sql.DB) {
38 lib.Logger.Println("Table_io_waits_summary_by_table.Collect() BEGIN")
39 t.current = select_tiwsbt_rows(dbh)
40 lib.Logger.Println("- t.current set from", len(t.current), "collected row(s) from SELECT")
42 if len(t.initial) == 0 && len(t.current) > 0 {
43 // lib.Logger.Println("- setting t.initial to initial value" )
44 t.initial = make(table_io_waits_summary_by_table_rows, len(t.current))
45 copy(t.initial, t.current)
48 // check for reload initial characteristics
49 if t.initial.needs_refresh(t.current) {
50 // lib.Logger.Println( "- t.initial data needs refreshing!" )
51 t.initial = make(table_io_waits_summary_by_table_rows, len(t.current))
52 copy(t.initial, t.current)
57 // lib.Logger.Println( "t.initial:", t.initial )
58 // lib.Logger.Println( "t.current:", t.current )
59 lib.Logger.Println("t.results:", t.results)
60 lib.Logger.Println("t.totals:", t.totals)
61 lib.Logger.Println("Table_io_waits_summary_by_table.Collect() END")
64 func (t *Table_io_waits_summary_by_table) make_results() {
65 // lib.Logger.Println( "- t.results set from t.current" )
66 t.results = make(table_io_waits_summary_by_table_rows, len(t.current))
67 copy(t.results, t.current)
68 if t.WantRelativeStats() {
69 // lib.Logger.Println( "- subtracting t.initial from t.results as WantRelativeStats()" )
70 t.results.subtract(t.initial)
73 // lib.Logger.Println( "- sorting t.results" )
74 t.results.Sort(t.want_latency)
75 // lib.Logger.Println( "- collecting t.totals from t.results" )
76 t.totals = t.results.totals()
79 // reset the statistics to current values
80 func (t *Table_io_waits_summary_by_table) UpdateInitialValues() {
81 // lib.Logger.Println( "Table_io_waits_summary_by_table.UpdateInitialValues() BEGIN" )
83 t.initial = make(table_io_waits_summary_by_table_rows, len(t.current))
84 copy(t.initial, t.current)
88 // lib.Logger.Println( "Table_io_waits_summary_by_table.UpdateInitialValues() END" )
91 func (t *Table_io_waits_summary_by_table) Headings() string {
93 return t.latencyHeadings()
95 return t.opsHeadings()
99 func (t Table_io_waits_summary_by_table) RowContent(max_rows int) []string {
101 return t.latencyRowContent(max_rows)
103 return t.opsRowContent(max_rows)
107 func (t Table_io_waits_summary_by_table) EmptyRowContent() string {
109 return t.emptyLatencyRowContent()
111 return t.emptyOpsRowContent()
115 func (t Table_io_waits_summary_by_table) TotalRowContent() string {
117 return t.totalLatencyRowContent()
119 return t.totalOpsRowContent()
123 func (t Table_io_waits_summary_by_table) Description() string {
125 return t.latencyDescription()
127 return t.opsDescription()
131 func (t *Table_io_waits_summary_by_table) latencyHeadings() string {
132 var r table_io_waits_summary_by_table_row
134 return r.latency_headings()
137 func (t *Table_io_waits_summary_by_table) opsHeadings() string {
138 var r table_io_waits_summary_by_table_row
140 return r.ops_headings()
143 func (t Table_io_waits_summary_by_table) opsRowContent(max_rows int) []string {
144 rows := make([]string, 0, max_rows)
146 for i := range t.results {
148 rows = append(rows, t.results[i].ops_row_content(t.totals))
155 func (t Table_io_waits_summary_by_table) latencyRowContent(max_rows int) []string {
156 rows := make([]string, 0, max_rows)
158 for i := range t.results {
160 rows = append(rows, t.results[i].latency_row_content(t.totals))
167 func (t Table_io_waits_summary_by_table) emptyOpsRowContent() string {
168 var r table_io_waits_summary_by_table_row
170 return r.ops_row_content(r)
173 func (t Table_io_waits_summary_by_table) emptyLatencyRowContent() string {
174 var r table_io_waits_summary_by_table_row
176 return r.latency_row_content(r)
179 func (t Table_io_waits_summary_by_table) totalOpsRowContent() string {
180 return t.totals.ops_row_content(t.totals)
183 func (t Table_io_waits_summary_by_table) totalLatencyRowContent() string {
184 return t.totals.latency_row_content(t.totals)
187 func (t Table_io_waits_summary_by_table) latencyDescription() string {
188 count := t.count_rows()
189 return fmt.Sprintf("Latency by Table Name (table_io_waits_summary_by_table) %d rows", count)
192 func (t Table_io_waits_summary_by_table) opsDescription() string {
193 count := t.count_rows()
194 return fmt.Sprintf("Operations by Table Name (table_io_waits_summary_by_table) %d rows", count)
197 func (t Table_io_waits_summary_by_table) count_rows() int {
199 for row := range t.results {
200 if t.results[row].SUM_TIMER_WAIT > 0 {