コード例 #1
0
    def func(self):
        """
        Get all connected players by polling session.
        """

        player = self.player
        session_list = SESSIONS.get_sessions()

        session_list = sorted(session_list, key=lambda o: o.player.key)

        if self.cmdstring == "doing":
            show_session_data = False
        else:
            show_session_data = player.check_permstring(
                "Immortals") or player.check_permstring("Wizards")

        nplayers = (SESSIONS.player_count())
        if show_session_data:
            # privileged info
            table = prettytable.PrettyTable([
                "{wPlayer Name", "{wOn for", "{wIdle", "{wPuppeting", "{wRoom",
                "{wCmds", "{wProtocol", "{wHost"
            ])
            for session in session_list:
                if not session.logged_in: continue
                delta_cmd = time.time() - session.cmd_last_visible
                delta_conn = time.time() - session.conn_time
                player = session.get_player()
                puppet = session.get_puppet()
                location = puppet.location.key if puppet else "None"
                table.add_row([
                    utils.crop(player.name, width=25),
                    utils.time_format(delta_conn, 0),
                    utils.time_format(delta_cmd, 1),
                    utils.crop(puppet.key if puppet else "None", width=25),
                    utils.crop(location, width=25), session.cmd_total,
                    session.protocol_key,
                    isinstance(session.address, tuple) and session.address[0]
                    or session.address
                ])
        else:
            # unprivileged
            table = prettytable.PrettyTable(
                ["{wPlayer name", "{wOn for", "{wIdle"])
            for session in session_list:
                if not session.logged_in:
                    continue
                delta_cmd = time.time() - session.cmd_last_visible
                delta_conn = time.time() - session.conn_time
                player = session.get_player()
                table.add_row([
                    utils.crop(player.key, width=25),
                    utils.time_format(delta_conn, 0),
                    utils.time_format(delta_cmd, 1)
                ])

        isone = nplayers == 1
        string = "{wPlayers:{n\n%s\n%s unique account%s logged in." % (
            table, "One" if isone else nplayers, "" if isone else "s")
        self.msg(string)
コード例 #2
0
ファイル: general.py プロジェクト: GhostshipSoftware/avaloria
    def func(self):
        "Create the nickname"

        caller = self.caller
        switches = self.switches
        nicks = caller.nicks.get(return_obj=True)

        if 'list' in switches:
            table = prettytable.PrettyTable(
                ["{wNickType", "{wNickname", "{wTranslates-to"])
            for nick in utils.make_iter(nicks):
                table.add_row(
                    [nick.db_category, nick.db_key, nick.db_strvalue])
            string = "{wDefined Nicks:{n\n%s" % table
            caller.msg(string)
            return
        if 'clearall' in switches:
            caller.nicks.clear()
            caller.msg("Cleared all aliases.")
            return
        if not self.args or not self.lhs:
            caller.msg("Usage: nick[/switches] nickname = [realname]")
            return
        nick = self.lhs
        real = self.rhs

        if real == nick:
            caller.msg(
                "No point in setting nick same as the string to replace...")
            return

        # check so we have a suitable nick type
        if not any(True for switch in switches
                   if switch in ("object", "player", "inputline")):
            switches = ["inputline"]
        string = ""
        for switch in switches:
            oldnick = caller.nicks.get(key=nick, category=switch)
            #oldnick = Nick.objects.filter(db_obj=caller.dbobj, db_nick__iexact=nick, db_type__iexact=switch)
            if not real:
                # removal of nick
                if oldnick:
                    # clear the alias
                    string += "\nNick '%s' (= '%s') was cleared." % (nick,
                                                                     oldnick)
                    caller.nicks.delete(nick, category=switch)
                else:
                    string += "\nNo nick '%s' found, so it could not be removed." % nick
            else:
                # creating new nick
                if oldnick:
                    string += "\nNick %s changed from '%s' to '%s'." % (
                        nick, oldnick, real)
                else:
                    string += "\nNick set: '%s' = '%s'." % (nick, real)
                caller.nicks.add(nick, real, category=switch)
        caller.msg(string)
