From 708f4623e5a24e6419aa567a03271820845ae7ac Mon Sep 17 00:00:00 2001 From: Prashant Gupta Date: Fri, 19 Apr 2019 15:52:37 -0700 Subject: [PATCH 1/3] added logfile option --- pkg/mousemover/mouseMover.go | 62 ++++++++++++++++++++++++++++-------- 1 file changed, 48 insertions(+), 14 deletions(-) diff --git a/pkg/mousemover/mouseMover.go b/pkg/mousemover/mouseMover.go index debcdb4..bb39d4c 100644 --- a/pkg/mousemover/mouseMover.go +++ b/pkg/mousemover/mouseMover.go @@ -1,9 +1,12 @@ package mousemover import ( + "fmt" + "os" "sync" "time" + "github.com/sirupsen/logrus" log "github.com/sirupsen/logrus" "github.com/go-vgo/robotgo" @@ -17,10 +20,12 @@ type MouseMover struct { quit chan struct{} mutex sync.RWMutex runningStatus bool + logFile *os.File } const ( - timeout = 100 //ms + timeout = 100 //ms + logFileName = "logFile" ) //Start the main app @@ -31,7 +36,7 @@ func (m *MouseMover) Start() { m.quit = make(chan struct{}) heartbeatInterval := 60 //value always in seconds - workerInterval := 15 + workerInterval := 10 activityTracker := &tracker.Instance{ HeartbeatInterval: heartbeatInterval, @@ -42,8 +47,11 @@ func (m *MouseMover) Start() { heartbeatCh := activityTracker.Start() go func(m *MouseMover) { + logger := getLogger(m, false) //set writeToFile=true only for debugging m.updateRunningStatus(true) movePixel := 10 + var lastMoved time.Time + didNotMoveTimes := 0 for { select { case heartbeat := <-heartbeatCh: @@ -53,29 +61,36 @@ func (m *MouseMover) Start() { select { case wasMouseMoveSuccess := <-mouseMoveSuccessCh: if wasMouseMoveSuccess { - log.Infof("moved mouse at : %v\n\n", time.Now()) + lastMoved = time.Now() + logger.Infof("moved mouse at : %v\n\n", lastMoved) movePixel *= -1 + didNotMoveTimes = 0 } else { - msg := "Mouse pointer cannot be moved. See README for details." - log.Errorf(msg) - robotgo.ShowAlert("Error with Automatic Mouse Mover", msg) + didNotMoveTimes++ + msg := fmt.Sprintf("Mouse pointer cannot be moved at %v. Last moved at %v. Happened %v times. See README for details.", + time.Now(), lastMoved, didNotMoveTimes) + logger.Errorf(msg) + if didNotMoveTimes >= 3 { + go func() { + robotgo.ShowAlert("Error with Automatic Mouse Mover", msg) + }() + } } case <-time.After(timeout * time.Millisecond): //timeout, do nothing - log.Errorf("timeout happened after %vms while trying to move mouse", timeout) + logger.Errorf("timeout happened after %vms while trying to move mouse", timeout) } - } else { - //uncomment just for reference - // log.Printf("activity detected in the last %v seconds.", int(heartbeatInterval)) - // log.Printf("Activity type:\n") + } else { //uncomment to see all activities received + // logger.Printf("activity detected in the last %v seconds.", int(heartbeatInterval)) + // logger.Printf("Activity type:\n") // for activityType, times := range heartbeat.ActivityMap { - // log.Printf("activityType : %v times: %v\n", activityType, len(times)) + // logger.Printf("activityType : %v times: %v\n", activityType, len(times)) // } - // log.Printf("\n\n\n") + // logger.Printf("\n\n\n") } case <-m.quit: - log.Infof("stopping mouse mover") + logger.Infof("stopping mouse mover") m.updateRunningStatus(false) activityTracker.Quit() return @@ -117,6 +132,7 @@ func (m *MouseMover) Quit() { if m != nil && m.isRunning() { m.quit <- struct{}{} } + m.logFile.Close() } //GetInstance gets the singleton instance for mouse mover app @@ -126,3 +142,21 @@ func GetInstance() *MouseMover { } return instance } + +func getLogger(m *MouseMover, doWriteToFile bool) *log.Logger { + logger := log.New() + logger.Formatter = &logrus.TextFormatter{ + FullTimestamp: true, + } + + if doWriteToFile { + logFile, err := os.OpenFile(logFileName, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666) + if err != nil { + log.Fatalf("error opening file: %v", err) + } + logger.SetOutput(logFile) + m.logFile = logFile + } + + return logger +} From f212967d7186a70e341a6050aaebe035a9c3590e Mon Sep 17 00:00:00 2001 From: Prashant Gupta Date: Tue, 23 Apr 2019 16:51:58 -0700 Subject: [PATCH 2/3] added system sleep check --- .gitignore | 3 ++- pkg/mousemover/mouseMover.go | 32 ++++++++++++++++++++++---------- 2 files changed, 24 insertions(+), 11 deletions(-) diff --git a/.gitignore b/.gitignore index ec041ba..ade3b91 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ vendor/ -bin/ \ No newline at end of file +bin/ +log/ \ No newline at end of file diff --git a/pkg/mousemover/mouseMover.go b/pkg/mousemover/mouseMover.go index bb39d4c..c270963 100644 --- a/pkg/mousemover/mouseMover.go +++ b/pkg/mousemover/mouseMover.go @@ -10,6 +10,7 @@ import ( log "github.com/sirupsen/logrus" "github.com/go-vgo/robotgo" + "github.com/prashantgupta24/activity-tracker/pkg/activity" "github.com/prashantgupta24/activity-tracker/pkg/tracker" ) @@ -25,7 +26,7 @@ type MouseMover struct { const ( timeout = 100 //ms - logFileName = "logFile" + logFileName = "log/logFile-amm-1" ) //Start the main app @@ -51,11 +52,16 @@ func (m *MouseMover) Start() { m.updateRunningStatus(true) movePixel := 10 var lastMoved time.Time + isSystemSleeping := false didNotMoveTimes := 0 for { select { case heartbeat := <-heartbeatCh: if !heartbeat.WasAnyActivity { + if isSystemSleeping { + logger.Infof("system sleeping") + continue + } mouseMoveSuccessCh := make(chan bool) go moveAndCheck(movePixel, mouseMoveSuccessCh) select { @@ -80,14 +86,18 @@ func (m *MouseMover) Start() { //timeout, do nothing logger.Errorf("timeout happened after %vms while trying to move mouse", timeout) } - - } else { //uncomment to see all activities received - // logger.Printf("activity detected in the last %v seconds.", int(heartbeatInterval)) - // logger.Printf("Activity type:\n") - // for activityType, times := range heartbeat.ActivityMap { - // logger.Printf("activityType : %v times: %v\n", activityType, len(times)) - // } - // logger.Printf("\n\n\n") + } else { + logger.Infof("activity detected in the last %v seconds.", int(heartbeatInterval)) + logger.Infof("Activity type:\n") + for activityType, times := range heartbeat.ActivityMap { + logger.Infof("activityType : %v times: %v\n", activityType, len(times)) + if activityType == activity.MachineSleep { + isSystemSleeping = true + } else if activityType == activity.MachineWake { + isSystemSleeping = false + } + } + logger.Infof("\n\n\n") } case <-m.quit: logger.Infof("stopping mouse mover") @@ -132,7 +142,9 @@ func (m *MouseMover) Quit() { if m != nil && m.isRunning() { m.quit <- struct{}{} } - m.logFile.Close() + if m.logFile != nil { + m.logFile.Close() + } } //GetInstance gets the singleton instance for mouse mover app From 7e0ab27b2386b20f6c10de6900736706dbac2150 Mon Sep 17 00:00:00 2001 From: Prashant Gupta Date: Tue, 23 Apr 2019 17:26:56 -0700 Subject: [PATCH 3/3] handling log file --- pkg/mousemover/mouseMover.go | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/pkg/mousemover/mouseMover.go b/pkg/mousemover/mouseMover.go index c270963..89389f3 100644 --- a/pkg/mousemover/mouseMover.go +++ b/pkg/mousemover/mouseMover.go @@ -26,7 +26,8 @@ type MouseMover struct { const ( timeout = 100 //ms - logFileName = "log/logFile-amm-1" + logDir = "log" + logFileName = "logFile-amm-1" ) //Start the main app @@ -162,7 +163,17 @@ func getLogger(m *MouseMover, doWriteToFile bool) *log.Logger { } if doWriteToFile { - logFile, err := os.OpenFile(logFileName, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666) + _, err := os.Stat(logDir) + if err != nil { + if os.IsNotExist(err) { + err = os.Mkdir(logDir, os.ModePerm) + if err != nil { + log.Fatalf("error creating dir: %v", err) + } + } + } + + logFile, err := os.OpenFile(logDir+"/"+logFileName, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666) if err != nil { log.Fatalf("error opening file: %v", err) }