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