Module server.stats.event_service

Classes

class EventService (message_queue_service: MessageQueueService)
Expand source code
@with_logger
class EventService(Service):
    def __init__(self, message_queue_service: MessageQueueService):
        self.message_queue_service = message_queue_service

    async def execute_batch_update(self, player_id, queue):
        """
        Sends a batch of event updates.

        # Params
        - `player_id`: the player to update the events for
        - `queue`: an array of event updates in the form:
        ```
        [{
            "eventId": string,
            "count": long
        }]
        ```

        # Returns
        None
        """
        self._logger.info("Recording %d events for player %d", len(queue), player_id)
        update_data = [
            {"playerId": player_id, **data}
            for data in queue
        ]
        await self.message_queue_service.publish_many(
            config.MQ_EXCHANGE_NAME,
            "request.event.update",
            update_data,
        )

    def record_event(self, event_id, count, queue):
        """
        Enqueues an event update.

        # Params
        - `event_id`: the event to trigger
        - `count`: the update count
        - `queue`: if set, the update will be put into this array for later
        batch execution
        """
        if count == 0:
            return

        queue.append({"eventId": event_id, "count": count})

All services should inherit from this class.

Services are singleton objects which manage some server task.

Ancestors

Methods

async def execute_batch_update(self, player_id, queue)
Expand source code
async def execute_batch_update(self, player_id, queue):
    """
    Sends a batch of event updates.

    # Params
    - `player_id`: the player to update the events for
    - `queue`: an array of event updates in the form:
    ```
    [{
        "eventId": string,
        "count": long
    }]
    ```

    # Returns
    None
    """
    self._logger.info("Recording %d events for player %d", len(queue), player_id)
    update_data = [
        {"playerId": player_id, **data}
        for data in queue
    ]
    await self.message_queue_service.publish_many(
        config.MQ_EXCHANGE_NAME,
        "request.event.update",
        update_data,
    )

Sends a batch of event updates.

Params

  • player_id: the player to update the events for
  • queue: an array of event updates in the form:
[{
    "eventId": string,
    "count": long
}]

Returns

None

def record_event(self, event_id, count, queue)
Expand source code
def record_event(self, event_id, count, queue):
    """
    Enqueues an event update.

    # Params
    - `event_id`: the event to trigger
    - `count`: the update count
    - `queue`: if set, the update will be put into this array for later
    batch execution
    """
    if count == 0:
        return

    queue.append({"eventId": event_id, "count": count})

Enqueues an event update.

Params

  • event_id: the event to trigger
  • count: the update count
  • queue: if set, the update will be put into this array for later batch execution

Inherited members