mirror of
https://github.com/YGGverse/HLState.git
synced 2026-03-31 17:15:39 +00:00
implement players online monthly chart
This commit is contained in:
parent
4d95117912
commit
6403b2fa8c
8 changed files with 285 additions and 10 deletions
|
|
@ -27,9 +27,18 @@ class MainController extends AbstractController
|
|||
)]
|
||||
public function index(
|
||||
?Request $request,
|
||||
TranslatorInterface $translatorInterface,
|
||||
EntityManagerInterface $entityManagerInterface
|
||||
): Response
|
||||
{
|
||||
// Init memory
|
||||
$memory = new \Yggverse\Cache\Memory(
|
||||
$this->getParameter('app.memcached.host'),
|
||||
$this->getParameter('app.memcached.port'),
|
||||
$this->getParameter('app.memcached.namespace'),
|
||||
$this->getParameter('app.memcached.timeout') + time(),
|
||||
);
|
||||
|
||||
// Collect servers info
|
||||
$servers = [];
|
||||
|
||||
|
|
@ -119,11 +128,111 @@ class MainController extends AbstractController
|
|||
$servers
|
||||
);
|
||||
|
||||
// Online calendar
|
||||
$time = time();
|
||||
|
||||
$month = new \Yggverse\Graph\Calendar\Month($time);
|
||||
|
||||
foreach ($month->getNodes() as $day => $node)
|
||||
{
|
||||
// Skip future days processing
|
||||
if ($day > date('j'))
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
// Add daily stats
|
||||
$total = $memory->getByMethodCallback(
|
||||
$entityManagerInterface->getRepository(Online::class),
|
||||
'getMaxPlayersByTimeInterval',
|
||||
[
|
||||
strtotime(
|
||||
sprintf(
|
||||
'%s-%s-%s 00:00',
|
||||
date('Y', $time),
|
||||
date('n', $time),
|
||||
$day
|
||||
)
|
||||
),
|
||||
strtotime(
|
||||
'+1 day',
|
||||
strtotime(
|
||||
sprintf(
|
||||
'%s-%s-%s 00:00',
|
||||
date('Y', $time),
|
||||
date('n', $time),
|
||||
$day
|
||||
)
|
||||
)
|
||||
)
|
||||
],
|
||||
time() + ($day == date('j') ? 60 : 2592000)
|
||||
);
|
||||
|
||||
$month->addNode(
|
||||
$day,
|
||||
$total,
|
||||
sprintf(
|
||||
$translatorInterface->trans('online %d'),
|
||||
$total
|
||||
),
|
||||
null,
|
||||
0
|
||||
);
|
||||
|
||||
// Add hourly stats
|
||||
for ($hour = 0; $hour < 24; $hour++)
|
||||
{
|
||||
$total = $memory->getByMethodCallback(
|
||||
$entityManagerInterface->getRepository(Online::class),
|
||||
'getMaxPlayersByTimeInterval',
|
||||
[
|
||||
strtotime(
|
||||
sprintf(
|
||||
'%s-%s-%s %s:00',
|
||||
date('Y', $time),
|
||||
date('n', $time),
|
||||
$day,
|
||||
$hour
|
||||
)
|
||||
),
|
||||
strtotime(
|
||||
sprintf(
|
||||
'%s-%s-%s %s:00',
|
||||
date('Y', $time),
|
||||
date('n', $time),
|
||||
$day,
|
||||
$hour + 1
|
||||
)
|
||||
)
|
||||
],
|
||||
time() + ($day == date('j') ? 60 : 2592000)
|
||||
);
|
||||
|
||||
$month->addNode(
|
||||
$day,
|
||||
$total,
|
||||
sprintf(
|
||||
$translatorInterface->trans('%s:00-%s:00 online %s'),
|
||||
$hour,
|
||||
$hour + 1,
|
||||
$total
|
||||
),
|
||||
'background-color-default',
|
||||
1
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
return $this->render(
|
||||
'default/main/index.html.twig',
|
||||
[
|
||||
'request' => $request,
|
||||
'servers' => $servers
|
||||
'servers' => $servers,
|
||||
'month' =>
|
||||
[
|
||||
'online' => (array) $month->getNodes()
|
||||
]
|
||||
]
|
||||
);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -25,12 +25,27 @@ class OnlineRepository extends ServiceEntityRepository
|
|||
int $crc32server
|
||||
): int
|
||||
{
|
||||
return $this->createQueryBuilder('o')
|
||||
->select('count(o.id)')
|
||||
->where('o.crc32server = :crc32server')
|
||||
->setParameter('crc32server', $crc32server)
|
||||
->getQuery()
|
||||
->getSingleScalarResult()
|
||||
;
|
||||
return
|
||||
$this->createQueryBuilder('o')
|
||||
->select('count(o.id)')
|
||||
->where('o.crc32server = :crc32server')
|
||||
->setParameter('crc32server', $crc32server)
|
||||
->getQuery()
|
||||
->getSingleScalarResult();
|
||||
}
|
||||
|
||||
public function getMaxPlayersByTimeInterval(
|
||||
int $from,
|
||||
int $to
|
||||
): int
|
||||
{
|
||||
return (int)
|
||||
$this->createQueryBuilder('o')
|
||||
->select('max(o.players)')
|
||||
->where('o.time >= :from AND o.time <= :to')
|
||||
->setParameter('from', $from)
|
||||
->setParameter('to', $to)
|
||||
->getQuery()
|
||||
->getSingleScalarResult();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue