mirror of
https://github.com/evennia/evennia.git
synced 2026-04-01 13:37:17 +02:00
204 lines
6.9 KiB
Python
204 lines
6.9 KiB
Python
"""
|
|
Commands that are generally staff-oriented that show information regarding
|
|
the server instance.
|
|
"""
|
|
import os
|
|
import django, twisted
|
|
from django.contrib.auth.models import User
|
|
from src.objects.models import ObjectDB
|
|
from src.scripts.models import ScriptDB
|
|
from src.utils import utils
|
|
from src.utils import gametime
|
|
from game.gamesrc.commands.default.muxcommand import MuxCommand
|
|
from src.commands import cmdsethandler
|
|
|
|
class CmdVersion(MuxCommand):
|
|
"""
|
|
@version - game version
|
|
|
|
Usage:
|
|
@version
|
|
|
|
Display the game version info.
|
|
"""
|
|
|
|
key = "@version"
|
|
help_category = "System"
|
|
|
|
def func(self):
|
|
"Show the version"
|
|
version = utils.get_evennia_version()
|
|
string = "-"*50 +"\n\r"
|
|
string += " Evennia %s\n\r" % version
|
|
string += " (Django %s, " % (django.get_version())
|
|
string += " Twisted %s)\n\r" % (twisted.version.short())
|
|
string += "-"*50
|
|
self.caller.msg(string)
|
|
|
|
class CmdTime(MuxCommand):
|
|
"""
|
|
@time
|
|
|
|
Usage:
|
|
@time
|
|
|
|
Server local time.
|
|
"""
|
|
key = "@time"
|
|
aliases = "@uptime"
|
|
permissions = "cmd:time"
|
|
help_category = "System"
|
|
|
|
def func(self):
|
|
"Show times."
|
|
|
|
string2 = "\nCurrent server uptime:\n %i yrs, %i months, "
|
|
string2 += "%i weeks, %i days, %i hours, %i minutes and %i secs."
|
|
string2 = string2 % gametime.uptime(format=True)
|
|
|
|
string3 = "\nTotal running time (gametime x %g):" % (1.0/gametime.TIMEFACTOR)
|
|
string3 += "\n %i yrs, %i months, %i weeks, %i days, "
|
|
string3 += "%i hours, %i minutes and %i secs."
|
|
string3 = string3 % gametime.runtime(format=True)
|
|
#print "runtime:", gametime.runtime()
|
|
string1 = "\nTotal game time (realtime x %g):" % (gametime.TIMEFACTOR)
|
|
string1 += "\n %i yrs, %i months, %i weeks, %i days, "
|
|
string1 += "%i hours, %i minutes and %i secs."
|
|
string1 = string1 % (gametime.gametime(format=True))
|
|
#print "gametime:", gametime.gametime()
|
|
string4 = ""
|
|
if not utils.host_os_is('nt'):
|
|
# os.getloadavg() is not available on Windows.
|
|
loadavg = os.getloadavg()
|
|
string4 = "\n Server load (1 min) : %g%%" % (100 * loadavg[0])
|
|
string = "%s%s%s%s" % (string2, string3, string1, string4)
|
|
self.caller.msg(string)
|
|
|
|
class CmdList(MuxCommand):
|
|
"""
|
|
@list - list info
|
|
|
|
Usage:
|
|
@list commands | process
|
|
|
|
Shows game related information depending
|
|
on which argument is given.
|
|
"""
|
|
key = "@list"
|
|
permissions = "cmd:list"
|
|
help_category = "System"
|
|
|
|
def func(self):
|
|
"Show list."
|
|
|
|
caller = self.caller
|
|
if not self.args:
|
|
caller.msg("Usage: @list commands|process")
|
|
return
|
|
|
|
string = ""
|
|
if self.arglist[0] in ["com", "command", "commands"]:
|
|
string = "Command sets currently in cache:"
|
|
for cmdset in cmdsethandler.get_cached_cmdsets():
|
|
string += "\n %s" % cmdset
|
|
elif self.arglist[0] in ["proc","process"]:
|
|
if utils.host_os_is('nt'):
|
|
string = "Feature not available on Windows."
|
|
else:
|
|
import resource
|
|
loadavg = os.getloadavg()
|
|
string = "\n Server load (1 min) : %.2f " % loadavg[0]
|
|
psize = resource.getpagesize()
|
|
rusage = resource.getrusage(resource.RUSAGE_SELF)
|
|
string += "\n Process ID: %10d" % os.getpid()
|
|
string += "\n Bytes per page: %10d" % psize
|
|
string += "\n Time used: %10d, user: %g" % (rusage[0], rusage[1])
|
|
string += "\n Integral mem: %10d shared, %10d, private, %10d stack " % \
|
|
(rusage[3], rusage[4], rusage[5])
|
|
string += "\n Max res mem: %10d pages %10d bytes" % \
|
|
(rusage[2],rusage[2] * psize)
|
|
string += "\n Page faults: %10d hard %10d soft %10d swapouts " % \
|
|
(rusage[7], rusage[6], rusage[8])
|
|
string += "\n Disk I/O: %10d reads %10d writes " % \
|
|
(rusage[9], rusage[10])
|
|
string += "\n Network I/O: %10d in %10d out " % \
|
|
(rusage[12], rusage[11])
|
|
string += "\n Context swi: %10d vol %10d forced %10d sigs " % \
|
|
(rusage[14], rusage[15], rusage[13])
|
|
else:
|
|
string = "Not a valid option."
|
|
# send info
|
|
caller.msg(string)
|
|
|
|
class CmdPs(MuxCommand):
|
|
"""
|
|
@ps - list processes
|
|
Usage
|
|
@ps
|
|
|
|
Shows the process/event table.
|
|
"""
|
|
key = "@ps"
|
|
permissions = "cmd:ps"
|
|
help_category = "System"
|
|
|
|
def func(self):
|
|
"run the function."
|
|
|
|
string = "Processes Scheduled:\n-- PID [time/interval] [repeats] description --"
|
|
all_scripts = ScriptDB.objects.get_all_scripts()
|
|
repeat_scripts = [script for script in all_scripts if script.interval]
|
|
nrepeat_scripts = [script for script in all_scripts if script not in repeat_scripts]
|
|
|
|
string = "\nNon-timed scripts:"
|
|
for script in nrepeat_scripts:
|
|
string += "\n %i %s %s" % (script.id, script.key, script.desc)
|
|
|
|
string += "\n\nTimed scripts:"
|
|
for script in repeat_scripts:
|
|
repeats = "[inf] "
|
|
if script.repeats:
|
|
repeats = "[%i] " % script.repeats
|
|
string += "\n %i %s [%d/%d] %s%s" % (script.id, script.key,
|
|
script.time_until_next_repeat(),
|
|
script.interval,
|
|
repeats,
|
|
script.desc)
|
|
string += "\nTotals: %d interval scripts" % len(all_scripts)
|
|
self.caller.msg(string)
|
|
|
|
class CmdStats(MuxCommand):
|
|
"""
|
|
@stats - show object stats
|
|
|
|
Usage:
|
|
@stats
|
|
|
|
Shows stats about the database.
|
|
"""
|
|
|
|
key = "@stats"
|
|
aliases = "@db"
|
|
permissions = "cmd:stats"
|
|
help_category = "System"
|
|
|
|
def func(self):
|
|
"Show all stats"
|
|
|
|
# get counts for all typeclasses
|
|
stats_dict = ObjectDB.objects.object_totals()
|
|
# get all objects
|
|
stats_allobj = ObjectDB.objects.all().count()
|
|
# get all rooms
|
|
stats_room = ObjectDB.objects.filter(db_location=None).count()
|
|
# get all players
|
|
stats_users = User.objects.all().count()
|
|
|
|
string = "-"*60
|
|
string += "\n Number of users: %i" % stats_users
|
|
string += "\n Total number of objects: %i" % stats_allobj
|
|
string += "\n Number of rooms (location==None): %i" % stats_room
|
|
string += "\n Object type statistics:"
|
|
for path, num in stats_dict.items():
|
|
string += "\n %i - %s" % (num, path)
|
|
self.caller.msg(string)
|