diff --git a/code/go/internal/validator/semantic/validate_profiling_nonga.go b/code/go/internal/validator/semantic/validate_profiling_nonga.go
new file mode 100644
index 000000000..16ca7bd1f
--- /dev/null
+++ b/code/go/internal/validator/semantic/validate_profiling_nonga.go
@@ -0,0 +1,70 @@
+// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+// or more contributor license agreements. Licensed under the Elastic License;
+// you may not use this file except in compliance with the Elastic License.
+
+package semantic
+
+import (
+ "fmt"
+ "io/fs"
+ "path"
+
+ "github.com/Masterminds/semver/v3"
+ ve "github.com/elastic/package-spec/v2/code/go/internal/errors"
+ "github.com/elastic/package-spec/v2/code/go/internal/fspath"
+ "gopkg.in/yaml.v3"
+)
+
+// ValidateProfilingNonGA validates that the profiling data type is not used in GA packages,
+// as this data type is in technical preview and can be eventually removed.
+func ValidateProfilingNonGA(fsys fspath.FS) ve.ValidationErrors {
+ manifestVersion, err := readManifestVersion(fsys)
+ if err != nil {
+ return ve.ValidationErrors{err}
+ }
+
+ semVer, err := semver.NewVersion(manifestVersion)
+ if err != nil {
+ return ve.ValidationErrors{err}
+ }
+
+ if semVer.Major() == 0 || semVer.Prerelease() != "" {
+ return nil
+ }
+
+ dataStreams, err := listDataStreams(fsys)
+ if err != nil {
+ return ve.ValidationErrors{err}
+ }
+
+ var errs ve.ValidationErrors
+ for _, dataStream := range dataStreams {
+ err := validateProfilingTypeNotUsed(fsys, dataStream)
+ if err != nil {
+ errs = append(errs, err)
+ }
+ }
+ return errs
+}
+
+func validateProfilingTypeNotUsed(fsys fspath.FS, dataStream string) error {
+ manifestPath := path.Join("data_stream", dataStream, "manifest.yml")
+ d, err := fs.ReadFile(fsys, manifestPath)
+ if err != nil {
+ return fmt.Errorf("failed to read data stream manifest in \"%s\": %w", fsys.Path(manifestPath), err)
+ }
+
+ var manifest struct {
+ Type string `yaml:"type"`
+ }
+ err = yaml.Unmarshal(d, &manifest)
+ if err != nil {
+ return fmt.Errorf("failed to parse data stream manifest in \"%s\": %w", fsys.Path(manifestPath), err)
+ }
+
+ if manifest.Type == "profiling" {
+ return fmt.Errorf("file \"%s\" is invalid: profiling data type cannot be used in GA packages", fsys.Path(manifestPath))
+ }
+
+ return nil
+}
diff --git a/code/go/internal/validator/spec.go b/code/go/internal/validator/spec.go
index 47ada453c..2a8392a74 100644
--- a/code/go/internal/validator/spec.go
+++ b/code/go/internal/validator/spec.go
@@ -127,6 +127,7 @@ func (s Spec) rules(rootSpec spectypes.ItemSpec) validationRules {
{fn: semantic.ValidateRequiredFields},
{fn: semantic.ValidateVisualizationsUsedByValue},
{fn: semantic.ValidateILMPolicyPresent, since: semver.MustParse("2.0.0")},
+ {fn: semantic.ValidateProfilingNonGA},
}
var validationRules validationRules
diff --git a/code/go/pkg/validator/validator_test.go b/code/go/pkg/validator/validator_test.go
index 9cac0206b..6e41ba934 100644
--- a/code/go/pkg/validator/validator_test.go
+++ b/code/go/pkg/validator/validator_test.go
@@ -38,6 +38,7 @@ func TestValidateFile(t *testing.T) {
"icons_dark_mode": {},
"ignored_malformed": {},
"custom_ilm_policy": {},
+ "profiling_symbolizer": {},
"bad_additional_content": {
"bad-bad",
[]string{
@@ -140,6 +141,12 @@ func TestValidateFile(t *testing.T) {
"field streams.0.vars.3: Must not be present",
},
},
+ "bad_profiling_symbolizer": {
+ "data_stream/example/manifest.yml",
+ []string{
+ "profiling data type cannot be used in GA packages",
+ },
+ },
}
for pkgName, test := range tests {
diff --git a/spec/changelog.yml b/spec/changelog.yml
index cbbd8c706..af31a79ac 100644
--- a/spec/changelog.yml
+++ b/spec/changelog.yml
@@ -4,7 +4,7 @@
##
- version: 2.7.0-next
changes:
- - description: Add `profiling` data stream type
+ - description: Add `profiling` data stream type (technical preview)
type: enhancement
link: https://github.com/elastic/package-spec/pull/503
- description: Add support for aggregate_metric_double field type
diff --git a/spec/integration/data_stream/manifest.spec.yml b/spec/integration/data_stream/manifest.spec.yml
index fbfc21e65..00e901f99 100644
--- a/spec/integration/data_stream/manifest.spec.yml
+++ b/spec/integration/data_stream/manifest.spec.yml
@@ -208,7 +208,7 @@ spec:
- logs
- synthetics
- traces
- - profiling
+ - profiling # Technical preview.
examples:
- metrics
hidden:
diff --git a/test/packages/bad_profiling_symbolizer/LICENSE.txt b/test/packages/bad_profiling_symbolizer/LICENSE.txt
new file mode 100644
index 000000000..809108b85
--- /dev/null
+++ b/test/packages/bad_profiling_symbolizer/LICENSE.txt
@@ -0,0 +1,93 @@
+Elastic License 2.0
+
+URL: https://www.elastic.co/licensing/elastic-license
+
+## Acceptance
+
+By using the software, you agree to all of the terms and conditions below.
+
+## Copyright License
+
+The licensor grants you a non-exclusive, royalty-free, worldwide,
+non-sublicensable, non-transferable license to use, copy, distribute, make
+available, and prepare derivative works of the software, in each case subject to
+the limitations and conditions below.
+
+## Limitations
+
+You may not provide the software to third parties as a hosted or managed
+service, where the service provides users with access to any substantial set of
+the features or functionality of the software.
+
+You may not move, change, disable, or circumvent the license key functionality
+in the software, and you may not remove or obscure any functionality in the
+software that is protected by the license key.
+
+You may not alter, remove, or obscure any licensing, copyright, or other notices
+of the licensor in the software. Any use of the licensor’s trademarks is subject
+to applicable law.
+
+## Patents
+
+The licensor grants you a license, under any patent claims the licensor can
+license, or becomes able to license, to make, have made, use, sell, offer for
+sale, import and have imported the software, in each case subject to the
+limitations and conditions in this license. This license does not cover any
+patent claims that you cause to be infringed by modifications or additions to
+the software. If you or your company make any written claim that the software
+infringes or contributes to infringement of any patent, your patent license for
+the software granted under these terms ends immediately. If your company makes
+such a claim, your patent license ends immediately for work on behalf of your
+company.
+
+## Notices
+
+You must ensure that anyone who gets a copy of any part of the software from you
+also gets a copy of these terms.
+
+If you modify the software, you must include in any modified copies of the
+software prominent notices stating that you have modified the software.
+
+## No Other Rights
+
+These terms do not imply any licenses other than those expressly granted in
+these terms.
+
+## Termination
+
+If you use the software in violation of these terms, such use is not licensed,
+and your licenses will automatically terminate. If the licensor provides you
+with a notice of your violation, and you cease all violation of this license no
+later than 30 days after you receive that notice, your licenses will be
+reinstated retroactively. However, if you violate these terms after such
+reinstatement, any additional violation of these terms will cause your licenses
+to terminate automatically and permanently.
+
+## No Liability
+
+*As far as the law allows, the software comes as is, without any warranty or
+condition, and the licensor will not be liable to you for any damages arising
+out of these terms or the use or nature of the software, under any kind of
+legal claim.*
+
+## Definitions
+
+The **licensor** is the entity offering these terms, and the **software** is the
+software the licensor makes available under these terms, including any portion
+of it.
+
+**you** refers to the individual or entity agreeing to these terms.
+
+**your company** is any legal entity, sole proprietorship, or other kind of
+organization that you work for, plus all organizations that have control over,
+are under the control of, or are under common control with that
+organization. **control** means ownership of substantially all the assets of an
+entity, or the power to direct its management and policies by vote, contract, or
+otherwise. Control can be direct or indirect.
+
+**your licenses** are all the licenses granted to you for the software under
+these terms.
+
+**use** means anything you do with the software requiring one of your licenses.
+
+**trademark** means trademarks, service marks, and similar rights.
diff --git a/test/packages/bad_profiling_symbolizer/changelog.yml b/test/packages/bad_profiling_symbolizer/changelog.yml
new file mode 100644
index 000000000..3fa8a1115
--- /dev/null
+++ b/test/packages/bad_profiling_symbolizer/changelog.yml
@@ -0,0 +1,11 @@
+# newer versions go on top
+- version: "1.0.0"
+ changes:
+ - description: Release as GA
+ type: enhancement
+ link: https://github.com/elastic/integrations/pull/1 # fixme replace with the real pr link
+- version: "0.0.1"
+ changes:
+ - description: initial draft of the package
+ type: enhancement
+ link: https://github.com/elastic/integrations/pull/1 # fixme replace with the real pr link
diff --git a/test/packages/bad_profiling_symbolizer/data_stream/example/agent/stream/stream.yml.hbs b/test/packages/bad_profiling_symbolizer/data_stream/example/agent/stream/stream.yml.hbs
new file mode 100644
index 000000000..5845510de
--- /dev/null
+++ b/test/packages/bad_profiling_symbolizer/data_stream/example/agent/stream/stream.yml.hbs
@@ -0,0 +1,7 @@
+paths:
+{{#each paths as |path i|}}
+ - {{path}}
+{{/each}}
+exclude_files: [".gz$"]
+processors:
+ - add_locale: ~
diff --git a/test/packages/bad_profiling_symbolizer/data_stream/example/elasticsearch/ingest_pipeline/default.yml b/test/packages/bad_profiling_symbolizer/data_stream/example/elasticsearch/ingest_pipeline/default.yml
new file mode 100644
index 000000000..81221adf3
--- /dev/null
+++ b/test/packages/bad_profiling_symbolizer/data_stream/example/elasticsearch/ingest_pipeline/default.yml
@@ -0,0 +1,10 @@
+---
+description: Pipeline for processing sample logs
+processors:
+- set:
+ field: sample_field
+ value: "1"
+on_failure:
+- set:
+ field: error.message
+ value: '{{ _ingest.on_failure_message }}'
\ No newline at end of file
diff --git a/test/packages/bad_profiling_symbolizer/data_stream/example/fields/base-fields.yml b/test/packages/bad_profiling_symbolizer/data_stream/example/fields/base-fields.yml
new file mode 100644
index 000000000..7c798f453
--- /dev/null
+++ b/test/packages/bad_profiling_symbolizer/data_stream/example/fields/base-fields.yml
@@ -0,0 +1,12 @@
+- name: data_stream.type
+ type: constant_keyword
+ description: Data stream type.
+- name: data_stream.dataset
+ type: constant_keyword
+ description: Data stream dataset.
+- name: data_stream.namespace
+ type: constant_keyword
+ description: Data stream namespace.
+- name: '@timestamp'
+ type: date
+ description: Event timestamp.
diff --git a/test/packages/bad_profiling_symbolizer/data_stream/example/manifest.yml b/test/packages/bad_profiling_symbolizer/data_stream/example/manifest.yml
new file mode 100644
index 000000000..d2ff94291
--- /dev/null
+++ b/test/packages/bad_profiling_symbolizer/data_stream/example/manifest.yml
@@ -0,0 +1,8 @@
+title: "Universal Profiling Symbols"
+type: profiling
+release: beta
+streams:
+ - input: pf-elastic-symbolizer
+ title: Universal Profiling Symbols
+ description: "Collect debug symbols for native binaries"
+ enabled: true
diff --git a/test/packages/bad_profiling_symbolizer/docs/README.md b/test/packages/bad_profiling_symbolizer/docs/README.md
new file mode 100644
index 000000000..e72a5e943
--- /dev/null
+++ b/test/packages/bad_profiling_symbolizer/docs/README.md
@@ -0,0 +1,84 @@
+
+
+
+# Profiling symbolizer
+
+
+
+## Data streams
+
+
+
+
+
+
+
+
+
+
+
+## Requirements
+
+You need Elasticsearch for storing and searching your data and Kibana for visualizing and managing it.
+You can use our hosted Elasticsearch Service on Elastic Cloud, which is recommended, or self-manage the Elastic Stack on your own hardware.
+
+
+
+## Setup
+
+
+
+For step-by-step instructions on how to set up an integration, see the
+[Getting started](https://www.elastic.co/guide/en/welcome-to-elastic/current/getting-started-observability.html) guide.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/test/packages/bad_profiling_symbolizer/img/sample-logo.svg b/test/packages/bad_profiling_symbolizer/img/sample-logo.svg
new file mode 100644
index 000000000..6268dd88f
--- /dev/null
+++ b/test/packages/bad_profiling_symbolizer/img/sample-logo.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/test/packages/bad_profiling_symbolizer/img/sample-screenshot.png b/test/packages/bad_profiling_symbolizer/img/sample-screenshot.png
new file mode 100644
index 000000000..d7a56a3ec
Binary files /dev/null and b/test/packages/bad_profiling_symbolizer/img/sample-screenshot.png differ
diff --git a/test/packages/bad_profiling_symbolizer/manifest.yml b/test/packages/bad_profiling_symbolizer/manifest.yml
new file mode 100644
index 000000000..027600027
--- /dev/null
+++ b/test/packages/bad_profiling_symbolizer/manifest.yml
@@ -0,0 +1,23 @@
+name: bad_profiler_symbolizer
+version: 1.0.0
+title: Universal Profiling Symbolizer that should not be GA yet.
+description: Fleet-wide, whole-system, continuous profiling with zero instrumentation.
+format_version: 2.7.0
+type: integration
+policy_templates:
+ - name: universal_profiling_symbolizer
+ title: Universal Profiling Symbolization Service
+ description: Interact with Universal Profiling.
+ inputs:
+ - title: universal_profiling_symbolizer
+ description: Enhance Universal Profiling with additional symbol information
+ type: pf-elastic-symbolizer
+ vars:
+ - name: Symbols object store endpoint
+ type: text
+ title: Endpoint where to fetch public symbols for native executables
+ description: |
+ An object store URL, with an S3-compatible API, where symbolizer will fetch the debug symbols from.
+ multiple: false
+owner:
+ github: elastic/profiling
diff --git a/test/packages/profiling_symbolizer/LICENSE.txt b/test/packages/profiling_symbolizer/LICENSE.txt
new file mode 100644
index 000000000..809108b85
--- /dev/null
+++ b/test/packages/profiling_symbolizer/LICENSE.txt
@@ -0,0 +1,93 @@
+Elastic License 2.0
+
+URL: https://www.elastic.co/licensing/elastic-license
+
+## Acceptance
+
+By using the software, you agree to all of the terms and conditions below.
+
+## Copyright License
+
+The licensor grants you a non-exclusive, royalty-free, worldwide,
+non-sublicensable, non-transferable license to use, copy, distribute, make
+available, and prepare derivative works of the software, in each case subject to
+the limitations and conditions below.
+
+## Limitations
+
+You may not provide the software to third parties as a hosted or managed
+service, where the service provides users with access to any substantial set of
+the features or functionality of the software.
+
+You may not move, change, disable, or circumvent the license key functionality
+in the software, and you may not remove or obscure any functionality in the
+software that is protected by the license key.
+
+You may not alter, remove, or obscure any licensing, copyright, or other notices
+of the licensor in the software. Any use of the licensor’s trademarks is subject
+to applicable law.
+
+## Patents
+
+The licensor grants you a license, under any patent claims the licensor can
+license, or becomes able to license, to make, have made, use, sell, offer for
+sale, import and have imported the software, in each case subject to the
+limitations and conditions in this license. This license does not cover any
+patent claims that you cause to be infringed by modifications or additions to
+the software. If you or your company make any written claim that the software
+infringes or contributes to infringement of any patent, your patent license for
+the software granted under these terms ends immediately. If your company makes
+such a claim, your patent license ends immediately for work on behalf of your
+company.
+
+## Notices
+
+You must ensure that anyone who gets a copy of any part of the software from you
+also gets a copy of these terms.
+
+If you modify the software, you must include in any modified copies of the
+software prominent notices stating that you have modified the software.
+
+## No Other Rights
+
+These terms do not imply any licenses other than those expressly granted in
+these terms.
+
+## Termination
+
+If you use the software in violation of these terms, such use is not licensed,
+and your licenses will automatically terminate. If the licensor provides you
+with a notice of your violation, and you cease all violation of this license no
+later than 30 days after you receive that notice, your licenses will be
+reinstated retroactively. However, if you violate these terms after such
+reinstatement, any additional violation of these terms will cause your licenses
+to terminate automatically and permanently.
+
+## No Liability
+
+*As far as the law allows, the software comes as is, without any warranty or
+condition, and the licensor will not be liable to you for any damages arising
+out of these terms or the use or nature of the software, under any kind of
+legal claim.*
+
+## Definitions
+
+The **licensor** is the entity offering these terms, and the **software** is the
+software the licensor makes available under these terms, including any portion
+of it.
+
+**you** refers to the individual or entity agreeing to these terms.
+
+**your company** is any legal entity, sole proprietorship, or other kind of
+organization that you work for, plus all organizations that have control over,
+are under the control of, or are under common control with that
+organization. **control** means ownership of substantially all the assets of an
+entity, or the power to direct its management and policies by vote, contract, or
+otherwise. Control can be direct or indirect.
+
+**your licenses** are all the licenses granted to you for the software under
+these terms.
+
+**use** means anything you do with the software requiring one of your licenses.
+
+**trademark** means trademarks, service marks, and similar rights.
diff --git a/test/packages/profiling_symbolizer/changelog.yml b/test/packages/profiling_symbolizer/changelog.yml
new file mode 100644
index 000000000..bb0320a52
--- /dev/null
+++ b/test/packages/profiling_symbolizer/changelog.yml
@@ -0,0 +1,6 @@
+# newer versions go on top
+- version: "0.0.1"
+ changes:
+ - description: Initial draft of the package
+ type: enhancement
+ link: https://github.com/elastic/integrations/pull/1 # FIXME Replace with the real PR link
diff --git a/test/packages/profiling_symbolizer/data_stream/example/agent/stream/stream.yml.hbs b/test/packages/profiling_symbolizer/data_stream/example/agent/stream/stream.yml.hbs
new file mode 100644
index 000000000..5845510de
--- /dev/null
+++ b/test/packages/profiling_symbolizer/data_stream/example/agent/stream/stream.yml.hbs
@@ -0,0 +1,7 @@
+paths:
+{{#each paths as |path i|}}
+ - {{path}}
+{{/each}}
+exclude_files: [".gz$"]
+processors:
+ - add_locale: ~
diff --git a/test/packages/profiling_symbolizer/data_stream/example/elasticsearch/ingest_pipeline/default.yml b/test/packages/profiling_symbolizer/data_stream/example/elasticsearch/ingest_pipeline/default.yml
new file mode 100644
index 000000000..81221adf3
--- /dev/null
+++ b/test/packages/profiling_symbolizer/data_stream/example/elasticsearch/ingest_pipeline/default.yml
@@ -0,0 +1,10 @@
+---
+description: Pipeline for processing sample logs
+processors:
+- set:
+ field: sample_field
+ value: "1"
+on_failure:
+- set:
+ field: error.message
+ value: '{{ _ingest.on_failure_message }}'
\ No newline at end of file
diff --git a/test/packages/profiling_symbolizer/data_stream/example/fields/base-fields.yml b/test/packages/profiling_symbolizer/data_stream/example/fields/base-fields.yml
new file mode 100644
index 000000000..7c798f453
--- /dev/null
+++ b/test/packages/profiling_symbolizer/data_stream/example/fields/base-fields.yml
@@ -0,0 +1,12 @@
+- name: data_stream.type
+ type: constant_keyword
+ description: Data stream type.
+- name: data_stream.dataset
+ type: constant_keyword
+ description: Data stream dataset.
+- name: data_stream.namespace
+ type: constant_keyword
+ description: Data stream namespace.
+- name: '@timestamp'
+ type: date
+ description: Event timestamp.
diff --git a/test/packages/profiling_symbolizer/docs/README.md b/test/packages/profiling_symbolizer/docs/README.md
new file mode 100644
index 000000000..e72a5e943
--- /dev/null
+++ b/test/packages/profiling_symbolizer/docs/README.md
@@ -0,0 +1,84 @@
+
+
+
+# Profiling symbolizer
+
+
+
+## Data streams
+
+
+
+
+
+
+
+
+
+
+
+## Requirements
+
+You need Elasticsearch for storing and searching your data and Kibana for visualizing and managing it.
+You can use our hosted Elasticsearch Service on Elastic Cloud, which is recommended, or self-manage the Elastic Stack on your own hardware.
+
+
+
+## Setup
+
+
+
+For step-by-step instructions on how to set up an integration, see the
+[Getting started](https://www.elastic.co/guide/en/welcome-to-elastic/current/getting-started-observability.html) guide.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/test/packages/profiling_symbolizer/img/sample-logo.svg b/test/packages/profiling_symbolizer/img/sample-logo.svg
new file mode 100644
index 000000000..6268dd88f
--- /dev/null
+++ b/test/packages/profiling_symbolizer/img/sample-logo.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/test/packages/profiling_symbolizer/img/sample-screenshot.png b/test/packages/profiling_symbolizer/img/sample-screenshot.png
new file mode 100644
index 000000000..d7a56a3ec
Binary files /dev/null and b/test/packages/profiling_symbolizer/img/sample-screenshot.png differ
diff --git a/test/packages/profiling_symbolizer/manifest.yml b/test/packages/profiling_symbolizer/manifest.yml
index f74288266..d10fbc02d 100644
--- a/test/packages/profiling_symbolizer/manifest.yml
+++ b/test/packages/profiling_symbolizer/manifest.yml
@@ -1,4 +1,5 @@
name: profiler_symbolizer
+version: 0.0.1
title: Universal Profiling Symbolizer
description: Fleet-wide, whole-system, continuous profiling with zero instrumentation.
format_version: 2.7.0
@@ -13,7 +14,7 @@ policy_templates:
type: pf-elastic-symbolizer
vars:
- name: Symbols object store endpoint
- type: string
+ type: text
title: Endpoint where to fetch public symbols for native executables
description: |
An object store URL, with an S3-compatible API, where symbolizer will fetch the debug symbols from.