1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- package api_rest
- import (
- "errors"
- "fmt"
- "time"
- "github.com/bettercap/recording"
- "github.com/evilsocket/islazy/fs"
- )
- var (
- errNotReplaying = errors.New("not replaying")
- )
- func (mod *RestAPI) errAlreadyReplaying() error {
- return fmt.Errorf("the module is already replaying a session from %s", mod.recordFileName)
- }
- func (mod *RestAPI) startReplay(filename string) (err error) {
- if mod.replaying {
- return mod.errAlreadyReplaying()
- } else if mod.recording {
- return mod.errAlreadyRecording()
- } else if mod.recordFileName, err = fs.Expand(filename); err != nil {
- return err
- }
- mod.State.Store("load_progress", 0)
- defer func() {
- mod.State.Store("load_progress", 100.0)
- }()
- mod.loading = true
- defer func() {
- mod.loading = false
- }()
- mod.Info("loading %s ...", mod.recordFileName)
- start := time.Now()
- mod.record, err = recording.Load(mod.recordFileName, func(progress float64, done int, total int) {
- mod.State.Store("load_progress", progress)
- })
- if err != nil {
- return err
- }
- loadedIn := time.Since(start)
- // we need the api itself up and running
- if !mod.Running() {
- if err := mod.Start(); err != nil {
- return err
- }
- }
- mod.recStarted = mod.record.Session.StartedAt()
- mod.recStopped = mod.record.Session.StoppedAt()
- duration := mod.recStopped.Sub(mod.recStarted)
- mod.recTime = int(duration.Seconds())
- mod.replaying = true
- mod.recording = false
- mod.Info("loaded %s of recording (%d frames) started at %s in %s, started replaying ...",
- duration,
- mod.record.Session.Frames(),
- mod.recStarted,
- loadedIn)
- return nil
- }
- func (mod *RestAPI) stopReplay() error {
- if !mod.replaying {
- return errNotReplaying
- }
- mod.replaying = false
- mod.Info("stopped replaying from %s ...", mod.recordFileName)
- mod.recordFileName = ""
- return nil
- }
|