コード例 #3
0
ファイル: system.py プロジェクト: lulinqing/evennia
 def func(self):
     "Show server time data in a table."
     table = prettytable.PrettyTable(["{wserver time statistic","{wtime"])
     table.align = 'l'
     table.add_row(["Current server uptime", utils.time_format(gametime.uptime(), 3)])
     table.add_row(["Total server running time", utils.time_format(gametime.runtime(), 2)])
     table.add_row(["Total in-game time (realtime x %g" % (gametime.TIMEFACTOR), utils.time_format(gametime.gametime(), 2)])
     table.add_row(["Server time stamp", datetime.datetime.now()])
     self.caller.msg(str(table))
コード例 #4
0
ファイル: general.py プロジェクト: totalgit/evennia
 def func(self):
     "check inventory"
     items = self.caller.contents
     if not items:
         string = "You are not carrying anything."
     else:
         table = prettytable.PrettyTable(["name", "desc"])
         table.header = False
         table.border = False
         for item in items:
             table.add_row(["{C%s{n" % item.name, item.db.desc and item.db.desc or ""])
         string = "{wYou are carrying:\n%s" % table
     self.caller.msg(string)
コード例 #5
0
def list_bans(banlist):
    """
    Helper function to display a list of active bans. Input argument
    is the banlist read into the two commands @ban and @unban below.
    """
    if not banlist:
        return "No active bans were found."

    table = prettytable.PrettyTable(["{wid", "{wname/ip", "{wdate", "{wreason"])
    for inum, ban in enumerate(banlist):
        table.add_row([str(inum + 1),
                       ban[0] and ban[0] or ban[1],
                       ban[3], ban[4]])
    string = "{wActive bans:{n\n%s" % table
    return string
コード例 #6
0
    def func(self):
        "Implement function"
        player = self.player
        sessions = player.get_all_sessions()

        table = prettytable.PrettyTable([
            "{wsessid", "{wprotocol", "{whost", "{wpuppet/character",
            "{wlocation"
        ])
        for sess in sorted(sessions, key=lambda x: x.sessid):
            sessid = sess.sessid
            char = player.get_puppet(sessid)
            table.add_row([
                str(sessid),
                str(sess.protocol_key),
                type(sess.address) == tuple and sess.address[0]
                or sess.address, char and str(char) or "None",
                char and str(char.location) or "N/A"
            ])
        string = "{wYour current session(s):{n\n%s" % table
        self.msg(string)
