cloudlog/application/views/debug/main.php
Peter Goodhall 65a7170bbc Add Docker environment detection to debug page
Introduces logic in the Debug controller to detect if the application is running inside a Docker container and displays the result on the debug view. This helps developers quickly identify the runtime environment for troubleshooting and configuration purposes.
2026-01-15 15:40:34 +00:00

425 lines
17 KiB
PHP

<div class="container debug_main">
<h2><?php echo $page_title; ?></h2>
<div class="row">
<div class="col">
<div class="card">
<div class="card-header">Cloudlog Information</div>
<div class="card-body">
<table width="100%">
<tr>
<td>Version</td>
<td><?php echo $this->optionslib->get_option('version')."\n"; ?></td>
</tr>
<tr>
<td>Language</td>
<td><?php echo ucfirst($this->config->item('language'))."\n"; ?></td>
</tr>
<tr>
<td>Base URL</td>
<td><span id="baseUrl"><a href="<?php echo $this->config->item('base_url')?>" target="_blank"><?php echo $this->config->item('base_url'); ?></a></span> <span data-bs-toggle="tooltip" title="<?php echo lang('copy_to_clipboard'); ?>" onclick='copyURL("<?php echo $this->config->item('base_url'); ?>")'><i class="copy-icon fas fa-copy"></span></td>
</tr>
<tr>
<td>Migration</td>
<td><?php echo (isset($migration_version) ? $migration_version : "<span class='badge text-bg-danger'>There is something wrong with your Migration in Database!</span>"); ?></td>
</tr>
<?php if(file_exists(APPPATH.'config/managed.php')) { ?>
<tr>
<td>Managed</td>
<td><span class="badge text-bg-success">True</span></td>
</tr>
<?php } ?>
<tr>
<td>Installation Path</td>
<td><?php echo FCPATH; ?></td>
</tr>
</table>
</div>
</div>
<div class="card">
<div class="card-header">Server Information</div>
<div class="card-body">
<table width="100%">
<tr>
<td>Server Software</td>
<td><?php echo $_SERVER['SERVER_SOFTWARE']; ?></td>
</tr>
<tr>
<td>Server API</td>
<td><?php echo php_sapi_name(); ?></td>
</tr>
<tr>
<td>HTTPS</td>
<td>
<?php if(isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on') { ?>
<span class="badge text-bg-success">Enabled</span>
<?php } else { ?>
<span class="badge text-bg-warning">Disabled</span>
<?php } ?>
</td>
</tr>
<tr>
<td>Docker</td>
<td>
<?php if(isset($is_docker) && $is_docker) { ?>
<span class="badge text-bg-success">Detected</span>
<?php } else { ?>
<span class="badge text-bg-warning">Not Detected</span>
<?php } ?>
</td>
</tr>
<tr>
<td>PHP Version</td>
<td><?php echo phpversion(); ?></td>
</tr>
<tr>
<td>MySQL Version</td>
<td><?php echo $this->db->version(); ?></td>
</tr>
<tr>
<td>Available Disk Space</td>
<td>
<?php
$bytes = disk_free_space(FCPATH);
$units = ['B', 'KB', 'MB', 'GB', 'TB'];
$power = $bytes > 0 ? floor(log($bytes, 1024)) : 0;
echo number_format($bytes / pow(1024, $power), 2) . ' ' . $units[$power];
?>
</td>
</tr>
</table>
</div>
</div>
<div class="card">
<div class="card-header">Database Information</div>
<div class="card-body">
<table width="100%">
<tr>
<td>Database Name</td>
<td><?php echo $this->db->database; ?></td>
</tr>
<tr>
<td>Table Name</td>
<td><?php echo $this->config->item('table_name'); ?></td>
</tr>
<tr>
<td>Character Set</td>
<td><?php echo $this->db->char_set; ?></td>
</tr>
<tr>
<td>Collation</td>
<td><?php echo $this->db->dbcollat; ?></td>
</tr>
</table>
</div>
</div>
<div class="card">
<div class="card-header">Codeigniter</div>
<div class="card-body">
<table width="100%">
<tr>
<td>Version</td>
<td><?php echo CI_VERSION; ?></td>
</tr>
</table>
</div>
</div>
<div class="card">
<div class="card-header">Folder Permissions</div>
<div class="card-body">
<p>This checks the folders Cloudlog uses are read and writeable by PHP.</p>
<table width="100%">
<tr>
<td>/backup</td>
<td>
<?php if($backup_folder == true) { ?>
<span class="badge text-bg-success">Success</span>
<?php } else { ?>
<span class="badge text-bg-danger">Failed</span>
<?php } ?>
</td>
</tr>
<tr>
<td>/updates</td>
<td>
<?php if($updates_folder == true) { ?>
<span class="badge text-bg-success">Success</span>
<?php } else { ?>
<span class="badge text-bg-danger">Failed</span>
<?php } ?>
</td>
</tr>
<tr>
<td>/uploads</td>
<td>
<?php if($uploads_folder == true) { ?>
<span class="badge text-bg-success">Success</span>
<?php } else { ?>
<span class="badge text-bg-danger">Failed</span>
<?php } ?>
</td>
</tr>
</table>
</div>
</div>
</div>
<div class="col">
<div class="card">
<div class="card-header">PHP Settings</div>
<div class="card-body">
<table width="100%">
<tr>
<td>memory_limit</td>
<td><?php echo ini_get('memory_limit'); ?></td>
</tr>
<tr>
<td>max_execution_time</td>
<td><?php echo ini_get('max_execution_time'); ?> seconds</td>
</tr>
<tr>
<td>upload_max_filesize</td>
<td><?php echo ini_get('upload_max_filesize'); ?></td>
</tr>
<tr>
<td>post_max_size</td>
<td><?php echo ini_get('post_max_size'); ?></td>
</tr>
<tr>
<td>Timezone</td>
<td><?php echo ini_get('date.timezone') ?: 'Not set (using system default)'; ?></td>
</tr>
<tr>
<td>allow_url_fopen</td>
<td>
<?php if(ini_get('allow_url_fopen')) { ?>
<span class="badge text-bg-success">Enabled</span>
<?php } else { ?>
<span class="badge text-bg-danger">Disabled</span>
<?php } ?>
</td>
</tr>
</table>
</div>
</div>
<div class="card">
<div class="card-header">Session Information</div>
<div class="card-body">
<table width="100%">
<tr>
<td>Session Handler</td>
<td><?php echo ini_get('session.save_handler'); ?></td>
</tr>
<tr>
<td>Session Save Path</td>
<td><?php echo session_save_path() ?: ini_get('session.save_path'); ?></td>
</tr>
</table>
</div>
</div>
<div class="card">
<div class="card-header">PHP Modules</div>
<div class="card-body">
<table width="100%">
<tr>
<td>curl</td>
<td>
<?php if(in_array ('curl', get_loaded_extensions())) { ?>
<span class="badge text-bg-success">Installed</span>
<?php } else { ?>
<span class="badge text-bg-danger">Not Installed</span>
<?php } ?>
</td>
</tr>
<tr>
<td>MySQL</td>
<td>
<?php if(in_array ('mysqli', get_loaded_extensions())) { ?>
<span class="badge text-bg-success">Installed</span>
<?php } else { ?>
<span class="badge text-bg-danger">Not Installed</span>
<?php } ?>
</td>
</tr>
<tr>
<td>mbstring</td>
<td>
<?php if(in_array ('mbstring', get_loaded_extensions())) { ?>
<span class="badge text-bg-success">Installed</span>
<?php } else { ?>
<span class="badge text-bg-danger">Not Installed</span>
<?php } ?>
</td>
</tr>
<tr>
<td>xml</td>
<td>
<?php if(in_array ('xml', get_loaded_extensions())) { ?>
<span class="badge text-bg-success">Installed</span>
<?php } else { ?>
<span class="badge text-bg-danger">Not Installed</span>
<?php } ?>
</td>
</tr>
<tr>
<td>openssl</td>
<td>
<?php if(in_array ('openssl', get_loaded_extensions())) { ?>
<span class="badge text-bg-success">Installed</span>
<?php } else { ?>
<span class="badge text-bg-danger">Not Installed</span>
<?php } ?>
</td>
</tr>
<tr>
<td>zip</td>
<td>
<?php if(in_array ('zip', get_loaded_extensions())) { ?>
<span class="badge text-bg-success">Installed</span>
<?php } else { ?>
<span class="badge text-bg-danger">Not Installed</span>
<?php } ?>
</td>
</tr>
<tr>
<td>gd</td>
<td>
<?php if(in_array ('gd', get_loaded_extensions())) { ?>
<span class="badge text-bg-success">Installed</span>
<?php } else { ?>
<span class="badge text-bg-danger">Not Installed</span>
<?php } ?>
</td>
</tr>
<tr>
<td>json</td>
<td>
<?php if(in_array ('json', get_loaded_extensions())) { ?>
<span class="badge text-bg-success">Installed</span>
<?php } else { ?>
<span class="badge text-bg-danger">Not Installed</span>
<?php } ?>
</td>
</tr>
</table>
</div>
</div>
<?php if (file_exists('.git')) { ?>
<?php
//Below is a failsafe where git commands fail
try {
$commitHash = trim(exec('git log --pretty="%H" -n1 HEAD'));
$branch = '';
$remote = '';
$owner = '';
// only proceed here if git can actually be executed
if ($commitHash != "") {
$commitDate = trim(exec('git log --pretty="%ci" -n1 HEAD'));
$line = trim(exec('git log -n 1 --pretty=%D HEAD'));
$pieces = explode(', ', $line);
$lastFetch = trim(exec('stat -c %Y .git/FETCH_HEAD'));
//Below is a failsafe for systems without the stat command
try {
$dt = new DateTime("@$lastFetch");
} catch(Exception $e) {
$dt = new DateTime(date("Y-m-d H:i:s"));
}
if (isset($pieces[1])) {
$remote = substr($pieces[1], 0, strpos($pieces[1], '/'));
$branch = substr($pieces[1], strpos($pieces[1], '/')+1);
$url = trim(exec('git remote get-url '.$remote));
if (strpos($url, 'https://github.com') !== false) {
$owner = preg_replace('/https:\/\/github\.com\/(\w+)\/Cloudlog\.git/', '$1', $url);
} else if (strpos($url, 'git@github.com') !== false) {
$owner = preg_replace('/git@github\.com:(\w+)\/Cloudlog\.git/', '$1', $url);
}
}
$tag = trim(exec('git describe --tags '.$commitHash));
}
} catch (\Throwable $th) {
$commitHash = "";
}
?>
<?php if($commitHash != "") { ?>
<div class="card">
<div class="card-header">Git Information</div>
<div class="card-body">
<table width="100%">
<tr>
<td>Branch</td>
<td>
<?php if($branch != "") { ?>
<?php if($owner != "") { ?>
<a target="_blank" href="https://github.com/<?php echo $owner; ?>/Cloudlog/tree/<?php echo $branch?>">
<?php } ?>
<span class="badge text-bg-success"><?php echo $branch; ?></span>
<?php if($owner != "") { ?>
</a>
<?php } ?>
<?php } else { ?>
<span class="badge text-bg-danger">n/a</span>
<?php } ?>
</td>
</tr>
<tr>
<tr>
<td>Commit</td>
<td>
<?php if($commitHash != "") { ?>
<a target="_blank" href="https://github.com/magicbug/Cloudlog/commit/<?php echo $commitHash?>"><span class="badge text-bg-success"><?php echo substr($commitHash,0,8); ?></span></a>
<?php } else { ?>
<span class="badge text-bg-danger">n/a</span>
<?php } ?>
</td>
</tr>
<tr>
<td>Tag</td>
<td>
<?php if($commitHash != "") { ?>
<a target="_blank" href="https://github.com/magicbug/Cloudlog/releases/tag/<?php echo substr($tag,0,strpos($tag, '-')); ?>"><span class="badge text-bg-success"><?php echo $tag; ?></span></a>
<?php } else { ?>
<span class="badge text-bg-danger">n/a</span>
<?php } ?>
</td>
</tr>
<tr>
<td>Last Fetch</td>
<td>
<?php echo ($dt == null ? '' : $dt->format(\DateTime::RFC850)); ?>
</td>
</tr>
</table>
</table>
</div>
</div>
<?php } ?>
<?php } ?>
</div>
</div>
</div>