diff --git a/server/channels/app/support_packet.go b/server/channels/app/support_packet.go index f09df4d81e..e06f4ce285 100644 --- a/server/channels/app/support_packet.go +++ b/server/channels/app/support_packet.go @@ -41,6 +41,7 @@ func (a *App) GenerateSupportPacket(c request.CTX, options *model.SupportPacketO "cpu profile": a.createCPUProfile, "heap profile": a.createHeapProfile, "goroutines": a.createGoroutineProfile, + "metadata": a.createSupportPacketMetadata, } if options.IncludeLogs { @@ -412,3 +413,21 @@ func (a *App) createGoroutineProfile(_ request.CTX) (*model.FileData, error) { } return fileData, nil } + +func (a *App) createSupportPacketMetadata(_ request.CTX) (*model.FileData, error) { + metadata, err := model.GeneratePacketMetadata(model.SupportPacketType, a.TelemetryId(), a.License(), nil) + if err != nil { + return nil, errors.Wrap(err, "failed to generate packet metadata") + } + + b, err := yaml.Marshal(metadata) + if err != nil { + return nil, errors.Wrap(err, "failed to marshal packet metadata into yaml") + } + + fileData := &model.FileData{ + Filename: model.PacketMetadataFileName, + Body: b, + } + return fileData, nil +} diff --git a/server/channels/app/support_packet_test.go b/server/channels/app/support_packet_test.go index 5d13837d0a..1b5ccfcce5 100644 --- a/server/channels/app/support_packet_test.go +++ b/server/channels/app/support_packet_test.go @@ -214,6 +214,7 @@ func TestGenerateSupportPacket(t *testing.T) { var rFileNames []string testFiles := []string{ "support_packet.yaml", + "metadata.yaml", "plugins.json", "sanitized_config.json", "mattermost.log", @@ -238,6 +239,7 @@ func TestGenerateSupportPacket(t *testing.T) { testFiles := []string{ "support_packet.yaml", + "metadata.yaml", "plugins.json", "sanitized_config.json", "cpu.prof", @@ -267,6 +269,7 @@ func TestGenerateSupportPacket(t *testing.T) { }) testFiles := []string{ "support_packet.yaml", + "metadata.yaml", "plugins.json", "sanitized_config.json", "cpu.prof", @@ -424,3 +427,24 @@ func TestCreateSanitizedConfigFile(t *testing.T) { assert.Positive(t, len(fileData.Body)) assert.NoError(t, err) } + +func TestCreateSupportPacketMetadata(t *testing.T) { + th := Setup(t) + defer th.TearDown() + + t.Run("Happy path", func(t *testing.T) { + fileData, err := th.App.createSupportPacketMetadata(th.Context) + require.NoError(t, err) + require.NotNil(t, fileData) + assert.Equal(t, "metadata.yaml", fileData.Filename) + assert.Positive(t, len(fileData.Body)) + + metadate, err := model.ParsePacketMetadata(fileData.Body) + assert.NoError(t, err) + require.NotNil(t, metadate) + assert.Equal(t, model.SupportPacketType, metadate.Type) + assert.Equal(t, model.CurrentVersion, metadate.ServerVersion) + assert.NotEmpty(t, metadate.ServerID) + assert.NotEmpty(t, metadate.GeneratedAt) + }) +} diff --git a/server/public/model/packet_metadata.go b/server/public/model/packet_metadata.go index d3a68dfd2b..f3da64b4f9 100644 --- a/server/public/model/packet_metadata.go +++ b/server/public/model/packet_metadata.go @@ -103,18 +103,18 @@ func ParsePacketMetadata(b []byte) (*PacketMetadata, error) { } // GeneratePacketMetadata is a utility function to generate metadata for customer provided Packets. -// It will construct it from serverID and optionally a license. -func GeneratePacketMetadata(serverID string, license *License, extra map[string]any) (*PacketMetadata, error) { +// It will construct it from a Packet Type, the telemetryID and optionally a license. +func GeneratePacketMetadata(t PacketType, telemetryID string, license *License, extra map[string]any) (*PacketMetadata, error) { if extra == nil { extra = make(map[string]any) } - md := PacketMetadata{ + md := &PacketMetadata{ Version: CurrentMetadataVersion, - Type: PluginPacketType, + Type: t, GeneratedAt: GetMillis(), ServerVersion: CurrentVersion, - ServerID: serverID, + ServerID: telemetryID, Extras: extra, } @@ -127,5 +127,5 @@ func GeneratePacketMetadata(serverID string, license *License, extra map[string] return nil, fmt.Errorf("invalid metadata: %w", err) } - return &md, nil + return md, nil } diff --git a/server/public/pluginapi/system.go b/server/public/pluginapi/system.go index 786e361848..62f720c359 100644 --- a/server/public/pluginapi/system.go +++ b/server/public/pluginapi/system.go @@ -162,7 +162,7 @@ func (s *SystemService) GeneratePacketMetadata(path string, pluginMeta map[strin pluginMeta["plugin_id"] = manifest.Id pluginMeta["plugin_version"] = manifest.Version - md, err := model.GeneratePacketMetadata(serverID, license, pluginMeta) + md, err := model.GeneratePacketMetadata(model.PluginPacketType, serverID, license, pluginMeta) if err != nil { return "", errors.Wrap(err, "failed to get packet metadata") }