Skip to content

Commit f3b61a6

Browse files
authored
User agent update (#328)
- Standalone indicates that the beat is not running under agent. - Unmanaged indicates that the beat is running under agent but not managed by Fleet. - Managed indicates that the beat is running under agent and managed by Fleet.
1 parent a3fa4f4 commit f3b61a6

File tree

2 files changed

+31
-20
lines changed

2 files changed

+31
-20
lines changed

useragent/useragent.go

Lines changed: 28 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -18,22 +18,27 @@
1818
package useragent
1919

2020
import (
21-
"errors"
2221
"runtime"
2322
"strings"
2423
)
2524

2625
type AgentManagementMode int
2726

2827
const (
29-
// AgentManagementModeManaged indicates that the beat is managed by Fleet.
30-
AgentManagementModeManaged AgentManagementMode = iota
31-
// AgentManagementModeStandalone indicates that the beat is running in standalone mode.
28+
// AgentManagementModeUnknown indicates that the management mode is unknown.
29+
AgentManagementModeUnknown AgentManagementMode = iota
30+
// AgentManagementModeStandalone indicates that the beat is not running under agent.
3231
AgentManagementModeStandalone
32+
// AgentManagementModeUnmanaged indicates that the beat is running under agent but not managed by Fleet.
33+
AgentManagementModeUnmanaged
34+
// AgentManagementModeManaged indicates that the beat is running under agent and managed by Fleet.
35+
AgentManagementModeManaged
3336
)
3437

3538
func (m AgentManagementMode) String() string {
3639
switch m {
40+
case AgentManagementModeUnmanaged:
41+
return "Unmanaged"
3742
case AgentManagementModeManaged:
3843
return "Managed"
3944
case AgentManagementModeStandalone:
@@ -44,20 +49,26 @@ func (m AgentManagementMode) String() string {
4449
}
4550

4651
// AgentUnprivilegedMode indicates whether the beat is running in unprivileged mode.
47-
type AgentUnprivilegedMode bool
52+
type AgentUnprivilegedMode int8
4853

4954
const (
55+
// AgentUnprivilegedModeUnknown indicates privilege mode is unknown.
56+
AgentUnprivilegedModeUnknown AgentUnprivilegedMode = iota
5057
// AgentUnprivilegedModeUnprivileged indicates that the beat is running in unprivileged mode.
51-
AgentUnprivilegedModeUnprivileged AgentUnprivilegedMode = true
58+
AgentUnprivilegedModeUnprivileged
5259
// AgentUnprivilegedModePrivileged indicates that the beat is running in privileged mode.
53-
AgentUnprivilegedModePrivileged AgentUnprivilegedMode = false
60+
AgentUnprivilegedModePrivileged
5461
)
5562

5663
func (m AgentUnprivilegedMode) String() string {
57-
if m {
64+
switch m {
65+
case AgentUnprivilegedModeUnprivileged:
5866
return "Unprivileged"
67+
case AgentUnprivilegedModePrivileged:
68+
return "Privileged"
69+
default:
70+
return "Unknown"
5971
}
60-
return "Privileged"
6172
}
6273

6374
// UserAgent takes the capitalized name of the current beat and returns
@@ -82,23 +93,22 @@ func UserAgent(binaryNameCapitalized string, version, commit, buildTime string,
8293
return builder.String()
8394
}
8495

85-
func UserAgentWithBeatTelemetry(binaryNameCapitalized string, version string, mode AgentManagementMode, unprivileged AgentUnprivilegedMode) (string, error) {
96+
func UserAgentWithBeatTelemetry(binaryNameCapitalized string, version string, mode AgentManagementMode, unprivileged AgentUnprivilegedMode) string {
8697
var builder strings.Builder
8798
builder.WriteString("Elastic-" + binaryNameCapitalized + "/" + version + " ")
8899
uaValues := []string{
89100
runtime.GOOS,
90101
runtime.GOARCH,
91-
mode.String(),
92-
unprivileged.String(),
102+
}
103+
if mode != AgentManagementModeUnknown {
104+
uaValues = append(uaValues, mode.String())
105+
}
106+
if unprivileged != AgentUnprivilegedModeUnknown {
107+
uaValues = append(uaValues, unprivileged.String())
93108
}
94109
builder.WriteByte('(')
95110
builder.WriteString(strings.Join(uaValues, "; "))
96111
builder.WriteByte(')')
97112

98-
// Ensure the user agent string does not exceed 100 characters
99-
userAgent := builder.String()
100-
if len(userAgent) > 100 {
101-
return userAgent, errors.New("user agent string exceeds 100 characters")
102-
}
103-
return userAgent, nil
113+
return builder.String()
104114
}

useragent/useragent_test.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,9 +41,10 @@ func TestUserAgent(t *testing.T) {
4141
}
4242

4343
func TestUserAgentWithBeatTelemetry(t *testing.T) {
44-
ua2, err := UserAgentWithBeatTelemetry("FakeBeat", v, mode, unprivileged)
44+
ua2 := UserAgentWithBeatTelemetry("FakeBeat", v, mode, unprivileged)
4545
assert.Regexp(t, regexp.MustCompile(`^Elastic-FakeBeat`), ua2)
4646
assert.Regexp(t, regexp.MustCompile(`; Managed; Unprivileged\)$`), ua2)
47+
48+
// Require deliberate update in case we want to extend the User Agent later
4749
assert.LessOrEqual(t, len(ua2), 100, "User agent string should be less than 100 characters")
48-
assert.NoError(t, err)
4950
}

0 commit comments

Comments
 (0)