1
0
mirror of https://github.com/laravel/valet.git synced 2026-02-05 00:20:08 +01:00
Files
laravel-valet/cli/Valet/Diagnose.php
Chris Brown 78bfd8b9c2 Include resolv conf in diagnose command
Including the linked resolv.conf helps with troubleshooting situations where dns appears to not be working.
(Mostly the goal is to determine whether a conflicting entry is listed too early, or if the localhost is not listed first when others are present.)
2020-11-28 23:41:10 -05:00

159 lines
4.0 KiB
PHP

<?php
namespace Valet;
use Symfony\Component\Console\Helper\ProgressBar;
use Symfony\Component\Console\Output\ConsoleOutput;
class Diagnose
{
var $commands = [
'sw_vers',
'valet --version',
'cat ~/.config/valet/config.json',
'cat ~/.composer/composer.json',
'composer global diagnose',
'composer global outdated',
'ls -al /etc/sudoers.d/',
'brew update > /dev/null 2>&1',
'brew config',
'brew services list',
'brew list --formula --versions | grep -E "(php|nginx|dnsmasq|mariadb|mysql|mailhog|openssl)(@\d\..*)?\s"',
'brew outdated',
'php -v',
'which -a php',
'php --ini',
'nginx -v',
'curl --version',
'php --ri curl',
'~/.composer/vendor/laravel/valet/bin/ngrok version',
'ls -al ~/.ngrok2',
'brew info nginx',
'brew info php',
'brew info openssl',
'openssl version -a',
'openssl ciphers',
'sudo nginx -t',
'which -a php-fpm',
BREW_PREFIX.'/opt/php/sbin/php-fpm -v',
'sudo '.BREW_PREFIX.'/opt/php/sbin/php-fpm -y '.PHP_SYSCONFDIR.'/php-fpm.conf --test',
'ls -al ~/Library/LaunchAgents | grep homebrew',
'ls -al /Library/LaunchAgents | grep homebrew',
'ls -al /Library/LaunchDaemons | grep homebrew',
'ls -aln /etc/resolv.conf',
'cat /etc/resolv.conf',
];
var $cli, $files, $print, $progressBar;
/**
* Create a new Diagnose instance.
*
* @param CommandLine $cli
* @param Filesystem $files
* @return void
*/
function __construct(CommandLine $cli, Filesystem $files)
{
$this->cli = $cli;
$this->files = $files;
}
/**
* Run diagnostics.
*/
function run($print, $plainText)
{
$this->print = $print;
$this->beforeRun();
$results = collect($this->commands)->map(function ($command) {
$this->beforeCommand($command);
$output = $this->runCommand($command);
if ($this->ignoreOutput($command)) return;
$this->afterCommand($command, $output);
return compact('command', 'output');
})->filter()->values();
$output = $this->format($results, $plainText);
$this->files->put('valet_diagnostics.txt', $output);
$this->cli->run('pbcopy < valet_diagnostics.txt');
$this->files->unlink('valet_diagnostics.txt');
$this->afterRun();
}
function beforeRun()
{
if ($this->print) {
return;
}
$this->progressBar = new ProgressBar(new ConsoleOutput, count($this->commands));
$this->progressBar->start();
}
function afterRun()
{
if ($this->progressBar) {
$this->progressBar->finish();
}
output('');
}
function runCommand($command)
{
return strpos($command, 'sudo ') === 0
? $this->cli->run($command)
: $this->cli->runAsUser($command);
}
function beforeCommand($command)
{
if ($this->print) {
info(PHP_EOL."$ $command");
}
}
function afterCommand($command, $output)
{
if ($this->print) {
output(trim($output));
} else {
$this->progressBar->advance();
}
}
function ignoreOutput($command)
{
return strpos($command, '> /dev/null 2>&1') !== false;
}
function format($results, $plainText)
{
return $results->map(function ($result) use ($plainText) {
$command = $result['command'];
$output = trim($result['output']);
if ($plainText) {
return implode(PHP_EOL, ["$ {$command}", $output]);
}
return sprintf(
'<details>%s<summary>%s</summary>%s<pre>%s</pre>%s</details>',
PHP_EOL, $command, PHP_EOL, $output, PHP_EOL
);
})->implode($plainText ? PHP_EOL.str_repeat('-', 20).PHP_EOL : PHP_EOL);
}
}