Browse Source
add a "checkenv" command to manage.py that runs a few tests on the setup of mumble-django, to prevent configuration problems like bug #30.
Natenom/support-murmur-13-1446181288462
add a "checkenv" command to manage.py that runs a few tests on the setup of mumble-django, to prevent configuration problems like bug #30.
Natenom/support-murmur-13-1446181288462
Michael Ziegler
15 years ago
4 changed files with 110 additions and 10 deletions
-
8pyweb/mumble/management/__init__.py
-
0pyweb/mumble/management/commands/__init__.py
-
100pyweb/mumble/management/commands/checkenv.py
-
12pyweb/mumble/management/server_detect.py
@ -0,0 +1,8 @@ |
|||
# -*- coding: utf-8 -*- |
|||
|
|||
from server_detect import find_existing_instances |
|||
from django.db.models import signals |
|||
from mumble import models |
|||
|
|||
signals.post_syncdb.connect( find_existing_instances, sender=models ); |
|||
|
@ -0,0 +1,100 @@ |
|||
# -*- coding: utf-8 -*- |
|||
|
|||
import os |
|||
|
|||
from django.core.management.base import BaseCommand |
|||
from django.contrib.auth.models import User |
|||
from django.contrib.sites.models import Site |
|||
from django.conf import settings |
|||
|
|||
from mumble.models import Mumble |
|||
|
|||
class TestFailed( Exception ): |
|||
pass; |
|||
|
|||
class Command( BaseCommand ): |
|||
def handle(self, **options): |
|||
self.check_dbase(); |
|||
self.check_sites(); |
|||
self.check_mumbles(); |
|||
self.check_admins(); |
|||
|
|||
|
|||
def check_dbase( self ): |
|||
print "Checking database access...", |
|||
if settings.DATABASE_ENGINE == "sqlite3": |
|||
if not os.path.exists( settings.DATABASE_NAME ): |
|||
raise TestFailed( "database does not exist. Have you run syncdb yet?" ); |
|||
|
|||
else: |
|||
statinfo = os.stat( settings.DATABASE_NAME ); |
|||
|
|||
if statinfo.st_uid == 0: |
|||
raise TestFailed( "" |
|||
"the database file belongs to root. This is most certainly not what " |
|||
"you want because it will prevent your web server from being able " |
|||
"to write to it. Please check." ); |
|||
|
|||
elif not os.access( settings.DATABASE_NAME, os.W_OK ): |
|||
raise TestFailed( "database file is not writable." ); |
|||
|
|||
else: |
|||
print "[ OK ]"; |
|||
|
|||
else: |
|||
print "not using sqlite, so I can't check."; |
|||
|
|||
|
|||
def check_sites( self ): |
|||
print "Checking URL configuration...", |
|||
|
|||
site = Site.objects.get_current(); |
|||
if site.domain == 'example.com': |
|||
print( "The domain is configured as example.com, which is the default but does not make sense." |
|||
"Please enter the domain where Mumble-Django is reachable." ); |
|||
|
|||
site.domain = raw_input( "> " ).strip(); |
|||
site.save(); |
|||
|
|||
else: |
|||
print site.domain, "[ OK ]"; |
|||
|
|||
|
|||
def check_admins( self ): |
|||
print "Checking if an Admin user exists...", |
|||
|
|||
for user in User.objects.all(): |
|||
if user.is_superuser: |
|||
print "[ OK ]"; |
|||
return; |
|||
|
|||
raise TestFailed( "" |
|||
"No admin user exists, so you won't be able to log in to the admin system. You " |
|||
"should run `./manage.py createsuperuser` to create one." ); |
|||
|
|||
|
|||
def check_mumbles( self ): |
|||
print "Checking Murmur instances...", |
|||
|
|||
mm = Mumble.objects.all(); |
|||
|
|||
if mm.count() == 0: |
|||
raise TestFailed( "" |
|||
"no Mumble servers are configured, you might want to run " |
|||
"`./manage.py syncdb` to run an auto detection." ); |
|||
|
|||
else: |
|||
for mumble in mm: |
|||
try: |
|||
ctl = mumble.ctl; |
|||
except Exception, err: |
|||
raise TestFailed( |
|||
"Connecting to Murmur `%s` (%s) failed: %s" % ( mumble.name, mumble.dbus, err ) |
|||
); |
|||
print "[ OK ]"; |
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
Write
Preview
Loading…
Cancel
Save
Reference in new issue