summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeff Carr <[email protected]>2024-01-10 20:22:25 -0600
committerJeff Carr <[email protected]>2024-01-10 20:22:25 -0600
commitf8df2d1ce33e8eb70a996775006b37419c5165a7 (patch)
tree23e3106a95c352f4bfdb6b5f37096f5caffdce4c
parentad8a25d85f50dfe27dbefa5267749e61c0cb16b3 (diff)
autofix!v0.5.4
Signed-off-by: Jeff Carr <[email protected]>
-rw-r--r--Makefile1
-rw-r--r--digStatus.go4
-rw-r--r--dns.go15
-rw-r--r--errorBox.go79
-rw-r--r--hostnameStatus.go31
-rw-r--r--ipv6box.go110
-rw-r--r--main.go6
-rw-r--r--problems.go15
-rw-r--r--resolverBox.go1
-rw-r--r--structs.go2
10 files changed, 98 insertions, 166 deletions
diff --git a/Makefile b/Makefile
index b1ae8ec..d6a8054 100644
--- a/Makefile
+++ b/Makefile
@@ -1,6 +1,5 @@
.PHONY: debian
-
run: build
# ./control-panel-dns >/tmp/witgui.log.stderr 2>&1
cp -f control-panel-dns ~/
diff --git a/digStatus.go b/digStatus.go
index fd775af..b9a8982 100644
--- a/digStatus.go
+++ b/digStatus.go
@@ -42,6 +42,7 @@ type digStatus struct {
speed *gadgets.OneLiner
speedActual *gadgets.OneLiner
+ detailsGroup *gui.Node
details *gui.Node
dsLocalhost *resolverStatus
dsLocalNetwork *resolverStatus
@@ -77,7 +78,8 @@ func NewDigStatusWindow(p *gui.Node) *digStatus {
ds.speedActual = gadgets.NewOneLiner(g, "actual").Set("unknown")
// make the area to store the raw details
- ds.details = ds.window.Box().NewGroup("Details")
+ ds.detailsGroup = ds.window.Box().NewGroup("Details")
+ ds.details = ds.detailsGroup.NewBox("bw vbox", false)
ds.dsLocalhost = NewResolverStatus(ds.details, "(localhost)", "127.0.0.1:53", "go.wit.com")
ds.dsLocalNetwork = NewResolverStatus(ds.details, "(Local Network)", "192.168.86.1:53", "go.wit.com")
ds.dsCloudflare = NewResolverStatus(ds.details, "(cloudflare)", "1.1.1.1:53", "go.wit.com")
diff --git a/dns.go b/dns.go
index e55db83..6107141 100644
--- a/dns.go
+++ b/dns.go
@@ -40,6 +40,7 @@ func (h *Host) setIPv4(ipv4s map[string]*IPtype) {
}
}
+/*
func lookupNSprovider(domain string) string {
for s, d := range me.nsmap {
log.Log(CHANGE, "lookupNS() domain =", d, "server =", s)
@@ -50,6 +51,7 @@ func lookupNSprovider(domain string) string {
}
return "blah"
}
+*/
// nsLookup performs an NS lookup on the given domain name.
func lookupNS(domain string) {
@@ -94,22 +96,15 @@ func lookupNS(domain string) {
}
}
-// getDomain returns the second-to-last part of a domain name.
+// returns the second-to-last part of a domain name.
func setProvider(hostname string) {
var provider string = ""
parts := strings.Split(hostname, ".")
if len(parts) >= 2 {
provider = parts[len(parts)-2]
}
- if me.APIprovider != provider {
- log.Log(CHANGE, "setProvider() changed to =", provider)
- }
- me.APIprovider = provider
- /*
- if (me.DnsAPI.S != provider) {
- me.changed = true
+ if me.statusDNS.GetDNSapi() != provider {
log.Log(CHANGE, "setProvider() changed to =", provider)
- me.DnsAPI.SetText(provider)
}
- */
+ me.statusDNS.SetDNSapi(provider)
}
diff --git a/errorBox.go b/errorBox.go
index 1c8c835..696ea0d 100644
--- a/errorBox.go
+++ b/errorBox.go
@@ -5,6 +5,8 @@
package main
import (
+ "time"
+
"go.wit.com/log"
"go.wit.com/gui/gui"
"go.wit.com/gui/gadgets"
@@ -27,9 +29,10 @@ type errorBox struct {
}
type anError struct {
- kind string // what kind of error is it?
- aaaa string
- status string
+// kind ProblemType // what kind of error is it?
+// action ActionType
+// aaaa string
+// status string
kindLabel *gui.Node
actionLabel *gui.Node
@@ -89,11 +92,13 @@ func (eb *errorBox) addIPerror(kind ProblemType, action ActionType, ip string) b
tmp := kind.String() + " " + ip
if eb.fixes[tmp] != nil {
log.Log(WARN, "Error is already here", kind, ip)
+ log.Log(WARN, "kind =", kind)
+ log.Log(WARN, "action =", action)
+ log.Log(WARN, "ip =", ip)
return false
}
anErr := new(anError)
- anErr.aaaa = ip
anErr.kindLabel = eb.grid.NewLabel(kind.String())
anErr.actionLabel = eb.grid.NewLabel(action.String())
@@ -105,7 +110,12 @@ func (eb *errorBox) addIPerror(kind ProblemType, action ActionType, ip string) b
})
anErr.problem = new(Problem)
anErr.problem.kind = kind
+ anErr.problem.action = action
anErr.problem.aaaa = ip
+ anErr.problem.born = time.Now()
+ anErr.problem.duration = 30 * time.Second
+ anErr.problem.begun = false
+ anErr.problem.begunResult = false
eb.fixes[tmp] = anErr
return false
}
@@ -125,22 +135,57 @@ func (eb *errorBox) fix(key string) bool {
return true
}
myErr := eb.fixes[key]
- log.Log(WARN, "should try to fix", myErr.kind, "here. IP =", myErr.aaaa)
- if myErr.kind == "DELETE" {
- if deleteFromDNS(myErr.aaaa) {
- log.Log(INFO, "Delete AAAA", myErr.aaaa, "Worked")
- } else {
- log.Log(INFO, "Delete AAAA", myErr.aaaa, "Failed")
+ log.Log(WARN, "should try to fix", myErr.problem.kind, "here. IP =", myErr.problem.aaaa)
+ if ! me.autofix.B {
+ log.Log(WARN, "not autofixing. autofix == false")
+ log.Log(WARN, "problem.kind =", myErr.problem.kind)
+ log.Log(WARN, "problem.action =", myErr.problem.action)
+ log.Log(WARN, "problem.aaaa =", myErr.problem.aaaa)
+ log.Log(WARN, "problem.duration =", myErr.problem.duration)
+ log.Log(WARN, "problem.begun =", myErr.problem.begun)
+ log.Log(WARN, "problem.begunResult =", myErr.problem.begunResult)
+ // if myErr.problem.begunTime != nil {
+ log.Log(WARN, "problem.begunTime =", myErr.problem.begunTime)
+ // }
+ return false
+ }
+ if myErr.problem.begun {
+ log.Log(WARN, "problem has already begun. need to check the status of the problem here")
+ log.Log(WARN, "problem.begun =", myErr.problem.begun)
+ log.Log(WARN, "problem.begunResult =", myErr.problem.begunResult)
+ log.Log(WARN, "problem.duration =", myErr.problem.duration)
+ delay := time.Since(myErr.problem.begunTime)
+ log.Log(WARN, "problem duration time =", delay)
+ if delay >= myErr.problem.duration {
+ log.Log(WARN, "duration eclipsed. check the status of the error here")
}
- return true
+ return false
}
- if myErr.kind == "CREATE" {
- if addToDNS(myErr.aaaa) {
- log.Log(INFO, "Delete AAAA", myErr.aaaa, "Worked")
- } else {
- log.Log(INFO, "Delete AAAA", myErr.aaaa, "Failed")
+ if myErr.problem.kind == RR {
+ if myErr.problem.action == DELETE {
+ myErr.problem.begun = true
+ myErr.problem.begunTime = time.Now()
+ if deleteFromDNS(myErr.problem.aaaa) {
+ log.Log(INFO, "Delete AAAA", myErr.problem.aaaa, "Worked")
+ myErr.problem.begunResult = true
+ } else {
+ log.Log(INFO, "Delete AAAA", myErr.problem.aaaa, "Failed")
+ myErr.problem.begunResult = false
+ }
+ return true
+ }
+ if myErr.problem.action == CREATE {
+ myErr.problem.begun = true
+ myErr.problem.begunTime = time.Now()
+ if addToDNS(myErr.problem.aaaa) {
+ log.Log(INFO, "Delete AAAA", myErr.problem.aaaa, "Worked")
+ myErr.problem.begunResult = true
+ } else {
+ log.Log(INFO, "Delete AAAA", myErr.problem.aaaa, "Failed")
+ myErr.problem.begunResult = false
+ }
+ return true
}
- return true
}
return false
}
diff --git a/hostnameStatus.go b/hostnameStatus.go
index 34bcc4f..127bc61 100644
--- a/hostnameStatus.go
+++ b/hostnameStatus.go
@@ -46,6 +46,7 @@ type hostnameStatus struct {
dnsA *gadgets.OneLiner
dnsAAAA *gadgets.OneLiner
dnsAPI *gadgets.OneLiner
+ APIprovider string
speed *gadgets.OneLiner
speedActual *gadgets.OneLiner
@@ -96,25 +97,6 @@ func NewHostnameStatusWindow(p *gui.Node) *hostnameStatus {
group.Pad()
grid.Pad()
- /*
- group = hs.window.Box().NewGroup("Actions")
- grid = group.NewGrid("LookupDetails", 2, 2)
-
- hs.dnsValue = grid.NewLabel("3.4.5.6")
- hs.dnsAction = grid.NewButton("CHECK", func () {
- log.Warn("should", hs.dnsAction.S, "here for", hs.dnsValue.S)
- if (hs.dnsAction.S == "DELETE") {
- hs.deleteDNSrecord(hs.dnsValue.S)
- }
- if (hs.dnsAction.S == "CREATE") {
- hs.createDNSrecord(hs.dnsValue.S)
- }
- })
- */
-
- group.Pad()
- grid.Pad()
-
hs.hidden = false
hs.ready = true
return hs
@@ -381,5 +363,14 @@ func (hs *hostnameStatus) Hide() {
}
func (hs *hostnameStatus) GetDNSapi() string {
- return me.APIprovider
+ return hs.APIprovider
+}
+
+func (hs *hostnameStatus) SetDNSapi(api string) {
+ if api == hs.APIprovider {
+ return
+ }
+ hs.APIprovider = api
+ hs.dnsAPI.Set(api)
+ hs.changed = true
}
diff --git a/ipv6box.go b/ipv6box.go
deleted file mode 100644
index dabdc03..0000000
--- a/ipv6box.go
+++ /dev/null
@@ -1,110 +0,0 @@
-/*
- Show your IPv6 addresses
-*/
-
-package main
-
-import (
- "go.wit.com/log"
- "go.wit.com/gui/gui"
- "go.wit.com/gui/gadgets"
-)
-
-type ipv6box struct {
- name string // the problem name
-
- parent *gui.Node
- group *gui.Node
- grid *gui.Node
-
- l *gui.Node
- b *gui.Node
-
- fixes map[string]*anError
-
- something *gadgets.OneLiner
-}
-
-type anIPv6 struct {
- kind string // what kind of error is it?
- aaaa string
- status string
-
- kindLabel *gui.Node
- ipLabel *gui.Node
- statusLabel *gui.Node
- button *gui.Node
-}
-
-func NewIpv6box(p *gui.Node, name string, ip string) *ipv6box {
- var ib *ipv6box
- ib = new(ipv6box)
- ib.parent = p
- ib.group = p.NewGroup(name)
- ib.grid = ib.group.NewGrid("stuff", 4, 1)
-
- ib.grid.NewLabel("Type")
- ib.grid.NewLabel("IP")
- ib.grid.NewLabel("Status")
- ib.grid.NewLabel("")
-
- ib.fixes = make(map[string]*anError)
- return ib
-}
-
-
-func (ib *ipv6box) add(kind string, ip string) bool {
- tmp := kind + " " + ip
- if ib.fixes[tmp] != nil {
- log.Log(WARN, "Error is already here", kind, ip)
- return false
- }
-
- anErr := new(anError)
- anErr.kind = kind
- anErr.aaaa = ip
-
- anErr.kindLabel = ib.grid.NewLabel(kind)
- anErr.ipLabel = ib.grid.NewLabel(ip)
- anErr.statusLabel = ib.grid.NewLabel("")
- anErr.button = ib.grid.NewButton(kind, func() {
- log.Log(WARN, "got", kind, "here. IP =", ip)
- ib.fix(tmp)
- })
- ib.fixes[tmp] = anErr
- return false
-}
-
-func (ib *ipv6box) fix(key string) bool {
- if ib.fixes[key] == nil {
- log.Log(WARN, "Unknown error. could not find key =", key)
- log.Log(WARN, "TODO: probably remove this error. key =", key)
- return true
- }
- myErr := ib.fixes[key]
- log.Log(WARN, "should try to fix", myErr.kind, "here. IP =", myErr.aaaa)
- if myErr.kind == "DELETE" {
- if deleteFromDNS(myErr.aaaa) {
- log.Log(INFO, "Delete AAAA", myErr.aaaa, "Worked")
- } else {
- log.Log(INFO, "Delete AAAA", myErr.aaaa, "Failed")
- }
- return true
- }
- if myErr.kind == "CREATE" {
- if addToDNS(myErr.aaaa) {
- log.Log(INFO, "Delete AAAA", myErr.aaaa, "Worked")
- } else {
- log.Log(INFO, "Delete AAAA", myErr.aaaa, "Failed")
- }
- return true
- }
- return false
-}
-
-func (ib *ipv6box) update() bool {
- return false
-}
-
-func (ib *ipv6box) toggle() {
-}
diff --git a/main.go b/main.go
index 7c3c803..5c6ea31 100644
--- a/main.go
+++ b/main.go
@@ -123,7 +123,11 @@ func main() {
// lookup the NS records for your domain
// if your host is test.wit.com, find the NS resource records for wit.com
lookupNS(me.statusOS.GetDomainName())
- log.Log(CHANGE, "updateDNS() END")
+ log.Log(CHANGE, "lookupNS() RUNNING NOW. this will determine your DNS API provider")
+ }
+ if me.statusDNS.GetDNSapi() == "unknown" {
+ lookupNS(me.statusOS.GetDomainName())
+ log.Log(CHANGE, "lookupNS() RUNNING NOW. this will determine your DNS API provider")
}
})
s := fmt.Sprint(duration)
diff --git a/problems.go b/problems.go
index 9a630ad..12b2c44 100644
--- a/problems.go
+++ b/problems.go
@@ -18,7 +18,12 @@ type Problem struct {
value string
aaaa string
fixed bool
- duration *time.Duration
+ duration time.Duration // how long until you should check to see if it's fixed
+ born time.Time // when first reported
+
+ begun bool // weather or not fixing it has begun
+ begunTime time.Time // when the attempt to fix the problem happened
+ begunResult bool // weather or not the attempt worked
}
var IPcreate = Problem {
@@ -62,9 +67,9 @@ func (s ProblemType) String() string {
case RR:
return "RR"
default:
- return "something"
+ return "FIXMEP"
}
- return "someprob"
+ return "FIXMEP"
}
func (s ActionType) String() string {
@@ -76,7 +81,7 @@ func (s ActionType) String() string {
case DELETE:
return "DELETE"
default:
- return "something"
+ return "FIXMEA"
}
- return "someprob"
+ return "FIXMEA"
}
diff --git a/resolverBox.go b/resolverBox.go
index 8a7e2f3..e689780 100644
--- a/resolverBox.go
+++ b/resolverBox.go
@@ -71,6 +71,7 @@ func NewResolverStatus(p *gui.Node, title string, server string, hostname string
rs = new(resolverStatus)
rs.parent = p
rs.group = p.NewGroup(server + " " + title + " lookup")
+ rs.group = rs.group.NewBox("bw vbox", false)
rs.grid = rs.group.NewGrid("LookupStatus", 5, 2)
rs.server = server
diff --git a/structs.go b/structs.go
index df3bc4c..cab640b 100644
--- a/structs.go
+++ b/structs.go
@@ -29,7 +29,7 @@ type Host struct {
// WHEN THESE ARE ALL "WORKING", then everything is good
hostnameStatus *gui.Node // a summary for the user of where things are
DnsAPIstatus *gui.Node // does your DNS API work?
- APIprovider string
+ // APIprovider string
apiButton *gui.Node // the button you click for the API config page
artificialSleep float64 `default:"0.7"` // artificial sleep on startup