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.