浏览代码

update metric data in cache only if cache enabled and write to DB once in stop

Max Ma 1 年之前
父节点
当前提交
8b3a4d7caa
共有 4 个文件被更改,包括 26 次插入3 次删除
  1. 4 0
      logic/metrics.go
  2. 1 0
      main.go
  3. 1 0
      pro/initialize.go
  4. 20 3
      pro/logic/metrics.go

+ 4 - 0
logic/metrics.go

@@ -12,6 +12,10 @@ var UpdateMetrics = func(string, *models.Metrics) error {
 	return nil
 }
 
+var WriteMetricsCacheToDB = func() error {
+	return nil
+}
+
 var GetMetrics = func(string) (*models.Metrics, error) {
 	var metrics models.Metrics
 	return &metrics, nil

+ 1 - 0
main.go

@@ -39,6 +39,7 @@ func main() {
 	initialize()                       // initial db and acls
 	logic.SetIpPool()
 	defer logic.ClearIpPool()
+	defer logic.WriteMetricsCacheToDB()
 	setGarbageCollection()
 	setVerbosity()
 	if servercfg.DeployedByOperator() && !servercfg.IsPro {

+ 1 - 0
pro/initialize.go

@@ -103,6 +103,7 @@ func InitPro() {
 	logic.UpdateProNodeACLs = proLogic.UpdateProNodeACLs
 	logic.GetMetrics = proLogic.GetMetrics
 	logic.UpdateMetrics = proLogic.UpdateMetrics
+	logic.WriteMetricsCacheToDB = proLogic.WriteMetricsCacheToDB
 	logic.DeleteMetrics = proLogic.DeleteMetrics
 	logic.GetRelays = proLogic.GetRelays
 	logic.GetAllowedIpsForRelayed = proLogic.GetAllowedIpsForRelayed

+ 20 - 3
pro/logic/metrics.go

@@ -66,6 +66,21 @@ func LoadNodeMetricsToCache() error {
 	return nil
 }
 
+func WriteMetricsCacheToDB() error {
+
+	for k, v := range metricsCacheMap {
+		data, err := json.Marshal(v)
+		if err != nil {
+			continue
+		}
+		err = database.Insert(k, string(data), database.METRICS_TABLE_NAME)
+		if err != nil {
+			continue
+		}
+	}
+	return nil
+}
+
 // GetMetrics - gets the metrics
 func GetMetrics(nodeid string) (*models.Metrics, error) {
 	var metrics models.Metrics
@@ -93,6 +108,11 @@ func GetMetrics(nodeid string) (*models.Metrics, error) {
 
 // UpdateMetrics - updates the metrics of a given client
 func UpdateMetrics(nodeid string, metrics *models.Metrics) error {
+	//if cache is enabled, only save the metric data to cache
+	if servercfg.CacheEnabled() {
+		storeMetricsInCache(nodeid, *metrics)
+		return nil
+	}
 	data, err := json.Marshal(metrics)
 	if err != nil {
 		return err
@@ -101,9 +121,6 @@ func UpdateMetrics(nodeid string, metrics *models.Metrics) error {
 	if err != nil {
 		return err
 	}
-	if servercfg.CacheEnabled() {
-		storeMetricsInCache(nodeid, *metrics)
-	}
 	return nil
 }