An open API service indexing awesome lists of open source software.

https://github.com/vi/stdintap

Command line tool to accept logs from stdin and allow "tapping" (i.e. subscribing) to them using sockets.
https://github.com/vi/stdintap

command-line-tool logging socket stdin stdio tcp-server text-utility unix-socket

Last synced: about 2 months ago
JSON representation

Command line tool to accept logs from stdin and allow "tapping" (i.e. subscribing) to them using sockets.

Awesome Lists containing this project

README

        

# stdintap

Read lines from stdin and copy them to all connected clients.

## Features

* UNIX socket support (including Linux's abstract namespace)
* Adjustable behaviour of handling slow clients: lines may be dropped or backpressure can be applied.
* For slow clients, `stdintap` can announce number of omitted lines. Alternatively, it can announce moments where backpressure was applied.
* History mode - `stdintap` can keep N last lines and replay them to connected clients. There is optional announcement where history ends and realtime data begins.
* Optional printing of timestamps (using monotonic timer) and sequence numbers.
* Maximum line size is limited (adjustable). You can use zero byte instead of newline if needed.
* You can request content to be also forwarded to stdout.
* Reasonable performance.

## Examples

Simple

```
| $ stdintap 127.0.0.1:1234
| A
| B
| C | $ nc 127.0.0.1 1234
| D | D
| E | E
| F | F | $ nc 127.0.0.1 1234
| G | G | G
| H | ^C | H
| I | $ | I
| J | J
...
```

Advanced options

```
| $ stdintap @qqq -x -H --history 2 -t --seqn
| a
| b
| c
| d
| e
| | $ socat - abstract:qqq
| | 000004.000452 3 d
| | 000006.000780 4 e
| | 000012.000967 HELLO
| f | 000085.000356 5 f
| g | 000090.000084 6 g
| ^D | 000134.000408 EOF
| $ | $
```

Overrun announcements

```
| $ stdintap @qqq -x --qlen 1 --send-buffer-size 16
| | $ socat - abstract:qqq,rcvbuf=16
| 000000000000000 | 000000000000000
| 111111111111111 | 111111111111111
| 222222222222222 | 222222222222222
| | ^Z
| | [1]+ Stopped
| | $
| 333333333333333
| 444444444444444
| 555555555555555
| 666666666666666
| 777777777777777
| 888888888888888
| 999999999999999
| AAAAAAAAAAAAAAA
| BBBBBBBBBBBBBBB
| CCCCCCCCCCCCCCC
| DDDDDDDDDDDDDDD
| EEEEEEEEEEEEEEE
| FFFFFFFFFFFFFFF
| GGGGGGGGGGGGGGG
| | $ fg
| | 333333333333333
| | 444444444444444
| | 555555555555555
| | 666666666666666
| | 777777777777777
| | 888888888888888
| | 999999999999999
| | AAAAAAAAAAAAAAA
| | OVERRUN 5
| | GGGGGGGGGGGGGGG
| HHHHHHHHHHHHHHH | HHHHHHHHHHHHHHH
| ^D | EOF
| $ | $
```

## Installation

Download a pre-built executable from [Github releases](https://github.com/vi/stdintap/releases) or install from source code with `cargo install --path .` or `cargo install stdintap`.

## CLI options

stdintap --help output (not including the `tokio-listener` options)

```
CLI tool to read lines from stdin and broadcast them to connected TCP clients

Usage:

Arguments:

Socket address to listen for incoming connections.

Various types of addresses are supported:

* TCP socket address and port, like 127.0.0.1:8080 or [::]:80

* UNIX socket path like /tmp/mysock or Linux abstract address like @abstract

* Special keyword "sd-listen" to accept connections from file descriptor 3 (e.g. systemd socket activation). You can also specify a named descriptor after a colon or * to use all passed sockets.

Note that some features may be disabled by compile-time settings.

Options:
-q, --qlen
Size of broadcast channel for serving the lines

[default: 16]

--backpressure
Slow down reading from stdin if connected clients are slow in reading output

-x, --announce-overruns
Inject special lines that denote missed content due to slow reading In `--backpressure` mode, it will insert announcements that backpressure is applied Additionally, stdin EOFs will also be announced.

When `--timestamps` are active, special lines are separated from the timestamp by spaces instead of tabs.

Note that overrun announcements may exacerbate overruns.

--disconnect-on-overruns
Disconnect clients when they are too slow to read lines

-t, --timestamps
Prefix messages with a monotone timestamps

-H, --hello-message
Inject initial message at the beginning of each client connection

With --history option, the hello message appears after the history, before the "online" content.

--max-line-size
Automatically split lines longer than this

[default: 65536]

-0, --zero-separated
Separata lines by zero byte instead of \n

-T, --tee
Also copy stdin to stdout

--seqn
Print sequence numbers of lines

--history
Remember and this number of lines and replay them to each connecting client

--require-observer
Don't read from stdin unless at least one client is connected.

Does not gurantee lack of dropped lines on disconnections.

-h, --help
Print help (see a summary with '-h')

-V, --version
Print version

```

(manually removed an inapplicable phrase)

Socket listening options

```
--unix-listen-unlink
remove UNIX socket prior to binding to it

--unix-listen-chmod
change filesystem mode of the newly bound UNIX socket to `owner`, `group` or `everybody`

--unix-listen-uid
change owner user of the newly bound UNIX socket to this numeric uid

--unix-listen-gid
change owner group of the newly bound UNIX socket to this numeric uid

--sd-accept-ignore-environment
ignore environment variables like LISTEN_PID or LISTEN_FDS and unconditionally use file descritor `3` as a socket in sd-listen or sd-listen-unix modes

--tcp-keepalive
set SO_KEEPALIVE settings for each accepted TCP connection.

Value is a colon-separated triplet of time_ms:count:interval_ms, each of which is optional.

--tcp-reuse-port
Try to set SO_REUSEPORT, so that multiple processes can accept connections from the same port in a round-robin fashion

--recv-buffer-size
Set socket's SO_RCVBUF value

--send-buffer-size
Set socket's SO_SNDBUF value

--tcp-only-v6
Set socket's IPV6_V6ONLY to true, to avoid receiving IPv4 connections on IPv6 socket

--tcp-listen-backlog
Maximum number of pending unaccepted connections
```

## See also

* https://github.com/vi/line2httppost + https://github.com/vi/postsse
* https://github.com/vi/websocat + https://github.com/vi/wsbroad