from pymongo import monitoring

class CommandLogger(monitoring.CommandListener):
    def started(self, event: monitoring.CommandStartedEvent) -> None: ...
    def succeeded(self, event: monitoring.CommandSucceededEvent) -> None: ...
    def failed(self, event: monitoring.CommandFailedEvent) -> None: ...

class ServerLogger(monitoring.ServerListener):
    def opened(self, event: monitoring.ServerOpeningEvent) -> None: ...
    def description_changed(self, event: monitoring.ServerDescriptionChangedEvent) -> None: ...
    def closed(self, event: monitoring.ServerClosedEvent) -> None: ...

class HeartbeatLogger(monitoring.ServerHeartbeatListener):
    def started(self, event: monitoring.ServerHeartbeatStartedEvent) -> None: ...
    def succeeded(self, event: monitoring.ServerHeartbeatSucceededEvent) -> None: ...
    def failed(self, event: monitoring.ServerHeartbeatFailedEvent) -> None: ...

class TopologyLogger(monitoring.TopologyListener):
    def opened(self, event: monitoring.TopologyOpenedEvent) -> None: ...
    def description_changed(self, event: monitoring.TopologyDescriptionChangedEvent) -> None: ...
    def closed(self, event: monitoring.TopologyClosedEvent) -> None: ...

class ConnectionPoolLogger(monitoring.ConnectionPoolListener):
    def pool_created(self, event: monitoring.PoolCreatedEvent) -> None: ...
    def pool_cleared(self, event: monitoring.PoolClearedEvent) -> None: ...
    def pool_closed(self, event: monitoring.PoolClosedEvent) -> None: ...
    def connection_created(self, event: monitoring.ConnectionCreatedEvent) -> None: ...
    def connection_ready(self, event: monitoring.ConnectionReadyEvent) -> None: ...
    def connection_closed(self, event: monitoring.ConnectionClosedEvent) -> None: ...
    def connection_check_out_started(self, event: monitoring.ConnectionCheckOutStartedEvent) -> None: ...
    def connection_check_out_failed(self, event: monitoring.ConnectionCheckOutFailedEvent) -> None: ...
    def connection_checked_out(self, event: monitoring.ConnectionCheckedOutEvent) -> None: ...
    def connection_checked_in(self, event: monitoring.ConnectionCheckedInEvent) -> None: ...
