Skip to content

Commit a5408a3

Browse files
committed
telemetry: support telemetry client os/machine/version (disabled)
1 parent 61f9bca commit a5408a3

File tree

7 files changed

+62
-5
lines changed

7 files changed

+62
-5
lines changed

pkg/serve/httpserver/config.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ func NewServerConfig(file string, expandEnv bool) (*ServerConfig, error) {
4747
WriteTimeout: serve.Duration{
4848
Duration: DefaultWriteTimeout,
4949
},
50-
BannerVersion: version.GetUserAgent(),
50+
BannerVersion: version.GetServerVersion(),
5151
}
5252
if _, err = toml.NewDecoder(r).Decode(sc); err != nil {
5353
return nil, err

pkg/serve/sshserver/config.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ func NewServerConfig(file string, expandEnv bool) (*ServerConfig, error) {
4444
MaxTimeout: serve.Duration{
4545
Duration: DefaultMaxTimeout,
4646
},
47-
BannerVersion: version.GetBannerVersion(),
47+
BannerVersion: version.GetServerBannerVersion(),
4848
}
4949
if _, err = toml.NewDecoder(r).Decode(sc); err != nil {
5050
return nil, err

pkg/serve/sshserver/server.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import (
88
"database/sql"
99
"errors"
1010
"fmt"
11+
"strings"
1112
"sync/atomic"
1213

1314
"github.com/antgroup/hugescm/pkg/serve"
@@ -176,7 +177,7 @@ func (s *Server) handleSession(e *Session) int {
176177
e.WriteError("unsupport command '\x1b[31m%s\x1b[0m'", args[0])
177178
return 1
178179
}
179-
logrus.Infof("new command: %s", e.RawCommand())
180+
logrus.Infof("new command: %s user-agent: %s", e.RawCommand(), strings.TrimPrefix(e.ClientVersion, "SSH-2.0-"))
180181
cmd, err := NewCommand(args[1:])
181182
if err != nil {
182183
e.WriteError("fatal: \x1b[31m%v\x1b[0m", err)

pkg/version/uname.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package version
22

3+
import "sync"
4+
35
type SystemInfo struct {
46
Name string `json:"name"`
57
Node string `json:"node"`
@@ -10,3 +12,7 @@ type SystemInfo struct {
1012
OS string `json:"os"`
1113
Processor string `json:"processor"`
1214
}
15+
16+
func Uname() (*SystemInfo, error) {
17+
return sync.OnceValues(GetSystemInfo)()
18+
}

pkg/version/uname_test.go

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package version
22

33
import (
44
"encoding/json"
5+
"fmt"
56
"os"
67
"testing"
78
)
@@ -15,3 +16,19 @@ func TestGetSystemInfo(t *testing.T) {
1516
enc.SetIndent("", " ")
1617
_ = enc.Encode(info)
1718
}
19+
20+
func TestUname(t *testing.T) {
21+
u, err := Uname()
22+
if err != nil {
23+
return
24+
}
25+
enc := json.NewEncoder(os.Stderr)
26+
enc.SetIndent("", " ")
27+
_ = enc.Encode(u)
28+
}
29+
30+
func TestGetUserAgent(t *testing.T) {
31+
telemetry = "true"
32+
version = "1.0.0"
33+
fmt.Fprintf(os.Stderr, "%s\n%s\n", GetUserAgent(), GetBannerVersion())
34+
}

pkg/version/uname_windows.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ func GetSystemInfo() (*SystemInfo, error) {
8080
computerName, _ := GetComputerName()
8181
major, minor, build := windows.RtlGetNtVersionNumbers()
8282
return &SystemInfo{
83-
Name: "WindowsNT",
83+
Name: "Windows",
8484
Node: computerName,
8585
Release: strconv.FormatUint(uint64(major), 10),
8686
Version: fmt.Sprintf("%d.%d.%d", major, minor, build),

pkg/version/verison.go

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,17 @@ var (
1313
version string
1414
buildCommit string
1515
buildTime string
16+
telemetry string
1617
)
1718

19+
func telemetryOn() bool {
20+
switch telemetry {
21+
case "true", "yes", "on", "1":
22+
return true
23+
}
24+
return false
25+
}
26+
1827
// GetVersionString returns a standard version header
1928
func GetVersionString() string {
2029
return fmt.Sprintf("%s %v (%s), built %v", filepath.Base(os.Args[0]), version, buildCommit, buildTime)
@@ -29,12 +38,36 @@ func GetVersion() string {
2938
return version
3039
}
3140

41+
func GetServerVersion() string {
42+
return "Zeta/" + version
43+
}
44+
45+
func GetTelemeryUserAgent() string {
46+
if u, err := Uname(); err == nil {
47+
return fmt.Sprintf("Zeta/%s (%s; %s; %s)", version, u.Name, u.Machine, u.Release)
48+
}
49+
return "Zeta/" + version
50+
}
51+
3252
func GetUserAgent() string {
53+
if telemetryOn() {
54+
return GetTelemeryUserAgent()
55+
}
3356
return "Zeta/" + version
3457
}
3558

3659
func GetBannerVersion() string {
37-
return "Zeta-" + version
60+
if telemetryOn() {
61+
if u, err := Uname(); err == nil {
62+
// SSH-protoversion-softwareversion SP comments CR LF
63+
return fmt.Sprintf("ZETA-%s (%s; %s; %s)", version, u.Name, u.Machine, u.Release)
64+
}
65+
}
66+
return "ZETA-" + version
67+
}
68+
69+
func GetServerBannerVersion() string {
70+
return "ZETA-" + version
3871
}
3972

4073
// GetBuildTime returns the time at which the build took place

0 commit comments

Comments
 (0)