77 lines
5.2 KiB
PHP
77 lines
5.2 KiB
PHP
<?php
|
|
header('Content-Type: application/json; charset=utf-8');
|
|
header('Access-Control-Allow-Origin: *');
|
|
$token=$_GET['token']??'';
|
|
if(!in_array($token,['WEVADS2026','ETHICA_API_2026_SECURE']))die(json_encode(['error'=>'auth']));
|
|
$action=$_GET['action']??'';
|
|
function s95db(){static $p;if(!$p)$p=new PDO("pgsql:host=10.1.0.3;port=5432;dbname=adx_system","admin","admin123");$p->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);return $p;}
|
|
function qa($db,$q){return $db->query($q)->fetchAll(PDO::FETCH_ASSOC);}
|
|
function q1($db,$q){return $db->query($q)->fetch(PDO::FETCH_ASSOC);}
|
|
function ok($d){echo json_encode(array_merge(['ok'=>1],$d));exit;}
|
|
|
|
switch($action){
|
|
case 'webhooks':
|
|
$db=s95db();
|
|
$tracking=[]; try{$tracking=qa($db,"SELECT event_type, COUNT(*) as cnt FROM tracking_events GROUP BY event_type ORDER BY cnt DESC");}catch(\Exception $e){}
|
|
$conversions=0; try{$conversions=(int)q1($db,"SELECT COUNT(*) as c FROM conversion_events")['c'];}catch(\Exception $e){}
|
|
$postbacks=0; try{$postbacks=(int)q1($db,"SELECT COUNT(*) as c FROM postback_log")['c'];}catch(\Exception $e){}
|
|
$endpoints=[
|
|
['name'=>'Tracking Pixel','url'=>'culturellemejean.charity/api/track.php','events'=>['open','click','unsub'],'status'=>'active'],
|
|
['name'=>'Conversion Collector','url'=>'weval-consulting.com/api/conversions-collector','events'=>['conversion'],'status'=>'active','cron'=>'*/30'],
|
|
['name'=>'Consent Webhook','url'=>'consent.wevup.app','events'=>['accept','reject'],'status'=>'active'],
|
|
['name'=>'Tracking Relay','url'=>'weval-consulting.com/api/tracking-relay.php','events'=>['open','click'],'status'=>'active'],
|
|
['name'=>'Bounce Processor','url'=>'localhost:5821/api/bounce-processor.php','events'=>['bounce','complaint'],'status'=>'active','cron'=>'*/15'],
|
|
];
|
|
ok(['endpoints'=>$endpoints,'tracking_events'=>$tracking,'conversions'=>$conversions,'postbacks'=>$postbacks]);
|
|
break;
|
|
|
|
case 'n8n':
|
|
// N8N status via API
|
|
$n8n_url='http://localhost:5678';
|
|
$n8n_ok=false;$workflows=0;$executions=0;
|
|
$ch=@curl_init("$n8n_url/healthz");
|
|
if($ch){curl_setopt_array($ch,[CURLOPT_RETURNTRANSFER=>1,CURLOPT_TIMEOUT=>5]);$r=@curl_exec($ch);$code=curl_getinfo($ch,CURLINFO_HTTP_CODE);curl_close($ch);
|
|
if($code==200){$n8n_ok=true;$d=@json_decode($r,true);$workflows=count($d['data']??[]);}}
|
|
// Integrations available
|
|
$integrations=[
|
|
['name'=>'Brain Pipeline','type'=>'cron','status'=>'monitoring','desc'=>'Check+Score brain configs'],
|
|
['name'=>'Ethica Scrapers','type'=>'cron','status'=>'active','desc'=>'20 scrapers 36 crons'],
|
|
['name'=>'Conversions Collector','type'=>'webhook','status'=>'active','desc'=>'CAKE+Everflow pull'],
|
|
['name'=>'Auto-Ops','type'=>'cron','status'=>'active','desc'=>'Reputation+Domain+Analytics */2h'],
|
|
['name'=>'Bounce Processor','type'=>'cron','status'=>'active','desc'=>'Process bounces */15'],
|
|
['name'=>'WEVIA LIFE','type'=>'imap','status'=>'active','desc'=>'Email classifier */30'],
|
|
['name'=>'Listmonk','type'=>'api','status'=>'standby','desc'=>'Newsletter API port 9000'],
|
|
];
|
|
ok(['n8n_status'=>$n8n_ok?'UP':'DOWN','workflows'=>$workflows,'integrations'=>$integrations]);
|
|
break;
|
|
|
|
case 'leadscore':
|
|
$db=s95db();
|
|
$total=0;$scored=0;$tiers=[];
|
|
try{$total=(int)q1($db,"SELECT COUNT(*) as c FROM admin.send_contacts")['c'];}catch(\Exception $e){}
|
|
try{$scored=(int)q1($db,"SELECT COUNT(*) as c FROM admin.send_contacts WHERE score IS NOT NULL")['c'];}catch(\Exception $e){}
|
|
try{$tiers=qa($db,"SELECT CASE WHEN score>=80 THEN 'Hot' WHEN score>=60 THEN 'Warm' WHEN score>=40 THEN 'Cold' ELSE 'Dead' END as tier, COUNT(*) as cnt, ROUND(AVG(score),1) as avg_score FROM admin.send_contacts WHERE score IS NOT NULL GROUP BY 1 ORDER BY avg_score DESC");}catch(\Exception $e){}
|
|
$sources=[]; try{$sources=qa($db,"SELECT COALESCE(source,'unknown') as source, COUNT(*) as cnt FROM admin.send_contacts GROUP BY 1 ORDER BY cnt DESC LIMIT 10");}catch(\Exception $e){}
|
|
ok(['total'=>$total,'scored'=>$scored,'score_rate'=>$total>0?round(($scored/$total)*100,1):0,'tiers'=>$tiers,'sources'=>$sources]);
|
|
break;
|
|
|
|
case 'newsletter':
|
|
// Listmonk status
|
|
$lm_ok=false;$lists=0;$subs=0;$campaigns=0;
|
|
$ch=@curl_init('http://10.1.0.3:9000/api/lists');
|
|
if($ch){curl_setopt_array($ch,[CURLOPT_RETURNTRANSFER=>1,CURLOPT_TIMEOUT=>5,CURLOPT_HTTPHEADER=>['Authorization: Basic '.base64_encode('admin:WEVALlistmonk2026')]]);
|
|
$r=@curl_exec($ch);$code=curl_getinfo($ch,CURLINFO_HTTP_CODE);curl_close($ch);
|
|
if($code==200){$lm_ok=true;$d=@json_decode($r,true);$lists=count($d['data']['results']??[]);}}
|
|
ok(['listmonk_status'=>$lm_ok?'UP':'DOWN','lists'=>$lists,
|
|
'tools'=>[
|
|
['name'=>'Listmonk','type'=>'Newsletter','status'=>$lm_ok?'UP':'DOWN','port'=>9000,'admin'=>'admin'],
|
|
['name'=>'PMTA','type'=>'SMTP Relay','status'=>'UP','port'=>25],
|
|
['name'=>'KumoMTA','type'=>'SMTP','status'=>'UP','port'=>587],
|
|
['name'=>'Brain Creative','type'=>'AI Copywriting','status'=>'available'],
|
|
['name'=>'Spintax Engine','type'=>'Content Variation','status'=>'available'],
|
|
]]);
|
|
break;
|
|
|
|
default:ok(['actions'=>['webhooks','n8n','leadscore','newsletter']]);
|
|
}
|