diff --git a/assets/js/registrySearch.js b/assets/js/registrySearch.js index d91c590585a3..7673afafe855 100644 --- a/assets/js/registrySearch.js +++ b/assets/js/registrySearch.js @@ -38,6 +38,7 @@ let pathName = window.location.pathname; let searchQuery = ''; let selectedLanguage = 'all'; let selectedComponent = 'all'; +let selectedFlag = 'all'; // Added selectedFlag parseUrlParams(); @@ -49,7 +50,12 @@ if (pathName.includes('registry')) { showBody(); } - if (selectedLanguage !== 'all' || selectedComponent !== 'all') { + // Set the dropdown values from query params + if ( + selectedLanguage !== 'all' || + selectedComponent !== 'all' || + selectedFlag !== 'all' + ) { if (selectedLanguage !== 'all') { document.getElementById('languageDropdown').textContent = document.getElementById( @@ -62,6 +68,10 @@ if (pathName.includes('registry')) { `component-item-${selectedComponent}`, ).textContent; } + if (selectedFlag !== 'all') { + document.getElementById('flagsDropdown').textContent = + document.getElementById(`flag-item-${selectedFlag}`).textContent; + } updateFilters(); } @@ -106,6 +116,22 @@ if (pathName.includes('registry')) { updateFilters(); }), ); + // Flags dropdown event listener + + let flagList = document + .getElementById('flagsFilter') + .querySelectorAll('.dropdown-item'); + + flagList.forEach((element) => + element.addEventListener('click', function (evt) { + let val = evt.target.getAttribute('value'); + selectedFlag = val; + document.getElementById('flagsDropdown').textContent = + evt.target.textContent; + setInput('flag', val); + updateFilters(); + }), + ); }); } @@ -208,24 +234,39 @@ function setInput(key, value) { history.replaceState(null, null, '?' + queryParams.toString()); } -// Filters items based on language and component filters +// Filters items based on language, component and flags function updateFilters() { let allItems = [...document.getElementsByClassName('registry-entry')]; - if (selectedComponent === 'all' && selectedLanguage === 'all') { + if ( + selectedComponent === 'all' && + selectedLanguage === 'all' && + selectedFlag === 'all' + ) { + // Show all items if all filters are set to 'all' allItems.forEach((element) => element.classList.remove('d-none')); } else { + // Apply the filters allItems.forEach((element) => { const dc = element.dataset.registrytype; const dl = element.dataset.registrylanguage; - if ( - (dc === selectedComponent || selectedComponent === 'all') && - (dl === selectedLanguage || selectedLanguage === 'all') - ) { + const df = element.dataset.registryflags + ? element.dataset.registryflags.split(' ').map((f) => f.toLowerCase()) + : []; + + const componentMatches = + dc === selectedComponent || selectedComponent === 'all'; + const languageMatches = + dl === selectedLanguage || selectedLanguage === 'all'; + const flagMatches = + selectedFlag === 'all' || df.includes(selectedFlag.toLowerCase()); + + if (flagMatches) { + console.log('Flag matches:', df); + } + + if (componentMatches && languageMatches && flagMatches) { + // Changed element.classList.remove('d-none'); - } else if (dc === selectedComponent && dl !== selectedLanguage) { - element.classList.add('d-none'); - } else if (dl === selectedLanguage && dc !== selectedComponent) { - element.classList.add('d-none'); } else { element.classList.add('d-none'); } @@ -233,9 +274,11 @@ function updateFilters() { } } +// Parse URL parameters and update variables function parseUrlParams() { let urlParams = new URLSearchParams(window.location.search); searchQuery = urlParams.get('s'); selectedLanguage = urlParams.get('language') || 'all'; selectedComponent = urlParams.get('component') || 'all'; + selectedFlag = urlParams.get('flag') || 'all'; // Added } diff --git a/content/es/docs/concepts/observability-primer.md b/content/es/docs/concepts/observability-primer.md deleted file mode 100644 index 5738333620fe..000000000000 --- a/content/es/docs/concepts/observability-primer.md +++ /dev/null @@ -1,159 +0,0 @@ ---- -title: Introducción a la Observabilidad -description: Conceptos básicos de observabilidad. -weight: 9 -cSpell:ignore: webshop -default_lang_commit: e58a252c44875b04247b53e2394b4634f5a0a84e ---- - -## ¿Qué es la observabilidad? {#what-is-observability} - -La observabilidad te permite entender un sistema desde el exterior al permitirte -hacer preguntas sobre ese sistema sin conocer su funcionamiento interno. Además, -te permite solucionar problemas nuevos con facilidad, es decir, "lo que no -sabemos que no sabemos". También te ayuda a responder a la pregunta: "¿Por qué -está ocurriendo esto?" - -Para hacer esas preguntas sobre tu sistema, tu aplicación debe estar -adecuadamente instrumentada. Es decir, el código de la aplicación debe emitir -[señales](/docs/concepts/signals/) como -[trazas](/docs/concepts/signals/traces/), -[métricas](/docs/concepts/signals/metrics/) y -[logs](/docs/concepts/signals/logs/). Una aplicación está adecuadamente -instrumentada cuando los desarrolladores no necesitan agregar más -instrumentación para solucionar un problema, porque ya tienen toda la -información que necesitan. - -[OpenTelemetry](/docs/what-is-opentelemetry/) es el mecanismo por el cual el -código de la aplicación se instrumenta para ayudar a hacer un sistema -observable. - -## Confiabilidad y métricas - -**Telemetría** se refiere a los datos emitidos por un sistema y su -comportamiento. Los datos pueden venir en forma de -[trazas](/docs/concepts/signals/traces/), -[métricas](/docs/concepts/signals/metrics/) y -[logs](/docs/concepts/signals/logs/). - -**Confiabilidad** responde a la pregunta: "¿Está el servicio haciendo lo que los -usuarios esperan que haga?" Un sistema podría estar funcionando el 100% del -tiempo, pero si, cuando un usuario hace clic en "Agregar al carrito" para añadir -un par de zapatos negros a su carrito, el sistema no siempre agrega los zapatos -negros, entonces el sistema podría ser **no** confiable. - -**Métricas** son agregaciones durante un período de tiempo de datos numéricos -sobre tu infraestructura o aplicación. Por ejemplo: tasa de error del sistema, -uso de CPU y tasa de solicitudes para un servicio determinado. Para más -información sobre métricas y cómo se relacionan con OpenTelemetry, consulta -[Métricas](/docs/concepts/signals/metrics/). - -**SLI**, o Indicador de Nivel de Servicio, representa una medición del -comportamiento de un servicio. Un buen SLI mide tu servicio desde la perspectiva -de tus usuarios. Un ejemplo de SLI puede ser la velocidad con la que se carga -una página web. - -**SLO**, u Objetivo de Nivel de Servicio, representa el medio por el cual la -confiabilidad se comunica a una organización u otros equipos. Esto se logra -adjuntando uno o más SLIs al valor comercial. - -## Entendiendo el trazado distribuido - -El trazado distribuido te permite observar las solicitudes a medida que se -propagan a través de sistemas complejos y distribuidos. El trazado distribuido -mejora la visibilidad de la salud de tu aplicación o sistema y te permite -depurar comportamientos que son difíciles de reproducir localmente. Es esencial -para sistemas distribuidos, que comúnmente tienen problemas no determinísticos o -son demasiado complicados para reproducir localmente. - -Para entender el trazado distribuido, necesitas comprender el papel de cada uno -de sus componentes: logs, spans y trazas. - -### Logs - -Un **log** es un mensaje con marca de tiempo emitido por servicios u otros -componentes. A diferencia de las [trazas](#distributed-traces), no están -necesariamente asociados con una solicitud o transacción de usuario en -particular. Los logs se pueden encontrar casi en cualquier parte del software. -Los logs han sido ampliamente utilizados en el pasado tanto por desarrolladores -como operadores para ayudarles a entender el comportamiento del sistema. - -Ejemplo de un log: - -```text -I, [2021-02-23T13:26:23.505892 #22473] INFO -- : [6459ffe1-ea53-4044-aaa3-bf902868f730] Started GET "/" for ::1 at 2021-02-23 13:26:23 -0800 -``` - -Los logs no son suficientes para rastrear la ejecución del código, ya que -normalmente carecen de información contextual, como dónde fueron llamados. - -Se vuelven mucho más útiles cuando se incluyen como parte de un span o cuando se -correlacionan con una traza y un span. - -Para más información sobre los logs y cómo se relacionan con OpenTelemetry, -consulta Logs. - -### Spans - -Un **span** representa una unidad de trabajo u operación. Los spans rastrean -operaciones específicas que realiza una solicitud, mostrando qué sucedió durante -el tiempo en que se ejecutó esa operación. - -Un span contiene nombre, datos relacionados con el tiempo, -[mensajes de log estructurados](/docs/concepts/signals/traces/#span-events) y -[otros metadatos (es decir, atributos)](/docs/concepts/signals/traces/#attributes) -para proporcionar información sobre la operación que rastrea. - -#### Atributos de span - -Los atributos de span son metadatos adjuntos a un span. - -La siguiente tabla contiene ejemplos de atributos de span: - -| Clave | Valor | -| :-------------------------- | :--------------------------------------------------------------------------------- | -| `http.request.method` | `"GET"` | -| `network.protocol.version` | `"1.1"` | -| `url.path` | `"/webshop/articles/4"` | -| `url.query` | `"?s=1"` | -| `server.address` | `"example.com"` | -| `server.port` | `8080` | -| `url.scheme` | `"https"` | -| `http.route` | `"/webshop/articles/:article_id"` | -| `http.response.status_code` | `200` | -| `client.address` | `"192.0.2.4"` | -| `client.socket.address` | `"192.0.2.5"` (el cliente pasa por un proxy) | -| `user_agent.original` | `"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:72.0) Gecko/20100101 Firefox/72.0"` | - -Para más información sobre los spans y cómo se relacionan con OpenTelemetry, -consulta [Spans](/docs/concepts/signals/traces/#spans). - -### Trazas distribuidas {#distributed-traces} - -Una **traza distribuida**, más comúnmente conocida como **traza**, registra los -caminos tomados por las solicitudes (realizadas por una aplicación o un usuario -final) a medida que se propagan a través de arquitecturas multi-servicio, como -aplicaciones de microservicios y sin servidor. - -Una traza está compuesta por uno o más spans. El primer span representa el span -raíz. Cada span raíz representa una solicitud desde el inicio hasta el final. -Los spans debajo del span principal proporcionan un contexto más detallado de lo -que ocurre durante una solicitud (o los pasos que componen una solicitud). - -Sin el trazado, encontrar la causa raíz de los problemas de rendimiento en un -sistema distribuido puede ser un desafío. El trazado hace que depurar y -comprender los sistemas distribuidos sea menos abrumador al desglosar lo que -sucede dentro de una solicitud a medida que fluye a través de un sistema -distribuido. - -Muchos sistemas de observabilidad visualizan las trazas como diagramas de -cascada que se ven así: - -![Trazado Ejemplo](/img/waterfall-trace.svg 'Diagrama de cascada de trazas') - -Los diagramas de cascada muestran la relación padre-hijo entre un span raíz y -sus spans hijos. Cuando un span encapsula otro span, esto también representa una -relación anidada. - -Para más información sobre las trazas y cómo se relacionan con OpenTelemetry, -consulta [Trazas](/docs/concepts/signals/traces/). diff --git a/layouts/partials/ecosystem/registry/entry.html b/layouts/partials/ecosystem/registry/entry.html index 9a282c4db0b9..add30889db70 100644 --- a/layouts/partials/ecosystem/registry/entry.html +++ b/layouts/partials/ecosystem/registry/entry.html @@ -85,7 +85,23 @@ {{ errorf "The %q registry entry requires a repo or website URL." .title }} {{ end -}} {{ $primaryHref := printf "href=%q" $primaryUrl | safeHTMLAttr -}} -
  • + {{ $flags := slice -}} + {{ if $isNew -}} + {{ $flags = $flags | append "new" -}} + {{ end -}} + {{ if $isNative -}} + {{ $flags = $flags | append "native" -}} + {{ end -}} + {{ if $isFirstParty -}} + {{ $flags = $flags | append "first_party" -}} + {{ end -}} + {{ if $usedInDemo -}} + {{ $flags = $flags | append "used_in_demo" -}} + {{ end -}} + {{ if $deprecated -}} + {{ $flags = $flags | append "deprecated" -}} + {{ end -}} +
  • diff --git a/layouts/shortcodes/ecosystem/registry/search-form.html b/layouts/shortcodes/ecosystem/registry/search-form.html index 4e2fc00028c1..4ed992793e72 100644 --- a/layouts/shortcodes/ecosystem/registry/search-form.html +++ b/layouts/shortcodes/ecosystem/registry/search-form.html @@ -34,6 +34,38 @@ {{ end -}} {{ $types = $types | uniq | sort -}} +{{ $counter := 0 -}} +{{ $entries := slice -}} +{{ range $key, $entry := .Site.Data.registry -}} + {{ $flags := slice -}} + {{ if .isNative -}} + {{ $flags = $flags | append "native" -}} + {{ end -}} + {{ if .isFirstParty -}} + {{ $flags = $flags | append "first_party" -}} + {{ end -}} + {{ if .isNew -}} + {{ $flags = $flags | append "new" -}} + {{ end -}} + {{ if .usedInDemo -}} + {{ $flags = $flags | append "used_in_demo" -}} + {{ end -}} + {{ if .deprecated -}} + {{ $flags = $flags | append "deprecated" -}} + {{ end -}} + {{ $entry = merge $entry (dict "_key" $key "id" $counter "flags" $flags) -}} + {{ $entries = $entries | append $entry -}} + {{ $counter = add $counter 1 }} +{{ end -}} + +{{ $allFlags := slice -}} +{{ range $entry := $entries -}} + {{ range $flag := $entry.flags -}} + {{ $allFlags = $allFlags | append $flag }} + {{ end -}} +{{ end -}} +{{ $uniqueFlags := $allFlags | uniq | sort }} +
    The OpenTelemetry Registry allows you to search for instrumentation libraries, collector components, utilities, and other useful projects in the OpenTelemetry @@ -51,6 +83,8 @@ + + @@ -88,6 +122,16 @@ {{ end -}}
    + + +
    +