tBKwtWS 7 years ago
parent
commit
568d9ba302

+ 119 - 1
webgui/stats/models.py

@@ -1,3 +1,121 @@
 from django.db import models
 
-# Create your models here.
+class Networks(models.Model):
+    name = models.CharField(unique=True, max_length=40)
+    host = models.CharField(unique=True, max_length=60)
+    port = models.IntegerField(blank=True, null=True)
+    use_ssl = models.NullBooleanField()
+    nickname = models.CharField(max_length=31, blank=True, null=True)
+    username = models.CharField(max_length=31, blank=True, null=True)
+    password = models.CharField(max_length=31, blank=True, null=True)
+    home_channel = models.CharField(max_length=64)
+    command_character = models.CharField(max_length=1, blank=True, null=True)
+    help_character = models.CharField(max_length=1, blank=True, null=True)
+
+    class Meta:
+        managed = False
+        db_table = 'networks'
+    
+    def __str__(self):
+        return self.name
+
+class Channels(models.Model):
+    name = models.CharField(max_length=64)
+    network = models.ForeignKey('Networks', models.DO_NOTHING, db_column='network')
+    autojoin = models.NullBooleanField()
+    join_greeting = models.NullBooleanField()
+    statistics_commands = models.NullBooleanField()
+    games = models.NullBooleanField()
+    aggressiveness = models.CharField(max_length=20, blank=True, null=True)
+    chat = models.NullBooleanField()
+    key = models.CharField(max_length=32, blank=True, null=True)
+    last_lame = models.DateTimeField(blank=True, null=True)
+
+    class Meta:
+        managed = False
+        db_table = 'channels'
+        unique_together = (('name', 'network'),)
+    
+    def __str__(self):
+        return self.name
+
+class Users(models.Model):
+    name = models.CharField(max_length=31)
+    network = models.ForeignKey(Networks, models.DO_NOTHING, db_column='network')
+    last_act_type = models.CharField(max_length=20, blank=True, null=True)
+    last_act_datetime = models.DateTimeField(blank=True, null=True)
+    last_act_channel = models.ForeignKey(Channels, models.DO_NOTHING, db_column='last_act_channel', blank=True, null=True)
+    last_act_channel_network = models.CharField(max_length=40, blank=True, null=True)
+    last_act = models.CharField(max_length=510, blank=True, null=True)
+    last_act_auxiliary = models.CharField(max_length=255, blank=True, null=True)
+    away = models.NullBooleanField()
+    away_reason = models.CharField(max_length=510, blank=True, null=True)
+    xp_spent = models.IntegerField(blank=True, null=True)
+    level = models.IntegerField(blank=True, null=True)
+    coin = models.DecimalField(max_digits=65535, decimal_places=65535, blank=True, null=True)
+    coin_spent = models.DecimalField(max_digits=65535, decimal_places=65535, blank=True, null=True)
+    coin_given = models.DecimalField(max_digits=65535, decimal_places=65535, blank=True, null=True)
+    ap_spent = models.DecimalField(max_digits=65535, decimal_places=65535, blank=True, null=True)
+
+    class Meta:
+        managed = False
+        db_table = 'users'
+        unique_together = (('name', 'network'),)
+    
+    def __str__(self):
+        return self.name
+
+class Joins(models.Model):
+    channel = models.ForeignKey(Channels, models.DO_NOTHING, db_column='channel')
+    channel_network = models.CharField(max_length=40)
+    user = models.ForeignKey('Users', models.DO_NOTHING, db_column='user')
+    user_network = models.CharField(max_length=40)
+    joins = models.IntegerField(blank=True, null=True)
+    stopgreet = models.NullBooleanField()
+
+    class Meta:
+        managed = False
+        db_table = 'joins'
+        unique_together = (('channel', 'channel_network', 'user', 'user_network'),)
+    
+    def __str__(self):
+        return self.channel_network + "_" + self.channel + "_" + self.user
+
+class Kicks(models.Model):
+    channel = models.ForeignKey(Channels, models.DO_NOTHING, db_column='channel')
+    channel_network = models.CharField(max_length=40)
+    user = models.ForeignKey('Users', models.DO_NOTHING, db_column='user')
+    user_network = models.CharField(max_length=40)
+    given = models.IntegerField(blank=True, null=True)
+    received = models.IntegerField(blank=True, null=True)
+
+    class Meta:
+        managed = False
+        db_table = 'kicks'
+        unique_together = (('channel', 'channel_network', 'user', 'user_network'),)
+    
+    def __str__(self):
+        return self.channel_network + "_" + self.channel + "_" + self.user
+
+class Messages(models.Model):
+    channel = models.ForeignKey(Channels, models.DO_NOTHING, db_column='channel')
+    channel_network = models.CharField(max_length=40)
+    user = models.ForeignKey('Users', models.DO_NOTHING, db_column='user')
+    user_network = models.CharField(max_length=40)
+    messages = models.IntegerField(blank=True, null=True)
+    messages_words = models.BigIntegerField(blank=True, null=True)
+    messages_characters = models.BigIntegerField(blank=True, null=True)
+    actions = models.IntegerField(blank=True, null=True)
+    actions_words = models.BigIntegerField(blank=True, null=True)
+    actions_characters = models.BigIntegerField(blank=True, null=True)
+    notices = models.IntegerField(blank=True, null=True)
+    notices_words = models.BigIntegerField(blank=True, null=True)
+    notices_characters = models.BigIntegerField(blank=True, null=True)
+
+    class Meta:
+        managed = False
+        db_table = 'messages'
+        unique_together = (('channel', 'channel_network', 'user', 'user_network'),)
+    
+    def __str__(self):
+        return self.channel_network + "_" + self.channel + "_" + self.user

+ 18 - 0
webgui/stats/templates/base.html

