README.md

# Themis

Prometheus client in pure Gleam!

[![Package Version](https://img.shields.io/hexpm/v/themis)](https://hex.pm/packages/themis)
[![Hex Docs](https://img.shields.io/badge/hex-docs-ffaff3)](https://hexdocs.pm/themis/)

```sh
gleam add themis
```

## Quick Start

```gleam
import themis
import gleam/dict
import gleam/io

pub fn main() {
  // Create a new themis store
  let store = themis.new()

  // Add a gauge metric
  let assert Ok(store) = themis.add_gauge(
    store,
    "process_memory_bytes",
    "Current memory usage in bytes",
  )

  // Record some values with labels
  let labels = dict.from_list([
    #("process", "web_server"),
    #("instance", "prod-1"),
  ])
  
  let assert Ok(store) = themis.insert_gauge_record(
    store,
    "process_memory_bytes",
    labels,
    metrics.int(1_234_567),
  )

  // Export metrics in Prometheus format
  io.println(metrics.print(store))
}
```

Further documentation can be found at <https://hexdocs.pm/themis>.

## Usage

### Working with Different Numeric Types

Themis metric values are set using the dedicated `Number` type. There are 5 number types available:

```gleam
import themis

// Integer values
let memory = themis.int(1_234_567)

// Decimal (float) values
let temperature = themis.dec(23.5)

// Special values
let and_beyond = themis.pos_inf()
let lower_bound = themis.neg_inf()
let unknown = themis.nan()
```

## Output Format

The metrics are exported in the standard Prometheus text format:

```
# # HELP process_memory_bytes Current memory usage in bytes
# # TYPE process_memory_bytes gauge
process_memory_bytes{process="web_server",instance="prod-1"} 1234567
```

## License

MIT