aboutsummaryrefslogtreecommitdiff
path: root/weed/server/master_server.go
diff options
context:
space:
mode:
Diffstat (limited to 'weed/server/master_server.go')
-rw-r--r--weed/server/master_server.go30
1 files changed, 30 insertions, 0 deletions
diff --git a/weed/server/master_server.go b/weed/server/master_server.go
index 6569fdbd4..48576adf4 100644
--- a/weed/server/master_server.go
+++ b/weed/server/master_server.go
@@ -8,11 +8,13 @@ import (
"net/url"
"os"
"regexp"
+ "runtime"
"strings"
"sync"
"time"
"github.com/seaweedfs/seaweedfs/weed/stats"
+ "github.com/seaweedfs/seaweedfs/weed/telemetry"
"github.com/seaweedfs/seaweedfs/weed/cluster"
"github.com/seaweedfs/seaweedfs/weed/pb"
@@ -30,6 +32,7 @@ import (
"github.com/seaweedfs/seaweedfs/weed/topology"
"github.com/seaweedfs/seaweedfs/weed/util"
util_http "github.com/seaweedfs/seaweedfs/weed/util/http"
+ "github.com/seaweedfs/seaweedfs/weed/util/version"
"github.com/seaweedfs/seaweedfs/weed/wdclient"
)
@@ -52,6 +55,8 @@ type MasterOption struct {
MetricsAddress string
MetricsIntervalSec int
IsFollower bool
+ TelemetryUrl string
+ TelemetryEnabled bool
}
type MasterServer struct {
@@ -76,6 +81,9 @@ type MasterServer struct {
adminLocks *AdminLocks
Cluster *cluster.Cluster
+
+ // telemetry
+ telemetryCollector *telemetry.Collector
}
func NewMasterServer(r *mux.Router, option *MasterOption, peers map[string]pb.ServerAddress) *MasterServer {
@@ -131,6 +139,28 @@ func NewMasterServer(r *mux.Router, option *MasterOption, peers map[string]pb.Se
ms.vg = topology.NewDefaultVolumeGrowth()
glog.V(0).Infoln("Volume Size Limit is", ms.option.VolumeSizeLimitMB, "MB")
+ // Initialize telemetry after topology is created
+ if option.TelemetryEnabled && option.TelemetryUrl != "" {
+ telemetryClient := telemetry.NewClient(option.TelemetryUrl, option.TelemetryEnabled)
+ ms.telemetryCollector = telemetry.NewCollector(telemetryClient, ms.Topo, ms.Cluster)
+ ms.telemetryCollector.SetMasterServer(ms)
+
+ // Set version and OS information
+ ms.telemetryCollector.SetVersion(version.VERSION_NUMBER)
+ ms.telemetryCollector.SetOS(runtime.GOOS + "/" + runtime.GOARCH)
+
+ // Determine features and deployment type
+ features := []string{"master"}
+ if len(peers) > 1 {
+ features = append(features, "cluster")
+ }
+ ms.telemetryCollector.SetFeatures(features)
+ ms.telemetryCollector.SetDeployment(telemetry.DetermineDeployment(true, false, len(peers)))
+
+ // Start periodic telemetry collection (every 24 hours)
+ ms.telemetryCollector.StartPeriodicCollection(24 * time.Hour)
+ }
+
ms.guard = security.NewGuard(append(ms.option.WhiteList, whiteList...), signingKey, expiresAfterSec, readSigningKey, readExpiresAfterSec)
handleStaticResources2(r)