# Tenzir Node v4.28.0

## 🚀 Features

### Add explicit `tls` options to `to_opensearch` and `to_splunk`

Feb 8, 2025 · [@IyeOnline](https://github.com/IyeOnline) · [#4983](https://github.com/tenzir/tenzir/pull/4983)

`to_opensearch` and `to_splunk` now feature an explicit `tls` option.

### Implement `load_stdin` and `save_stdout`

Feb 7, 2025 · [@IyeOnline](https://github.com/IyeOnline) · [#4969](https://github.com/tenzir/tenzir/pull/4969)

The new `load_stdin` operator accepts bytes from standard input, while `save_stdout` writes bytes to standard output.

### Implement `parse_syslog`

Feb 6, 2025 · [@IyeOnline](https://github.com/IyeOnline) · [#4980](https://github.com/tenzir/tenzir/pull/4980)

You can use the new `parse_syslog` function to parse a string as a syslog message.

### More parsing functions

Feb 5, 2025 · [@IyeOnline](https://github.com/IyeOnline) · [#4933](https://github.com/tenzir/tenzir/pull/4933)

It is now possible to define additional patterns in the `parse_grok` function.

The `read_xsv` family of parsers now accept the `header` as a list of strings as an alternative to a single delimited string.

`read_grok` now accepts additional `pattern_definitions` as either a `record` mapping from pattern name to definition or a `string` of newline separated patterns definitions.

We introduced the `parse_csv`, `parse_kv`, `parse_ssv`, `parse_tsv`, `parse_xsv` and `parse_yaml` functions, allowing you to parse strings as those formats.

The `map` function now handles cases where list elements mapped to different types.

## 🔧 Changes

### Evict old caches when exceeding capacity limits

Feb 10, 2025 · [@dominiklohmann](https://github.com/dominiklohmann) · [#4984](https://github.com/tenzir/tenzir/pull/4984)

Unless specified explicitly, the `cache` has no more default capacity in terms of number of events per cache. Instead, the node now tracks the global cache capacity in number of bytes. This is limited to 1GiB by default, and can be configured with the `tenzir.cache.capacity` option. For practical reasons, we require at least 64MiB of caches.

The default `write_timeout` of caches increased from 1 minute to 10 minutes, and can now be configured with the `tenzir.cache.lifetime` option.

The `/serve` endpoint now returns an additional field `state`, which can be one of `running`, `completed`, or `failed`, indicating the status of the pipeline with the corresponding `serve` operator at the time of the request.

### Stop collecting metrics for hidden pipelines

Jan 31, 2025 · [@dominiklohmann](https://github.com/dominiklohmann) · [#4966](https://github.com/tenzir/tenzir/pull/4966)

`metrics "operator"` no longer includes metrics from hidden pipelines, such as pipelines run under-the-hood by the Tenzir Platform.

## 🐞 Bug Fixes

### Evict old caches when exceeding capacity limits

Feb 10, 2025 · [@dominiklohmann](https://github.com/dominiklohmann) · [#4984](https://github.com/tenzir/tenzir/pull/4984)

We fixed an up to 60 seconds hang in requests to the `/serve` endpoint when the request was issued after the pipeline with the corresponding `serve` operator was started and before it finished with an error and without results.

### Fix shutdown of the lookup helper actor

Feb 6, 2025 · [@tobim](https://github.com/tobim) · [#4978](https://github.com/tenzir/tenzir/pull/4978)

We sqashed a bug that prevented the `tenzir-node` process from exiting cleanly while the `lookup` operator was used in a pipeline.

### More parsing functions

Feb 5, 2025 · [@IyeOnline](https://github.com/IyeOnline) · [#4933](https://github.com/tenzir/tenzir/pull/4933)

Re-defining a predefined grok pattern no longer terminates the application.

The `string.parse_json()` function can now parse single numbers or strings instead of only objects.

`read_leef` and `parse_leef` now include the `event_class_id` in their output.

`read_yaml` now properly parses numbers as numbers.

[ Download on GitHub ](https://github.com/tenzir/tenzir/releases/tag/v4.28.0)

[Get the release artifacts and source code.](https://github.com/tenzir/tenzir/releases/tag/v4.28.0)