---
name: PromSample
lang: go
domain: infra
version: "1.0.0"
algebraic: product
definition: |
  type PromSample struct {
      Name   string            // nombre de metrica prometheus, ej "node_cpu_percent"
      Labels map[string]string // labels de la serie, ej {"core":"0"} (sin la label "instance")
      Value  float64
  }
description: "Una unica serie de metrica en formato Prometheus: nombre, labels y valor numerico. Es la unidad que producen los colectores (collect_host_metrics) y consume el formateador (format_prom_exposition). NO incluye la label instance: esa la añade el pusher remoto via extra_label."
tags: [prometheus, metrics, sample, fleet-metrics, infra, monitoring]
uses_types: []
file_path: "functions/infra/prom_sample.go"
---

## Campos

- `Name`: nombre de la metrica en formato Prometheus, ej `node_cpu_percent`, `node_disk_used_bytes`. Se sanitiza a `[a-zA-Z0-9_:]` en el formateador.
- `Labels`: mapa clave/valor de labels de la serie, ej `{"core":"0"}`, `{"mount":"/"}`. Puede ser `nil` o vacio (serie sin labels). NO debe incluir la label `instance` — esa se añade en el push remoto.
- `Value`: valor numerico de la metrica. Se formatea con `strconv.FormatFloat(v, 'g', -1, 64)`.

## Ejemplo

```go
samples := []PromSample{
    {Name: "node_load1", Labels: nil, Value: 0.42},
    {Name: "node_cpu_core_percent", Labels: map[string]string{"core": "0"}, Value: 12.5},
    {Name: "node_disk_used_bytes", Labels: map[string]string{"mount": "/"}, Value: 1.2e10},
}
```

## Notas

- Es un tipo producto puro: solo datos, sin metodos.
- Vive en `functions/infra/prom_sample.go` (mismo paquete Go que los colectores y el formateador) para evitar imports cruzados entre paquetes del registry.
- Lo producen `collect_host_metrics_go_infra` y lo consume `format_prom_exposition_go_infra`.
