コード例 #1
0
def get_user_data():
    """ Returns JSON about active and recently active users, as well as info
    about user agents, etc. """

    # first, do the user agent popularity contest, since that's simple
    results = utils.mdb.users.group(['latest_user_agent'],
                                    {'latest_user_agent': {
                                        '$exists': True
                                    }}, {"count": 0},
                                    "function(o, p){p.count++}")
    sorted_list = sorted(results, key=lambda k: k["count"], reverse=True)
    for i in sorted_list:
        i["value"] = i['latest_user_agent']
        i["count"] = int(i["count"])
    ua_data = sorted_list[:25]

    # next, get active/recent users
    recent_user_cutoff = datetime.now() - timedelta(
        hours=utils.settings.get("application", "recent_user_horizon"))
    recent_users = utils.mdb.users.find({
        "latest_activity": {
            "$gte": recent_user_cutoff
        }
    }).sort("latest_activity", -1)

    active_user_count = 0
    recent_user_count = 0
    final_user_output = []
    for u in recent_users:
        u['age'] = utils.get_time_elapsed_since(u['created_on'], 'age')
        u['latest_activity_age'] = utils.get_time_elapsed_since(
            u['latest_activity'], 'age')
        if u["latest_activity"] > (datetime.now() -
                                   timedelta(minutes=utils.settings.get(
                                       'application', 'active_user_horizon'))):
            active_user_count += 1
            u['is_active'] = True
        else:
            recent_user_count += 1
            u['is_active'] = False
        final_user_output.append(u)

    # create the final output dictionary
    d = {
        "meta": {
            "active_user_horizon":
            utils.settings.get("application", "active_user_horizon"),
            "active_user_count":
            active_user_count,
            "recent_user_horizon":
            utils.settings.get("application", "recent_user_horizon"),
            "recent_user_count":
            recent_user_count,
        },
        "user_agent_stats": ua_data,
        "user_info": final_user_output,
    }
    # and return it as json
    return json.dumps(d, default=json_util.default)
コード例 #2
0
ファイル: panel.py プロジェクト: superpowered/kdm-manager
def get_settlement_data():
    """ Returns JSON about recently updated settlements. Also serializes those
    settlements and gets their event_log. """

    recent_cutoff = datetime.now() - timedelta(
        hours=settings.get("application", "recent_user_horizon"))

    ids = utils.mdb.settlements.find({
        'last_accessed': {
            '$gte': recent_cutoff
        }
    }).distinct('_id')

    sorting_hat = {}
    for s_id in ids:
        last_updated = utils.mdb.settlement_events.find({
            'settlement_id': s_id
        }).limit(1).sort("created_on", -1)[0]['created_on']
        sorting_hat[last_updated] = s_id

    sorted_ids = []
    for timestamp in sorted(sorting_hat.keys(), reverse=True):
        sorted_ids.append(sorting_hat[timestamp])

    recent_settlements = []
    for s in utils.mdb.settlements.find({"_id": {"$in": sorted_ids}}):
        s['creator_email'] = utils.mdb.users.find_one({'_id': s['created_by']
                                                       })['login']
        s['age'] = utils.get_time_elapsed_since(s['created_on'], 'age')
        s['players'] = utils.mdb.survivors.find({
            "settlement": s['_id']
        }).distinct('email')
        recent_settlements.append(s)

    return json.dumps(recent_settlements, default=json_util.default)
コード例 #3
0
ファイル: world.py プロジェクト: stainedart/kdm-manager
    def latest_settlement(self):
        """ Get the latest settlement and punch it up with some additional info,
        since JSON consumers don't have MDB access and can't get it otherwise.
        """

        #        s = self.get_eligible_documents(collection="settlements", limit=1)
        try:
            s = utils.mdb.settlements.find(
                {"name": {
                    "$nin": self.ineligible_names
                }},
                sort=[("created_on", -1)])[0]
        except IndexError:
            self.logger.error(
                "No settlements in mdb match the 'latest_settlement' criteria! Returning None..."
            )
            return None

        S = settlements_models.Settlement(_id=s["_id"])

        s["campaign"] = S.get_campaign("name")
        s["expansions"] = S.get_expansions("pretty")
        s["player_count"] = S.get_players("count")
        s["age"] = utils.get_time_elapsed_since(s["created_on"], 'age')

        for k in [
                'timeline',
        ]:
            if k in s.keys():
                s[k] = "REDACTED"

        return s
コード例 #4
0
    def get_patron_attributes(self):
        """ Returns a dictionary of patronage information. """

        if 'patron' not in self.user.keys():
            return {'level': 0}

        self.user['patron'].update({'age': utils.get_time_elapsed_since(self.user['patron']['created_on'], 'age')})
        return self.user['patron']
コード例 #5
0
ファイル: users.py プロジェクト: stainedart/kdm-manager
    def get_latest_activity(self, return_type=None):
        """ Returns the user's latest activity in a number of ways. Leave the
        'return_type' kwarg blank for a datetime stamp.
        """

        la = self.user["latest_activity"]

        if return_type is not None:
            return utils.get_time_elapsed_since(la, return_type)

        return la
コード例 #6
0
ファイル: admin.py プロジェクト: superpowered/kdm-manager
    def dump(self):
        """ Dump a summary of the user to the CLI. """

        U_serialized = self.User.serialize(dict)['user']
        mini_repr = OrderedDict()
        if 'admin' in self.User.user.keys():
            mini_repr['admin'] = self.User.user['admin']
        for time_attr in ['created_on','latest_sign_in', 'latest_activity']:
            mini_repr[time_attr] = utils.get_time_elapsed_since(U_serialized[time_attr], 'age')
        for attr in ['settlements_created','survivors_created']:
            mini_repr[attr] = U_serialized[attr]
        dump_doc_to_cli(mini_repr, gap_spaces=25)

        if self.User.user['preferences'] != {}:
            print(' User Preferences:')
            dump_doc_to_cli(self.User.user['preferences'], gap_spaces=35)
コード例 #7
0
ファイル: world.py プロジェクト: stainedart/kdm-manager
    def pretty_survivor(self, survivor):
        """ Clean a survivor up and make it 'shippable' as part of the world
        JSON. This initializes the survivor and will normalize it. """

        # init
        S = survivors_models.Survivor(_id=survivor["_id"],
                                      normalize_on_init=False)
        survivor["epithets"] = S.get_epithets("pretty")
        survivor["age"] = utils.get_time_elapsed_since(survivor["created_on"],
                                                       "age")

        # redact/remove
        survivor["attribute_detail"] = 'REDACTED'

        # add settlement info
        settlement = utils.mdb.settlements.find_one(
            {"_id": survivor["settlement"]})
        survivor["settlement_name"] = settlement["name"]

        return survivor
コード例 #8
0
ファイル: users.py プロジェクト: stainedart/kdm-manager
    def get_age(self, return_type="years"):
        """ Returns the user's age. """

        return utils.get_time_elapsed_since(self.user["created_on"], 'age')