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,325
Folders
409
Scanned Size
3.84 GB
PHP Files
885
Editable Text Files
12,586
File viewer
guarded to /htdocs
/connlink/test1/ui/old/feed_diagnostics.php
<?php declare(strict_types=1); require_once __DIR__ . '/lib/bootstrap.php'; $action=(string)($_GET['action']??''); $result=null; if($action==='run_all'){ $result=simon_run_all_jobs(); simon_ai_index(); simon_build_graph(); } if($action==='rebuild'){ simon_rebuild_feed_registry(); simon_ai_index(); simon_build_graph(); $result=['ok'=>true,'message'=>'Registry, AI index, and graph rebuilt.']; } $feeds=simon_load_feeds(); $rows=simon_job_rows(); $providers=simon_provider_files(); $ai=simon_ai_index(); $graph=simon_build_graph(); $enabled=count(array_filter($feeds,fn($f)=>$f['enabled'])); $online=count(array_filter($rows,fn($r)=>$r['ok'])); $missing=count(array_filter($rows,fn($r)=>!$r['provider_exists'])); $items=array_sum(array_map(fn($r)=>$r['count'],$rows)); ?> <!doctype html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>SIMON Feed Diagnostics</title><style> :root{--bg:#05041a;--panel:rgba(16,14,48,.86);--panel2:rgba(10,8,32,.92);--text:#eaf2ff;--muted:#9aa3c4;--line:rgba(75,227,255,.24);--cyan:#4be3ff;--green:#7cff9e;--amber:#ffb347;--red:#ff6b8f;--pink:#ff5bd1;--vio:#7a5cff}*{box-sizing:border-box}body{margin:0;min-height:100vh;background:radial-gradient(900px 600px at 20% 0%,rgba(122,92,255,.25),transparent 60%),radial-gradient(700px 500px at 100% 10%,rgba(255,91,209,.18),transparent 60%),linear-gradient(180deg,#05041a,#08072a);color:var(--text);font:14px/1.45 system-ui,-apple-system,Segoe UI,Roboto,sans-serif;padding:22px}.wrap{max-width:1380px;margin:0 auto}.top{display:flex;justify-content:space-between;gap:16px;flex-wrap:wrap}.brand{display:flex;gap:14px;align-items:center}.logo{width:54px;height:54px;border-radius:16px;background:conic-gradient(from 220deg,var(--vio),var(--cyan),var(--pink),var(--vio));box-shadow:0 0 38px rgba(75,227,255,.28)}h1{margin:0;font-size:30px}.sub,.muted,.small{color:var(--muted)}.kicker{color:var(--muted);font-size:11px;letter-spacing:.18em;text-transform:uppercase}.grid{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:12px;margin:18px 0}.card,.panel{background:linear-gradient(180deg,var(--panel),var(--panel2));border:1px solid var(--line);border-radius:20px;padding:16px;box-shadow:0 18px 48px rgba(0,0,0,.35)}.card .k{font-size:11px;color:var(--muted);text-transform:uppercase;letter-spacing:.12em}.card .v{font-size:30px;font-weight:950}.actions{display:flex;gap:9px;flex-wrap:wrap;margin:10px 0}a.btn{display:inline-flex;padding:10px 13px;border-radius:999px;border:1px solid var(--line);background:rgba(75,227,255,.08);color:var(--text);text-decoration:none;font-weight:800}.online{color:var(--green)}.warn{color:var(--amber)}.bad{color:var(--red)}.cyan{color:var(--cyan)}table{width:100%;border-collapse:separate;border-spacing:0 9px}th{text-align:left;color:var(--muted);font-size:11px;text-transform:uppercase;letter-spacing:.12em;padding:0 10px}td{background:rgba(16,14,48,.72);border-top:1px solid rgba(255,255,255,.07);border-bottom:1px solid rgba(255,255,255,.07);padding:12px 10px;vertical-align:top}td:first-child{border-left:1px solid rgba(255,255,255,.07);border-radius:14px 0 0 14px;font-weight:800}td:last-child{border-right:1px solid rgba(255,255,255,.07);border-radius:0 14px 14px 0}.pill{display:inline-flex;padding:4px 9px;border-radius:999px;border:1px solid rgba(255,255,255,.1);font-size:12px}pre{white-space:pre-wrap;word-break:break-word;background:rgba(0,0,0,.24);border-radius:14px;padding:12px;max-height:420px;overflow:auto}@media(max-width:900px){.grid{grid-template-columns:1fr}body{padding:14px}} </style></head><body><div class="wrap"><div class="top"><div class="brand"><div class="logo"></div><div><div class="kicker">SIMON Shared Backend</div><h1>Feed Diagnostics</h1><div class="sub">Single backend for Compat, Jobs, Graph, AI, and Index. Reads feeds.json and provider files once.</div></div></div><div class="actions"><a class="btn" href="?action=run_all">Run All</a><a class="btn" href="?action=rebuild">Rebuild Registry / AI / Graph</a><a class="btn" href="compat/compat.php">Compat</a><a class="btn" href="feed_manager.php">Feed Manager</a><a class="btn" href="index.php">Index</a></div></div> <div class="grid"><div class="card"><div class="k">Feeds</div><div class="v cyan"><?=count($feeds)?></div></div><div class="card"><div class="k">Enabled</div><div class="v online"><?=$enabled?></div></div><div class="card"><div class="k">Online</div><div class="v online"><?=$online?></div></div><div class="card"><div class="k">Items</div><div class="v"><?=$items?></div></div><div class="card"><div class="k">Missing Providers</div><div class="v bad"><?=$missing?></div></div></div> <?php if($result!==null):?><div class="panel"><div class="kicker">Last Action Result</div><pre><?=simon_h(json_encode($result,JSON_PRETTY_PRINT|JSON_UNESCAPED_SLASHES|JSON_UNESCAPED_UNICODE))?></pre></div><?php endif;?> <div class="panel"><div class="kicker">Provider Files Found</div><pre><?=simon_h(implode("\n",$providers))?></pre></div> <div class="panel"><div class="kicker">Feed / Provider / Job Status</div><table><thead><tr><th>Feed</th><th>Engine</th><th>Provider</th><th>Status</th><th>Items</th><th>MS</th><th>Route/Error</th></tr></thead><tbody><?php foreach($rows as $row): $pc=$row['provider_exists']?'online':'bad'; $sc=$row['ok']?'online':($row['status']==='not_tested'?'warn':'bad'); ?><tr><td><?=simon_h($row['name'])?><div class="small"><?=simon_h($row['id'])?> · <?=simon_h($row['category'])?></div></td><td><?=simon_h($row['engine'])?></td><td><span class="pill <?=$pc?>"><?=$row['provider_exists']?'provider_ready':'provider_missing'?></span></td><td><span class="pill <?=$sc?>"><?=simon_h($row['status'])?></span></td><td><?=simon_h($row['count'])?></td><td><?=simon_h($row['ms'])?></td><td class="small muted"><?=simon_h((string)($row['error']?:$row['route']))?></td></tr><?php endforeach;?></tbody></table></div> <div class="panel"><div class="kicker">AI Summary</div><p><b>Top word:</b> <?=simon_h((string)($ai['top_word']??'none'))?></p><p><b>Events:</b> <?=simon_h((string)($ai['events_count']??0))?></p><pre><?=simon_h(json_encode(array_slice($ai['word_counts']??[],0,50,true),JSON_PRETTY_PRINT|JSON_UNESCAPED_SLASHES))?></pre></div> <div class="panel"><div class="kicker">Graph JSON</div><p>Nodes: <?=count($graph['nodes']??[])?> · Edges: <?=count($graph['edges']??[])?></p><pre><?=simon_h(json_encode($graph,JSON_PRETTY_PRINT|JSON_UNESCAPED_SLASHES|JSON_UNESCAPED_UNICODE))?></pre></div> </div></body></html>
Save file
Quick jump
open a path
Open