Ver Fonte

better network

tBKwtWS há 7 anos atrás
pai
commit
144db5a8be
2 ficheiros alterados com 175 adições e 141 exclusões
  1. 142 116
      webgui/stats/templates/stats/network.html
  2. 33 25
      webgui/stats/views.py

+ 142 - 116
webgui/stats/templates/stats/network.html

@@ -14,7 +14,7 @@
         <header class="ui six statistics">
             <a class="statistic" href="/">
                 <div class="value">
-                    <i class="hashtag icon"></i> {{ channels|length }}
+                    <i class="hashtag icon"></i> {{ totalchannelstats }}
                 </div>
                 <div class="label">
                     Channels
@@ -22,7 +22,7 @@
             </a>
             <a class="statistic" href="/">
                 <div class="value">
-                    <i class="users icon"></i> {{ users|length }}
+                    <i class="users icon"></i> {{ totaluserstats }}
                 </div>
                 <div class="label">
                     Users
@@ -30,7 +30,7 @@
             </a>
             <a class="statistic" href="/">
                 <div class="value">
-                    <i class="comments icon"></i> {{ totalmessages }}
+                    <i class="comments icon"></i> {{ totalmessagestats }}
                 </div>
                 <div class="label">
                     Messages
@@ -38,7 +38,7 @@
             </a>
             <a class="statistic" href="/">
                 <div class="value">
-                    <i class="cocktail icon"></i> {{ totalactions }}
+                    <i class="cocktail icon"></i> {{ totalactionstats }}
                 </div>
                 <div class="label">
                     Actions
@@ -46,7 +46,7 @@
             </a>
             <a class="statistic" href="/">
                 <div class="value">
-                    <i class="announcement icon"></i> {{ totalnotices }}
+                    <i class="announcement icon"></i> {{ totalnoticestats }}
                 </div>
                 <div class="label">
                     Notices
@@ -54,60 +54,84 @@
             </a>
         </header>
         <section class="ui basic text segment container">
-            <div class="ui basic segment">
-                <div class="ui card">
-                    <div class="content">
-                        <div class="header">
-                            <i class="cloud icon"></i>
-                            {{ network }}
+            <div class="ui horizontal list">
+                <div class="ui item">
+                    <div class="ui card">
+                        <div class="content">
+                            <div class="header">
+                                <i class="cloud icon"></i>
+                                {{ network }}
+                            </div>
+                            <div class="meta">
+                                {{ network.host }}:{{ network.port }}
+                                {% if network.use_ssl %}
+                                    <div class="right floated content">
+                                        <i class="green lock icon" title="Encrypted connection"></i>
+                                    </div>
+                                {% endif %}
+                            </div>
                         </div>
-                        <div class="meta">
-                            {{ network.host }}:{{ network.port }}
-                            {% if network.use_ssl %}
-                                <div class="right floated content">
-                                    <i class="green lock icon" title="Encrypted connection"></i>
+                        <div class="content">
+                            <div class="ui list">
+                                <div class="item" title="Home channel">
+                                    <i class="hashtag icon"></i>
+                                    <div class="content">
+                                        {{ network.home_channel }}
+                                    </div>
                                 </div>
-                            {% endif %}
-                        </div>
-                    </div>
-                    <div class="content">
-                        <div class="ui list">
-                            <div class="item" title="Home channel">
-                                <i class="hashtag icon"></i>
-                                <div class="content">
-                                    {{ network.home_channel }}
+                                <div class="item" title="Username">
+                                    <i class="id card icon"></i>
+                                    <div class="content">
+                                        {{ network.username }}
+                                        {% if network.password %}
+                                            <div class="right floated content">
+                                                <i class="green privacy icon" title="NickServ password saved"></i>
+                                            </div>
+                                        {% endif %}
+                                    </div>
                                 </div>
                             </div>
-                            <div class="item" title="Username">
-                                <i class="id card icon"></i>
-                                <div class="content">
-                                    {{ network.username }}
-                                    {% if network.password %}
-                                        <div class="right floated content">
-                                            <i class="green privacy icon" title="NickServ password saved"></i>
-                                        </div>
-                                    {% endif %}
+                        </div>
+                        <div class="ui bottom right attached basic label">
+                            <div class="ui divided horizontal list">
+                                <div class="item" title="Command character">
+                                    <i class="terminal icon"></i>
+                                    {{ network.command_character }}
+                                </div>
+                                <div class="item" title="Help character">
+                                    <i class="help icon"></i>
+                                    {{ network.help_character }}
                                 </div>
                             </div>
                         </div>
                     </div>
-                    <div class="ui bottom right attached basic label">
-                        <div class="ui divided horizontal list">
-                            <div class="item" title="Command character">
-                                <i class="terminal icon"></i>
-                                {{ network.command_character }}
-                            </div>
-                            <div class="item" title="Help character">
-                                <i class="help icon"></i>
-                                {{ network.help_character }}
-                            </div>
+                </div>
+                <div class="item">
+                    <div class="ui basic segment">
+                        <div class="ui two small statistics">
+                            <a class="statistic" href="/">
+                                <div class="value">
+                                    <i class="dashboard icon"></i> {{ totalxpstats }}
+                                </div>
+                                <div class="label">
+                                    XP
+                                </div>
+                            </a>
+                            <a class="statistic" href="/">
+                                <div class="value">
+                                    <i class="money icon"></i> {{ totalcoinstats }}
+                                </div>
+                                <div class="label">
+                                    Coin
+                                </div>
+                            </a>
                         </div>
                     </div>
                 </div>
             </div>
         </section>
     </article>
