forked from elastic/ecs
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add --oss flag to the ECS generator script (elastic#991)
- Loading branch information
Mathieu Martin
committed
Oct 2, 2020
1 parent
e086abb
commit c36e111
Showing
5 changed files
with
100 additions
and
6 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,29 @@ | ||
# This script performs a best effort fallback of basic data types to equivalent | ||
# OSS data types. | ||
# Note however that not all basic data types have an OSS replacement. | ||
# | ||
# The way this script is currently written, it has to be run on the fields *before* | ||
# the cleaner script applies defaults, as there's no concept of defaults here. | ||
# But since it navigates using the visitor script, it can easily be moved around | ||
# in the chain, provided we add support for defaults as well. | ||
# | ||
# For now, no warning is output on basic fields that don't have a fallback. | ||
# This could be improved if ECS starts using such types. | ||
|
||
from schema import visitor | ||
|
||
TYPE_FALLBACKS = { | ||
'wildcard': 'keyword', | ||
'version': 'keyword' | ||
} | ||
|
||
|
||
def fallback(fields): | ||
"""Verify all fields for basic data type usage, and fallback to an OSS equivalent if appropriate.""" | ||
visitor.visit_fields(fields, field_func=perform_fallback) | ||
|
||
|
||
def perform_fallback(field): | ||
"""Performs a best effort fallback of basic data types to equivalent OSS data types.""" | ||
if field['field_details']['type'] in TYPE_FALLBACKS.keys(): | ||
field['field_details']['type'] = TYPE_FALLBACKS[field['field_details']['type']] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,35 @@ | ||
import os | ||
import pprint | ||
import sys | ||
import unittest | ||
|
||
sys.path.append(os.path.join(os.path.dirname(__file__), '../..')) | ||
|
||
from schema import oss | ||
from schema import visitor | ||
|
||
|
||
class TestSchemaOss(unittest.TestCase): | ||
|
||
def setUp(self): | ||
self.maxDiff = None | ||
|
||
def test_wildcard_fallback(self): | ||
field = {'field_details': {'name': 'myfield', 'type': 'wildcard'}} | ||
oss.perform_fallback(field) | ||
self.assertEqual('keyword', field['field_details']['type']) | ||
|
||
def test_version_fallback(self): | ||
field = {'field_details': {'name': 'myfield', 'type': 'version'}} | ||
oss.perform_fallback(field) | ||
self.assertEqual('keyword', field['field_details']['type']) | ||
|
||
def test_basic_without_fallback(self): | ||
field = {'field_details': {'name': 'myfield', 'type': 'histogram'}} | ||
oss.perform_fallback(field) | ||
self.assertEqual('histogram', field['field_details']['type']) | ||
|
||
def test_oss_no_fallback(self): | ||
field = {'field_details': {'name': 'myfield', 'type': 'keyword'}} | ||
oss.perform_fallback(field) | ||
self.assertEqual('keyword', field['field_details']['type']) |