2 require_once "inc/common.php";
3 if (!isset($config['unrealircd']))
5 $redirect = get_config("base_url")."settings/rpc-servers.php";
6 header('Location: ' . $redirect);
10 require_once "inc/header.php";
13 <div
class="row ml-0">
14 <h2
>Network Overview
</h2
>
15 <div id
="live_stats" data
-toggle
="tooltip" data
-placement
="top" title
="The stats on this page are updated in real-time"
16 class="card text-center row font-weight-bold"
17 style
="margin-left:5%;height:26px;width:60px;background-color:red;color:white;visibility:hidden">
18 <small style
="margin-left:-40px;padding-top:3px;margin-right:-45px">⚪
</small
>LIVE
24 /* What if someone wants to add their own stats... */
25 Hook
::run(HOOKTYPE_PRE_OVERVIEW_CARD
, $array_of_stats);
27 /* This makes sure that a plugin which called the parameter
28 * by reference can add/update the stats for display here.
30 $stats = (object) $array_of_stats;
32 Hook
::run(HOOKTYPE_GET_USER_LIST
, $userlist);
33 $num_of_panel_admins = count($userlist);
41 <div
class="container card-container" style
="margin-left:40px;margin-top:30px">
43 <div
class="row mt-3">
44 <div
class="col-sm mb-3">
45 <div
class="card text-center">
46 <div
class="card-header bg-success text-white">
49 <i aria
-hidden
="true" class="fa fa-users fa-3x"></i
><span id
="userRecord" class="position-absolute badge rounded-pill badge-warning">
50 <?php
echo "Record: "; ?>
54 <h3 id
="stats_user_total" class="display-4"></h3
>
58 <div
class="card-body">
63 <div
class="col"> <a
class="btn btn-primary" href
="<?php echo get_config("base_url
"); ?>users">View
</a
></div
>
70 <div
class="col-sm mb-3">
71 <div
class="card text-center">
72 <div
class="card-header bg-primary text-white">
75 <i aria
-hidden
="true" class="fa fa-hashtag fa-3x"></i
>
78 <h3 id
="stats_channel_total" class="display-4"></h3
>
82 <div
class="card-body">
87 <div
class="col"><a
class="btn btn-primary" href
="<?php echo get_config("base_url
"); ?>channels">View
</a
></div
>
92 <div
class="col-sm mb-3">
93 <div
class="card text-center">
94 <div
class="card-header bg-warning">
97 <i aria
-hidden
="true" class="fa fa-shield-halved fa-3x"></i
>
100 <h3 id
="stats_oper_total" class="display-4"></h3
>
104 <div
class="card-body">
109 <!-- <div
class="col"><a
class="btn btn-primary" href
="<?php echo get_config("base_url
")."users
/?operonly
"; ?>">View
</a
></div
> -->
115 <div
class="col-sm mb-3">
116 <div
class="card text-center">
117 <div
class="card-header bg-secondary text-white">
120 <i aria
-hidden
="true" class="fa fa-network-wired fa-3x"></i
>
123 <h3 id
="stats_server_total" class="display-4"></h3
>
127 <div
class="card-body">
132 <div
class="col"> <a
class="btn btn-primary" href
="<?php echo get_config("base_url
"); ?>servers">View
</a
></div
>
139 <div
class="container card-container" style
="margin-left:40px;margin-top:30px">
142 <div
class="col-sm mb-3">
143 <div
class="card text-center">
144 <div
class="card-header bg-danger text-white">
147 <i aria
-hidden
="true" class="fa fa-ban fa-3x"></i
>
150 <h3 id
="num_server_bans" class="display-4"></h3
>
154 <div
class="card-body">
159 <div
class="col"> <a
class="btn btn-primary" href
="<?php echo get_config("base_url
"); ?>server-bans">View
</a
></div
>
164 <div
class="col-sm mb-3">
165 <div
class="card text-center">
166 <div
class="card-header bg-secondary text-white">
169 <i aria
-hidden
="true" class="fa fa-filter fa-3x"></i
>
172 <h3 id
="num_spamfilter_entries" class="display-4"></h3
>
176 <div
class="card-body">
181 <div
class="col"> <a
class="btn btn-primary" href
="<?php echo get_config("base_url
"); ?>spamfilter.php">View
</a
></div
>
186 <div
class="col-sm mb-3">
187 <div
class="card text-center">
188 <div
class="card-header bg-primary text-white">
191 <i aria
-hidden
="true" class="fa fa-door-open fa-3x"></i
>
194 <h3 id
="num_ban_exceptions" class="display-4"></h3
>
199 <div
class="card-body">
202 <h6
>Server Ban Exceptions
</h6
>
204 <div
class="col"> <a
class="btn btn-primary" href
="<?php echo get_config("base_url
"); ?>server-bans/ban-exceptions.php">View
</a
></div
>
210 $bg = "bg-success"; // FIXME: this isn't dynamic
212 <div
class="col-sm mb-3">
213 <div
class="card text-center">
214 <div
class="card-header <?php echo $bg; ?> text-white">
217 <i aria
-hidden
="true" class="fa fa-database fa-3x"> </i
>
220 <span data
-toggle
="tooltip" title
="" style
="border-bottom: 1px dotted #000000">
221 <h3 id
="stats_uline_total" class="display-4"></h3
>
225 <div
class="card-body">
228 <h6
>Services Online
</h6
>
230 <!-- <div
class="col"> <a
class="btn btn-primary" href
="<?php echo get_config("base_url
")."users
/?servicesonly
"; ?>">View
</a
></div
> -->
241 /* Last time stats were updated */
244 function updateStats(e
)
248 data
= JSON
.parse(e
.data
);
252 stats_tick
= Date
.now()
254 document
.getElementById("userRecord").innerHTML
= "Record: "+data
.user
.record
;
255 document
.getElementById("live_stats").style
.visibility
= '';
256 document
.getElementById("stats_user_total").innerHTML
= data
.user
.total
;
257 document
.getElementById("stats_channel_total").innerHTML
= data
.channel
.total
;
258 document
.getElementById("stats_oper_total").innerHTML
= data
.user
.oper
;
259 document
.getElementById("stats_server_total").innerHTML
= data
.server
.total
;
260 document
.getElementById("num_server_bans").innerHTML
= data
.server_ban
.server_ban
;
261 document
.getElementById("num_spamfilter_entries").innerHTML
= data
.server_ban
.spamfilter
;
262 document
.getElementById("num_ban_exceptions").innerHTML
= data
.server_ban
.server_ban_exception
;
263 document
.getElementById("stats_uline_total").innerHTML
= data
.user
.ulined +
"/" + data
.server
.ulined
;
265 function checkStatsOutdated()
267 setTimeout(checkStatsOutdated
, 2000);
268 if (Date
.now() - stats_tick
> 10000)
269 document
.getElementById("live_stats").style
.visibility
= 'hidden';
271 setTimeout(checkStatsOutdated
, 2000);
275 if (!!window
.EventSource
) {
276 var source
= new EventSource('api/overview.php');
277 source
.addEventListener('message', updateStats
, false);
281 //setInterval(updateStats, 1000); // Update stats every second
282 // ^ commented out but may want to restart initStats() when connection is lost.
285 window
.addEventListener('resize', function() {
286 var containers
= document
.querySelectorAll('.card-container');
287 var width
= window
.innerWidth
;
290 containers
.forEach((container
) => {
291 container
.removeAttribute('style');
296 containers
.forEach((container
) => {
297 container
.style
.marginLeft
= "40px";
298 container
.style
.marginTop
= "30px";
305 <div
class="container card-container card-container" style
="margin-left:40px;margin-top:10px">
308 <div
class="col-sm-3">
309 <div
class="card text-center">
310 <div
class="card-header bg-success text-white">
313 <i aria
-hidden
="true" class="fa fa-lock-open fa-3x"></i
>
316 <h3
class="display-4"><?php
echo $num_of_panel_admins; ?></h3
>
320 <div
class="card-body">
323 <h6
>Panel Accounts
</h6
>
325 <div
class="col"> <a
class="btn btn-primary" href
="<?php echo get_config("base_url
"); ?>settings">View
</a
></div
>
330 <div
class="col-sm-3">
331 <div
class="card text-center">
332 <div
class="card-header bg-light">
335 <i aria
-hidden
="true" class="fa fa-plug fa-3x"></i
>
338 <h3
class="display-4"><?php
echo count(Plugins
::$list); ?></h3
>
342 <div
class="card-body">
347 <div
class="col"> <a
class="btn btn-primary" href
="<?php echo get_config("base_url
"); ?>settings/plugins.php">View
</a
></div
>
356 Hook
::run(HOOKTYPE_OVERVIEW_CARD
, $stats);
358 require_once "inc/footer.php";