BUG: remove the @0024 --> $ comment as fixed
[pstop.git] / performance_schema / table_lock_waits_summary_by_table / table_lock_waits_summary_by_table.go
1 // This file contains the library routines for managing the
2 // table_lock_waits_summary_by_table table.
3 package table_lock_waits_summary_by_table
4
5 import (
6         "database/sql"
7         _ "github.com/go-sql-driver/mysql"
8         "time"
9
10         "github.com/sjmudd/pstop/lib"
11         ps "github.com/sjmudd/pstop/performance_schema"
12 )
13
14 // a table of rows
15 type Table_lock_waits_summary_by_table struct {
16         ps.RelativeStats
17         ps.InitialTime
18         initial table_lock_waits_summary_by_table_rows // initial data for relative values
19         current table_lock_waits_summary_by_table_rows // last loaded values
20         results table_lock_waits_summary_by_table_rows // results (maybe with subtraction)
21         totals  table_lock_waits_summary_by_table_row  // totals of results
22 }
23
24 // Collect data from the db, then merge it in.
25 func (t *Table_lock_waits_summary_by_table) Collect(dbh *sql.DB) {
26         start := time.Now()
27         t.current = select_tlwsbt_rows(dbh)
28
29         if len(t.initial) == 0 && len(t.current) > 0 {
30                 t.initial = make(table_lock_waits_summary_by_table_rows, len(t.current))
31                 copy(t.initial, t.current)
32         }
33
34         // check for reload initial characteristics
35         if t.initial.needs_refresh(t.current) {
36                 t.initial = make(table_lock_waits_summary_by_table_rows, len(t.current))
37                 copy(t.initial, t.current)
38         }
39
40         t.make_results()
41         lib.Logger.Println("Table_lock_waits_summary_by_table.Collect() took:", time.Duration(time.Since(start)).String())
42 }
43
44 func (t *Table_lock_waits_summary_by_table) make_results() {
45         // lib.Logger.Println( "- t.results set from t.current" )
46         t.results = make(table_lock_waits_summary_by_table_rows, len(t.current))
47         copy(t.results, t.current)
48         if t.WantRelativeStats() {
49                 // lib.Logger.Println( "- subtracting t.initial from t.results as WantRelativeStats()" )
50                 t.results.subtract(t.initial)
51         }
52
53         // lib.Logger.Println( "- sorting t.results" )
54         t.results.sort()
55         // lib.Logger.Println( "- collecting t.totals from t.results" )
56         t.totals = t.results.totals()
57 }
58
59 // reset the statistics to current values
60 func (t *Table_lock_waits_summary_by_table) SyncReferenceValues() {
61         t.SetNow()
62         t.initial = make(table_lock_waits_summary_by_table_rows, len(t.current))
63         copy(t.initial, t.current)
64
65         t.make_results()
66 }
67
68 // return the headings for a table
69 func (t Table_lock_waits_summary_by_table) Headings() string {
70         var r table_lock_waits_summary_by_table_row
71
72         return r.headings()
73 }
74
75 // return the rows we need for displaying
76 func (t Table_lock_waits_summary_by_table) RowContent(max_rows int) []string {
77         rows := make([]string, 0, max_rows)
78
79         for i := range t.results {
80                 if i < max_rows {
81                         rows = append(rows, t.results[i].row_content(t.totals))
82                 }
83         }
84
85         return rows
86 }
87
88 // return all the totals
89 func (t Table_lock_waits_summary_by_table) TotalRowContent() string {
90         return t.totals.row_content(t.totals)
91 }
92
93 // return an empty string of data (for filling in)
94 func (t Table_lock_waits_summary_by_table) EmptyRowContent() string {
95         var emtpy table_lock_waits_summary_by_table_row
96         return emtpy.row_content(emtpy)
97 }
98
99 func (t Table_lock_waits_summary_by_table) Description() string {
100         return "Locks by Table Name (table_lock_waits_summary_by_table)"
101 }