@@ -252,6 +252,15 @@ class BlockedEvent(ManagerStateEvent):
252252 manager_state : BackupManagerState = BackupManagerState .BLOCKED
253253
254254
255+ @dataclass (frozen = True , kw_only = True , slots = True )
256+ class UploadBackupEvent (ManagerStateEvent ):
257+ """Backup agent upload progress event."""
258+
259+ agent_id : str
260+ uploaded_bytes : int
261+ total_bytes : int
262+
263+
255264class BackupPlatformProtocol (Protocol ):
256265 """Define the format that backup platforms can have."""
257266
@@ -579,9 +588,24 @@ async def upload_backup_to_agent(agent_id: str) -> None:
579588 _backup = replace (
580589 backup , protected = should_encrypt , size = streamer .size ()
581590 )
582- await self .backup_agents [agent_id ].async_upload_backup (
591+ agent = self .backup_agents [agent_id ]
592+
593+ @callback
594+ def on_upload_progress (* , bytes_uploaded : int , ** kwargs : Any ) -> None :
595+ """Handle upload progress."""
596+ self .async_on_backup_event (
597+ UploadBackupEvent (
598+ manager_state = self .state ,
599+ agent_id = agent_id ,
600+ uploaded_bytes = bytes_uploaded ,
601+ total_bytes = _backup .size ,
602+ )
603+ )
604+
605+ await agent .async_upload_backup (
583606 open_stream = open_stream_func ,
584607 backup = _backup ,
608+ on_progress = on_upload_progress ,
585609 )
586610 if streamer :
587611 await streamer .wait ()
@@ -1374,9 +1398,10 @@ def async_on_backup_event(
13741398 """Forward event to subscribers."""
13751399 if (current_state := self .state ) != (new_state := event .manager_state ):
13761400 LOGGER .debug ("Backup state: %s -> %s" , current_state , new_state )
1377- self .last_event = event
1378- if not isinstance (event , (BlockedEvent , IdleEvent )):
1379- self .last_action_event = event
1401+ if not isinstance (event , UploadBackupEvent ):
1402+ self .last_event = event
1403+ if not isinstance (event , (BlockedEvent , IdleEvent )):
1404+ self .last_action_event = event
13801405 for subscription in self ._backup_event_subscriptions :
13811406 subscription (event )
13821407
0 commit comments