network.html 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519
  1. {% extends "base.html" %}
  2. {% load static %}
  3. {% block head %}
  4. <meta name="nonfiction" content="true">
  5. <script type="text/javascript" src="{% static "javascript/loader.js" %}"></script>
  6. {% endblock %}
  7. {% block title %}{{ network }}{% endblock %}
  8. {% block description %}Overview of {{ network }}{% endblock %}
  9. {% block keywords %}{{ network }},irc network{% endblock %}
  10. {% block keywords-not %}{% endblock %}
  11. {% block content %}
  12. <article class="ui container">
  13. <header class="ui six statistics">
  14. <a class="statistic" href="{% url 'stats:network_channels' network.name %}">
  15. <div class="value">
  16. <i class="hashtag icon"></i> {{ totalchannelstats }}
  17. </div>
  18. <div class="label">
  19. Channels
  20. </div>
  21. </a>
  22. <a class="statistic" href="/">
  23. <div class="value">
  24. <i class="users icon"></i> {{ totaluserstats }}
  25. </div>
  26. <div class="label">
  27. Users
  28. </div>
  29. </a>
  30. <a class="statistic" href="/">
  31. <div class="value">
  32. <i class="comments icon"></i> {{ totalmessagestats }}
  33. </div>
  34. <div class="label">
  35. Messages
  36. </div>
  37. </a>
  38. <a class="statistic" href="/">
  39. <div class="value">
  40. <i class="podcast icon"></i> {{ totalactionstats }}
  41. </div>
  42. <div class="label">
  43. Actions
  44. </div>
  45. </a>
  46. <a class="statistic" href="/">
  47. <div class="value">
  48. <i class="announcement icon"></i> {{ totalnoticestats }}
  49. </div>
  50. <div class="label">
  51. Notices
  52. </div>
  53. </a>
  54. </header>
  55. <section class="ui basic text segment container">
  56. <div class="ui horizontal list">
  57. <div class="ui item">
  58. <div class="ui card">
  59. <div class="content">
  60. <div class="header">
  61. <i class="cloud icon"></i>
  62. {{ network }}
  63. </div>
  64. <div class="meta">
  65. {{ network.host }}:{{ network.port }}
  66. {% if network.use_ssl %}
  67. <div class="right floated content">
  68. <i class="green lock icon" title="Encrypted connection"></i>
  69. </div>
  70. {% endif %}
  71. </div>
  72. </div>
  73. <div class="content">
  74. <div class="ui list">
  75. <div class="item" title="Home channel">
  76. <i class="hashtag icon"></i>
  77. <div class="content">
  78. {{ network.home_channel }}
  79. </div>
  80. </div>
  81. <div class="item" title="Username">
  82. <i class="id card icon"></i>
  83. <div class="content">
  84. {{ network.username }}
  85. {% if network.password %}
  86. <div class="right floated content">
  87. <i class="green privacy icon" title="NickServ password saved"></i>
  88. </div>
  89. {% endif %}
  90. </div>
  91. </div>
  92. </div>
  93. </div>
  94. <div class="ui bottom right attached basic label">
  95. <div class="ui divided horizontal list">
  96. <div class="item" title="Command character">
  97. <i class="terminal icon"></i>
  98. {{ network.command_character }}
  99. </div>
  100. <div class="item" title="Help character">
  101. <i class="help icon"></i>
  102. {{ network.help_character }}
  103. </div>
  104. </div>
  105. </div>
  106. </div>
  107. </div>
  108. <div class="ui item">
  109. <div class="ui basic segment">
  110. <div class="ui two small statistics">
  111. <a class="statistic" href="/">
  112. <div class="value">
  113. <i class="dashboard icon"></i> {{ totalxpstats }}
  114. </div>
  115. <div class="label">
  116. XP
  117. </div>
  118. </a>
  119. <a class="statistic" href="/">
  120. <div class="value">
  121. <i class="money icon"></i> {{ totalcoinstats }}
  122. </div>
  123. <div class="label">
  124. Coin
  125. </div>
  126. </a>
  127. </div>
  128. </div>
  129. </div>
  130. </div>
  131. </section>
  132. </article>
  133. <div class="ui segment">
  134. <article class="ui centered stackable cards">
  135. <script type="text/javascript">
  136. google.charts.load("current", {packages:["corechart"]});
  137. google.charts.setOnLoadCallback(drawChart0);
  138. function drawChart0() {
  139. var data = google.visualization.arrayToDataTable([
  140. ['Channel', 'Messages'],
  141. {% for channel in channelslist.items %}
  142. ['{{ channel.0|escapejs }}', {{ channel.1.messagecount }}],
  143. {% endfor %}
  144. ]);
  145. var options = {
  146. legend: 'none',
  147. pieSliceText: 'label',
  148. height: '275',
  149. pieHole: 0.1,
  150. 'chartArea': {'width': '95%', 'height': '100%'},
  151. pieSliceText: 'label',
  152. };
  153. var chart = new google.visualization.PieChart(document.getElementById('channelmessageschart'));
  154. chart.draw(data, options);
  155. }
  156. </script>
  157. <section class="ui card">
  158. <div title="Messages per channel" class="content">
  159. <div class="header">
  160. <div>
  161. <i class="ui comments outline icon"></i>
  162. /
  163. <i class="ui hashtag icon"></i>
  164. </div>
  165. </div>
  166. </div>
  167. <div class="content">
  168. <div id="channelmessageschart"></div>
  169. </div>
  170. </section>
  171. <script type="text/javascript">
  172. google.charts.load("current", {packages:["corechart"]});
  173. google.charts.setOnLoadCallback(drawChart);
  174. function drawChart() {
  175. var data = google.visualization.arrayToDataTable([
  176. ['Channel', 'Joins'],
  177. {% for channel in channelslist.items %}
  178. ['{{ channel.0|escapejs }}', {{ channel.1.joincount }}],
  179. {% endfor %}
  180. ]);
  181. var options = {
  182. legend: 'none',
  183. pieSliceText: 'label',
  184. height: '275',
  185. pieHole: 0.1,
  186. 'chartArea': {'width': '95%', 'height': '100%'},
  187. pieSliceText: 'label',
  188. };
  189. var chart = new google.visualization.PieChart(document.getElementById('channeljoinschart'));
  190. chart.draw(data, options);
  191. }
  192. </script>
  193. <section class="ui card">
  194. <div title="Joins per channel" class="content">
  195. <div class="header">
  196. <div>
  197. <i class="ui add user icon"></i>
  198. /
  199. <i class="ui hashtag icon"></i>
  200. </div>
  201. </div>
  202. </div>
  203. <div class="content">
  204. <div id="channeljoinschart"></div>
  205. </div>
  206. </section>
  207. {% if kicks %}
  208. <script type="text/javascript">
  209. google.charts.load("current", {packages:["corechart"]});
  210. google.charts.setOnLoadCallback(drawChart1);
  211. function drawChart1() {
  212. var data = google.visualization.arrayToDataTable([
  213. ['Channel', 'Kicks'],
  214. {% for channel in channelslist.items %}
  215. ['{{ channel.0|escapejs }}', {{ channel.1.kickcount }}],
  216. {% endfor %}
  217. ]);
  218. var options = {
  219. legend: 'none',
  220. pieSliceText: 'label',
  221. height: '275',
  222. pieHole: 0.1,
  223. 'chartArea': {'width': '95%', 'height': '100%'},
  224. pieSliceText: 'label',
  225. };
  226. var chart = new google.visualization.PieChart(document.getElementById('channelkickschart'));
  227. chart.draw(data, options);
  228. }
  229. </script>
  230. <section class="ui card">
  231. <div title="Kicks per channel" class="content">
  232. <div class="header">
  233. <div>
  234. <i class="ui remove user icon"></i>
  235. /
  236. <i class="ui hashtag icon"></i>
  237. </div>
  238. </div>
  239. </div>
  240. <div class="content">
  241. <div id="channelkickschart"></div>
  242. </div>
  243. </section>
  244. {% endif %}
  245. <script type="text/javascript">
  246. google.charts.load("current", {packages:["corechart"]});
  247. google.charts.setOnLoadCallback(drawChart2);
  248. function drawChart2() {
  249. var data = google.visualization.arrayToDataTable([
  250. ['User', 'Messages'],
  251. {% for item in userslist.items %}
  252. ['{{ item.0|escapejs }}', {{ item.1.messagecount }}],
  253. {% endfor %}
  254. ]);
  255. var options = {
  256. legend: 'none',
  257. pieSliceText: 'label',
  258. height: '275',
  259. pieHole: 0.1,
  260. 'chartArea': {'width': '95%', 'height': '100%'},
  261. pieSliceText: 'label',
  262. };
  263. var chart = new google.visualization.PieChart(document.getElementById('usermessageschart'));
  264. chart.draw(data, options);
  265. }
  266. </script>
  267. <section class="ui card">
  268. <div title="Messages per user" class="content">
  269. <div class="header">
  270. <div>
  271. <i class="ui comments outline icon"></i>
  272. /
  273. <i class="ui user icon"></i>
  274. </div>
  275. </div>
  276. </div>
  277. <div class="content">
  278. <div id="usermessageschart"></div>
  279. </div>
  280. </section>
  281. <script type="text/javascript">
  282. google.charts.load("current", {packages:["corechart"]});
  283. google.charts.setOnLoadCallback(drawChart3);
  284. function drawChart3() {
  285. var data = google.visualization.arrayToDataTable([
  286. ['User', 'Joins'],
  287. {% for item in userslist.items %}
  288. ['{{ item.0|escapejs }}', {{ item.1.joincount }}],
  289. {% endfor %}
  290. ]);
  291. var options = {
  292. legend: 'none',
  293. pieSliceText: 'label',
  294. height: '275',
  295. pieHole: 0.1,
  296. 'chartArea': {'width': '95%', 'height': '100%'},
  297. pieSliceText: 'label',
  298. };
  299. var chart = new google.visualization.PieChart(document.getElementById('userjoinschart'));
  300. chart.draw(data, options);
  301. }
  302. </script>
  303. <section class="ui card">
  304. <div title="Joins per user" class="content">
  305. <div class="header">
  306. <div>
  307. <i class="ui add user icon"></i>
  308. /
  309. <i class="ui user icon"></i>
  310. </div>
  311. </div>
  312. </div>
  313. <div class="content">
  314. <div id="userjoinschart"></div>
  315. </div>
  316. </section>
  317. {% if kicks %}
  318. <script type="text/javascript">
  319. google.charts.load("current", {packages:["corechart"]});
  320. google.charts.setOnLoadCallback(drawChart4);
  321. function drawChart4() {
  322. var data = google.visualization.arrayToDataTable([
  323. ['User', 'Kicks given'],
  324. {% for item in userslist.items %}
  325. ['{{ item.0|escapejs }}', {{ item.1.kgivencount }}],
  326. {% endfor %}
  327. ]);
  328. var options = {
  329. legend: 'none',
  330. pieSliceText: 'label',
  331. height: '275',
  332. pieHole: 0.1,
  333. 'chartArea': {'width': '95%', 'height': '100%'},
  334. pieSliceText: 'label',
  335. };
  336. var chart = new google.visualization.PieChart(document.getElementById('userksgivenchart'));
  337. chart.draw(data, options);
  338. }
  339. </script>
  340. <section class="ui card">
  341. <div title="Kicks given per user" class="content">
  342. <div class="header">
  343. <div>
  344. <i class="ui sign language icon"></i>
  345. /
  346. <i class="ui user icon"></i>
  347. </div>
  348. </div>
  349. </div>
  350. <div class="content">
  351. <div id="userksgivenchart"></div>
  352. </div>
  353. </section>
  354. <script type="text/javascript">
  355. google.charts.load("current", {packages:["corechart"]});
  356. google.charts.setOnLoadCallback(drawChart5);
  357. function drawChart5() {
  358. var data = google.visualization.arrayToDataTable([
  359. ['User', 'Kicks received'],
  360. {% for item in userslist.items %}
  361. ['{{ item.0|escapejs }}', {{ item.1.kreceivedcount }}],
  362. {% endfor %}
  363. ]);
  364. var options = {
  365. legend: 'none',
  366. pieSliceText: 'label',
  367. height: '275',
  368. pieHole: 0.1,
  369. 'chartArea': {'width': '95%', 'height': '100%'},
  370. pieSliceText: 'label',
  371. };
  372. var chart = new google.visualization.PieChart(document.getElementById('userksreceivedchart'));
  373. chart.draw(data, options);
  374. }
  375. </script>
  376. <section class="ui card">
  377. <div title="Kicks received per user" class="content">
  378. <div class="header">
  379. <div>
  380. <i class="ui remove user icon"></i>
  381. /
  382. <i class="ui user icon"></i>
  383. </div>
  384. </div>
  385. </div>
  386. <div class="content">
  387. <div id="userksreceivedchart"></div>
  388. </div>
  389. </section>
  390. {% endif %}
  391. {% if isxpspent %}
  392. <script type="text/javascript">
  393. google.charts.load("current", {packages:["corechart"]});
  394. google.charts.setOnLoadCallback(drawChart6);
  395. function drawChart6() {
  396. var data = google.visualization.arrayToDataTable([
  397. ['User', 'XP spent'],
  398. {% for item in userslist.items %}
  399. ['{{ item.0|escapejs }}', {{ item.1.xpspent }}],
  400. {% endfor %}
  401. ]);
  402. var options = {
  403. legend: 'none',
  404. pieSliceText: 'label',
  405. height: '275',
  406. pieHole: 0.1,
  407. 'chartArea': {'width': '95%', 'height': '100%'},
  408. pieSliceText: 'label',
  409. };
  410. var chart = new google.visualization.PieChart(document.getElementById('userxpspentchart'));
  411. chart.draw(data, options);
  412. }
  413. </script>
  414. <section class="ui card">
  415. <div title="XP spent per user" class="content">
  416. <div class="header">
  417. <div>
  418. <i class="ui dashboard icon"></i>
  419. /
  420. <i class="ui user icon"></i>
  421. </div>
  422. </div>
  423. </div>
  424. <div class="content">
  425. <div id="userxpspentchart"></div>
  426. </div>
  427. </section>
  428. <script type="text/javascript">
  429. google.charts.load("current", {packages:["corechart"]});
  430. google.charts.setOnLoadCallback(drawChart7);
  431. function drawChart7() {
  432. var data = google.visualization.arrayToDataTable([
  433. ['User', 'Coin'],
  434. {% for item in userslist.items %}
  435. ['{{ item.0|escapejs }}', {{ item.1.coin }}],
  436. {% endfor %}
  437. ]);
  438. var options = {
  439. legend: 'none',
  440. pieSliceText: 'label',
  441. height: '275',
  442. pieHole: 0.1,
  443. 'chartArea': {'width': '95%', 'height': '100%'},
  444. pieSliceText: 'label',
  445. };
  446. var chart = new google.visualization.PieChart(document.getElementById('usercoinschart'));
  447. chart.draw(data, options);
  448. }
  449. </script>
  450. <section class="ui card">
  451. <div title="Coin per user" class="content">
  452. <div class="header">
  453. <div>
  454. <i class="ui money icon"></i>
  455. /
  456. <i class="ui user icon"></i>
  457. </div>
  458. </div>
  459. </div>
  460. <div class="content">
  461. <div id="usercoinschart"></div>
  462. </div>
  463. </section>
  464. {% endif %}
  465. {% if coingiven != 0 and totalcoinspent != 0 %}
  466. <script type="text/javascript">
  467. google.charts.load("current", {packages:["corechart"]});
  468. google.charts.setOnLoadCallback(drawChart8);
  469. function drawChart8() {
  470. var data = google.visualization.arrayToDataTable([
  471. ['Network', 'Coin given'],
  472. {% for network in networkslist.items %}
  473. ['{{ network.0|escapejs }}', {{ network.1.coinspentcount }} / {{ network.1.coingivencount }}],
  474. {% endfor %}
  475. ]);
  476. var options = {
  477. legend: 'none',
  478. pieSliceText: 'label',
  479. height: '275',
  480. pieHole: 0.1,
  481. 'chartArea': {'width': '95%', 'height': '100%'},
  482. pieSliceText: 'label',
  483. };
  484. var chart = new google.visualization.PieChart(document.getElementById('spentvsgivenchart'));
  485. chart.draw(data, options);
  486. }
  487. </script>
  488. <section class="ui card">
  489. <div title="Coin spent vs given" class="content">
  490. <div class="header">
  491. <div>
  492. <i class="icons">
  493. <i class="ui in chart icon">
  494. <i class="ui corner money icon">
  495. </i>
  496. /
  497. <i class="icons">
  498. <i class="ui sent icon">
  499. <i class="ui corner money icon">
  500. </i>
  501. </div>
  502. </div>
  503. </div>
  504. <div class="content">
  505. <div id="spentvsgivenchart"></div>
  506. </div>
  507. </section>
  508. {% endif %}
  509. </article>
  510. </div>
  511. {% endblock %}
  512. {% block breadcrumbs %}
  513. <i class="sitemap icon"></i>
  514. <a class="section" href="{% url 'stats:networks' %}">Networks</a>
  515. <div class="divider"> / </div>
  516. <i class="sitemap icon"></i>
  517. <div class="active section">{{ network }}</div>
  518. {% endblock %}