コード例 #7
0
    def func(self):
        "Show list."

        caller = self.caller

        # display active processes

        if not utils.host_os_is('posix'):
            string = "Process listings are only available under Linux/Unix."
            caller.msg(string)
            return

        global _resource, _idmapper
        if not _resource:
            import resource as _resource
        if not _idmapper:
            from src.utils.idmapper import base as _idmapper

        import resource
        loadavg = os.getloadavg()
        psize = _resource.getpagesize()
        pid = os.getpid()
        rmem = float(
            os.popen('ps -p %d -o %s | tail -1' %
                     (pid, "rss")).read()) / 1000.0  # resident memory
        vmem = float(
            os.popen('ps -p %d -o %s | tail -1' %
                     (pid, "vsz")).read()) / 1000.0  # virtual memory
        pmem = float(
            os.popen(
                'ps -p %d -o %s | tail -1' %
                (pid, "%mem")).read())  # percent of resident memory to total
        rusage = resource.getrusage(resource.RUSAGE_SELF)

        if "mem" in self.switches:
            caller.msg(
                "Memory usage: RMEM: {w%g{n MB (%g%%), VMEM (res+swap+cache): {w%g{n MB."
                % (rmem, pmem, vmem))
            return

        if "flushmem" in self.switches:
            caller.msg(
                "Flushed object idmapper cache. Python garbage collector recovered memory from %i objects."
                % _idmapper.flush_cache())
            return

        # load table
        loadtable = prettytable.PrettyTable(["property", "statistic"])
        loadtable.align = 'l'
        loadtable.add_row(["Server load (1 min)", "%g" % loadavg[0]])
        loadtable.add_row(["Process ID", "%g" % pid]),
        loadtable.add_row(["Bytes per page", "%g " % psize])
        loadtable.add_row([
            "CPU time used (total)",
            "%s (%gs)" % (utils.time_format(rusage.ru_utime), rusage.ru_utime)
        ])
        loadtable.add_row([
            "CPU time used (user)",
            "%s (%gs)" % (utils.time_format(rusage.ru_stime), rusage.ru_stime)
        ])
        loadtable.add_row(["Memory usage", "%g MB (%g%%)" % (rmem, pmem)])
        loadtable.add_row([
            "Virtual address space\n {x(resident+swap+caching){n",
            "%g MB" % vmem
        ])
        loadtable.add_row([
            "Page faults",
            "%g hard,  %g soft, %g swapouts" %
            (rusage.ru_majflt, rusage.ru_minflt, rusage.ru_nswap)
        ])
        loadtable.add_row([
            "Disk I/O",
            "%g reads, %g writes" % (rusage.ru_inblock, rusage.ru_oublock)
        ])
        loadtable.add_row([
            "Network I/O",
            "%g in, %g out" % (rusage.ru_msgrcv, rusage.ru_msgsnd)
        ])
        loadtable.add_row([
            "Context switching",
            "%g vol, %g forced, %g signals" %
            (rusage.ru_nvcsw, rusage.ru_nivcsw, rusage.ru_nsignals)
        ])

        string = "{wServer CPU and Memory load:{n\n%s" % loadtable

        if not is_pypy:
            # Cache size measurements are not available on PyPy
            # because it lacks sys.getsizeof

            # object cache size
            total_num, cachedict = _idmapper.cache_size()
            sorted_cache = sorted(
                [(key, num) for key, num in cachedict.items() if num > 0],
                key=lambda tup: tup[1],
                reverse=True)
            memtable = prettytable.PrettyTable(
                ["entity name", "number", "idmapper %%"])
            memtable.align = 'l'
            for tup in sorted_cache:
                memtable.add_row([
                    tup[0],
                    "%i" % tup[1],
                    "%.2f" % (float(tup[1]) / total_num * 100)
                ])

            # get sizes of other caches
            string += "\n{w Entity idmapper cache:{n %i items\n%s" % (
                total_num, memtable)

        caller.msg(string)
コード例 #8
0
    def func(self):
        "Implement command"

        caller = self.caller
        switches = self.switches

        if switches and switches[0] not in ("list", "start", "stop", "delete"):
            caller.msg(
                "Usage: @service/<list|start|stop|delete> [servicename]")
            return

        # get all services
        sessions = caller.sessions
        if not sessions:
            return
        service_collection = SESSIONS.server.services

        if not switches or switches[0] == "list":
            # Just display the list of installed services and their
            # status, then exit.
            table = prettytable.PrettyTable(
                ["{wService{n (use @services/start|stop|delete)", "{wstatus"])
            table.align = 'l'
            for service in service_collection.services:
                table.add_row([
                    service.name, service.running and "{gRunning"
                    or "{rNot Running"
                ])
            caller.msg(str(table))
            return

        # Get the service to start / stop

        try:
            service = service_collection.getServiceNamed(self.args)
        except Exception:
            string = 'Invalid service name. This command is case-sensitive. '
            string += 'See @service/list for valid service name (enter the full name exactly).'
            caller.msg(string)
            return

        if switches[0] in ("stop", "delete"):
            # Stopping/killing a service gracefully closes it and disconnects
            # any connections (if applicable).

            delmode = switches[0] == "delete"
            if not service.running:
                caller.msg('That service is not currently running.')
                return
            if service.name[:7] == 'Evennia':
                if delmode:
                    caller.msg(
                        "You cannot remove a core Evennia service (named 'Evennia***')."
                    )
                    return
                string = "You seem to be shutting down a core Evennia service (named 'Evennia***'). Note that"
                string += "stopping some TCP port services will *not* disconnect users *already*"
                string += "connected on those ports, but *may* instead cause spurious errors for them. To "
                string += "safely and permanently remove ports, change settings file and restart the server."
                caller.msg(string)

            if delmode:
                service.stopService()
                service_collection.removeService(service)
                caller.msg("Stopped and removed service '%s'." % self.args)
            else:
                service.stopService()
                caller.msg("Stopped service '%s'." % self.args)
            return

        if switches[0] == "start":
            #Starts a service.
            if service.running:
                caller.msg('That service is already running.')
                return
            caller.msg("Starting service '%s'." % self.args)
            service.startService()
