X-Git-Url: http://git.iain.cx/?a=blobdiff_plain;f=state%2Fstate.go;h=90c3f7dc394150bba5acf3c8162bae5bd1c2d6bd;hb=84f9a5c41e806461c4193db0c7a0ef652b1b1357;hp=03d99381891f3909c8a5d75e1b394adc09e74bc4;hpb=38376bf5db9af25660b8183b2c022d079bb2b5ea;p=pstop.git diff --git a/state/state.go b/state/state.go index 03d9938..90c3f7d 100644 --- a/state/state.go +++ b/state/state.go @@ -75,14 +75,38 @@ func (state *State) Setup(dbh *sql.DB) { // do a fresh collection of data and then update the initial values based on that. func (state *State) ResetDBStatistics() { - state.fsbi.Collect(state.dbh) - state.fsbi.UpdateInitialValues() + state.CollectAll() + state.SyncReferenceValues() +} - state.tlwsbt.Collect(state.dbh) - state.tlwsbt.UpdateInitialValues() +func (state *State) SyncReferenceValues() { + start := time.Now() + state.fsbi.SyncReferenceValues() + state.tlwsbt.SyncReferenceValues() + state.tiwsbt.SyncReferenceValues() + lib.Logger.Println("state.SyncReferenceValues() took", time.Duration(time.Since(start)).String()) +} +// collect all initial values on startup / reset +func (state *State) CollectAll() { + state.fsbi.Collect(state.dbh) + state.tlwsbt.Collect(state.dbh) state.tiwsbt.Collect(state.dbh) - state.tiwsbt.UpdateInitialValues() +} + +// Only collect the data we are looking at. +func (state *State) Collect() { + start := time.Now() + + switch state.show { + case showLatency, showOps: + state.tiwsbt.Collect(state.dbh) + case showIO: + state.fsbi.Collect(state.dbh) + case showLocks: + state.tlwsbt.Collect(state.dbh) + } + lib.Logger.Println("state.Collect() took", time.Duration(time.Since(start)).String()) } func (state State) MySQLVersion() string { @@ -153,7 +177,7 @@ func (state *State) DisplayNext() { func (state State) displayHeading() { state.displayLine0() - state.displayLine1() + state.displayDescription() } func (state State) displayLine0() { @@ -184,22 +208,22 @@ func (state State) displayLine0() { state.screen.PrintAt(0, 0, top_line) } -func (state State) displayLine1() { +func (state State) displayDescription() { + description := "UNKNOWN" + switch state.show { case showLatency, showOps: - state.screen.PrintAt(0, 1, state.tiwsbt.Description()) + description = state.tiwsbt.Description() case showIO: - state.screen.PrintAt(0, 1, state.fsbi.Description()) + description = state.fsbi.Description() case showLocks: - state.screen.PrintAt(0, 1, state.tlwsbt.Description()) - default: - state.screen.PrintAt(0, 1, "UNKNOWN") + description = state.tlwsbt.Description() } + + state.screen.PrintAt(0, 1, description) } func (state *State) displayOpsOrLatency() { - state.tiwsbt.Collect(state.dbh) - state.screen.PrintAt(0, 2, state.tiwsbt.Headings()) max_rows := state.screen.Height() - 3 @@ -224,8 +248,6 @@ func (state *State) displayOpsOrLatency() { // show actual I/O latency values func (state State) displayIO() { - state.fsbi.Collect(state.dbh) - state.screen.PrintAt(0, 2, state.fsbi.Headings()) // print out the data @@ -250,8 +272,6 @@ func (state State) displayIO() { } func (state *State) displayLocks() { - state.tlwsbt.Collect(state.dbh) - state.screen.PrintAt(0, 2, state.tlwsbt.Headings()) // print out the data @@ -287,8 +307,6 @@ func (state *State) SetWantRelativeStats(want_relative_stats bool) { state.fsbi.SetWantRelativeStats(want_relative_stats) state.tlwsbt.SetWantRelativeStats(state.want_relative_stats) state.tiwsbt.SetWantRelativeStats(state.want_relative_stats) - - state.Display() } // if there's a better way of doing this do it better ...