-    <div class="ui container">
+    <div class="ui basic segment">
          <article class="ui stackable cards">
             <script type="text/javascript">
                 google.charts.load("current", {packages:["corechart"]});
@@ -365,88 +389,90 @@
                     </div>
                 </section>
             {% endif %}
-            <script type="text/javascript">
-                google.charts.load("current", {packages:["corechart"]});
-                google.charts.setOnLoadCallback(drawChart6);
-                function drawChart6() {
-                    var data = google.visualization.arrayToDataTable([
-                        ['User', 'XP spent'],
-                        {% for item in userslist.items %}
-                            ['{{ item.0|escapejs }}',     {{ item.1.xpspent }}],
-                        {% endfor %}
-                    ]);
-                    var options = {
-                        legend: 'none',
-                        pieSliceText: 'label',
-                        height: '275',
-                        pieHole: 0.1,
-                        'chartArea': {'width': '95%', 'height': '100%'},
-                        pieSliceText: 'label',
-                    };
-                    var chart = new google.visualization.PieChart(document.getElementById('userxpspentchart'));
-                    chart.draw(data, options);
-                }
-            </script>
-            <section class="ui card">
-                <div title="XP spent per user" class="content">
-                    <div class="header">
-                        <div>
-                            <i class="ui dashboard icon"></i>
-                            /
-                            <i class="ui user icon"></i>
+            {% if isxpspent %}
+                <script type="text/javascript">
+                    google.charts.load("current", {packages:["corechart"]});
+                    google.charts.setOnLoadCallback(drawChart6);
+                    function drawChart6() {
+                        var data = google.visualization.arrayToDataTable([
+                            ['User', 'XP spent'],
+                            {% for item in userslist.items %}
+                                ['{{ item.0|escapejs }}',     {{ item.1.xpspent }}],
+                            {% endfor %}
+                        ]);
+                        var options = {
+                            legend: 'none',
+                            pieSliceText: 'label',
+                            height: '275',
+                            pieHole: 0.1,
+                            'chartArea': {'width': '95%', 'height': '100%'},
+                            pieSliceText: 'label',
+                        };
+                        var chart = new google.visualization.PieChart(document.getElementById('userxpspentchart'));
+                        chart.draw(data, options);
+                    }
+                </script>
+                <section class="ui card">
+                    <div title="XP spent per user" class="content">
+                        <div class="header">
+                            <div>
+                                <i class="ui dashboard icon"></i>
+                                /
+                                <i class="ui user icon"></i>
+                            </div>
                         </div>
                     </div>
-                </div>
-                <div class="content">
-                    <div id="userxpspentchart"></div>
-                </div>
-            </section>
-            <script type="text/javascript">
-                google.charts.load("current", {packages:["corechart"]});
-                google.charts.setOnLoadCallback(drawChart7);
-                function drawChart7() {
-                    var data = google.visualization.arrayToDataTable([
-                        ['User', 'Coin'],
-                        {% for item in userslist.items %}
-                            ['{{ item.0|escapejs }}',     {{ item.1.coin }}],
-                        {% endfor %}
-                    ]);
-                    var options = {
-                        legend: 'none',
-                        pieSliceText: 'label',
-                        height: '275',
-                        pieHole: 0.1,
-                        'chartArea': {'width': '95%', 'height': '100%'},
-                        pieSliceText: 'label',
-                        sliceVisibilityThreshold: 10
+                    <div class="content">
+                        <div id="userxpspentchart"></div>
+                    </div>
+                </section>
+                <script type="text/javascript">
+                    google.charts.load("current", {packages:["corechart"]});
+                    google.charts.setOnLoadCallback(drawChart7);
+                    function drawChart7() {
+                        var data = google.visualization.arrayToDataTable([
+                            ['User', 'Coin'],
+                            {% for item in userslist.items %}
+                                ['{{ item.0|escapejs }}',     {{ item.1.coin }}],
+                            {% endfor %}
+                        ]);
+                        var options = {
+                            legend: 'none',
+                            pieSliceText: 'label',
+                            height: '275',
+                            pieHole: 0.1,
+                            'chartArea': {'width': '95%', 'height': '100%'},
+                            pieSliceText: 'label',
+                            sliceVisibilityThreshold: 10
 
-                    };
-                    var chart = new google.visualization.PieChart(document.getElementById('usercoinschart'));
-                    chart.draw(data, options);
-                }
-            </script>
-            <section class="ui card">
-                <div title="Coin per user" class="content">
-                    <div class="header">
-                        <div>
-                            <i class="ui money icon"></i>
-                            /
-                            <i class="ui user icon"></i>
+                        };
+                        var chart = new google.visualization.PieChart(document.getElementById('usercoinschart'));
+                        chart.draw(data, options);
+                    }
+                </script>
+                <section class="ui card">
+                    <div title="Coin per user" class="content">
+                        <div class="header">
+                            <div>
+                                <i class="ui money icon"></i>
+                                /
+                                <i class="ui user icon"></i>
+                            </div>
                         </div>
                     </div>