@@ -0,0 +1,18 @@
+{% load static %}
+<html>
+    <link rel="stylesheet" type="text/css" href="{% static "semantic/dist/semantic.min.css" %}">
+    <script
+      src="https://code.jquery.com/jquery-3.1.1.min.js"
+      integrity="sha256-hVVnYaiADRTO2PzUGmuLJr8BLUSjGIZsDYGmIJLv2b8="
+      crossorigin="anonymous"></script>
+    <script src="{% static "semantic/dist/semantic.min.js" %}"></script>
+    <head>
+        <title>{% block title %}{% endblock %}</title>
+    </head>
+    <body>
+        <div class="ui menu"></div>
+            
+            {% block content %}{% endblock %}
+        </div>
+    </body>
+</html>

+ 30 - 0
webgui/stats/templates/stats/index.html

@@ -0,0 +1,30 @@
+{% extends "base.html" %}
+{% block content %}
+    <div class="ui container">
+        <h2 class="ui icon header">
+            <i class="server icon"></i>
+            Servers
+        </h2>
+        <div class="ui text container">
+        <div class="ui celled selection link list">
+            {% for network in networks %}
+                <a class="item" href="{% url 'stats:network' network.name %}">
+                    <div class="right floated content">
+                        {% if network.password %}<i class="privacy icon"></i>{% endif %}
+                        {% if network.use_ssl %}<i class="protect icon"></i>{% endif %}
+                    </div>
+                    <i class="middle aligned server icon"></i>
+                    <div class="content">
+                        <div class="header">
+                            <div class="content" href="{% url 'stats:network' network.name %}">{{ network.name }}</div>
+                        </div>
+                        <div class="description">
+                            {{ network.host }}:{{ network.port }}
+                        </div>
+                    </div>
+                </a>
+            {% endfor %}
+        </div>
+        </div>
+    </div>
+{% endblock content %}

+ 3 - 0
webgui/stats/templates/stats/network.html

@@ -0,0 +1,3 @@
+<h1>
+    {{ network.name }}
+</h1>

+ 4 - 2
webgui/stats/urls.py

@@ -1,8 +1,10 @@
 from django.urls import path
 
+
 from . import views
 
+app_name = 'stats'
 urlpatterns = [
-    path('', views.index, name='index'),
-    path('<int:foo_id>/', views.foo, name='foo'),
+    path('networks', views.networks, name='networks'),
+    path('network/<str:network_name>/', views.network, name='network'),
 ]

+ 12 - 5
webgui/stats/views.py

@@ -1,10 +1,17 @@
 #from django.shortcuts import render
-from django.http import HttpResponse
+from django.shortcuts import render, get_object_or_404
+from .models import Networks
 
 # Create your views here.
 
-def index(request):
-    return HttpResponse("Hello, world. You're at the polls index.")
+def networks(request):
+    networks = Networks.objects.all()
+    context = {
+        'networks': networks, 
+    }
+    return render(request, 'stats/index.html', context)
 
-def foo(request, foo_id):
-    return HttpResponse("You're looking at question %s." % foo_id)
+def network(request, network_name):
+    network = get_object_or_404(Networks, name=network_name)
+    context = {'network': network}
+    return render(request, 'stats/network.html', context)

+ 38 - 0
webgui/webgui/routers.py

@@ -0,0 +1,38 @@
+class BotRouter:
+    """
+    A router to control all database operations on models in the
+    auth application.
+    """
+    def db_for_read(self, model, **hints):
+        """
+        Attempts to read auth models go to auth_db.
+        """
+        if model._meta.app_label == 'stats':
+            return 'bot_db'
+        return None
+
+#    def db_for_write(self, model, **hints):
+#        """
+#        Attempts to write auth models go to auth_db.
+#        """
+#        if model._meta.app_label == 'auth':
+#            return 'auth_db'
+#        return None
+#
+#    def allow_relation(self, obj1, obj2, **hints):
+#        """
+#        Allow relations if a model in the auth app is involved.
+#        """
+#        if obj1._meta.app_label == 'auth' or \
+#           obj2._meta.app_label == 'auth':
+#           return True
+#        return None
+#
+#    def allow_migrate(self, db, app_label, model_name=None, **hints):
+#        """
+#        Make sure the auth app only appears in the 'auth_db'
+#        database.
+#        """
+#        if app_label == 'auth':
+#            return db == 'auth_db'
+#        return None

+ 16 - 2
webgui/webgui/settings.py

@@ -37,6 +37,7 @@ INSTALLED_APPS = [
     'django.contrib.sessions',
     'django.contrib.messages',
     'django.contrib.staticfiles',
+    'stats',
 ]
 
 MIDDLEWARE = [
@@ -81,9 +82,17 @@ DATABASES = {
         'PASSWORD': '4h8q(.',
         'HOST': '127.0.0.1',
         'PORT': '5432',
-    }
+    }, 
+    'bot_db': {
+        'ENGINE': 'django.db.backends.postgresql',
+        'NAME': 'pyRot',
+        'USER': 'pyRotsite',
+        'PASSWORD': '4h8q(.',
+        'HOST': '127.0.0.1',
+        'PORT': '5432',
+    }, 
 }
-
+DATABASE_ROUTERS = ['webgui.routers.BotRouter']
 
 # Password validation
 # https://docs.djangoproject.com/en/2.0/ref/settings/#auth-password-validators
@@ -122,3 +131,8 @@ USE_TZ = True
 # https://docs.djangoproject.com/en/2.0/howto/static-files/
 
 STATIC_URL = '/static/'
+
+STATICFILES_FINDERS = ( 
+    'django.contrib.staticfiles.finders.FileSystemFinder',
+    'django.contrib.staticfiles.finders.AppDirectoriesFinder',
+)