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
7 _ "github.com/go-sql-driver/mysql"
10 "github.com/sjmudd/pstop/lib"
11 "github.com/sjmudd/pstop/p_s"
15 type Table_lock_waits_summary_by_table struct {
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
24 // Collect data from the db, then merge it in.
25 func (t *Table_lock_waits_summary_by_table) Collect(dbh *sql.DB) {
27 t.current = select_tlwsbt_rows(dbh)
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)
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)
41 lib.Logger.Println("Table_lock_waits_summary_by_table.Collect() took:", time.Duration(time.Since(start)).String())
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)
53 // lib.Logger.Println( "- sorting t.results" )
55 // lib.Logger.Println( "- collecting t.totals from t.results" )
56 t.totals = t.results.totals()
59 // reset the statistics to current values
60 func (t *Table_lock_waits_summary_by_table) SyncReferenceValues() {
62 t.initial = make(table_lock_waits_summary_by_table_rows, len(t.current))
63 copy(t.initial, t.current)
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
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)
79 for i := range t.results {
81 rows = append(rows, t.results[i].row_content(t.totals))
88 // return all the totals
89 func (t Table_lock_waits_summary_by_table) TotalRowContent() string {
90 return t.totals.row_content(t.totals)
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)
99 func (t Table_lock_waits_summary_by_table) Description() string {
100 return "Locks by Table Name (table_lock_waits_summary_by_table)"