Stack Frames
#0
{main}
plugins/vinexel/vision-serve/deeper/Modules/Database/Flex/Query/Statement.php : 70
app
#1
PDOStatement->execute
plugins/vinexel/vision-serve/deeper/Modules/Database/Flex/Query/Statement.php : 70
app
#2
Deeper\Modules\Database\Flex\Query\Statement->execute
plugins/vinexel/vision-serve/deeper/Modules/Database/Flex/Query/Statement.php : 83
app
#3
Deeper\Modules\Database\Flex\Query\Statement->single
plugins/vinexel/vision-serve/deeper/Modules/Database/Database.php : 108
app
#4
Deeper\Modules\Database\Database->{closure:Deeper\Modules\Database\Database::single():108}
plugins/vinexel/vision-serve/deeper/Modules/Cache/CacheManager.php : 109
app
#5
Deeper\Modules\Cache\CacheManager->remember
plugins/vinexel/vision-serve/deeper/Modules/Services/AutoCache.php : 21
app
#6
Deeper\Modules\Services\AutoCache::get
plugins/vinexel/vision-serve/deeper/Modules/Database/Database.php : 108
app
#7
Deeper\Modules\Database\Database->single
plugins/vinexel/vision-serve/deeper/Modules/Database/Flex/Model/BaseModel.php : 87
app
#8
Deeper\Modules\Database\Flex\Model\BaseModel->single
/app/app/Flymetrade/Models/Admin/BalanceModel.php : 19
app
#9
Flymetrade\Models\Admin\BalanceModel->getTotalBalance
/app/app/Flymetrade/Services/StatsService.php : 30
app
#10
Flymetrade\Services\StatsService->getPlatformStats
/app/app/Flymetrade/Services/HomepageService.php : 36
app
#11
Flymetrade\Services\HomepageService->getHomepageData
/app/app/Flymetrade/Controllers/HomeController.php : 29
app
#12
Flymetrade\Controllers\HomeController->index
[internal code]
vendor
#13
call_user_func_array
plugins/vinexel/vision-serve/core/Modules/Router/Router.php : 596
app
#14
Vinexel\Modules\Router\Router::callAction
plugins/vinexel/vision-serve/core/Modules/Router/Router.php : 470
app
#15
Vinexel\Modules\Router\Router::{closure:Vinexel\Modules\Router\Router::handleMatch():470}
plugins/vinexel/vision-serve/core/Modules/Router/Router.php : 491
app
#16
Vinexel\Modules\Router\Router::handleMatch
plugins/vinexel/vision-serve/core/Modules/Router/Router.php : 356
app
#17
Vinexel\Modules\Router\Router::dispatch
plugins/vinexel/vision-serve/core/Modules/Router/RouterInitializer.php : 92
app
#18
Vinexel\Modules\Router\RouterInitializer::{closure:Vinexel\Modules\Router\RouterInitializer::run():90}
plugins/vinexel/vision-serve/core/Modules/Http/Middleware/ApiMiddleware.php : 17
app
#19
Vinexel\Modules\Http\Middleware\ApiMiddleware->handle
plugins/vinexel/vision-serve/core/Modules/Http/Kernel.php : 67
app
#20
Vinexel\Modules\Http\Kernel->{closure:{closure:Vinexel\Modules\Http\Kernel::handle():67}:67}
plugins/vinexel/vision-serve/core/Modules/Http/Middleware/TracingMiddleware.php : 33
app
#21
Vinexel\Modules\Http\Middleware\TracingMiddleware->handle
plugins/vinexel/vision-serve/core/Modules/Http/Kernel.php : 67
app
#22
Vinexel\Modules\Http\Kernel->{closure:{closure:Vinexel\Modules\Http\Kernel::handle():67}:67}
plugins/vinexel/vision-serve/core/Modules/Http/Kernel.php : 69
app
#23
Vinexel\Modules\Http\Kernel->handle
plugins/vinexel/vision-serve/core/Modules/Router/RouterInitializer.php : 90
app
#24
Vinexel\Modules\Router\RouterInitializer::run
plugins/vinexel/vision-serve/core/Modules/RegisterModule.php : 116
app
#25
Vinexel\Modules\RegisterModule->dispatch
/app/system/framework/Application.php : 140
vendor
#26
Vision\Application->run
/app/public/index.php : 100
app
plugins/vinexel/vision-serve/deeper/Modules/Database/Flex/Query/Statement.php
Line 70
64
public function execute(?array $parameters = null): bool
65
{
66
$statement = $this->statement();
67
if ($parameters !== null) {
68
$this->bindings = $parameters;
69
}
70
return $statement->execute($parameters);
71
}
72
73
/** @return list<array<string,mixed>> */
74
public function resultSet(): array
75
{
76
$this->execute();
plugins/vinexel/vision-serve/deeper/Modules/Database/Flex/Query/Statement.php
Line 70
64
public function execute(?array $parameters = null): bool
65
{
66
$statement = $this->statement();
67
if ($parameters !== null) {
68
$this->bindings = $parameters;
69
}
70
return $statement->execute($parameters);
71
}
72
73
/** @return list<array<string,mixed>> */
74
public function resultSet(): array
75
{
76
$this->execute();
plugins/vinexel/vision-serve/deeper/Modules/Database/Flex/Query/Statement.php
Line 83
77
return $this->statement()->fetchAll(PDO::FETCH_ASSOC);
78
}
79
80
/** @return array<string,mixed>|null */
81
public function single(int $fetchMode = PDO::FETCH_ASSOC): ?array
82
{
83
$this->execute();
84
$row = $this->statement()->fetch($fetchMode);
85
return is_array($row) ? $row : null;
86
}
87
88
public function fetchColumn(int $column = 0): mixed
89
{
plugins/vinexel/vision-serve/deeper/Modules/Database/Database.php
Line 108
102
{
103
if (!$this->isReadQuery() || !empty($cacheOptions['bypass_cache'])) {
104
return $this->queryBuilder->single();
105
}
106
$key = $cacheOptions['key'] ?? $this->cacheKey();
107
$ttl = $cacheOptions['ttl'] ?? 3600;
108
$value = AutoCache::get($key, fn (): ?array => $this->queryBuilder->single(), $ttl, $this->lastTables);
109
return is_array($value) ? $value : null;
110
}
111
112
public function singleRow(): ?array
113
{
114
return $this->single();
plugins/vinexel/vision-serve/deeper/Modules/Cache/CacheManager.php
Line 109
103
$missing = new \stdClass();
104
$cached = $this->get($key, $missing);
105
if ($cached !== $missing) {
106
return $cached;
107
}
108
109
$value = $callback();
110
$this->put($key, $value, $ttl, $tags);
111
return $value;
112
}
113
114
public function has(string $key): bool
115
{
plugins/vinexel/vision-serve/deeper/Modules/Services/AutoCache.php
Line 21
15
* development.
16
*/
17
final class AutoCache
18
{
19
public static function get(string $cacheKey, callable $callback, int $ttl = 3600, array $tags = []): mixed
20
{
21
return self::store()->remember($cacheKey, $callback, max(0, $ttl), $tags);
22
}
23
24
public static function clear(string $cacheKey): void
25
{
26
self::store()->forget($cacheKey);
27
}
plugins/vinexel/vision-serve/deeper/Modules/Database/Database.php
Line 108
102
{
103
if (!$this->isReadQuery() || !empty($cacheOptions['bypass_cache'])) {
104
return $this->queryBuilder->single();
105
}
106
$key = $cacheOptions['key'] ?? $this->cacheKey();
107
$ttl = $cacheOptions['ttl'] ?? 3600;
108
$value = AutoCache::get($key, fn (): ?array => $this->queryBuilder->single(), $ttl, $this->lastTables);
109
return is_array($value) ? $value : null;
110
}
111
112
public function singleRow(): ?array
113
{
114
return $this->single();
plugins/vinexel/vision-serve/deeper/Modules/Database/Flex/Model/BaseModel.php
Line 87
81
$bypassCache = !empty($cacheOptions['bypass_cache']);
82
$cacheKey = hash('sha256', $this->currentQuery . "\0" . serialize($this->currentParams));
83
if (!$bypassCache && array_key_exists($cacheKey, self::$lifecycleCache)) {
84
$value = self::$lifecycleCache[$cacheKey];
85
return is_array($value) ? $value : null;
86
}
87
$data = parent::single($cacheOptions);
88
$result = $this->autoDecrypt($data);
89
if (!$bypassCache) {
90
self::$lifecycleCache[$cacheKey] = $result;
91
}
92
return $result;
93
}
/app/app/Flymetrade/Models/Admin/BalanceModel.php
Line 19
13
return $this->query("SELECT * FROM " . $this->table_users . " WHERE user_role = 'user' ORDER BY user_balance DESC LIMIT 5")
14
->resultSet();
15
}
16
17
public function getTotalBalance()
18
{
19
$result = $this->query("SELECT SUM(user_balance_total) as total_balances FROM " . $this->table_users)->single();
20
return $result['total_balances'] ?? 0;
21
}
22
23
public function getTotalWithdrawal()
24
{
25
$result = $this->query("SELECT SUM(user_withdrawal_total) as total_withdrawal FROM " . $this->table_users)->single();
/app/app/Flymetrade/Services/StatsService.php
Line 30
24
*
25
* @return array
26
*/
27
public function getPlatformStats(): array
28
{
29
return [
30
'total_balance' => $this->balanceModel->getTotalBalance(),
31
'total_withdrawal' => $this->balanceModel->getTotalWithdrawal(),
32
'commission_collected' => $this->balanceModel->getCommissionCollected(),
33
'commission_distributed' => $this->balanceModel->getCommissionDistributed(),
34
'total_users' => $this->generalModel->getTotalUsers(),
35
'total_brokers' => $this->generalModel->getTotalBrokers(),
36
'total_account_opened' => $this->generalModel->getTotalAccounts(),
/app/app/Flymetrade/Services/HomepageService.php
Line 36
30
*
31
* @return array
32
*/
33
public function getHomepageData(): array
34
{
35
return array_merge(
36
$this->statsService->getPlatformStats(),
37
[
38
'top_user' => $this->balanceModel->getUsersByBalance(),
39
40
// Broker data
41
'justmarkets_data' => $this->brokerModel->getJustmarkets(),
42
'exness_data' => $this->brokerModel->getExness(),
/app/app/Flymetrade/Controllers/HomeController.php
Line 29
23
use Protection;
24
25
public function index(): void
26
{
27
try {
28
$homepageService = ServiceProvider::getHomepageService();
29
$homepageData = $homepageService->getHomepageData();
30
31
$seo = $this->getSeoData();
32
$data = $this->getData(_lang('page_titles.homepage'), array_merge($homepageData, [
33
'description' => 'Flymetrade adalah ekosistem IB Forex dan teknologi trading Flyme Tyrant untuk rebate, infrastruktur trading, serta pengembangan Expert Advisor dan analytical tools berbantuan AI.',
34
'seo_head' => $seo['seoHeadHtml'],
35
'title' => $seo['seoData']['title'] ?? 'Flymetrade',
[internal code]
Line 0
[Internal code — source not available]
plugins/vinexel/vision-serve/core/Modules/Router/Router.php
Line 596
590
$controllerInstance = Container::resolve($controllerClass);
591
592
if (!method_exists($controllerInstance, $method)) {
593
return self::sendServerError("Method '{$method}' in controller '{$controllerClass}' not found");
594
}
595
596
return call_user_func_array([$controllerInstance, $method], $params);
597
}
598
599
/**
600
* Execute middleware for the current route.
601
*
602
* @param string $key Middleware key
plugins/vinexel/vision-serve/core/Modules/Router/Router.php
Line 470
464
$matches,
465
fn($key) => !is_int($key),
466
ARRAY_FILTER_USE_KEY
467
)
468
);
469
470
$destination = fn () => self::callAction($route['action'], $params, $route['namespace'] ?? self::$namespace);
471
$middleware = array_values((array) ($route['middleware'] ?? []));
472
// API routes always enter the JSON/stateless boundary. Session remains
473
// an explicit route middleware (`api-session`).
474
if (RequestMode::isApiPath((string) ($route['uri'] ?? ''))
475
&& !in_array('api', $middleware, true)) {
476
array_unshift($middleware, 'api');
plugins/vinexel/vision-serve/core/Modules/Router/Router.php
Line 491
485
self::$currentMiddleware[] = (string) $middlewareKey;
486
return self::invokeMiddleware((string) $middlewareKey, $next);
487
};
488
}
489
490
try {
491
return $destination();
492
} catch (\Throwable $exception) {
493
if (RequestMode::isApi($_SERVER)) {
494
self::jsonError('internal_server_error', 'internal_server_error', 500);
495
return null;
496
}
497
throw $exception;
plugins/vinexel/vision-serve/core/Modules/Router/Router.php
Line 356
350
}
351
// --- End GoEngine Fast Route Lookup ---
352
353
// Immutable route manifests contain precompiled regexes, but static
354
// paths can bypass PCRE entirely. Global routes retain precedence.
355
if (isset(self::$staticRouteIndex[$requestMethod][$requestUri])) {
356
return self::handleMatch(self::$staticRouteIndex[$requestMethod][$requestUri], []);
357
}
358
359
// Check global routes first (highest priority)
360
foreach (self::$globalRoutes as $index => &$route) {
361
if (!isset($route['regex'])) {
362
$route['regex'] = self::convertToRegex($route['uri']);
plugins/vinexel/vision-serve/core/Modules/Router/RouterInitializer.php
Line 92
86
Request::setInstance($request);
87
$kernel = new Kernel();
88
89
// Jalankan Kernel untuk Middleware Global (Session, CSRF, dll)
90
$kernel->handle($request, function ($request) {
91
// Setelah middleware global lolos, jalankan router
92
Router::dispatch();
93
});
94
}
95
}
plugins/vinexel/vision-serve/core/Modules/Http/Middleware/ApiMiddleware.php
Line 17
11
/** Stateless API boundary: deterministic headers and shared rate limiting. */
12
final class ApiMiddleware
13
{
14
public function handle(Request $request, Closure $next): mixed
15
{
16
if (!$request->isApi()) {
17
return $next($request);
18
}
19
if ($request->getAttribute('_api_boundary') === true) {
20
return $next($request);
21
}
22
$request->setAttribute('_api_boundary', true);
23
header('Content-Type: application/json; charset=utf-8');
plugins/vinexel/vision-serve/core/Modules/Http/Kernel.php
Line 67
61
}
62
63
$pipeline = array_merge($this->middleware, $resolved);
64
65
return array_reduce(
66
array_reverse($pipeline),
67
fn($next, $m) => fn($req) => (new $m())->handle($req, $next),
68
$destination
69
)($request);
70
}
71
72
/**
73
* Resolve middleware class by key.
plugins/vinexel/vision-serve/core/Modules/Http/Middleware/TracingMiddleware.php
Line 33
27
28
// Inject into response header
29
header("X-Request-ID: {$requestId}");
30
31
// You could also inject this into a global logger context here if using Monolog
32
33
return $next($request);
34
}
35
}
plugins/vinexel/vision-serve/core/Modules/Http/Kernel.php
Line 67
61
}
62
63
$pipeline = array_merge($this->middleware, $resolved);
64
65
return array_reduce(
66
array_reverse($pipeline),
67
fn($next, $m) => fn($req) => (new $m())->handle($req, $next),
68
$destination
69
)($request);
70
}
71
72
/**
73
* Resolve middleware class by key.
plugins/vinexel/vision-serve/core/Modules/Http/Kernel.php
Line 69
63
$pipeline = array_merge($this->middleware, $resolved);
64
65
return array_reduce(
66
array_reverse($pipeline),
67
fn($next, $m) => fn($req) => (new $m())->handle($req, $next),
68
$destination
69
)($request);
70
}
71
72
/**
73
* Resolve middleware class by key.
74
*/
75
public function resolve(string $key): string
plugins/vinexel/vision-serve/core/Modules/Router/RouterInitializer.php
Line 90
84
{
85
$request = new Request();
86
Request::setInstance($request);
87
$kernel = new Kernel();
88
89
// Jalankan Kernel untuk Middleware Global (Session, CSRF, dll)
90
$kernel->handle($request, function ($request) {
91
// Setelah middleware global lolos, jalankan router
92
Router::dispatch();
93
});
94
}
95
}
plugins/vinexel/vision-serve/core/Modules/RegisterModule.php
Line 116
110
* This method executes the routing process and triggers
111
* the onCreate and onFinish lifecycle hooks.
112
*/
113
public function dispatch(): void
114
{
115
// Run the main router
116
RouterInitializer::run();
117
118
// Lifecycle start hook
119
$this->onCreate();
120
121
// Lifecycle finish hook
122
$this->onFinish([
/app/system/framework/Application.php
Line 140
134
if (!$stateless) {
135
Signature::injectHttpHeaders();
136
Signature::injectCookie();
137
}
138
139
// Dispatch the application request
140
$this->dispatch();
141
}
142
143
protected function onFinish(array $info): void
144
{
145
parent::onFinish($info);
146
}
/app/public/index.php
Line 100
94
}
95
};
96
register_shutdown_function($cleanup);
97
98
try {
99
$application = Transmitter::http();
100
$application->run();
101
} finally {
102
$cleanup();
103
}
104
105
// Flush output. The bootstrap's diagnostic probe is useful in server logs,
106
// but it must never become a text node after the document's closing tag: that
Request
| URL | http://flymetrade.com/ |
|---|---|
| Method | GET |
Query Parameters
No query parameters
Headers
| X-Forwarded-Proto | https |
|---|---|
| X-Real-Ip | 216.73.217.108 |
| User-Agent | Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com) |
| Accept | */* |
| Via | 2.0 Caddy |
| Accept-Encoding | gzip, br, zstd, deflate |
| X-Forwarded-For | 216.73.217.108 |
| X-Forwarded-Host | flymetrade.com |
Runtime
| Execution Time | 0.0721s |
|---|---|
| Memory Usage | 2.00 MB |
| PHP Version | 8.5.11 |
| Framework | Vinexel v2.0.0 |
Session Data
| _csrf_token | 30fca40284d4432268e60d46707623ed669a71cdcbdb7eba11116d80273a6421 |
|---|---|
| _csrf_token_time | 1791164108 |