· 6 years ago · Nov 08, 2019, 07:52 PM
1<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.3.1/css/bootstrap.min.css"
2 integrity="sha256-YLGeXaapI0/5IgZopewRJcFXomhRMlYYjugPLSyNjTY=" crossorigin="anonymous" />
3 <link rel="stylesheet" href="/css/app.css" />
4
5 <script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.8.0/Chart.bundle.min.js"
6 integrity="sha256-xKeoJ50pzbUGkpQxDYHD7o7hxe0LaOGeguUidbq6vis=" crossorigin="anonymous"></script>
7</head>
8<script src="https://cdn.jsdelivr.net/npm/apexcharts"> </script>
9<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.8.0/Chart.min.css"
10 integrity="sha256-aa0xaJgmK/X74WM224KMQeNQC2xYKwlAt08oZqjeF0E=" crossorigin="anonymous" />
11
12<script src="https://unpkg.com/@ungap/url-search-params@0.1.2/min.js"></script>
13<script src="https://raw.githubusercontent.com/ericdrowell/concrete/master/build/concrete.min.js"></script>
14
15<head>
16<body>
17
18
19 <nav id="navbar-mount">
20
21 <nav class="navbar" role="navigation" aria-label="main navigation">
22 <div class="navbar-brand columns is-vcentered">
23 <div class="column navbar-burger-column">
24 <a
25 role="button"
26 class="navbar-burger burger"
27 aria-label="menu"
28 aria-expanded="false"
29 ><span aria-hidden="true"></span><span aria-hidden="true"></span
30 ><span aria-hidden="true"></span
31 ></a>
32 </div>
33 <div class="column navbar-logo-column">
34 <a class="navbar-item" href="/"
35 ><img
36 class="navbar-logo"
37 src="https://i.redd.it/yb8x941uhjsz.png"
38 /></a>
39 </div>
40 <div class="column navbar-auth-column">
41 <div class="is-hidden-desktop">
42 <div class="navbar-item"><div class="buttons"></div></div>
43 </div>
44 </div>
45 </div>
46 <div class="navbar-menu">
47
48 <div class="navbar-start">
49
50 <div class="divider"></div>
51
52
53 <% if (logged) { %>
54
55 <a id="chartz" class="navbar-item" href="/charts" title="Charts">Charts</a>
56 <a class="navbar-item" href="/faq" title="Frequently Asked Questions">FAQ</a>
57<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
58<div class="NavbarLayout__Center-qahyit-1 jVDcnC"><div class="View-sc-1c57lgy-1 sc-eTyWNx gsWbce View__StyledDiv-sc-1c57lgy-0 eidRwp"><div class="sc-ccXozh ejJExg search__SearchForm-z7gv3j-21 gQqWYu"><input id="searchbar" class="search__SearchFormPlaceholder-z7gv3j-22 iHDzmT" placeholder="Bot ID"></input><div class="View-sc-1c57lgy-1 sc-jOBXIr gSTUWG View__StyledDiv-sc-1c57lgy-0 hxNeHv"><div class="ripples sc-dHIava bsAcWs"> <button class="ripples sc-dHIava bsAcWs" onclick='loadAll("<%=user.id%>/" + document.getElementById("searchbar").value)'type="submit" ><i class="fa fa-search"></i></button></div></div></div></div></div>
59
60 </div>
61<div class="buttons"><img class="image navbar-avatar" alt="pfp" src="https://cdn2.iconfinder.com/data/icons/ios-7-icons/50/user_male2-512.png">
62 
63<a class="button is-info is-outlined" title="user"><%=user.username%></a>
64
65<a class="button is-info is-outlined" href="/discord/logout" title="Log Out">Log Out</a></div>
66 </div>
67 <div class="navbar-item"><div class="buttons"></div></div>
68
69 </nav>
70 </nav>
71
72 </script>
73 <div class="container-fluid">
74 
75 
76
77<h1 class="title"><img class="image navbar-avatar" width="48" height="19" alt="pfp" src="https://ferranesi.com/wp-content/uploads/2016/01/icon-people.png"> Popularity & Ram </h1>
78 <!-- These aggregate via sum hence skew and need own box for each time period -->
79 <div class="row">
80
81 <div class="col-6">
82<center>Servers  
83<a class="button is-info is-outlined" onClick="javascript:captureCanvas('serversChart')"><img width="30" height="30"src="https://icon-library.net/images/white-video-camera-icon/white-video-camera-icon-9.jpg" /></a>
84<a class="button is-info is-outlined" href="#" class="button" id="btn-download-server" download="servers.png"><img width="60" height="60"src="https://studiobozzetto.com/wp-content/themes/studiobozzetto/img/download.png" /></a>
85
86</center>
87 <canvas id="serversChart"></canvas>
88 </div>
89 <div class="col-6">
90 <center>Channels  
91<a class="button is-info is-outlined" onClick="javascript:captureCanvas('channelsChart')"><img width="30" height="30"src="https://icon-library.net/images/white-video-camera-icon/white-video-camera-icon-9.jpg" /></a>
92<a class="button is-info is-outlined" href="#" class="button" id="btn-download-channels" download="channels.png"><img width="60" height="60"src="https://studiobozzetto.com/wp-content/themes/studiobozzetto/img/download.png" /></a>
93
94</center>
95 <canvas id="channelsChart"></canvas>
96 </div>
97 </div>
98 <div class="row">
99 <div class="col-6">
100 <center>Users  
101<a class="button is-info is-outlined" onClick="javascript:captureCanvas('usersChart')"><img width="30" height="30"src="https://icon-library.net/images/white-video-camera-icon/white-video-camera-icon-9.jpg" /></a>
102<a class="button is-info is-outlined" href="#" class="button" id="btn-download-user" download="users.png"><img width="60" height="60"src="https://studiobozzetto.com/wp-content/themes/studiobozzetto/img/download.png" /></a>
103</center>
104 <canvas id="usersChart"></canvas>
105 </div>
106 <div class="col-6">
107 <center>Used Ram  
108<a class="button is-info is-outlined" onClick="javascript:captureCanvas('ramUsedChart')"><img width="30" height="30"src="https://icon-library.net/images/white-video-camera-icon/white-video-camera-icon-9.jpg" /></a>
109<a class="button is-info is-outlined" href="#" class="button" id="btn-download-ram" download="usedram.png"><img width="60" height="60"src="https://studiobozzetto.com/wp-content/themes/studiobozzetto/img/download.png" /></a>
110</center>
111 <canvas id="ramUsedChart"></canvas>
112 </div>
113 </div>
114 <div class="row">
115<hr>
116 
117 
118
119<h1 class="title"><img class="image navbar-avatar" width="48" height="19" alt="pfp" src="http://www.gandrllc.com/wp-content/uploads/2014/06/MD-Icon.png"> Message Activity Tracking</h1> <!-- These aggregate via sum hence skew and need own box for each time period -->
120 <div class="col-12" id="sentRecvMessage"><div class="row">
121<div class="col-6">
122<center>Sent Messages  
123<a class="button is-info is-outlined" onClick="javascript:captureCanvas('sentMsgChart')"><img width="30" height="30"src="https://icon-library.net/images/white-video-camera-icon/white-video-camera-icon-9.jpg" /></a>
124<a class="button is-info is-outlined" href="#" class="button" id="btn-download-smsg" download="sentmessages.png"><img width="60" height="60"src="https://studiobozzetto.com/wp-content/themes/studiobozzetto/img/download.png" /></a>
125</center>
126<canvas id="sentMsgChart"></canvas>
127</div>
128
129<div class="col-6"> <center>Received Messages  
130<a class="button is-info is-outlined" onClick="javascript:captureCanvas('receivedMsgChart')"><img width="30" height="30"src="https://icon-library.net/images/white-video-camera-icon/white-video-camera-icon-9.jpg" /></a>
131<a class="button is-info is-outlined" href="#" class="button" id="btn-download-recmsg" download="receivedmessages.png"><img width="60" height="60"src="https://studiobozzetto.com/wp-content/themes/studiobozzetto/img/download.png" /></a>
132</center>
133<canvas id="receivedMsgChart"></canvas>
134</div>
135
136</div></div>
137 </div>
138 </div>
139
140 <script>
141
142//RAM DOWNLOAD
143var button11 = document.getElementById('btn-download-ram');
144button11.addEventListener('click', function (e) {
145var canvas = document.getElementById("ramUsedChart");
146
147 var dataURL = canvas.toDataURL('image/png');
148 button11ref = dataURL;
149});
150
151//USER DOWNLOAD
152var button1 = document.getElementById('btn-download-user');
153
154button1.addEventListener('click', function (e) {
155var canvas = document.getElementById("usersChart");
156
157 var dataURL = canvas.toDataURL('image/png');
158 button1href = dataURL;
159});
160
161//RECEIVED MESSAGES DOWNLOAD
162var button12 = document.getElementById('btn-download-recmsg');
163
164button12.addEventListener('click', function (e) {
165var canvas = document.getElementById("receivedMsgChart");
166
167 var dataURL = canvas.toDataURL('image/png');
168 button12ref = dataURL;
169});
170//SENT MESSAGES DOWNLOAD
171var button13 = document.getElementById('btn-download-smsg');
172
173button13.addEventListener('click', function (e) {
174var canvas = document.getElementById("sentMsgChart");
175
176 var dataURL = canvas.toDataURL('image/png');
177 button13ref = dataURL;
178});
179//SERVER DOWNLOAD
180var button14 = document.getElementById('btn-download-server');
181
182button14.addEventListener('click', function (e) {
183var canvas = document.getElementById("serversChart");
184
185 var dataURL = canvas.toDataURL('image/png');
186 button14ref = dataURL;
187});
188
189//CHANNELS DOWNLOAD
190var button15 = document.getElementById('btn-download-channels');
191
192button15.addEventListener('click', function (e) {
193var canvas = document.getElementById("channelsChart");
194
195 var dataURL = canvas.toDataURL('image/png');
196 button15.href = dataURL;
197});
198
199// CAPTURES CANVAS
200function captureCanvas(idtag){
201
202var canvas = document.getElementById(idtag);
203var img = canvas.toDataURL("image/png");
204
205
206window.location = img
207}
208function download(data, filename, type) {
209 var file = new Blob([data], {type: type});
210 if (window.navigator.msSaveOrOpenBlob) // IE10+
211 window.navigator.msSaveOrOpenBlob(file, filename);
212 else { // Others
213 var a = document.createElement("a"),
214 url = URL.createObjectURL(file);
215 a.href = url;
216 a.download = filename;
217 document.body.appendChild(a);
218 a.click();
219 setTimeout(function() {
220 document.body.removeChild(a);
221 window.URL.revokeObjectURL(url);
222 }, 0);
223 }
224}
225
226
227
228
229function dlCanvas(id) {
230var scene = new Concrete.Scene();
231
232var canvas = document.getElementById(id);
233canvas.download({
234 fileName: id + '.png'
235});
236
237}; function loadChart(data, htmlTag, label, options = {}) {
238 if (!options.unit) {
239 options.unit = "day"
240 }
241 var ctx = document.getElementById(htmlTag).getContext('2d');
242
243 var chartOptions = {
244 // The type of chart we want to create
245 type: 'line',
246 // The data for our dataset
247 data: {
248 datasets: [{
249 label: label,
250 backgroundColor: 'rgb(249, 66, 58)',
251 borderColor: 'rgb(0, 0, 0)',
252 data: data
253 }]
254 },
255 // Configuration options go here
256 options: {
257 scales: {
258 xAxes: [{
259 type: "time",
260 time: {
261 unit: options.unit
262 }
263 }],
264 yAxes: [{
265 ticks: {
266 beginAtZero: false
267 }
268 }]
269 }
270 }
271 }
272 if (options.isByte) {
273 chartOptions.options.scales.yAxes[0].ticks.callback = function (value,index) {
274 return bytesFormatter(value, true);
275 }
276 }
277 var chart = new Chart(ctx, chartOptions);
278
279
280// ============
281// var options11 = {
282 // chart: {
283 // height: 350,
284 // type: 'area',
285 // },
286 // dataLabels: {
287 // enabled: false
288 // },
289 // stroke: {
290 // curve: 'smooth'
291 // },
292 // series: [{
293 // name: label,
294 // data: data
295 // }
296
297 // xaxis: {
298 // type: 'time',
299 // categories: options.unit
300 // },
301 // tooltip: {
302 // x: {
303 // format: 'dd/MM/yy HH:mm'
304 // },
305 // }
306 // }
307
308 // var chart11 = new ApexCharts(
309 // document.querySelector("#"+htmlTag),
310 // options11
311 // );
312
313 // chart11.render();
314// ==================
315 }
316 function loadAll(id) {
317 const timeBlocks = ["minute", "hour", "week"]
318 // getlatest as well
319 httpGetAsync("https://api.chewey-bot.ga/analytics/getday/" + id, function (raw) {
320 try {
321 raw = JSON.parse(raw)
322 } catch (e) {
323 return alert("Get all failed (You might be rate limited try again in 30 seconds)", e)
324 }
325 var serversData = []
326 var channelsData = []
327 var usersData = []
328 var ramUsedData = []
329 for (var x = 0; x < raw.length; x++) {
330 var receivedData = []
331 var sentData = []
332 var element = raw[x];
333 if (element.length) {
334
335 for (var z = 0; z < element.length; z++) {
336 var subPeriod = element[z];
337 serversData.push({
338 x: subPeriod.created,
339 y: subPeriod.servers
340 })
341 channelsData.push({
342 x: subPeriod.created,
343 y: subPeriod.channels
344 })
345 receivedData.push({
346 x: subPeriod.created,
347 y: subPeriod.received_messages
348 })
349 sentData.push({
350 x: subPeriod.created,
351 y: subPeriod.sent_messages
352 })
353 usersData.push({
354 x: subPeriod.created,
355 y: subPeriod.users
356 })
357 ramUsedData.push({
358 x: subPeriod.created,
359 y: subPeriod.ram_used
360 })
361 }
362 // avoid showing empty/small slots
363 if (receivedData.length > 3 || x == 0) { //x==0 is first 10minute period
364 setTimeout(function (x, receivedData, sentData) {
365 // DOM update cycle needed for the cavas elements to exist
366 loadChart(receivedData, "receivedMsgChart" + x, "Received Messages",
367 timeBlocks[x])
368 loadChart(sentData, "sentMsgChart" + x, "Sent Messages", timeBlocks[x])
369 }, 10, x, receivedData, sentData);
370 }
371 }
372 }
373
374 dateArrSort(serversData)
375 dateArrSort(channelsData)
376 dateArrSort(usersData)
377 dateArrSort(ramUsedData)
378 loadChart(serversData, "serversChart", "Servers", )
379 loadChart(channelsData, "channelsChart", "Channels")
380 loadChart(usersData, "usersChart", "Users")
381 loadChart(ramUsedData, "ramUsedChart", "Ram used", {
382 isByte: true
383 })
384 document.getElementById("statsdate").innerText="Statistics were received on "+sentData[0].x
385
386
387 })
388 }
389 function dateArrSort(arr) {
390 // Old aggregation didnt compress in order (Only does somthing in older data)
391 arr.sort(function (a, b) {
392 // https://stackoverflow.com/a/10124053
393 // Turn your strings into dates, and then subtract them
394 // to get a value that is either negative, positive, or zero.
395 return new Date(b.x) - new Date(a.x);
396 });
397 }
398 function bytesFormatter(bytes, label) {
399 // Use future ram used formatter
400 // http://jsfiddle.net/XfwZJ/2/
401 if (bytes == 0) return '';
402 var s = ['bytes', 'KB', 'MB', 'GB', 'TB', 'PB'];
403 var e = Math.floor(Math.log(bytes) / Math.log(1024));
404 var value = ((bytes / Math.pow(1024, Math.floor(e))).toFixed(2));
405 e = (e < 0) ? (-e) : e;
406 if (label) value += ' ' + s[e];
407 return value;
408 }
409 function httpGetAsync(theUrl, callback) {
410 var xmlHttp = new XMLHttpRequest();
411 xmlHttp.onreadystatechange = function () {
412 if (xmlHttp.readyState == 4) {
413 if (xmlHttp.status == 200) {
414 callback(xmlHttp.responseText);
415 } else {
416 window.location.replace("403")
417 }
418 }
419 }
420 xmlHttp.open("GET", theUrl, true); // true for asynchronous
421 xmlHttp.send(null);
422 }
423 // loadAll("220625669032247296")
424// AUTO REFRESH SCRIPT: CAUSES TOO MUCH REQUESTS
425//setInterval(function(){
426//loadAll("<%=user.id%>")
427//}, 100001)
428
429 loadAll("<%=user.id%>")
430
431 </script>
432<center>
433<div class="description-text is-size-5" id="statsdate">
434 Statistics were received on
435 </div>
436</center>
437
438</body>
439 <% } else { %>
440 <nav id="navbar-mount"><nav class="navbar" role="navigation" aria-label="main navigation"><div class="navbar-brand columns is-vcentered"><div class="column navbar-burger-column"><a role="button" class="navbar-burger burger" aria-label="menu" aria-expanded="false"><span aria-hidden="true"></span><span aria-hidden="true"></span><span aria-hidden="true"></span></a></div><div class="column navbar-logo-column"><a id="logo" class="navbar-item" href="https://analyticexpressjs.glitch.me">
441<img class="navbar-logo" src="https://i.redd.it/yb8x941uhjsz.png"></a>
442</div><div class="column navbar-auth-column"><div class="is-hidden-desktop"><div class="navbar-item"><div class="buttons"></div></div></div></div></div><div class="navbar-menu"><div class="navbar-start"><div class="divider"></div><a class="navbar-item is-hidden-desktop" href="https:///account" title="Manage Server">Manage Server</a><a class="navbar-item" href="charts.html" title="Charts">Charts</a></div></div></div><div class="navbar-item"><div class="buttons"></div></div></div></nav></nav>
443
444 </div></nav></nav>
445
446</nav></nav>
447<center><div class="NotFound__Wrapper-sc-1f5a9xw-0 fZRrYq"><div class="NotFound__ImageWrapper-sc-1f5a9xw-1 kJvlHY"><img src="data:image/png;base64,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"></div><div class="NotFound__TextWrapper-sc-1f5a9xw-2 eFipLt"><h3>404 ERROR</h3><p> Uh oh! We can’t find what you’re looking for! Please login!</p><div><div class="NotFound__Button-sc-1f5a9xw-3 iXmxOp"><svg class="sc-iQNlJl kLwRtB Icon__Svg-bm7alh-0 gxqpBj">
448<use xlink:href="#blitz-chevron-left"></use></svg> <center><a class="button is-info is-outlined" href="/discord/login" title="Donate">Log In</a></div></center>  
449 
450 
451 
452<center><article class="tile is-child">
453
454 <a class="title faq-title">Why won't it work?</a>
455 <div class="content faq-answer">
456 <ul>
457
458
459 <li>
460 <div class="list-marker">1</div> To get an api token, send a dm to the bot on
461 the <a href="https://discord.gg/aQN9dDZ" target="_blank" title=" discord">Chewey bot api server</a>
462 </li>
463 <div class="list-marker">2</div> Dm the bot the following message and claim the api key.
464 <code>!claim-api-key</code> then enjoy.
465 </li>
466 <li>
467 <div class="list-marker">3</div> Be sure to be the owner of the api token you are using.
468 </li>
469 <li>
470 <div class="list-marker">4</div> Post your bot stats using the
471 <a href="https://www.npmjs.com/package/discord-bot-analytics" target="_blank" title=" discord">npm package.</a>
472 <ul>
473
474
475 </div>
476 </article></center>
477
478</div></div></div>
479</center>
480 <% } %>
481
482
483 <link rel="stylesheet" href="/css/app.css" />
484</html>