Source code for isomer.ui.activitymonitor

#!/usr/bin/env python
# -*- coding: UTF-8 -*-

# Isomer - The distributed application framework
# ==============================================
# Copyright (C) 2011-2019 Heiko 'riot' Weinen <riot@c-base.org> and others.
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.


"""

Module: ActivityMonitor
=======================

Surveillance piece to check out what the users are doing, so the system can
react
accordingly (e.g. not disturb with unimportant alerts when user is actively
doing something)

Possibilities:
* check if users noticed an alert
* notify users, about what other users are doing
* offer further information
* achievements ;) (stared 100 hours at the map)

Should be user configurable and toggleable, at least most parts/bits.


"""

from isomer.component import handler, ConfigurableComponent
from isomer.logger import error, verbose  # , warn, critical


[docs]class ActivityMonitor(ConfigurableComponent): """ ActivityMonitor manager Handles * incoming ActivityMonitor messages * ActivityMonitor broadcasts """ channel = "isomer-web"
[docs] def __init__(self, *args): super(ActivityMonitor, self).__init__("ACTIVITY", *args) self.log("Started") self.referenceframe = None self.alertlist = []
[docs] @handler("referenceframe", channel="navdata") def referenceframe(self, event): """Handles navigational reference frame updates. These are necessary to assign geo coordinates to alerts and other misc things. :param event with incoming referenceframe message """ self.log("Got a reference frame update! ", event, lvl=verbose) self.referenceframe = event.data
[docs] def userlogin(self, event): """Checks if an alert is ongoing and alerts the newly connected client, if so.""" clientuuid = event.clientuuid
[docs] def activityrequest(self, event): """ActivityMonitor event handler for incoming events :param event with incoming ActivityMonitor message """ # self.log("Event: '%s'" % event.__dict__) try: action = event.action data = event.data self.log("Activityrequest: ", action, data) except Exception as e: self.log("Error: '%s' %s" % (e, type(e)), lvl=error)