Browse Source

auto update script executed

Toby Chui 1 year ago
parent
commit
15beb4017e
3 changed files with 33 additions and 6 deletions
  1. 8 2
      main.go
  2. 9 3
      mod/ganserv/authkeyWin.go
  3. 16 1
      mod/netstat/netstat.go

+ 8 - 2
main.go

@@ -36,9 +36,9 @@ var ztAuthToken = flag.String("ztauth", "", "ZeroTier authtoken for the local no
 var ztAPIPort = flag.Int("ztport", 9993, "ZeroTier controller API port")
 var (
 	name        = "Zoraxy"
-	version     = "2.2"
+	version     = "2.3"
 	nodeUUID    = "generic"
-	development = true //Set this to false to use embedded web fs
+	development = false //Set this to false to use embedded web fs
 
 	/*
 		Binary Embedding File System
@@ -71,17 +71,23 @@ func SetupCloseHandler() {
 	go func() {
 		<-c
 		log.Println("\r- Shutting down " + name)
+		log.Println("\r- Closing GeoDB")
 		geodbStore.Close()
+		log.Println("\r- Closing Netstats Listener")
 		netstatBuffers.Close()
+		log.Println("\r- Closing Statistic Collector")
 		statisticCollector.Close()
+		log.Println("\r- Stopping mDNS Discoverer")
 		//Stop the mdns service
 		mdnsTickerStop <- true
 		mdnsScanner.Close()
 
 		//Remove the tmp folder
+		log.Println("\r- Cleaning up tmp files")
 		os.RemoveAll("./tmp")
 
 		//Close database, final
+		log.Println("\r- Stopping system database")
 		sysdb.Close()
 		os.Exit(0)
 	}()

+ 9 - 3
mod/ganserv/authkeyWin.go

@@ -16,7 +16,7 @@ import (
 	"imuslab.com/zoraxy/mod/utils"
 )
 
-//Use admin permission to read auth token on Windows
+// Use admin permission to read auth token on Windows
 func readAuthTokenAsAdmin() (string, error) {
 	//Check if the previous startup already extracted the authkey
 	if utils.FileExists("./authtoken.secret") {
@@ -46,8 +46,14 @@ func readAuthTokenAsAdmin() (string, error) {
 		return "", err
 	}
 
-	log.Println("Waiting for ZeroTier authtoken extraction...")
+	log.Println("Please click agree to allow access to ZeroTier authtoken from ProgramData")
+	retry := 0
 	time.Sleep(3 * time.Second)
+	for !utils.FileExists("./authtoken.secret") && retry < 10 {
+		time.Sleep(3 * time.Second)
+		log.Println("Waiting for ZeroTier authtoken extraction...")
+		retry++
+	}
 
 	authKey, err := os.ReadFile("./authtoken.secret")
 	if err != nil {
@@ -57,7 +63,7 @@ func readAuthTokenAsAdmin() (string, error) {
 	return strings.TrimSpace(string(authKey)), nil
 }
 
-//Check if admin on Windows
+// Check if admin on Windows
 func isAdmin() bool {
 	_, err := os.Open("\\\\.\\PHYSICALDRIVE0")
 	if err != nil {

+ 16 - 1
mod/netstat/netstat.go

@@ -74,6 +74,17 @@ func NewNetStatBuffer(recordCount int) (*NetStatBuffers, error) {
 			log.Println("Unable to get NIC stats: ", err.Error())
 		}
 
+		retryCount := 0
+		for rx == 0 && tx == 0 && retryCount < 10 {
+			//Strange. Retry
+			log.Println("NIC stats return all 0. Retrying...")
+			rx, tx, err = GetNetworkInterfaceStats()
+			if err != nil {
+				log.Println("Unable to get NIC stats: ", err.Error())
+			}
+			retryCount++
+		}
+
 		n.PreviousStat = &RawFlowStat{
 			RX: rx,
 			TX: tx,
@@ -85,12 +96,13 @@ func NewNetStatBuffer(recordCount int) (*NetStatBuffers, error) {
 	go func(n *NetStatBuffers) {
 		for {
 			select {
-			case <-stopCh:
+			case <-n.StopChan:
 				return
 
 			case <-ticker.C:
 				if n.PreviousStat.RX == 0 && n.PreviousStat.TX == 0 {
 					//Initiation state is still not done. Ignore request
+					log.Println("No initial states. Waiting")
 					return
 				}
 				// Get the latest network interface stats
@@ -159,6 +171,7 @@ func (n *NetStatBuffers) HandleGetBufferedNetworkInterfaceStats(w http.ResponseW
 
 func (n *NetStatBuffers) Close() {
 	n.StopChan <- true
+	time.Sleep(time.Second)
 	n.EventTicker.Stop()
 }
 
@@ -190,6 +203,8 @@ func GetNetworkInterfaceStats() (int64, int64, error) {
 			return 0, 0, err
 		}
 
+		defer cmd.Process.Kill()
+
 		//Filter out the first line
 
 		lines := strings.Split(strings.ReplaceAll(string(out), "\r\n", "\n"), "\n")