Developer-Dashboard
view release on metacpan or search on metacpan
lib/Developer/Dashboard/PathRegistry.pm view on Meta::CPAN
$self->_ensure_state_dir( File::Spec->catdir( $self->_state_root_for_layer($_), 'collectors' ) )
} $self->runtime_roots;
}
# indicators_root()
# Returns the indicators state root directory.
# Input: none.
# Output: directory path string.
sub indicators_root {
my ($self) = @_;
return $self->_ensure_state_dir( File::Spec->catdir( $self->state_root, 'indicators' ) );
}
# indicators_roots()
# Returns the indicator state roots in lookup order from deepest layer to home.
# Input: none.
# Output: ordered list of indicator state root directory path strings.
sub indicators_roots {
my ($self) = @_;
return map {
$self->_ensure_state_dir( File::Spec->catdir( $self->_state_root_for_layer($_), 'indicators' ) )
} $self->runtime_roots;
}
# sessions_root()
# Returns the sessions state root directory.
# Input: none.
# Output: directory path string.
sub sessions_root {
my ($self) = @_;
return $self->_ensure_state_dir( File::Spec->catdir( $self->state_root, 'sessions' ) );
}
# sessions_roots()
# Returns the session storage roots in effective lookup order.
# Input: none.
# Output: ordered list of session root directory path strings.
sub sessions_roots {
my ($self) = @_;
return map {
$self->_ensure_state_dir( File::Spec->catdir( $self->_state_root_for_layer($_), 'sessions' ) )
} $self->runtime_roots;
}
# _state_root_key($runtime_root)
# Returns the key for a runtime layer-specific state directory.
# Input: runtime layer path string.
# Output: directory name string.
sub _state_root_key {
my ( $self, $runtime_root ) = @_;
my $identity = $self->_path_identity($runtime_root);
return md5_hex( defined $identity ? $identity : '' );
}
# _state_root_user()
# Returns a sanitized username used to namespace runtime state roots in the shared temp area.
# Input: none.
# Output: username string.
sub _state_root_user {
my ($self) = @_;
my $raw = $ENV{DD_STATE_ROOT_USER} || $ENV{USER} || $ENV{LOGNAME} || getpwuid($<) || 'user';
$raw =~ s{[^A-Za-z0-9._-]}{_}g;
return $raw || 'user';
}
# _state_root_for_layer($runtime_root)
# Returns the full state root for a runtime layer.
# Input: runtime layer path string.
# Output: directory path string.
sub _state_root_for_layer {
my ( $self, $runtime_root ) = @_;
my $dir = File::Spec->catdir( $self->state_base_root, $self->_state_root_key($runtime_root) );
$self->_ensure_state_dir($dir);
$self->_write_state_metadata( $dir, $runtime_root );
return $dir;
}
# _write_state_metadata($dir, $runtime_root)
# Records the runtime identity for one hashed temp-state root, recreating the
# hashed directory first if temp cleanup removed it.
# Input: state root directory path and originating runtime root path.
# Output: metadata file path string.
sub _write_state_metadata {
my ( $self, $dir, $runtime_root ) = @_;
return '' if !defined $dir || $dir eq '';
return '' if !defined $runtime_root || $runtime_root eq '';
$self->_ensure_state_dir($dir);
my $file = File::Spec->catfile( $dir, 'runtime.json' );
open my $fh, '>:raw', $file or die "Unable to write $file: $!";
print {$fh} json_encode(
{
runtime_root => $runtime_root,
app_name => $self->app_name,
}
);
close $fh or die "Unable to close $file: $!";
$self->secure_file_permissions($file);
return $file;
}
# temp_root()
# Returns the runtime temporary directory.
# Input: none.
# Output: directory path string.
sub temp_root {
my ($self) = @_;
return $self->_ensure_dir( File::Spec->catdir( $self->runtime_root, 'tmp' ) );
}
# config_root()
# Returns the configuration root directory.
# Input: none.
# Output: directory path string.
sub config_root {
my ($self) = @_;
if ( my $dir = $ENV{DEVELOPER_DASHBOARD_CONFIGS} ) {
return $self->_ensure_dir( $self->_expand_home($dir) );
}
return $self->_ensure_dir( File::Spec->catdir( $self->runtime_root, 'config' ) );
}
( run in 1.897 second using v1.01-cache-2.11-cpan-39bf76dae61 )