1
1
from jinja2 import Environment , FileSystemLoader
2
2
import urllib .request
3
3
from collections import defaultdict
4
- import re
5
-
6
- import os
4
+ import yaml
7
5
import re
8
6
from pathlib import Path
9
7
10
8
TABLE_TAG = 'edot-collector-components-table'
11
9
DEPS_TAG = 'edot-collector-components-ocb'
10
+ FEATURES_TAG = 'edot-features'
12
11
13
12
def fetch_url_content (url ):
14
13
try :
@@ -113,24 +112,19 @@ def find_files_with_substring(directory, substring):
113
112
print (f"Skipping { file_path } : { e } " )
114
113
return matching_files
115
114
116
- def render_markdown (components , otel_col_version , template ):
115
+ def render_markdown (data , template ):
117
116
# Set up the Jinja2 environment
118
117
env = Environment (loader = FileSystemLoader ('.' ))
119
118
120
119
# Load the template
121
120
template = env .get_template (template )
122
121
123
122
# Define the data to pass to the template
124
- data = {
125
- 'grouped_components' : components ,
126
- 'otel_col_version' : otel_col_version
127
- }
128
123
129
124
return template .render (data )
130
125
131
- def render_components_into_file (dir , components , otel_col_version , template , tag ):
132
-
133
- output = render_markdown (components , otel_col_version , template )
126
+ def render_components_into_file (dir , data , template , tag ):
127
+ output = render_markdown (data , template )
134
128
start_tag = f'<!-- start:{ tag } -->'
135
129
end_tag = f'<!-- end:{ tag } -->'
136
130
@@ -147,8 +141,8 @@ def render_components_into_file(dir, components, otel_col_version, template, tag
147
141
with open (filePath , 'w' , encoding = 'utf-8' ) as file :
148
142
file .write (updated_content )
149
143
150
- def check_markdown_generation (dir , components , otel_col_version , template , tag ):
151
- output = render_markdown (components , otel_col_version , template )
144
+ def check_markdown_generation (dir , data , template , tag ):
145
+ output = render_markdown (data , template )
152
146
start_tag = f'<!-- start:{ tag } -->'
153
147
end_tag = f'<!-- end:{ tag } -->'
154
148
@@ -164,25 +158,46 @@ def check_markdown_generation(dir, components, otel_col_version, template, tag):
164
158
165
159
for match in matches :
166
160
if match .strip () != output .strip ():
167
- print (f'Warning: Generated markdown for collector components is outdated in file { filePath } ! Regenerate markdown by running `make generate-collector-components`!' )
161
+ print (f'Warning: Generated markdown is outdated in file { filePath } ! Regenerate markdown by running `make generate-collector-components`!' )
168
162
return False ;
169
163
170
164
return True ;
171
165
166
+ def get_features_data (source_file ):
167
+ with open (source_file , 'r' ) as file :
168
+ try :
169
+ return yaml .safe_load (file )
170
+ except yaml .YAMLError as exc :
171
+ print (f"Error reading YAML file: { exc } " )
172
+ exit (1 )
173
+
172
174
def check_markdown ():
173
175
col_version = get_collector_version ('../_config.yml' )
174
176
url = f'https://raw.githubusercontent.com/elastic/elastic-agent/refs/tags/v{ col_version } /go.mod'
175
177
components = get_otel_components (url )
176
178
otel_col_version = get_otel_col_upstream_version (url )
177
- tables = check_markdown_generation ('../_edot-collector' , components , otel_col_version , 'templates/components-table.jinja2' , TABLE_TAG )
179
+ data = {
180
+ 'grouped_components' : components ,
181
+ 'otel_col_version' : otel_col_version
182
+ }
183
+ tables = check_markdown_generation ('../_edot-collector' , data , 'templates/components-table.jinja2' , TABLE_TAG )
184
+ ocb = check_markdown_generation ('../_edot-collector' , data , 'templates/ocb.jinja2' , DEPS_TAG )
178
185
179
- ocb = check_markdown_generation ('../_edot-collector' , components , otel_col_version , 'templates/ocb.jinja2' , DEPS_TAG )
180
- return tables and ocb
186
+ features_data = get_features_data ('../use-cases/features.yml' )
187
+ features = check_markdown_generation ('../use-cases' , features_data , 'templates/features.jinja2' , FEATURES_TAG )
188
+ return tables and ocb and features
181
189
182
190
def generate_markdown ():
183
191
col_version = get_collector_version ('../_config.yml' )
184
192
url = f'https://raw.githubusercontent.com/elastic/elastic-agent/refs/tags/v{ col_version } /go.mod'
185
193
components = get_otel_components (url )
186
194
otel_col_version = get_otel_col_upstream_version (url )
187
- render_components_into_file ('../_edot-collector' , components , otel_col_version , 'templates/components-table.jinja2' , TABLE_TAG )
188
- render_components_into_file ('../_edot-collector' , components , otel_col_version , 'templates/ocb.jinja2' , DEPS_TAG )
195
+ data = {
196
+ 'grouped_components' : components ,
197
+ 'otel_col_version' : otel_col_version
198
+ }
199
+ render_components_into_file ('../_edot-collector' , data , 'templates/components-table.jinja2' , TABLE_TAG )
200
+ render_components_into_file ('../_edot-collector' , data , 'templates/ocb.jinja2' , DEPS_TAG )
201
+
202
+ features_data = get_features_data ('../use-cases/features.yml' )
203
+ render_components_into_file ('../use-cases' , features_data , 'templates/features.jinja2' , FEATURES_TAG )
0 commit comments