mirror of
https://github.com/VictoriaMetrics/VictoriaMetrics.git
synced 2024-12-19 15:06:25 +01:00
b2294d1cf1
add progress bars to the VM importer The new progress bars supposed to display the processing speed per each VM importer worker. This info should help to identify if there is a bottleneck on the VM side during the import process, without waiting for its finish. The new progress bars can be disabled by passing `vm-disable-progress-bar` flag. Plotting multiple progress bars requires using experimental progress bar pool from github.com/cheggaaa/pb/v3. Switch to progress bar pool required changes in all import modes. The openTSDB mode wasn't changed due to its implementation, which implies individual progress bars per each series. Because of this, using the pool wasn't possible. Signed-off-by: dmitryk-dk <kozlovdmitriyy@gmail.com> Co-authored-by: hagen1778 <roman@victoriametrics.com>
69 lines
1.3 KiB
Go
69 lines
1.3 KiB
Go
package termutil
|
|
|
|
import (
|
|
"errors"
|
|
"os"
|
|
"os/signal"
|
|
"sync"
|
|
)
|
|
|
|
var echoLocked bool
|
|
var echoLockMutex sync.Mutex
|
|
var errLocked = errors.New("terminal locked")
|
|
var autoTerminate = true
|
|
|
|
// AutoTerminate enables or disables automatic terminate signal catching.
|
|
// It's needed to restore the terminal state after the pool was used.
|
|
// By default, it's enabled.
|
|
func AutoTerminate(enable bool) {
|
|
echoLockMutex.Lock()
|
|
defer echoLockMutex.Unlock()
|
|
autoTerminate = enable
|
|
}
|
|
|
|
// RawModeOn switches terminal to raw mode
|
|
func RawModeOn() (quit chan struct{}, err error) {
|
|
echoLockMutex.Lock()
|
|
defer echoLockMutex.Unlock()
|
|
if echoLocked {
|
|
err = errLocked
|
|
return
|
|
}
|
|
if err = lockEcho(); err != nil {
|
|
return
|
|
}
|
|
echoLocked = true
|
|
quit = make(chan struct{}, 1)
|
|
go catchTerminate(quit)
|
|
return
|
|
}
|
|
|
|
// RawModeOff restore previous terminal state
|
|
func RawModeOff() (err error) {
|
|
echoLockMutex.Lock()
|
|
defer echoLockMutex.Unlock()
|
|
if !echoLocked {
|
|
return
|
|
}
|
|
if err = unlockEcho(); err != nil {
|
|
return
|
|
}
|
|
echoLocked = false
|
|
return
|
|
}
|
|
|
|
// listen exit signals and restore terminal state
|
|
func catchTerminate(quit chan struct{}) {
|
|
sig := make(chan os.Signal, 1)
|
|
if autoTerminate {
|
|
signal.Notify(sig, unlockSignals...)
|
|
defer signal.Stop(sig)
|
|
}
|
|
select {
|
|
case <-quit:
|
|
RawModeOff()
|
|
case <-sig:
|
|
RawModeOff()
|
|
}
|
|
}
|