39 lines
3.0 KiB
PHP
Executable File
39 lines
3.0 KiB
PHP
Executable File
<?php
|
|
require_once("/opt/wevads/config/credentials.php");
|
|
header('Content-Type: application/json');
|
|
$db = pg_connect("host=localhost dbname=adx_system user=admin password=".WEVADS_DB_PASS);
|
|
pg_query($db, "SET search_path TO admin");
|
|
$action = $_GET['action'] ?? 'dashboard';
|
|
|
|
switch($action) {
|
|
case 'dashboard':
|
|
$yt = pg_fetch_assoc(pg_query($db, "SELECT COUNT(*) as videos, COALESCE(SUM(views_count),0) as views, COUNT(*) FILTER(WHERE status='published') as published FROM yt_jobs"));
|
|
$ads = pg_fetch_assoc(pg_query($db, "SELECT COUNT(*) as campaigns, COALESCE(SUM(budget_spent),0) as spent, COALESCE(SUM(revenue_generated),0) as revenue, COALESCE(SUM(conversions),0) as conversions FROM xc_campaigns"));
|
|
$email = pg_fetch_assoc(pg_query($db, "SELECT COUNT(*) as sent_today FROM unified_send_log WHERE created_at::date=CURRENT_DATE")) ?: ['sent_today'=>0];
|
|
$arb = pg_fetch_assoc(pg_query($db, "SELECT COUNT(*) as total, COUNT(*) FILTER(WHERE decision_type='kill') as kills, COUNT(*) FILTER(WHERE decision_type='boost') as boosts FROM ads_arbitrage_log"));
|
|
$spent = (float)($ads['spent'] ?? 0);
|
|
$rev = (float)($ads['revenue'] ?? 0);
|
|
echo json_encode(['status'=>'success','channels'=>[
|
|
'youtube'=>['videos'=>$yt['videos'],'published'=>$yt['published'],'views'=>$yt['views']],
|
|
'ads'=>['campaigns'=>$ads['campaigns'],'spent'=>$spent,'revenue'=>$rev,'conversions'=>$ads['conversions'],'roas'=>$spent>0?round($rev/$spent,2):0],
|
|
'email'=>['sent_today'=>$email['sent_today']],
|
|
'arbitrage'=>['decisions'=>$arb['total'],'kills'=>$arb['kills'],'boosts'=>$arb['boosts']]
|
|
],'totals'=>['spent'=>$spent,'revenue'=>$rev,'roas'=>$spent>0?round($rev/$spent,2):0]]);
|
|
break;
|
|
case 'daily_snapshot':
|
|
$today = date('Y-m-d');
|
|
$yt = pg_fetch_assoc(pg_query($db, "SELECT COUNT(*) as v FROM yt_jobs WHERE created_at::date='$today'"));
|
|
$ads = pg_fetch_assoc(pg_query($db, "SELECT COALESCE(SUM(budget_spent),0) as s, COALESCE(SUM(revenue_generated),0) as r, COALESCE(SUM(conversions),0) as c FROM xc_campaigns"));
|
|
$em = pg_fetch_assoc(pg_query($db, "SELECT COUNT(*) as s FROM unified_send_log WHERE created_at::date='$today'"));
|
|
pg_query($db, "INSERT INTO xc_performance_daily(date,yt_videos_published,email_sent,ads_spent,ads_revenue,ads_conversions,total_spent,total_revenue,overall_roas,calculated_at)
|
|
VALUES('$today',{$yt['v']},{$em['s']},{$ads['s']},{$ads['r']},{$ads['c']},{$ads['s']},{$ads['r']},CASE WHEN {$ads['s']}>0 THEN round({$ads['r']}::numeric/{$ads['s']},2) ELSE 0 END,NOW())
|
|
ON CONFLICT(date) DO UPDATE SET yt_videos_published=EXCLUDED.yt_videos_published,email_sent=EXCLUDED.email_sent,ads_spent=EXCLUDED.ads_spent,ads_revenue=EXCLUDED.ads_revenue,calculated_at=NOW()");
|
|
echo json_encode(['status'=>'saved','date'=>$today]);
|
|
break;
|
|
case 'history':
|
|
$days=(int)($_GET['days']??30);
|
|
$p=pg_fetch_all(pg_query($db,"SELECT * FROM xc_performance_daily ORDER BY date DESC LIMIT $days"));
|
|
echo json_encode(['status'=>'success','data'=>$p?:[]]);
|
|
break;
|
|
}
|
|
?>
|