View Source Owl.System (Owl v0.4.0)
An alternative to some System
functions.
Link to this section Summary
Functions
A wrapper around System.cmd/3
which additionally logs executed command
and args
.
Runs command
as a daemon, executes operation
and kills the daemon aftewards.
A wrapper around System.shell/2
which additionally logs executed command
.
Link to this section Functions
@spec cmd( binary(), [binary() | {:secret, binary()}], keyword() ) :: {Collectable.t(), exit_status :: non_neg_integer()}
A wrapper around System.cmd/3
which additionally logs executed command
and args
.
If URL is found in logged message, then password in it is masked with asterisks. Additionally, it is possible to explicitly mark a whole argument as secret.
examples
Examples
> Owl.System.cmd("echo", ["test"])
# 10:25:34.252 [debug] $ echo test
{"test\n", 0}
> Owl.System.cmd("echo", ["hello", secret: "world"])
# 10:25:40.516 [debug] $ echo hello ********
{"hello world\n", 0}
> Owl.System.cmd("psql", ["postgresql://postgres:postgres@127.0.0.1:5432", "-tAc", "SELECT 1;"])
# 10:25:50.947 [debug] $ psql postgresql://postgres:********@127.0.0.1:5432 -tAc 'SELECT 1;'
{"1\n", 0}
@spec daemon_cmd(binary(), [binary() | {:secret, binary()}], (() -> result), prefix: Owl.Data.t(), device: IO.device(), ready_check: (String.t() -> boolean()) ) :: result when result: any()
Runs command
as a daemon, executes operation
and kills the daemon aftewards.
Automatically puts messages from stderr
and stdout
to device
prepending them with prefix
.
Returns result of invoking operation
.
options
Options
:prefix
- a prefix forstderr
andstdout
messages from daemon. Defaults tocommand
followed by colon.:device
- device to which messages fromstderr
andstdout
are put. Defaults to:stdio
.:ready_check
- a function which checks the content of the messages produced bycommand
before writing todevice
. If the function is set, then the execution of theoperation
will be blocked untilready_check
returnstrue
. By default this check is absent andoperation
is invoked immediately without awaiting any message.
example
Example
ex> Owl.System.daemon_cmd("ping", ["8.8.8.8"], fn ->
..> Process.sleep(3_000)
..> 2 + 2
..> end)
# 00:36:33.963 [debug] $ ping 8.8.8.8
#
# 00:36:33.964 [debug] Started daemon ping with OS pid 576077
# ping: PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
# ping: 64 bytes from 8.8.8.8: icmp_seq=1 ttl=118 time=28.3 ms
# ping: 64 bytes from 8.8.8.8: icmp_seq=2 ttl=118 time=26.9 ms
# ping: 64 bytes from 8.8.8.8: icmp_seq=3 ttl=118 time=28.6 ms
# 00:36:36.965 [debug] $ kill 576077
4
ex> Owl.System.daemon_cmd(
..> "kubectl",
..> [
..> "port-forward",
..> "--namespace=my-app",
..> "--kubeconfig",
..> "~/.kube/myapp",
..> "my-pod",
..> "5432:5432"
..> ],
..> &dump_database/0,
..> prefix: "kubectl(my-pod): ",
..> ready_check: &String.contains?(&1, "Forwarding from")
..> )
# Forwarding from 127.0.0.1:5432 -> 5432
# Forwarding from [::1]:5432 -> 5432
:ok
@spec shell( binary(), keyword() ) :: {Collectable.t(), exit_status :: non_neg_integer()}
A wrapper around System.shell/2
which additionally logs executed command
.
Similarly to cmd/3
, it automatically hides password in found URLs.
examples
Examples
> Owl.System.shell("echo hello world")
# 22:36:01.440 [debug] $ echo hello world
{"hello world\n", 0}
> Owl.System.shell("echo postgresql://postgres:postgres@127.0.0.1:5432")
# 22:36:51.797 [debug] $ echo postgresql://postgres:********@127.0.0.1:5432
{"postgresql://postgres:postgres@127.0.0.1:5432\n", 0}