コード例 #9
0
ファイル: system.py プロジェクト: lulinqing/evennia
    def func(self):
        "Show list."

        caller = self.caller

        # display active processes

        if not utils.host_os_is('posix'):
            string = "Process listings are only available under Linux/Unix."
            caller.msg(string)
            return

        global _resource, _idmapper
        if not _resource:
            import resource as _resource
        if not _idmapper:
            from src.utils.idmapper import base as _idmapper

        import resource
        loadavg = os.getloadavg()
        psize = _resource.getpagesize()
        pid = os.getpid()
        rmem = float(os.popen('ps -p %d -o %s | tail -1' % (pid, "rss")).read()) / 1024.0  # resident memory
        vmem = float(os.popen('ps -p %d -o %s | tail -1' % (pid, "vsz")).read()) / 1024.0  # virtual memory
        pmem = float(os.popen('ps -p %d -o %s | tail -1' % (pid, "%mem")).read())  # percent of resident memory to total
        rusage = resource.getrusage(resource.RUSAGE_SELF)

        # load table
        loadtable = prettytable.PrettyTable(["property", "statistic"])
        loadtable.align = 'l'
        loadtable.add_row(["Server load (1 min)", "%g" % loadavg[0]])
        loadtable.add_row(["Process ID", "%g" % pid]),
        loadtable.add_row(["Bytes per page", "%g " % psize])
        loadtable.add_row(["CPU time used (total)", "%s (%gs)" % (utils.time_format(rusage.ru_utime), rusage.ru_utime)])
        loadtable.add_row(["CPU time used (user)", "%s (%gs)" % (utils.time_format(rusage.ru_stime), rusage.ru_stime)])
        loadtable.add_row(["Memory usage","%g MB (%g%%)" % (rmem, pmem)])
        loadtable.add_row(["Virtual address space\n {x(resident+swap+caching){n", "%g MB" % vmem])
        loadtable.add_row(["Page faults", "%g hard,  %g soft, %g swapouts" % (rusage.ru_majflt, rusage.ru_minflt, rusage.ru_nswap)])
        loadtable.add_row(["Disk I/O", "%g reads, %g writes" % (rusage.ru_inblock, rusage.ru_oublock)])
        loadtable.add_row(["Network I/O", "%g in, %g out" % (rusage.ru_msgrcv, rusage.ru_msgsnd)])
        loadtable.add_row(["Context switching", "%g vol, %g forced, %g signals" % (rusage.ru_nvcsw, rusage.ru_nivcsw, rusage.ru_nsignals)])

        string = "{wServer CPU and Memory load:{n\n%s" % loadtable

        if not is_pypy:
            # Cache size measurements are not available on PyPy
            # because it lacks sys.getsizeof

            # object cache size
            cachedict = _idmapper.cache_size()
            totcache = cachedict["_total"]
            sorted_cache = sorted([(key, tup[0], tup[1]) for key, tup in cachedict.items() if key !="_total" and tup[0] > 0],
                                    key=lambda tup: tup[2], reverse=True)
            memtable = prettytable.PrettyTable(["entity name",
                                                "number",
                                                "cache (MB)",
                                                "idmapper %%"])
            memtable.align = 'l'
            for tup in sorted_cache:
                memtable.add_row([tup[0],
                                 "%i" % tup[1],
                                 "%5.2f" % tup[2],
                                 "%.2f" % (float(tup[2] / totcache[1]) * 100)])

            # get sizes of other caches
            attr_cache_info, prop_cache_info = get_cache_sizes()
            string += "\n{w Entity idmapper cache usage:{n %5.2f MB (%i items)\n%s" % (totcache[1], totcache[0], memtable)
            string += "\n{w On-entity Attribute cache usage:{n %5.2f MB (%i attrs)" % (attr_cache_info[1], attr_cache_info[0])
            string += "\n{w On-entity Property cache usage:{n %5.2f MB (%i props)" % (prop_cache_info[1], prop_cache_info[0])
            base_mem = vmem - totcache[1] - attr_cache_info[1] - prop_cache_info[1]
            string += "\n{w Base Server usage (virtmem-idmapper-attrcache-propcache):{n %5.2f MB" % base_mem

        caller.msg(string)