-                </div>
-                <div class="content">
-                    <div id="usercoinschart"></div>
-                </div>
-            </section>
-            {% if coingiven != 0 %}
+                    <div class="content">
+                        <div id="usercoinschart"></div>
+                    </div>
+                </section>
+            {% endif %}
+            {% if totalcoingiven != 0 %}
                 <script type="text/javascript">
                     google.charts.load("current", {packages:["corechart"]});
                     google.charts.setOnLoadCallback(drawChart8);
                     function drawChart8() {
                         var data = google.visualization.arrayToDataTable([
                             ['Coin spent', 'Coin given'],
-                            ['{{ coinspent }}',     {{ coingiven }}],
+                            ['{{ totalcoinspent }}',     {{ totalcoingiven }}],
                         ]);
                         var options = {
                             legend: 'none',

+ 33 - 25
webgui/stats/views.py

@@ -47,54 +47,62 @@ def network(request, network_name):
     joins = db.all("SELECT channel, \"user\", joins FROM joins WHERE channel_network='" + network_name + "'")
     kicks = db.all("SELECT channel, \"user\", given, received FROM kicks WHERE channel_network='" + network_name + "'")
     
-    totalchannels = convert_units.shorten_number(len(channels))
-    totalusers = convert_units.shorten_number(len(users))
-    totalmessages = 0
-    totalactions = 0
-    totalnotices = 0
+    totalchannelstats = convert_units.shorten_number(len(channels))
+    totaluserstats = convert_units.shorten_number(len(users))
+    totalmessagestats = 0
+    totalactionstats = 0
+    totalnoticestats = 0
     for message in messages:
-        totalmessages += message[2]
-        totalactions += message[3]
-        totalnotices += message[4]
-    totalmessages = convert_units.shorten_number(totalmessages)
-    totalactions = convert_units.shorten_number(totalactions)
-    totalnotices = convert_units.shorten_number(totalnotices)
+        totalmessagestats += message[2]
+        totalactionstats += message[3]
+        totalnoticestats += message[4]
+    totalmessagestats = convert_units.shorten_number(totalmessagestats)
+    totalactionstats = convert_units.shorten_number(totalactionstats)
+    totalnoticestats = convert_units.shorten_number(totalnoticestats)
     channelslist = {}
     for channel in channels:
         channelslist[channel.name] = {'joincount': 0, 'messagecount': 0, 'kickcount': 0}
     userslist = {}
-    coinspent = 0
-    coingiven = 0
+    totalcoinspent = 0
+    totalcoingiven = 0
+    totalxpstats = 0
+    totalcoinstats = 0
+    isxpspent = False
     for user in users:
         userslist[user.name] = {'joincount': 0, 'messagecount': 0, 'kgivencount': 0, 'kreceivedcount': 0, 'xpspent': user.xp_spent, 'coin': user.coin}
-        coinspent += user.coin_spent - user.coin_given
-        coingiven += user.coin_given
+        totalcoinspent += user.coin_spent - user.coin_given
+        totalcoingiven += user.coin_given
+        if not user.xp_spent == 0:
+            isxpspent = True
+        totalxpstats += user.xp_spent
+        totalcoinstats += user.coin
     for record in joins:
         channelslist[record[0]]['joincount'] += 1
         userslist[record[1]]['joincount'] += 1
-    totalmessages = 0
     for record in  messages:
         channelslist[record[0]]['messagecount'] += record[2] + record[3] + record[4]
         userslist[record[1]]['messagecount'] += record[2] + record[3] + record[4]
-        totalmessages += record[2] + record[3] + record[4]
-    totalmessages = convert_units.shorten_number(totalmessages)
     for record in  kicks:
         channelslist[record[0]]['kickcount'] += record[2]
         userslist[record[1]]['kgivencount'] += record[2]
         userslist[record[1]]['kreceivedcount'] += record[3]
-    
-    print(channelslist)
+        
     context = {
         'network': network,
         'channels': channels,
         'users': users,
-        'totalmessages': totalmessages,
-        'totalactions': totalactions,
-        'totalnotices': totalnotices,
+        'totalchannelstats': totalchannelstats,
+        'totaluserstats': totaluserstats,
+        'totalmessagestats': totalmessagestats,
+        'totalactionstats': totalactionstats,
+        'totalnoticestats': totalnoticestats,
         'channelslist': channelslist,
         'userslist': userslist,
-        'coinspent': coinspent, 
-        'coingiven': coingiven,
+        'totalcoinspent': totalcoinspent, 
+        'totalcoingiven': totalcoingiven,
         'kicks': kicks,
+        'isxpspent': isxpspent,
+        'totalxpstats': totalxpstats,
+        'totalcoinstats': totalcoinstats,
     }
     return render(request, 'stats/network.html', context)