Aion-Telemetry

 view release on metacpan or  search on metacpan

lib/Aion/Telemetry.pm  view on Meta::CPAN

package Aion::Refmark {
	sub DESTROY {
		my $now = Time::HiRes::time();
		my $mark = pop @REFMARKS;
		$mark->{count}++;
		$mark->{interval} += $now - $REFMARK_LAST_TIME;
		$REFMARK_LAST_TIME = $now;
	}
}

sub refmark(;$) {
	my ($mark) = @_ == 0? (caller 1)[3]: @_;

	my $now = Time::HiRes::time();
	$REFMARKS[$#REFMARKS]->{interval} += $now - $REFMARK_LAST_TIME if @REFMARKS;
	$REFMARK_LAST_TIME = $now;

	push @REFMARKS, $REFMARK{$mark} //= {mark => $mark};

	bless \$mark, 'Aion::Refmark'
}

# Создаёт отчёт по реперным точкам
sub refreport(;$) {
	my ($clean) = @_;
	my @v = values %REFMARK;

	%REFMARK = (), undef $REFMARK_LAST_TIME if $clean;

	my $total = sum map $_->{interval}, @v;
	$_->{percent} = ($_->{interval} / $total) * 100 for @v;
	@v = sort {$b->{percent} <=> $a->{percent}} @v;

	return \@v, $total if wantarray;



( run in 0.232 second using v1.01-cache-2.11-cpan-cba739cd03b )