tBKwtWS 7 年 前
コミット
f1ea016c42
3 ファイル変更117 行追加33 行削除
  1. 1 1
      webgui/stats/models.py
  2. 99 23
      webgui/stats/templates/stats/networks.html
  3. 17 9
      webgui/stats/views.py

+ 1 - 1
webgui/stats/models.py

@@ -21,7 +21,7 @@ class Networks(models.Model):
 
 class Channels(models.Model):
     name = models.CharField(max_length=64)
-    network = models.ForeignKey('Networks', models.DO_NOTHING, db_column='network')
+    network = models.ForeignKey('Networks', models.DO_NOTHING, to_field='name', db_column='network')
     autojoin = models.NullBooleanField()
     join_greeting = models.NullBooleanField()
     statistics_commands = models.NullBooleanField()

+ 99 - 23
webgui/stats/templates/stats/networks.html

@@ -6,12 +6,43 @@
 {% block keywords %}irc networks{% endblock %}
 {% block keywords-not %}{% endblock %}
 {% block content %}
-    <article class="ui container segment">
-        <header class="ui icon header">
-            <i class="sitemap icon"></i>
-            Networks
-        </header>
+    <article class="ui container">
+        
         <section class="ui text container">
+        <div class="ui four statistics">
+            <div class="statistic">
+                <div class="value">
+                    <i class="sitemap icon"></i> {{ networks|length }}
+                </div>
+                <div class="label">
+                    Networks
+                </div>
+            </div>
+            <div class="statistic">
+                <div class="value">
+                    <i class="hashtag icon"></i> {{ channels|length }}
+                </div>
+                <div class="label">
+                    Channels
+                </div>
+            </div>
+            <div class="statistic">
+                <div class="value">
+                    <i class="users icon"></i> {{ users|length }}
+                </div>
+                <div class="label">
+                    Users
+                </div>
+            </div>
+            <div class="statistic">
+                <div class="value">
+                    <i class="comments outline icon"></i> {{ messages|length }}
+                </div>
+                <div class="label">
+                    Messages
+                </div>
+            </div>
+        </div>
             <div class="ui celled selection link list">
                 {% for network in networks %}
                     <a class="item" href="{% url 'stats:network' network.name %}">
@@ -32,29 +63,74 @@
                 {% endfor %}
             </div>
         </section>
+        
         <section>
             <script type="text/javascript" src="{% static "javascript/loader.js" %}"></script>
             <script type="text/javascript">
-              google.charts.load("current", {packages:["corechart"]});
-              google.charts.setOnLoadCallback(drawChart);
-              function drawChart() {
-                var data = google.visualization.arrayToDataTable([
-                  ['Network', 'Users seen'],
-                  {% for network, users in networklist.items %}
-                    ['{{ network }}',     {{ users }}],
-                  {% endfor %}
-                  
-                ]);
+                google.charts.load("current", {packages:["corechart"]});
+                google.charts.setOnLoadCallback(drawChart);
+                function drawChart() {
+                    var data = google.visualization.arrayToDataTable([
+                        ['Network', 'Users'],
+                            {% for network in networklist.items %}
+                                ['{{ network.0 }}',     {{ network.1.messages }}],
+                            {% endfor %}
+                        ]);
+
+                    var options = {
+                        pieHole: 0.4,
+                        legend: 'none',
+                        pieSliceText: 'label',
+                    };
+
+                    var chart = new google.visualization.PieChart(document.getElementById('messageschart'));
+                    chart.draw(data, options);
+                }
+            </script>
+            <script type="text/javascript" src="{% static "javascript/loader.js" %}"></script>
+            <script type="text/javascript">
+            google.charts.load("current", {packages:["corechart"]});
+                google.charts.setOnLoadCallback(drawChart);
+                function drawChart() {
+                    var data = google.visualization.arrayToDataTable([
+                        ['Network', 'Users'],
+                            {% for network in networklist.items %}
+                                ['{{ network.0 }}',     {{ network.1.users }}],
+                            {% endfor %}
+                        ]);
 
-                var options = {
-                  pieHole: 0.4,
-                };
+                    var options = {
+                        pieHole: 0.4,
+                        legend: 'none',
+                        pieSliceText: 'label',
+                    };
 
-                var chart = new google.visualization.PieChart(document.getElementById('donutchart'));
-                chart.draw(data, options);
-              }
+                    var chart = new google.visualization.PieChart(document.getElementById('userschart'));
+                    chart.draw(data, options);
+                }
             </script>
-            <div id="donutchart" style="width: 900px; height: 500px;"></div>
+            
+            <div class="ui cards">
+                <div class="ui card">
+                    <div class="content">
+                        <div class="header">
+                            <i class="users icon"></i>
+                            Messages per network
+                        </div>
+                    </div>
+                    <div class="image" id="messageschart" ></div>
+                </div>
+                <div class="ui card">
+                    <div class="content">
+                        <div class="header">
+                            <i class="users icon"></i>
+                            Users per network
+                        </div>
+                    </div>
+                    
+                    <div class="image" id="userschart" ></div>
+                </div>
+            </div>
 
 
         </section>
@@ -62,5 +138,5 @@
 {% endblock content %}
 {% block breadcrumbs %}
     <i class="sitemap icon"></i>
-    <a class"active section">Networks</a>
+    <a class="active section">Networks</a>
 {% endblock %}

+ 17 - 9
webgui/stats/views.py

@@ -1,23 +1,31 @@
-#from django.shortcuts import render
+from postgres import Postgres
 from django.shortcuts import render, get_object_or_404
-from .models import Networks, Users
-
-# Create your views here.
+from .models import Networks, Channels, Users
 
 def networks(request):
     networks = Networks.objects.all()
+    channels = Channels.objects.all()
     users = Users.objects.all()
+    db = Postgres("postgres://pyRot:4h8q(.@localhost/pyRot")
+    messages = db.all("SELECT * FROM messages")
+    #foo = db.all("SELECT * FROM messages WHERE channel_network='GamerGalaxy'")
+    #print(foo)
+    
     networklist = {}
     for network in networks:
-        networklist[network.name] = 0
-    print(networklist)
+        print(db.all("SELECT messages, actions, notices FROM messages WHERE channel_network='" + str(network) + "'"))
+        networklist[network.name] = {'channels': 0, 'users': 0, 'messages': 0}
     for user in users:
-        networklist[user.network.name] += 1
-    print(networklist)
+        networklist[user.network.name]['users'] += 1
+    for channel in channels:
+        networklist[channel.network.name]['channels'] += 1
     
     context = {
         'networks': networks,
-        'networklist': networklist, 
+        'channels': channels,
+        'users': users,
+        'messages': messages,
+        'networklist': networklist,
     }
     return render(request, 'stats/networks.html', context)