feat: handle retries on switch wifi
This commit is contained in:
63
main.go
63
main.go
@@ -8,7 +8,6 @@ import (
|
||||
"time"
|
||||
|
||||
"gitea.urkob.com/urko/go-wifi-switcher/cfg"
|
||||
"github.com/go-rod/rod"
|
||||
"github.com/go-rod/rod/lib/launcher"
|
||||
"github.com/go-rod/rod/lib/utils"
|
||||
"github.com/ysmood/leakless"
|
||||
@@ -35,12 +34,12 @@ func main() {
|
||||
}
|
||||
|
||||
var lc *launcher.Launcher
|
||||
var u string
|
||||
var remoteControlBrowserURL string
|
||||
|
||||
if config.Bin != "" {
|
||||
lc = launcher.New().Bin(config.Bin)
|
||||
u = lc.MustLaunch()
|
||||
log.Println("u = lc.MustLaunch()", u)
|
||||
remoteControlBrowserURL = lc.MustLaunch()
|
||||
log.Println("u = lc.MustLaunch()", remoteControlBrowserURL)
|
||||
} else {
|
||||
lc = launcher.New()
|
||||
path := launcher.NewBrowser().MustGet()
|
||||
@@ -51,40 +50,32 @@ func main() {
|
||||
parser := launcher.NewURLParser()
|
||||
cmd.Stderr = parser
|
||||
utils.E(cmd.Start())
|
||||
u = launcher.MustResolveURL(<-parser.URL)
|
||||
remoteControlBrowserURL = launcher.MustResolveURL(<-parser.URL)
|
||||
}
|
||||
|
||||
browser := rod.New().
|
||||
ControlURL(u).
|
||||
MustConnect().
|
||||
MustIgnoreCertErrors(true)
|
||||
defer browser.MustClose()
|
||||
|
||||
page := browser.MustPage(config.Page)
|
||||
|
||||
page.MustElement(`#username`).MustInput(config.AdminUser)
|
||||
page.MustElement(`#userpassword`).MustInput(config.Password)
|
||||
log.Println("INPUT DONE")
|
||||
|
||||
page.MustElement(`input[value="Login"]`).MustClick()
|
||||
log.Println("LOGIN DONE")
|
||||
|
||||
page.MustElement(`input[value="Skip"]`).MustClick()
|
||||
log.Println("SKIP DONE")
|
||||
|
||||
page.MustElement("#Net").MustClick()
|
||||
log.Println("Net DONE")
|
||||
|
||||
page.MustElement("#Net-WLAN").MustClick()
|
||||
log.Println("Net-WLAN DONE")
|
||||
|
||||
mainFrame := page.MustElement("#mainFrame").MustFrame()
|
||||
mainFrame.MustElement("#wlanEnable").MustClick()
|
||||
log.Println("wlanEnable DONE")
|
||||
|
||||
mainFrame.MustElement("#sysSubmit").MustClick()
|
||||
// TODO: improve this and wait until something should happens (refresh)
|
||||
time.Sleep(time.Second * 3)
|
||||
sw := newSwitcher(remoteControlBrowserURL, config)
|
||||
if err := sw.switchOff(); err != nil {
|
||||
err := retry(5, time.Second*5, sw.switchOff)
|
||||
if err != nil {
|
||||
log.Fatalln("couldn't retry:", err)
|
||||
}
|
||||
}
|
||||
|
||||
log.Println("task completed")
|
||||
}
|
||||
|
||||
func retry(attempts int, sleep time.Duration, f func() error) error {
|
||||
var err error
|
||||
for i := 0; i < attempts; i++ {
|
||||
if i > 0 {
|
||||
log.Println("retrying after error:", err)
|
||||
time.Sleep(sleep)
|
||||
sleep *= 2
|
||||
}
|
||||
err = f()
|
||||
if err == nil {
|
||||
return nil
|
||||
}
|
||||
}
|
||||
return fmt.Errorf("after %d attempts, last error: %s", attempts, err)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user