SIMON Master Console Rebuild
True command center for SIMON + WEB360
This rebuild gives you a cleaner production spine: interactive tree, live viewer, guarded editor, dynamic graphics, architecture map, and note storage. It is designed to sit beside your existing
console.php
and become the stronger replacement path.
Dashboard
Tree
Viewer
System Map
File Registry
Notes
Files
15,432
Folders
437
Scanned Size
3.85 GB
PHP Files
996
Editable Text Files
12,680
File viewer
guarded to /htdocs
/si/business/diagnostics.php
<?php declare(strict_types=1); require_once __DIR__.'/security.php'; function si_business_diagnostics(bool $live=false):array{$checks=[];$add=static function(string $name,bool $ok,string $detail='')use(&$checks):void{$checks[]=['name'=>$name,'status'=>$ok?'operational':'failed','detail'=>$detail];};$credentials=si_ops_twilio_credentials();$twilio=$live?si_ops_twilio_get('Calls',['PageSize'=>1]):['ok'=>(bool)$credentials];$add('Twilio API authentication',(bool)($twilio['ok']??false),$live?'Live API request':'Credentials present');$add('Phone number active',defined('TWILIO_PHONE_NUMBER')&&si_ops_e164((string)TWILIO_PHONE_NUMBER)!=='',defined('TWILIO_PHONE_NUMBER')?(string)TWILIO_PHONE_NUMBER:'Missing');$add('Voice capability',defined('TWILIO_PHONE_NUMBER'),'Configured phone number');$add('Incoming webhook',is_file(dirname(__DIR__).'/phone/incoming.php'),'/si/phone/incoming.php');$add('Status callback',is_file(dirname(__DIR__).'/phone/status.php'),'/si/phone/status.php');$add('Recording callback',is_file(dirname(__DIR__).'/phone/recording.php'),'/si/phone/recording.php');$add('Transcription',is_file(dirname(__DIR__).'/phone/transcription.php'),'Callback handler');$add('OpenAI',defined('OPENAI_API_KEY'),'Key '.(defined('OPENAI_API_KEY')?'configured':'missing'));$add('Private contacts',is_readable(si_ops_private_root().'/si_contacts.php'),count(si_ops_contacts()).' contacts');$p=si_security_private_permissions();$add('Private storage',(bool)$p['writable'],$p['root']);$add('Log directory writable',is_dir(si_ops_private_root().'/logs')?is_writable(si_ops_private_root().'/logs'):@mkdir(si_ops_private_root().'/logs',0700,true),si_ops_private_root().'/logs');$phone=si_ops_log_rows('phone',200);$lastError='';foreach($phone as $r)if(str_contains(strtolower((string)($r['event']??'')),'fail')||isset($r['error'])){$lastError=(string)($r['error']??$r['event']);break;}return ['generated_at'=>si_business_now(),'live'=>$live,'checks'=>$checks,'last_inbound'=>si_business_latest($phone,'inbound'),'last_outbound'=>si_business_latest($phone,'outbound'),'last_twilio_error'=>$lastError,'summary'=>['operational'=>count(array_filter($checks,fn($c)=>$c['status']==='operational')),'failed'=>count(array_filter($checks,fn($c)=>$c['status']!=='operational'))]];} function si_business_latest(array $rows,string $direction):array{foreach($rows as $r)if(str_contains(strtolower(json_encode($r)?:''),$direction))return $r;return [];}
Save file
Quick jump
open a path
Open