Algorithm-Classifier-IsolationForest
view release on metacpan or search on metacpan
benchmarking/bench-streamd.pl view on Meta::CPAN
use BenchAccel qw(wall_rate wall_time_median);
use Time::HiRes qw(time);
use File::Temp qw(tempdir);
use IO::Select ();
use IO::Socket::UNIX ();
use POSIX ();
use Algorithm::Classifier::IsolationForest::Online ();
eval { require JSON::MaybeXS; 1 }
or die "this benchmark needs JSON::MaybeXS (streamd's wire protocol): $@";
my $JSON = JSON::MaybeXS->new( utf8 => 1 );
use constant PI => 3.14159265358979;
sub gaussian {
my ( $mu, $sigma ) = @_;
return $mu + $sigma * sqrt( -2 * log( rand() || 1e-12 ) ) * cos( 2 * PI * rand() );
}
sub make_data {
my ( $n, $nf ) = @_;
lib/Algorithm/Classifier/IsolationForest/App/Command/streamc.pm view on Meta::CPAN
} ## end sub validate
sub execute {
my ( $self, $opt, $args ) = @_;
# Lazily required for the same reason streamd does it: App::Cmd loads
# every command module up front, and the rest of the CLI should work
# on a box without JSON::MaybeXS.
eval { require JSON::MaybeXS; 1 }
or die( 'iforest streamc requires JSON::MaybeXS for its wire protocol; install it: ' . $@ );
$JSON = JSON::MaybeXS->new( utf8 => 1, canonical => 1 );
$TIMEOUT = $opt->{'timeout'};
# Resolve the socket exactly as streamd does (keep in sync with it):
# without a set the flag is the socket file; with one it is the base
# run dir holding <set>.sock.
my $socket;
if ( defined $opt->{'set'} ) {
my $run = defined $opt->{'socket'} ? $opt->{'socket'} : '/var/run/iforest_streamd';
$socket = File::Spec->catfile( $run, $opt->{'set'} . '.sock' );
} else {
lib/Algorithm/Classifier/IsolationForest/App/Command/streamd.pm view on Meta::CPAN
return 1;
} ## end sub validate
sub execute {
my ( $self, $opt, $args ) = @_;
# JSON::MaybeXS is required lazily so a box without it still has a
# working iforest CLI (App::Cmd loads every command module up front).
eval { require JSON::MaybeXS; 1 }
or die( 'iforest streamd requires JSON::MaybeXS for its wire protocol; install it: ' . $@ );
$JSON = JSON::MaybeXS->new( utf8 => 1, canonical => 1, allow_nonref => 0 );
%OPT = %$opt;
# --set turns --socket/--pid into base run dirs holding <set>.sock /
# <set>.pid and appends the set name to --model-dir, so several named
# daemons run side by side with no other flags. Without a set the
# flags are the socket/pid files themselves, defaulting as documented.
if ( defined $OPT{'set'} ) {
my $run = defined $OPT{'socket'} ? $OPT{'socket'} : '/var/run/iforest_streamd';
$OPT{'socket'} = File::Spec->catfile( $run, $OPT{'set'} . '.sock' );
t/91-streamd.t view on Meta::CPAN
use File::Spec;
use IO::Select ();
use IO::Socket::UNIX ();
my $bin = File::Spec->rel2abs('bin/iforest');
plan skip_all => 'bin/iforest not found' unless -x $bin;
plan skip_all => 'streamd needs Unix sockets and fork()' if $^O eq 'MSWin32';
plan skip_all => 'JSON::MaybeXS is not installed'
unless eval { require JSON::MaybeXS; 1 };
my $JSON = JSON::MaybeXS->new( utf8 => 1 );
my $tmp = tempdir( CLEANUP => 1 );
my $sock = "$tmp/s.sock";
my $pidf = "$tmp/s.pid";
my $mdir = "$tmp/models";
my $logf = "$tmp/streamd.log";
my $latest = "$mdir/latest.json";
# sun_path caps out around 104 bytes; a deep TMPDIR would make the whole
# run fail for reasons that have nothing to do with the daemon.
t/92-streamc.t view on Meta::CPAN
use Test::More;
use File::Temp qw(tempdir);
use File::Spec;
my $bin = File::Spec->rel2abs('bin/iforest');
plan skip_all => 'bin/iforest not found' unless -x $bin;
plan skip_all => 'streamc needs Unix sockets and fork()' if $^O eq 'MSWin32';
plan skip_all => 'JSON::MaybeXS is not installed'
unless eval { require JSON::MaybeXS; 1 };
my $JSON = JSON::MaybeXS->new( utf8 => 1 );
my $tmp = tempdir( CLEANUP => 1 );
my $mdir = "$tmp/models";
my $logf = "$tmp/streamd.log";
plan skip_all => 'temp socket path too long for a Unix socket'
if length("$tmp/alpha.sock") > 100;
my @ALL_PIDS;
( run in 0.791 second using v1.01-cache-2.11-cpan-600a1bdf6e4 )