Browse Source

auto update script executed

tobychui 1 year ago
parent
commit
87d7962194
5 changed files with 70 additions and 2 deletions
  1. 5 0
      api.go
  2. 6 2
      main.go
  3. 55 0
      mod/statistic/analytic/analytic.go
  4. 4 0
      start.go
  5. 0 0
      tools/stats.json

+ 5 - 0
api.go

@@ -104,6 +104,11 @@ func initAPIs() {
 	authRouter.HandleFunc("/api/mdns/list", HandleMdnsListing)
 	authRouter.HandleFunc("/api/mdns/discover", HandleMdnsScanning)
 
+	//Zoraxy Analytic
+	authRouter.HandleFunc("/api/analytic/list", AnalyticLoader.HandleSummaryList)
+	authRouter.HandleFunc("/api/analytic/load", AnalyticLoader.HandleLoadTargetDaySummary)
+	//authRouter.HandleFunc("/api/analytic/list",)
+
 	//Network utilities
 	authRouter.HandleFunc("/api/tools/ipscan", HandleIpScan)
 	authRouter.HandleFunc("/api/tools/webssh", HandleCreateProxySession)

+ 6 - 2
main.go

@@ -23,6 +23,7 @@ import (
 	"imuslab.com/zoraxy/mod/netstat"
 	"imuslab.com/zoraxy/mod/sshprox"
 	"imuslab.com/zoraxy/mod/statistic"
+	"imuslab.com/zoraxy/mod/statistic/analytic"
 	"imuslab.com/zoraxy/mod/tcpprox"
 	"imuslab.com/zoraxy/mod/tlscert"
 	"imuslab.com/zoraxy/mod/uptime"
@@ -37,7 +38,7 @@ 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.3"
+	version     = "2.5"
 	nodeUUID    = "generic"
 	development = true //Set this to false to use embedded web fs
 
@@ -63,7 +64,10 @@ var (
 	ganManager         *ganserv.NetworkManager //Global Area Network Manager
 	webSshManager      *sshprox.Manager        //Web SSH connection service
 	tcpProxyManager    *tcpprox.Manager        //TCP Proxy Manager
-	EmailSender        *email.Sender           //Email sender that handle email sending
+
+	//Helper modules
+	EmailSender    *email.Sender        //Email sender that handle email sending
+	AnalyticLoader *analytic.DataLoader //Data loader for Zoraxy Analytic
 )
 
 // Kill signal handler. Do something before the system the core terminate.

+ 55 - 0
mod/statistic/analytic/analytic.go

@@ -0,0 +1,55 @@
+package analytic
+
+import (
+	"encoding/json"
+	"net/http"
+
+	"imuslab.com/zoraxy/mod/database"
+	"imuslab.com/zoraxy/mod/statistic"
+	"imuslab.com/zoraxy/mod/utils"
+)
+
+type DataLoader struct {
+	Database *database.Database
+}
+
+//Create a new data loader for loading statistic from database
+func NewDataLoader(db *database.Database) *DataLoader {
+	return &DataLoader{
+		Database: db,
+	}
+}
+
+func (d *DataLoader) HandleSummaryList(w http.ResponseWriter, r *http.Request) {
+	entries, err := d.Database.ListTable("stats")
+	if err != nil {
+		utils.SendErrorResponse(w, "unable to load data from database")
+		return
+	}
+
+	entryDates := []string{}
+	for _, keypairs := range entries {
+		entryDates = append(entryDates, string(keypairs[0]))
+	}
+
+	js, _ := json.MarshalIndent(entryDates, "", " ")
+	utils.SendJSONResponse(w, string(js))
+}
+
+func (d *DataLoader) HandleLoadTargetDaySummary(w http.ResponseWriter, r *http.Request) {
+	day, err := utils.GetPara(r, "id")
+	if err != nil {
+		utils.SendErrorResponse(w, "id cannot be empty")
+		return
+	}
+
+	targetDailySummary := statistic.DailySummaryExport{}
+	err = d.Database.Read("stats", day, &targetDailySummary)
+	if err != nil {
+		utils.SendErrorResponse(w, "target day data not found")
+		return
+	}
+
+	js, _ := json.Marshal(targetDailySummary)
+	utils.SendJSONResponse(w, string(js))
+}

+ 4 - 0
start.go

@@ -17,6 +17,7 @@ import (
 	"imuslab.com/zoraxy/mod/netstat"
 	"imuslab.com/zoraxy/mod/sshprox"
 	"imuslab.com/zoraxy/mod/statistic"
+	"imuslab.com/zoraxy/mod/statistic/analytic"
 	"imuslab.com/zoraxy/mod/tcpprox"
 	"imuslab.com/zoraxy/mod/tlscert"
 )
@@ -175,4 +176,7 @@ func startupSequence() {
 	//Create an email sender if SMTP config exists
 	sysdb.NewTable("smtp")
 	EmailSender = loadSMTPConfig()
+
+	//Create an analytic loader
+	AnalyticLoader = analytic.NewDataLoader(sysdb)
 }

File diff suppressed because it is too large
+ 0 - 0
tools/stats.json


Some files were not shown because too many files changed in this diff