|
12 | 12 | {
|
13 | 13 | @RenderProduct(
|
14 | 14 | "Stack",
|
15 |
| - "Part of the versioned Elastic Stack\n\nAvailable in ECH, ECE, ECK, and self-managed deployments, unless otherwise stated", |
| 15 | + "Elastic Stack", |
16 | 16 | VersioningSystemId.Stack,
|
17 | 17 | appliesTo.Stack
|
18 | 18 | )
|
|
22 | 22 | if (appliesTo.Deployment.Ece is not null)
|
23 | 23 | {
|
24 | 24 | @RenderProduct("ECE",
|
25 |
| - "Elastic Cloud Enterprise", |
| 25 | + "Elastic Cloud Enterprise", |
26 | 26 | VersioningSystemId.Ece,
|
27 | 27 | appliesTo.Deployment.Ece
|
28 | 28 | )
|
|
32 | 32 | {
|
33 | 33 | @RenderProduct(
|
34 | 34 | "ECK",
|
35 |
| - "Elastic Cloud on Kubernetes", |
| 35 | + "Elastic Cloud on Kubernetes", |
36 | 36 | VersioningSystemId.Eck,
|
37 | 37 | appliesTo.Deployment.Eck
|
38 | 38 | )
|
|
42 | 42 | {
|
43 | 43 | @RenderProduct(
|
44 | 44 | "ECH",
|
45 |
| - "Elastic Cloud Hosted", |
| 45 | + "Elastic Cloud Hosted", |
46 | 46 | VersioningSystemId.Ess,
|
47 | 47 | appliesTo.Deployment.Ess
|
48 | 48 | )
|
|
52 | 52 | {
|
53 | 53 | @RenderProduct(
|
54 | 54 | "Self-Managed",
|
55 |
| - "Self-managed Elastic deployments", |
| 55 | + "Self-managed Elastic deployments", |
56 | 56 | VersioningSystemId.Self,
|
57 | 57 | appliesTo.Deployment.Self
|
58 | 58 | )
|
|
64 | 64 | {
|
65 | 65 | @RenderProduct(
|
66 | 66 | "Serverless",
|
67 |
| - "Elastic Cloud Serverless: Fully-managed Elastic, available in Elastic Cloud", |
| 67 | + "Elastic Cloud Serverless", |
68 | 68 | VersioningSystemId.Serverless,
|
69 | 69 | appliesTo.Serverless.AllProjects
|
70 | 70 | )
|
|
75 | 75 | {
|
76 | 76 | @RenderProduct(
|
77 | 77 | "Serverless Elasticsearch",
|
78 |
| - "Serverless Elasticsearch projects", |
| 78 | + "Serverless Elasticsearch projects", |
79 | 79 | VersioningSystemId.Elasticsearch,
|
80 | 80 | appliesTo.Serverless.Elasticsearch
|
81 | 81 | )
|
|
85 | 85 | {
|
86 | 86 | @RenderProduct(
|
87 | 87 | "Serverless Observability",
|
88 |
| - "Serverless Observability projects", |
| 88 | + "Serverless Observability projects", |
89 | 89 | VersioningSystemId.Observability,
|
90 | 90 | appliesTo.Serverless.Observability
|
91 | 91 | )
|
|
95 | 95 | {
|
96 | 96 | @RenderProduct(
|
97 | 97 | "Serverless Security",
|
98 |
| - "Serverless Security projects", |
| 98 | + "Serverless Security projects", |
99 | 99 | VersioningSystemId.Security,
|
100 | 100 | appliesTo.Serverless.Security
|
101 | 101 | )
|
|
111 | 111 | var pa = appliesTo.ProductApplicability;
|
112 | 112 | if (pa.Ecctl is not null)
|
113 | 113 | {
|
114 |
| - @RenderProduct("ECCTL", "Elastic Cloud Control", VersioningSystemId.Ecctl, pa.Ecctl) |
| 114 | + @RenderProduct("ECCTL", "Elastic Cloud Control", VersioningSystemId.Ecctl, pa.Ecctl) |
115 | 115 | ;
|
116 | 116 | }
|
117 | 117 |
|
118 | 118 | if (pa.Curator is not null)
|
119 | 119 | {
|
120 |
| - @RenderProduct("Curator", "", VersioningSystemId.Curator, pa.Curator) |
| 120 | + @RenderProduct("Curator", "Curator", VersioningSystemId.Curator, pa.Curator) |
121 | 121 | ;
|
122 | 122 | }
|
123 | 123 |
|
124 | 124 | if (pa.ApmAgentAndroid is not null)
|
125 | 125 | {
|
126 |
| - @RenderProduct("APM Agent Android", "Application Performance Monitoring Agent for Android", VersioningSystemId.ApmAgentAndroid, pa.ApmAgentAndroid) |
| 126 | + @RenderProduct("APM Agent Android", "Application Performance Monitoring Agent for Android", VersioningSystemId.ApmAgentAndroid, pa.ApmAgentAndroid) |
127 | 127 | ;
|
128 | 128 | }
|
129 | 129 |
|
130 | 130 | if (pa.ApmAgentDotnet is not null)
|
131 | 131 | {
|
132 |
| - @RenderProduct("APM Agent .NET", "Application Performance Monitoring Agent for .NET", VersioningSystemId.ApmAgentDotnet, pa.ApmAgentDotnet) |
| 132 | + @RenderProduct("APM Agent .NET", "Application Performance Monitoring Agent for .NET", VersioningSystemId.ApmAgentDotnet, pa.ApmAgentDotnet) |
133 | 133 | ;
|
134 | 134 | }
|
135 | 135 |
|
136 | 136 | if (pa.ApmAgentGo is not null)
|
137 | 137 | {
|
138 |
| - @RenderProduct("APM Agent Go", "Application Performance Monitoring Agent for Go", VersioningSystemId.ApmAgentGo, pa.ApmAgentGo) |
| 138 | + @RenderProduct("APM Agent Go", "Application Performance Monitoring Agent for Go", VersioningSystemId.ApmAgentGo, pa.ApmAgentGo) |
139 | 139 | ;
|
140 | 140 | }
|
141 | 141 |
|
142 | 142 | if (pa.ApmAgentIos is not null)
|
143 | 143 | {
|
144 |
| - @RenderProduct("APM Agent iOS", "Application Performance Monitoring Agent for iOS", VersioningSystemId.ApmAgentIos, pa.ApmAgentIos) |
| 144 | + @RenderProduct("APM Agent iOS", "Application Performance Monitoring Agent for iOS", VersioningSystemId.ApmAgentIos, pa.ApmAgentIos) |
145 | 145 | ;
|
146 | 146 | }
|
147 | 147 |
|
148 | 148 | if (pa.ApmAgentJava is not null)
|
149 | 149 | {
|
150 |
| - @RenderProduct("APM Agent Java", "Application Performance Monitoring Agent for Java", VersioningSystemId.ApmAgentJava, pa.ApmAgentJava) |
| 150 | + @RenderProduct("APM Agent Java", "Application Performance Monitoring Agent for Java", VersioningSystemId.ApmAgentJava, pa.ApmAgentJava) |
151 | 151 | ;
|
152 | 152 | }
|
153 | 153 |
|
154 | 154 | if (pa.ApmAgentNode is not null)
|
155 | 155 | {
|
156 |
| - @RenderProduct("APM Agent Node.js", "Application Performance Monitoring Agent for Node.js", VersioningSystemId.ApmAgentNode, pa.ApmAgentNode) |
| 156 | + @RenderProduct("APM Agent Node.js", "Application Performance Monitoring Agent for Node.js", VersioningSystemId.ApmAgentNode, pa.ApmAgentNode) |
157 | 157 | ;
|
158 | 158 | }
|
159 | 159 |
|
160 | 160 | if (pa.ApmAgentPhp is not null)
|
161 | 161 | {
|
162 |
| - @RenderProduct("APM Agent PHP", "Application Performance Monitoring Agent for PHP", VersioningSystemId.ApmAgentPhp, pa.ApmAgentPhp) |
| 162 | + @RenderProduct("APM Agent PHP", "Application Performance Monitoring Agent for PHP", VersioningSystemId.ApmAgentPhp, pa.ApmAgentPhp) |
163 | 163 | ;
|
164 | 164 | }
|
165 | 165 |
|
166 | 166 | if (pa.ApmAgentPython is not null)
|
167 | 167 | {
|
168 |
| - @RenderProduct("APM Agent Python", "Application Performance Monitoring Agent for Python", VersioningSystemId.ApmAgentPython, pa.ApmAgentPython) |
| 168 | + @RenderProduct("APM Agent Python", "Application Performance Monitoring Agent for Python", VersioningSystemId.ApmAgentPython, pa.ApmAgentPython) |
169 | 169 | ;
|
170 | 170 | }
|
171 | 171 |
|
172 | 172 | if (pa.ApmAgentRuby is not null)
|
173 | 173 | {
|
174 |
| - @RenderProduct("APM Agent Ruby", "Application Performance Monitoring Agent for Ruby", VersioningSystemId.ApmAgentRuby, pa.ApmAgentRuby) |
| 174 | + @RenderProduct("APM Agent Ruby", "Application Performance Monitoring Agent for Ruby", VersioningSystemId.ApmAgentRuby, pa.ApmAgentRuby) |
175 | 175 | ;
|
176 | 176 | }
|
177 | 177 |
|
178 | 178 | if (pa.ApmAgentRum is not null)
|
179 | 179 | {
|
180 |
| - @RenderProduct("APM Agent RUM", "Application Performance Monitoring Agent for Real User Monitoring", VersioningSystemId.ApmAgentRum, pa.ApmAgentRum) |
| 180 | + @RenderProduct("APM Agent RUM", "Application Performance Monitoring Agent for Real User Monitoring", VersioningSystemId.ApmAgentRum, pa.ApmAgentRum) |
181 | 181 | ;
|
182 | 182 | }
|
183 | 183 |
|
184 | 184 | if (pa.EdotIos is not null)
|
185 | 185 | {
|
186 |
| - @RenderProduct("EDOT iOS", "Elastic Distribution of OpenTelemetry iOS", VersioningSystemId.EdotIos, pa.EdotIos) |
| 186 | + @RenderProduct("EDOT iOS", "Elastic Distribution of OpenTelemetry iOS", VersioningSystemId.EdotIos, pa.EdotIos) |
187 | 187 | ;
|
188 | 188 | }
|
189 | 189 |
|
190 | 190 | if (pa.EdotAndroid is not null)
|
191 | 191 | {
|
192 |
| - @RenderProduct("EDOT Android", "Elastic Distribution of OpenTelemetry Android", VersioningSystemId.EdotAndroid, pa.EdotAndroid) |
| 192 | + @RenderProduct("EDOT Android", "Elastic Distribution of OpenTelemetry Android", VersioningSystemId.EdotAndroid, pa.EdotAndroid) |
193 | 193 | ;
|
194 | 194 | }
|
195 | 195 |
|
196 | 196 | if (pa.EdotDotnet is not null)
|
197 | 197 | {
|
198 |
| - @RenderProduct("EDOT .NET", "Elastic Distribution of OpenTelemetry .NET", VersioningSystemId.EdotDotnet, pa.EdotDotnet) |
| 198 | + @RenderProduct("EDOT .NET", "Elastic Distribution of OpenTelemetry .NET", VersioningSystemId.EdotDotnet, pa.EdotDotnet) |
199 | 199 | ;
|
200 | 200 | }
|
201 | 201 |
|
202 | 202 | if (pa.EdotJava is not null)
|
203 | 203 | {
|
204 |
| - @RenderProduct("EDOT Java", "Elastic Distribution of OpenTelemetry Java", VersioningSystemId.EdotJava, pa.EdotJava) |
| 204 | + @RenderProduct("EDOT Java", "Elastic Distribution of OpenTelemetry Java", VersioningSystemId.EdotJava, pa.EdotJava) |
205 | 205 | ;
|
206 | 206 | }
|
207 | 207 |
|
208 | 208 | if (pa.EdotNode is not null)
|
209 | 209 | {
|
210 |
| - @RenderProduct("EDOT Node.js", "Elastic Distribution of OpenTelemetry Node.js", VersioningSystemId.EdotNode, pa.EdotNode) |
| 210 | + @RenderProduct("EDOT Node.js", "Elastic Distribution of OpenTelemetry Node.js", VersioningSystemId.EdotNode, pa.EdotNode) |
211 | 211 | ;
|
212 | 212 | }
|
213 | 213 |
|
214 | 214 | if (pa.EdotPhp is not null)
|
215 | 215 | {
|
216 |
| - @RenderProduct("EDOT PHP", "Elastic Distribution of OpenTelemetry PHP", VersioningSystemId.ApmAgentPhp, pa.EdotPhp) |
| 216 | + @RenderProduct("EDOT PHP", "Elastic Distribution of OpenTelemetry PHP", VersioningSystemId.ApmAgentPhp, pa.EdotPhp) |
217 | 217 | ;
|
218 | 218 | }
|
219 | 219 |
|
220 | 220 | if (pa.EdotPython is not null)
|
221 | 221 | {
|
222 |
| - @RenderProduct("EDOT Python", "Elastic Distribution of OpenTelemetry Python", VersioningSystemId.EdotPython, pa.EdotPython) |
| 222 | + @RenderProduct("EDOT Python", "Elastic Distribution of OpenTelemetry Python", VersioningSystemId.EdotPython, pa.EdotPython) |
223 | 223 | ;
|
224 | 224 | }
|
225 | 225 |
|
226 | 226 | if (pa.EdotCfAws is not null)
|
227 | 227 | {
|
228 |
| - @RenderProduct("EDOT CF AWS", "Elastic Distribution of OpenTelemetry Cloud Forwarder for AWS", VersioningSystemId.EdotCfAws, pa.EdotCfAws) |
| 228 | + @RenderProduct("EDOT CF AWS", "Elastic Distribution of OpenTelemetry Cloud Forwarder for AWS", VersioningSystemId.EdotCfAws, pa.EdotCfAws) |
229 | 229 | ;
|
230 | 230 | }
|
231 | 231 |
|
|
238 | 238 |
|
239 | 239 | @functions {
|
240 | 240 |
|
241 |
| - private IHtmlContent RenderProduct(string name, string description, VersioningSystemId versioningSystemName, AppliesCollection applications) |
| 241 | + private IHtmlContent RenderProduct(string key, string keyFull, VersioningSystemId versioningSystemName, AppliesCollection applications) |
242 | 242 | {
|
243 | 243 | var versioningSystem = Model.VersionsConfig.GetVersioningSystem(versioningSystemName);
|
244 | 244 |
|
245 | 245 | foreach (var applicability in applications)
|
246 | 246 | {
|
247 |
| - var lifecycleTooltip = ""; |
248 |
| - var badgeText = name; |
| 247 | + var badgeText = key; |
| 248 | + var tooltipText = ""; |
249 | 249 | var lifecycleClass = applicability.GetLifeCycleName().ToLowerInvariant().Replace(" ", "-");
|
250 |
| - switch (applicability.Lifecycle) |
| 250 | + |
| 251 | + var lifecycleFull = applicability.Lifecycle switch |
| 252 | + { |
| 253 | + ProductLifecycle.GenerallyAvailable => "Available", |
| 254 | + ProductLifecycle.Beta => "Available in beta", |
| 255 | + ProductLifecycle.TechnicalPreview => "Available in technical preview", |
| 256 | + ProductLifecycle.Deprecated => "Deprecated", |
| 257 | + ProductLifecycle.Removed => "Removed", |
| 258 | + _ => "" |
| 259 | + }; |
| 260 | + |
| 261 | + var realVersion = TryGetRealVersion(applicability, out var v) ? v : null; |
| 262 | + |
| 263 | + if (realVersion is not null) |
251 | 264 | {
|
252 |
| - case ProductLifecycle.TechnicalPreview: |
253 |
| - if (TryGetRealVersion(applicability, out var previewVersion) && previewVersion > versioningSystem.Current) |
254 |
| - { |
255 |
| - badgeText = "Planned"; |
256 |
| - lifecycleTooltip = "We plan to add this functionality in a future update. Plans may change without notice."; |
257 |
| - lifecycleClass = "planned"; |
258 |
| - } |
259 |
| - else |
260 |
| - { |
261 |
| - lifecycleTooltip = "This functionality is in technical preview and may be changed or removed in a future release. Elastic will work to fix any issues, but features in technical preview are not subject to the support SLA of official GA features."; |
262 |
| - } |
263 |
| - |
264 |
| - break; |
265 |
| - case ProductLifecycle.Beta: |
266 |
| - if (TryGetRealVersion(applicability, out var betaVersion) && betaVersion > versioningSystem.Current) |
267 |
| - { |
268 |
| - badgeText = "Planned"; |
269 |
| - lifecycleTooltip = "We plan to add this functionality in a future update. Plans may change without notice."; |
270 |
| - lifecycleClass = "planned"; |
271 |
| - } |
272 |
| - else |
273 |
| - { |
274 |
| - lifecycleTooltip = "This functionality is in beta and is subject to change. The design and code is less mature than official GA features and is being provided as-is with no warranties. Beta features are not subject to the support SLA of official GA features."; |
275 |
| - } |
276 |
| - |
277 |
| - break; |
278 |
| - case ProductLifecycle.GenerallyAvailable: |
279 |
| - if (TryGetRealVersion(applicability, out var version) && version > versioningSystem.Current) |
280 |
| - { |
281 |
| - badgeText = applications.Any(a => a.Lifecycle is ProductLifecycle.TechnicalPreview or ProductLifecycle.Beta) ? "GA planned" : "Planned"; |
282 |
| - lifecycleTooltip = "We plan to add this functionality in a future update. Plans may change without notice."; |
283 |
| - lifecycleClass = "planned"; |
284 |
| - } |
285 | 265 |
|
286 |
| - break; |
287 |
| - case ProductLifecycle.Deprecated: |
288 |
| - if (TryGetRealVersion(applicability, out var deprecatedVersion) && deprecatedVersion > versioningSystem.Current) |
| 266 | + if (realVersion <= versioningSystem.Current) |
| 267 | + { |
| 268 | + tooltipText = $"{lifecycleFull} on {keyFull} version {realVersion} and later unless otherwise specified."; |
| 269 | + } |
| 270 | + else |
| 271 | + { |
| 272 | + tooltipText = applicability.Lifecycle switch |
289 | 273 | {
|
290 |
| - badgeText = "Deprecation planned"; |
291 |
| - lifecycleTooltip = "We plan to deprecate this functionality in a future update. Plans may change without notice."; |
292 |
| - } |
| 274 | + ProductLifecycle.GenerallyAvailable |
| 275 | + or ProductLifecycle.Beta |
| 276 | + or ProductLifecycle.TechnicalPreview |
| 277 | + or ProductLifecycle.Planned => |
| 278 | + $"We plan to add this functionality in a future {keyFull} update. Subject to change.", |
| 279 | + ProductLifecycle.Deprecated => $"We plan to deprecate this functionality in a future {keyFull} update. Subject to change.", |
| 280 | + ProductLifecycle.Removed => $"We plan to remove this functionality in a future {keyFull} update. Subject to change.", |
| 281 | + _ => tooltipText |
| 282 | + }; |
| 283 | + } |
| 284 | + |
| 285 | + } |
| 286 | + else |
| 287 | + { |
| 288 | + tooltipText = $"{lifecycleFull} on {keyFull} unless otherwise specified."; |
| 289 | + } |
293 | 290 |
|
294 |
| - break; |
295 |
| - case ProductLifecycle.Removed: |
296 |
| - if (TryGetRealVersion(applicability, out var removedVersion) && removedVersion > versioningSystem.Current) |
297 |
| - { |
298 |
| - badgeText = "Removal planned"; |
299 |
| - lifecycleTooltip = "We plan to remove this functionality in a future update. Plans may change without notice."; |
300 |
| - } |
| 291 | + var disclaimer = applicability.Lifecycle switch |
| 292 | + { |
| 293 | + ProductLifecycle.Beta => "Beta features are subject to change. The design and code is less mature than official GA features and is being provided as-is with no warranties. Beta features are not subject to the support SLA of official GA features.", |
| 294 | + ProductLifecycle.TechnicalPreview => "This functionality may be changed or removed in a future release. Elastic will work to fix any issues, but features in technical preview are not subject to the support SLA of official GA features.", |
| 295 | + ProductLifecycle.GenerallyAvailable => versioningSystem.Id is VersioningSystemId.Stack ? "If this functionality is unavailable or behaves differently when deployed on ECH, ECE, ECK, or a self-managed installation, it will be indicated on the page." : null, |
| 296 | + _ => null |
| 297 | + }; |
301 | 298 |
|
302 |
| - break; |
| 299 | + if (disclaimer is not null) |
| 300 | + { |
| 301 | + tooltipText = $"{tooltipText}\n\n{disclaimer}"; |
303 | 302 | }
|
304 | 303 |
|
305 |
| - if ( |
306 |
| - applicability.Version is null |
307 |
| - && applicability.Lifecycle != ProductLifecycle.Deprecated |
308 |
| - && applicability.Lifecycle != ProductLifecycle.Removed |
309 |
| - && versioningSystem.Id is VersioningSystemId.Stack or VersioningSystemId.Self or VersioningSystemId.Ece or VersioningSystemId.Eck |
310 |
| - ) |
| 304 | + if (realVersion is not null && realVersion > versioningSystem.Current) |
311 | 305 | {
|
312 |
| - lifecycleTooltip += $"\n\nApplies to version {versioningSystem.Base} and later - may have been introduced in a previous version"; |
| 306 | + badgeText = applicability.Lifecycle switch |
| 307 | + { |
| 308 | + ProductLifecycle.TechnicalPreview => "Planned", |
| 309 | + ProductLifecycle.Beta => "Planned", |
| 310 | + ProductLifecycle.GenerallyAvailable => |
| 311 | + applications.Any(a => a.Lifecycle is ProductLifecycle.TechnicalPreview or ProductLifecycle.Beta) |
| 312 | + ? "GA planned" |
| 313 | + : "Planned", |
| 314 | + ProductLifecycle.Deprecated => "Deprecation planned", |
| 315 | + ProductLifecycle.Removed => "Removal planned", |
| 316 | + ProductLifecycle.Planned => "Planned", |
| 317 | + _ => badgeText |
| 318 | + }; |
313 | 319 | }
|
314 | 320 |
|
315 |
| - var badgeTextChanged = badgeText != name; |
316 |
| - <span class="applicable-info"> |
317 |
| - <span class="applicable-name" data-tippy-content="@description">@name</span> |
| 321 | + var badgeTextChanged = badgeText != key; |
| 322 | + <span class="applicable-info" data-tippy-content="@(new HtmlString(tooltipText))"> |
| 323 | + <span class="applicable-name">@key</span> |
318 | 324 |
|
319 | 325 | @{
|
320 | 326 | var showLifeCycle = applicability.Lifecycle != ProductLifecycle.GenerallyAvailable && !badgeTextChanged;
|
321 | 327 | var showVersion = applicability.Version is not null and not AllVersions;
|
322 | 328 | }
|
323 | 329 |
|
324 |
| - @if (!string.IsNullOrEmpty(name) && (showLifeCycle || showVersion)) |
| 330 | + @if (!string.IsNullOrEmpty(key) && (showLifeCycle || showVersion)) |
325 | 331 | {
|
326 | 332 | <span class="applicable-separator"></span>
|
327 | 333 | }
|
328 |
| - <span class="applicable-meta applicable-meta-@lifecycleClass" data-tippy-content="@lifecycleTooltip"> |
| 334 | + <span class="applicable-meta applicable-meta-@lifecycleClass"> |
329 | 335 | @if (showLifeCycle)
|
330 | 336 | {
|
331 | 337 | <span
|
|
0 commit comments