about summary refs log tree commit homepage
path: root/script/mwrap-rproxy
diff options
context:
space:
mode:
authorEric Wong <e@80x24.org>2023-01-08 05:03:26 +0000
committerEric Wong <e@80x24.org>2023-01-08 05:05:01 +0000
commitb5ab9be6686aa778a4cfd7622c598736b9c42321 (patch)
treea967297606a1f91f8359e287d5a85ad018e185e3 /script/mwrap-rproxy
parent4356beb8237a92b3902b17f55cfe93d347b593d5 (diff)
parent2c25edb01139365f4754985c1e3494765dd1e5a7 (diff)
downloadmwrap-b5ab9be6686aa778a4cfd7622c598736b9c42321.tar.gz
This contains many changes from https://80x24.org/mwrap-perl.git
commit

* Built-in RCU-friendly version of dlmalloc, no more fragile dlsym(3m)
  resolution of malloc-family functions in the constructor

* Allocations are now backed by O_TMPFILE on $TMPDIR on modern Linux.
  Since mwrap increases memory usage greatly and I needed to use it
  on a system where I needed more VM space but lacked the ability
  to add swap.

* Configurable C backtrace level via MWRAP=bt:$DEPTH where $DEPTH
  is a non-negative integer.  Be careful about increasing it, even
  a depth of 3-4 can be orders-of-magnitude more expensive in
  time and space.  This can be changed dynamically at runtime via
  local HTTP (see below).

* Embedded per-process local-socket-only HTTP server obsoletes
  MwrapRack when combined with mwrap-rproxy from the Perl dist
  (set `MWRAP=socket_dir:/dir/of/sockets')
  See https://80x24.org/mwrap-perl/20221210015518.272576-4-e@80x24.org/
  for more info.

  It now supports downloading CSV (suitable for importing into sqlite 3.32.0+)

* License switched to GPL-3+ to be compatible with GNU binutils
  since we may take code from addr2line in the future.

* libxxhash supported if XXH3_64bits is available.
Diffstat (limited to 'script/mwrap-rproxy')
-rw-r--r--script/mwrap-rproxy115
1 files changed, 0 insertions, 115 deletions
diff --git a/script/mwrap-rproxy b/script/mwrap-rproxy
deleted file mode 100644
index 2498bc3..0000000
--- a/script/mwrap-rproxy
+++ /dev/null
@@ -1,115 +0,0 @@
-#!perl -w
-# Copyright (C) mwrap hackers <mwrap-perl@80x24.org>
-# License: GPL-3.0+ <https://www.gnu.org/licenses/gpl-3.0.txt>
-# thin wrapper for Devel::Mwrap::Rproxy
-use v5.12; # strict
-eval { require Plack::Runner } or die "Plack not installed: $@\n";
-use Getopt::Long qw(:config no_ignore_case no_auto_abbrev pass_through);
-my $usage = "$0 --socket-dir=/path/to/socket-dir [PLACKUP_OPTIONS]\n";
-my %opt = (deflate => 1);
-GetOptions(\%opt, 'socket-dir=s', 'deflate!', 'help|h') or do {
-        require Pod::Usage; Pod::Usage::pod2usage(1);
-};
-if ($opt{help}) { require Pod::Usage; Pod::Usage::pod2usage(0) }
-my $socket_dir = delete $opt{'socket-dir'};
-$socket_dir //= ($ENV{MWRAP} // '') =~ m!\bsocket_dir:([^,]+)! ? $1 : undef;
-$socket_dir // die $usage;
-require Devel::Mwrap::Rproxy;
-my $rproxy = Devel::Mwrap::Rproxy->new($socket_dir);
-my $app = sub { $rproxy->call(@_) };
-my $runner = Plack::Runner->new;
-$runner->parse_options(@ARGV);
-if (($ENV{LISTEN_PID} // 0) == $$) {
-        my $fds = $ENV{LISTEN_FDS} // '';
-        die "only one LISTEN_FDS=1 supported (got `$fds')\n" if $fds ne '1';
-        if (open(my $s, '<&=', 3)) {
-                my $prev_was_blocking = $s->blocking(1);
-                warn <<"" unless $prev_was_blocking;
-Inherited socket (fd=3) is non-blocking, making it blocking.
-
-                bless $s, 'IO::Socket::INET';
-                $runner->set_options(listen_sock => $s);
-        }
-}
-if ($opt{deflate} && eval { require Plack::Middleware::Deflater } and !$@) {
-        $app = Plack::Middleware::Deflater->wrap($app);
-}
-
-# ensure mwrap_dtor() runs if running under mwrap-perl, ourselves
-sub sigexit { exit 0 }
-$SIG{$_} = \&sigexit for (qw(INT TERM));
-
-$runner->run($app);
-__END__
-=head1 NAME
-
-mwrap-rproxy - reverse proxy for embedded per-process mwrap httpd
-
-=head1 SYNOPSIS
-
-  # start the long-running COMMAND you wish to trace:
-  MWRAP=socket_dir:$DIRECTORY mwrap-perl COMMAND
-
-  # in a different terminal, point mwrap-proxy to the mwrap-perl socket_dir
-  mwrap-rproxy --socket-dir=$DIRECTORY -l 127.0.0.1:8080
-
-  # open http://127.0.0.1:8080/ in your favorite web browser:
-  w3m http://127.0.0.1:8080/
-
-=head1 DESCRIPTION
-
-B<mwrap-rproxy> is a PSGI reverse proxy to provide access
-via TCP to the native, Unix-socket-only httpd embedded inside
-mwrap core.  It provides a listing of process IDs of each process
-traced via mwrap.
-
-B<mwrap-rproxy> does not have a hard dependency on mwrap-perl itself,
-it exists to provide a convenient interface to programs being
-traced by mwrap-perl.
-
-=head1 OPTIONS
-
-=over 4
-
-=item --socket-dir=DIRECTORY
-
-If unset, it will attempt to parse C<socket_dir:> from the C<MWRAP>
-environment (see L<mwrap-perl(1p)>).
-
-=item --no-deflate
-
-L<Plack::Middleware::Deflater(3pm)> is loaded by default if available.
-Using C<--no-deflate> will save CPU cycles at the expense of bandwidth.
-
-=back
-
-Additionally, all options in L<plackup(1p)> are supported.  Notably,
-C<-l>/C<--listen> and C<--path=/prefix> may be useful.
-
-=head1 ENVIRONMENT
-
-mwrap-rproxy supports systemd (and compatible) socket activation via
-C<LISTEN_PID> and C<LISTEN_FDS> variables.  See L<systemd.socket(5)>
-and L<sd_listen_fds(3)>.
-
-C<PLACK_ENV> is also supported as described by L<plackup(1p)>
-
-=head1 CONTACT
-
-Feedback welcome via plain-text mail to L<mailto:mwrap-perl@80x24.org>
-
-Mail archives are hosted at L<https://80x24.org/mwrap-perl/>
-
-=head1 COPYRIGHT
-
-Copyright all contributors L<mailto:mwrap-perl@80x24.org>
-
-License: GPL-3.0+ L<https://www.gnu.org/licenses/gpl-3.0.txt>
-
-Source code is at L<https://80x24.org/mwrap-perl.git/>
-
-=head1 SEE ALSO
-
-L<mwrap-perl(1p)>
-
-=cut