]> jfr.im git - irc/unrealircd/unrealircd-webpanel.git/blob - index.php
Merge branch 'main' of github.com:unrealircd/unrealircd-webpanel
[irc/unrealircd/unrealircd-webpanel.git] / index.php
1 <?php
2 require_once "common.php";
3 require_once "header.php";
4 require_once "connection.php";
5
6 $stats = $rpc->stats()->get();
7 ?>
8 <div class="row ml-0">
9 <h2>Network Overview</h2><div data-toggle="tooltip" data-placement="top" title="The stats on this page are updated in real-time"
10 class="card text-center row font-weight-bold"
11 style="margin-left:5%;height:26px;width:60px;background-color:red;color:white">
12 <small style="margin-left:-40px;padding-top:3px;margin-right:-50px"></small>LIVE</div>
13 </div>
14 <?php
15 $array_of_stats = (array)$stats;
16
17 /* What if someone wants to add their own stats... */
18 Hook::run(HOOKTYPE_PRE_OVERVIEW_CARD, $array_of_stats);
19
20 /* This makes sure that a plugin which called the parameter
21 * by reference can add/update the stats for display here.
22 */
23 $stats = (object) $array_of_stats;
24
25 $userlist = [];
26 Hook::run(HOOKTYPE_GET_USER_LIST, $userlist);
27 $num_of_panel_admins = count($userlist);
28
29 ?>
30 <style>
31 .card {
32 min-height: 100%;
33 }
34 </style>
35 <div class="container card-container" style="margin-left:40px;margin-top:30px">
36
37 <div class="row mt-3">
38 <div class="col-sm mb-3">
39 <div class="card text-center">
40 <div class="card-header bg-success text-white">
41 <div class="row">
42 <div class="col">
43 <i class="fa fa-users fa-3x"></i><span class="position-absolute badge rounded-pill badge-warning">
44 <?php echo "Record: ".$stats->user->record; ?>
45 </span>
46 </div>
47 <div class="col">
48 <h3 id="stats_user_total" class="display-4"><?php echo $stats->user->total; ?></h3>
49 </div>
50 </div>
51 </div>
52 <div class="card-body">
53 <div class="row">
54 <div class="col">
55 <h6>Users Online</h6>
56 </div>
57 <div class="col"> <a class="btn btn-primary" href="<?php echo get_config("base_url"); ?>users">View</a></div>
58 </div>
59 </div>
60 </div>
61
62
63 </div>
64 <div class="col-sm mb-3">
65 <div class="card text-center">
66 <div class="card-header bg-primary text-white">
67 <div class="row">
68 <div class="col">
69 <i class="fa fa-hashtag fa-3x"></i>
70 </div>
71 <div class="col">
72 <h3 id="stats_channel_total" class="display-4"><?php echo $stats->channel->total; ?></h3>
73 </div>
74 </div>
75 </div>
76 <div class="card-body">
77 <div class="row">
78 <div class="col">
79 <h6>Channels</h6>
80 </div>
81 <div class="col"><a class="btn btn-primary" href="<?php echo get_config("base_url"); ?>channels">View</a></div>
82 </div>
83 </div>
84 </div>
85 </div>
86 <div class="col-sm mb-3">
87 <div class="card text-center">
88 <div class="card-header bg-warning">
89 <div class="row">
90 <div class="col">
91 <i class="fa fa-shield-halved fa-3x"></i>
92 </div>
93 <div class="col">
94 <h3 id="stats_oper_total" class="display-4"><?php echo $stats->user->oper; ?></h3>
95 </div>
96 </div>
97 </div>
98 <div class="card-body">
99 <div class="row">
100 <div class="col">
101 <h6>Opers</h6>
102 </div>
103 <div class="col"><a class="btn btn-primary" href="<?php echo get_config("base_url")."users/?operonly"; ?>">View</a></div>
104 </div>
105 </div>
106 </div>
107 </div>
108
109 <div class="col-sm mb-3">
110 <div class="card text-center">
111 <div class="card-header bg-secondary text-white">
112 <div class="row">
113 <div class="col">
114 <i class="fa fa-network-wired fa-3x"></i>
115 </div>
116 <div class="col">
117 <h3 id="stats_server_total" class="display-4"><?php echo $stats->server->total; ?></h3>
118 </div>
119 </div>
120 </div>
121 <div class="card-body">
122 <div class="row">
123 <div class="col">
124 <h6>Servers</h6>
125 </div>
126 <div class="col"> <a class="btn btn-primary" href="<?php echo get_config("base_url"); ?>servers">View</a></div>
127 </div>
128 </div>
129 </div>
130 </div>
131 </div>
132 </div>
133 <div class="container card-container" style="margin-left:40px;margin-top:30px">
134
135 <div class="row">
136 <div class="col-sm mb-3">
137 <div class="card text-center">
138 <div class="card-header bg-danger text-white">
139 <div class="row">
140 <div class="col">
141 <i class="fa fa-ban fa-3x"></i>
142 </div>
143 <div class="col">
144 <h3 id="num_server_bans" class="display-4"><?php echo $stats->server_ban->server_ban; ?></h3>
145 </div>
146 </div>
147 </div>
148 <div class="card-body">
149 <div class="row">
150 <div class="col">
151 <h6>Server Bans</h6>
152 </div>
153 <div class="col"> <a class="btn btn-primary" href="<?php echo get_config("base_url"); ?>server-bans">View</a></div>
154 </div>
155 </div>
156 </div>
157 </div>
158 <div class="col-sm mb-3">
159 <div class="card text-center">
160 <div class="card-header bg-secondary text-white">
161 <div class="row">
162 <div class="col">
163 <i class="fa fa-filter fa-3x"></i>
164 </div>
165 <div class="col">
166 <h3 id="num_spamfilter_entries" class="display-4"><?php echo $stats->server_ban->spamfilter; ?></h3>
167 </div>
168 </div>
169 </div>
170 <div class="card-body">
171 <div class="row">
172 <div class="col">
173 <h6>Spamfilter</h6>
174 </div>
175 <div class="col"> <a class="btn btn-primary" href="<?php echo get_config("base_url"); ?>spamfilter.php">View</a></div>
176 </div>
177 </div>
178 </div>
179 </div>
180 <div class="col-sm mb-3">
181 <div class="card text-center">
182 <div class="card-header bg-primary text-white">
183 <div class="row">
184 <div class="col">
185 <i class="fa fa-door-open fa-3x"></i>
186 </div>
187 <div class="col">
188 <h3 id="num_ban_exceptions" class="display-4"><?php echo $stats->server_ban->server_ban_exception; ?></h3>
189 </div>
190 </div>
191 </div>
192
193 <div class="card-body">
194 <div class="row">
195 <div class="col">
196 <h6>Server Ban Exceptions</h6>
197 </div>
198 <div class="col"> <a class="btn btn-primary" href="<?php echo get_config("base_url"); ?>server-bans/ban-exceptions.php">View</a></div>
199 </div>
200 </div>
201 </div>
202 </div>
203 <?php
204 if ($stats->server->ulined) {
205 $bg = "bg-success";
206 $tooltip = "Users / Servers";
207 }
208 else
209 $bg = "bg-warning";
210 ?>
211 <div class="col-sm mb-3">
212 <div class="card text-center">
213 <div class="card-header <?php echo $bg; ?> text-white">
214 <div class="row">
215 <div class="col">
216 <i class="fa fa-database fa-3x"> </i>
217 </div>
218 <div class="col">
219 <span data-toggle="tooltip" title="<?php echo $tooltip; ?>" style="border-bottom: 1px dotted #000000">
220 <h3 id="stats_uline_total" class="display-4"><?php echo $stats->user->ulined; ?>/<?php echo $stats->server->ulined; ?></h3>
221 </div>
222 </div>
223 </div>
224 <div class="card-body">
225 <div class="row">
226 <div class="col">
227 <h6>Services Online</h6>
228 </div>
229 <div class="col"> <a class="btn btn-primary" href="<?php echo get_config("base_url")."users/?servicesonly"; ?>">View</a></div>
230 </div>
231 </div>
232
233 </div>
234 </div>
235 </div>
236 </div>
237
238
239 <script>
240 function updateStats(e)
241 {
242 var data;
243 try {
244 data = JSON.parse(e.data);
245 } catch(e) {
246 return;
247 }
248 document.getElementById("stats_user_total").innerHTML = data.user.total;
249 document.getElementById("stats_channel_total").innerHTML = data.channel.total;
250 document.getElementById("stats_oper_total").innerHTML = data.user.oper;
251 document.getElementById("stats_server_total").innerHTML = data.server.total;
252 document.getElementById("num_server_bans").innerHTML = data.server_ban.server_ban;
253 document.getElementById("num_spamfilter_entries").innerHTML = data.server_ban.spamfilter;
254 document.getElementById("num_ban_exceptions").innerHTML = data.server_ban.server_ban_exception;
255 document.getElementById("stats_uline_total").innerHTML = data.user.ulined + "/" + data.server.ulined;
256 }
257 function initStats()
258 {
259 if (!!window.EventSource) {
260 var source = new EventSource('api/overview.php');
261 source.addEventListener('message', updateStats, false);
262 }
263 }
264 initStats();
265 //setInterval(updateStats, 1000); // Update stats every second
266 // ^ commented out but may want to restart initStats() when connection is lost.
267
268
269 window.addEventListener('resize', function() {
270 var containers = document.querySelectorAll('.card-container');
271 var width = window.innerWidth;
272 if (width < 768)
273 {
274 containers.forEach((container) => {
275 container.removeAttribute('style');
276
277 });
278 } else
279 {
280 containers.forEach((container) => {
281 container.style.marginLeft = "40px";
282 container.style.marginTop = "30px";
283
284 });
285 }
286 });
287 </script>
288
289 <div class="container card-container card-container" style="margin-left:40px;margin-top:10px">
290
291 <div class="row">
292 <div class="col-sm-3">
293 <div class="card text-center">
294 <div class="card-header bg-success text-white">
295 <div class="row">
296 <div class="col">
297 <i class="fa fa-lock-open fa-3x"></i>
298 </div>
299 <div class="col">
300 <h3 class="display-4"><?php echo $num_of_panel_admins; ?></h3>
301 </div>
302 </div>
303 </div>
304 <div class="card-body">
305 <div class="row">
306 <div class="col">
307 <h6>Panel Accounts</h6>
308 </div>
309 <div class="col"> <a class="btn btn-primary" href="<?php echo get_config("base_url"); ?>settings">View</a></div>
310 </div>
311 </div>
312 </div>
313 </div>
314 </div>
315 </div>
316 <?php
317
318 Hook::run(HOOKTYPE_OVERVIEW_CARD, $stats);
319
320 require_once "footer.php";