"http://{$tracking_ip}/", CURLOPT_RETURNTRANSFER => true, CURLOPT_TIMEOUT => 5]); curl_exec($ch); $trackingCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); $trackingTime = round((microtime(true) - $start) * 1000); $trackingMetrics = ['cpu' => 0, 'mem' => 0, 'disk' => 0]; $sshCmd = "sshpass -p '{$tracking_ssh_pass}' ssh -o StrictHostKeyChecking=no -o ConnectTimeout=3 ubuntu@{$tracking_ip} \"cat /proc/loadavg && free -m && df -h /\" 2>/dev/null"; $sshOutput = shell_exec($sshCmd); if ($sshOutput) { $lines = explode("\n", $sshOutput); if (isset($lines[0])) { $loadParts = explode(' ', $lines[0]); $trackingMetrics['cpu'] = round(floatval($loadParts[0]) * 100 / 2, 1); } foreach ($lines as $line) { if (strpos($line, 'Mem:') !== false) { $parts = preg_split('/\s+/', trim($line)); if (count($parts) >= 3) $trackingMetrics['mem'] = round(($parts[2] / $parts[1]) * 100, 1); } if (strpos($line, '/dev/') !== false && strpos($line, '%') !== false) { preg_match('/(\d+)%/', $line, $diskMatch); if (isset($diskMatch[1])) $trackingMetrics['disk'] = intval($diskMatch[1]); } } } echo json_encode(['wevads' => ['cpu' => $cpuPercent, 'mem' => $memPercent, 'disk' => $diskPercent], 'tracking' => ['cpu' => $trackingMetrics['cpu'], 'mem' => $trackingMetrics['mem'], 'disk' => $trackingMetrics['disk'], 'response_time' => $trackingTime, 'status' => $trackingCode > 0 ? 'online' : 'offline']]); exit; } // Generate Click - INSERT with geolocation if (isset($_GET['action']) && $_GET['action'] === 'generate_click') { header('Content-Type: application/json'); try { $db = new PDO('pgsql:host=localhost;dbname=adx_system', 'admin', 'admin123'); $stmt = $db->query("SELECT id, name, affiliate_network_id FROM affiliate.offers WHERE status = 'Activated' ORDER BY RANDOM() LIMIT 1"); $offer = $stmt->fetch(PDO::FETCH_ASSOC); if (!$offer) { echo json_encode(['success' => false, 'message' => 'No active offers']); exit; } $stmt2 = $db->query("SELECT id FROM production.mta_processes WHERE status = 'Completed' ORDER BY id DESC LIMIT 1"); $process = $stmt2->fetch(PDO::FETCH_ASSOC); $processId = $process ? $process['id'] : 999; $stmtId = $db->query("SELECT COALESCE(MAX(id), 0) + 1 FROM actions.clicks"); $nextId = $stmtId->fetchColumn(); $locations = [['US', 'United States', 'New York', 'New York City'], ['DE', 'Germany', 'Bavaria', 'Munich'], ['FR', 'France', 'Ile-de-France', 'Paris'], ['GB', 'United Kingdom', 'England', 'London'], ['SE', 'Sweden', 'Stockholm', 'Stockholm'], ['MA', 'Morocco', 'Casablanca-Settat', 'Casablanca'], ['ES', 'Spain', 'Madrid', 'Madrid'], ['IT', 'Italy', 'Lazio', 'Rome']]; $loc = $locations[rand(0, count($locations)-1)]; $browsers = ['Google Chrome', 'Firefox', 'Safari', 'Edge']; $devices = ['Computer', 'Mobile', 'Tablet']; $ips = ['45.'.rand(1,255).'.'.rand(1,255).'.'.rand(1,255), '92.'.rand(1,255).'.'.rand(1,255).'.'.rand(1,255)]; $insert = $db->prepare("INSERT INTO actions.clicks (id, unique_token, process_id, process_type, user_production_id, user_full_name, vmta_id, smtp_user_id, affiliate_network_id, offer_production_id, list_id, client_id, action_time, process_updated, agent, action_ip, country_code, country, region, city, device_type, device_name, operating_system, browser_name, browser_version) VALUES (?, ?, ?, 'md', 1, 'Simulated User', ?, 0, ?, ?, 0, 0, NOW(), false, 'Mozilla/5.0', ?, ?, ?, ?, ?, ?, 'PC', 'Windows 10.0', ?, '120.0')"); $insert->execute([$nextId, $processId.rand(1000,9999), $processId, rand(1,10), $offer['affiliate_network_id'] ?? 1, $offer['id'], $ips[rand(0,1)], $loc[0], $loc[1], $loc[2], $loc[3], $devices[rand(0,2)], $browsers[rand(0,3)]]); echo json_encode(['success' => true, 'message' => 'Click generated!', 'offer_id' => $offer['id'], 'offer_name' => $offer['name'], 'location' => $loc[3].', '.$loc[1], 'click_id' => $nextId]); } catch (Exception $e) { echo json_encode(['success' => false, 'message' => $e->getMessage()]); } exit; } // Recent activity if (isset($_GET['action']) && $_GET['action'] === 'recent_activity') { header('Content-Type: application/json'); try { $db = new PDO('pgsql:host=localhost;dbname=adx_system', 'admin', 'admin123'); $stmt = $db->query("SELECT id, action_time, offer_production_id as offer_id, process_id, country, city, device_type, browser_name, action_ip FROM actions.clicks ORDER BY action_time DESC LIMIT 15"); echo json_encode(['success' => true, 'clicks' => $stmt->fetchAll(PDO::FETCH_ASSOC)]); } catch (Exception $e) { echo json_encode(['success' => false, 'message' => $e->getMessage()]); } exit; } // Repair actions if (isset($_GET['action']) && $_GET['action'] === 'repair') { header('Content-Type: application/json'); $type = $_POST['type'] ?? ''; switch ($type) { case 'tracking_server': $output = shell_exec("sshpass -p '{$tracking_ssh_pass}' ssh -o StrictHostKeyChecking=no ubuntu@{$tracking_ip} 'sudo systemctl restart nginx php8.1-fpm' 2>&1"); echo json_encode(['success' => true, 'message' => 'Nginx restarted', 'output' => $output]); break; case 'wevads_api': shell_exec('sudo systemctl restart apache2'); echo json_encode(['success' => true, 'message' => 'Apache restarted']); break; case 'database': shell_exec('sudo systemctl restart postgresql'); echo json_encode(['success' => true, 'message' => 'PostgreSQL restarted']); break; case 'e2e_click': $output = shell_exec("sshpass -p '{$tracking_ssh_pass}' ssh -o StrictHostKeyChecking=no ubuntu@{$tracking_ip} 'tail -20 /var/log/nginx/error.log' 2>&1"); echo json_encode(['success' => true, 'message' => 'Logs', 'output' => $output]); break; case 's3_bucket': echo json_encode(['success' => true, 'message' => 'Check AWS Console', 'url' => 'https://s3.console.aws.amazon.com/']); break; default: echo json_encode(['success' => false, 'message' => 'Unknown']); } exit; } // Diagnose if (isset($_GET['action']) && $_GET['action'] === 'diagnose') { header('Content-Type: application/json'); $results = ['timestamp' => date('Y-m-d H:i:s'), 'overall_status' => 'ok', 'checks' => []]; $ch = curl_init(); curl_setopt_array($ch, [CURLOPT_URL => "http://{$tracking_ip}/", CURLOPT_RETURNTRANSFER => true, CURLOPT_TIMEOUT => 10]); curl_exec($ch); $code = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); $results['checks']['tracking_server'] = ['name' => 'Tracking Server', 'status' => $code > 0 ? 'ok' : 'error', 'message' => "HTTP {$code}", 'repair' => 'tracking_server', 'repair_label' => 'Restart Nginx']; $ch = curl_init(); curl_setopt_array($ch, [CURLOPT_URL => $wevads_api, CURLOPT_RETURNTRANSFER => true, CURLOPT_TIMEOUT => 10, CURLOPT_POST => true, CURLOPT_POSTFIELDS => http_build_query(['controller' => 'Tracking', 'action' => 'getAdxRtl', 'parameters' => []])]); $apiResponse = curl_exec($ch); $apiCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); $results['checks']['wevads_api'] = ['name' => 'WEVAL API', 'status' => ($apiCode == 200 && json_decode($apiResponse)) ? 'ok' : 'error', 'message' => "HTTP {$apiCode}", 'repair' => 'wevads_api', 'repair_label' => 'Restart Apache']; try { $db = new PDO('pgsql:host=localhost;dbname=adx_system', 'admin', 'admin123'); $stmt = $db->query("SELECT COUNT(*) FROM actions.clicks WHERE action_time > NOW() - INTERVAL '24 hours'"); $results['checks']['database'] = ['name' => 'Database', 'status' => 'ok', 'message' => $stmt->fetchColumn().' clicks/24h', 'repair' => 'database', 'repair_label' => 'Restart PostgreSQL']; } catch (Exception $e) { $results['checks']['database'] = ['name' => 'Database', 'status' => 'error', 'message' => 'Failed', 'repair' => 'database', 'repair_label' => 'Restart PostgreSQL']; } $ch = curl_init(); curl_setopt_array($ch, [CURLOPT_URL => "http://{$tracking_ip}/cl/999_md/1/1/6/0/0", CURLOPT_RETURNTRANSFER => true, CURLOPT_TIMEOUT => 15]); $e2eResponse = curl_exec($ch); $e2eCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); $results['checks']['e2e_click'] = ['name' => 'E2E Click', 'status' => ($e2eCode == 200 && strlen($e2eResponse) > 10) ? 'ok' : 'warning', 'message' => "HTTP {$e2eCode}", 'repair' => 'e2e_click', 'repair_label' => 'View Logs']; $ch = curl_init(); curl_setopt_array($ch, [CURLOPT_URL => "https://ff6970ea5261c1fb821273.s3.eu-north-1.amazonaws.com/", CURLOPT_RETURNTRANSFER => true, CURLOPT_TIMEOUT => 10, CURLOPT_NOBODY => true]); curl_exec($ch); $s3Code = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); $results['checks']['s3_bucket'] = ['name' => 'S3 Bucket', 'status' => ($s3Code > 0 && $s3Code < 500) ? 'ok' : 'error', 'message' => "HTTP {$s3Code}", 'repair' => 's3_bucket', 'repair_label' => 'Check AWS']; foreach ($results['checks'] as $c) { if ($c['status'] === 'error') $results['overall_status'] = 'error'; } echo json_encode($results); exit; } // Get test URL if (isset($_GET['action']) && $_GET['action'] === 'get_test_url') { header('Content-Type: application/json'); try { $db = new PDO('pgsql:host=localhost;dbname=adx_system', 'admin', 'admin123'); $stmt = $db->query("SELECT id, name FROM affiliate.offers WHERE status = 'Activated' ORDER BY id LIMIT 1"); $offer = $stmt->fetch(PDO::FETCH_ASSOC); $stmt2 = $db->query("SELECT id FROM production.mta_processes WHERE status = 'Completed' ORDER BY id DESC LIMIT 1"); $process = $stmt2->fetch(PDO::FETCH_ASSOC); $processId = $process ? $process['id'] : 999; $url = "http://{$tracking_ip}/cl/{$processId}_md/1/1/{$offer['id']}/0/0"; echo json_encode(['success' => true, 'url' => $url, 'offer_id' => $offer['id'], 'offer_name' => $offer['name']]); } catch (Exception $e) { echo json_encode(['success' => false]); } exit; } ?>
Inserts a real click with random location into the database
Click to open a tracking URL and see where it redirects (no click recorded)
Health check with repair tools