@@ -30,6 +30,7 @@ type ContainerHandler struct {
3030 dockerService * services.DockerClientService
3131 settingsService * services.SettingsService
3232 activityService * services.ActivityService
33+ appCtx context.Context
3334}
3435
3536// Paginated response
@@ -142,12 +143,13 @@ type SetAutoUpdateOutput struct {
142143 Body ContainerActionResponse
143144}
144145
145- func RegisterContainers (api huma.API , containerSvc * services.ContainerService , dockerSvc * services.DockerClientService , settingsSvc * services.SettingsService , activitySvc * services.ActivityService ) {
146+ func RegisterContainers (api huma.API , containerSvc * services.ContainerService , dockerSvc * services.DockerClientService , settingsSvc * services.SettingsService , activitySvc * services.ActivityService , appCtx ActivityAppContext ) {
146147 h := & ContainerHandler {
147148 containerService : containerSvc ,
148149 dockerService : dockerSvc ,
149150 settingsService : settingsSvc ,
150151 activityService : activitySvc ,
152+ appCtx : appCtx .contextInternal (),
151153 }
152154
153155 huma .Register (api , huma.Operation {
@@ -622,12 +624,13 @@ func (h *ContainerHandler) StartContainer(ctx context.Context, input *ContainerA
622624 return nil , huma .Error401Unauthorized ("not authenticated" )
623625 }
624626
625- activityID := activitylib .StartHandlerActivityForUser (ctx , h .activityService , input .EnvironmentID , models .ActivityTypeContainerStart , "container" , input .ContainerID , input .ContainerID , user , "Starting container" , "Container start requested" , models.JSON {"containerID" : input .ContainerID })
626- if err := h .containerService .StartContainer (ctx , input .ContainerID , * user ); err != nil {
627- activitylib .CompleteHandlerActivity (ctx , h .activityService , activityID , "Container started" , err )
627+ runtimeCtx := utils .ActivityRuntimeContext (ctx , h .appCtx )
628+ activityID := activitylib .StartHandlerActivityForUser (runtimeCtx , h .activityService , input .EnvironmentID , models .ActivityTypeContainerStart , "container" , input .ContainerID , input .ContainerID , user , "Starting container" , "Container start requested" , models.JSON {"containerID" : input .ContainerID })
629+ if err := h .containerService .StartContainer (runtimeCtx , input .ContainerID , * user ); err != nil {
630+ activitylib .CompleteHandlerActivity (runtimeCtx , h .activityService , activityID , "Container started" , err )
628631 return nil , huma .Error500InternalServerError ((& common.ContainerStartError {Err : err }).Error ())
629632 }
630- activitylib .CompleteHandlerActivity (ctx , h .activityService , activityID , "Container started" , nil )
633+ activitylib .CompleteHandlerActivity (runtimeCtx , h .activityService , activityID , "Container started" , nil )
631634
632635 return & ContainerActionOutput {
633636 Body : ContainerActionResponse {
@@ -647,12 +650,13 @@ func (h *ContainerHandler) StopContainer(ctx context.Context, input *ContainerAc
647650 return nil , huma .Error401Unauthorized ("not authenticated" )
648651 }
649652
650- activityID := activitylib .StartHandlerActivityForUser (ctx , h .activityService , input .EnvironmentID , models .ActivityTypeContainerStop , "container" , input .ContainerID , input .ContainerID , user , "Stopping container" , "Container stop requested" , models.JSON {"containerID" : input .ContainerID })
651- if err := h .containerService .StopContainer (ctx , input .ContainerID , * user ); err != nil {
652- activitylib .CompleteHandlerActivity (ctx , h .activityService , activityID , "Container stopped" , err )
653+ runtimeCtx := utils .ActivityRuntimeContext (ctx , h .appCtx )
654+ activityID := activitylib .StartHandlerActivityForUser (runtimeCtx , h .activityService , input .EnvironmentID , models .ActivityTypeContainerStop , "container" , input .ContainerID , input .ContainerID , user , "Stopping container" , "Container stop requested" , models.JSON {"containerID" : input .ContainerID })
655+ if err := h .containerService .StopContainer (runtimeCtx , input .ContainerID , * user ); err != nil {
656+ activitylib .CompleteHandlerActivity (runtimeCtx , h .activityService , activityID , "Container stopped" , err )
653657 return nil , huma .Error500InternalServerError ((& common.ContainerStopError {Err : err }).Error ())
654658 }
655- activitylib .CompleteHandlerActivity (ctx , h .activityService , activityID , "Container stopped" , nil )
659+ activitylib .CompleteHandlerActivity (runtimeCtx , h .activityService , activityID , "Container stopped" , nil )
656660
657661 return & ContainerActionOutput {
658662 Body : ContainerActionResponse {
@@ -672,12 +676,13 @@ func (h *ContainerHandler) RestartContainer(ctx context.Context, input *Containe
672676 return nil , huma .Error401Unauthorized ("not authenticated" )
673677 }
674678
675- activityID := activitylib .StartHandlerActivityForUser (ctx , h .activityService , input .EnvironmentID , models .ActivityTypeContainerRestart , "container" , input .ContainerID , input .ContainerID , user , "Restarting container" , "Container restart requested" , models.JSON {"containerID" : input .ContainerID })
676- if err := h .containerService .RestartContainer (ctx , input .ContainerID , * user ); err != nil {
677- activitylib .CompleteHandlerActivity (ctx , h .activityService , activityID , "Container restarted" , err )
679+ runtimeCtx := utils .ActivityRuntimeContext (ctx , h .appCtx )
680+ activityID := activitylib .StartHandlerActivityForUser (runtimeCtx , h .activityService , input .EnvironmentID , models .ActivityTypeContainerRestart , "container" , input .ContainerID , input .ContainerID , user , "Restarting container" , "Container restart requested" , models.JSON {"containerID" : input .ContainerID })
681+ if err := h .containerService .RestartContainer (runtimeCtx , input .ContainerID , * user ); err != nil {
682+ activitylib .CompleteHandlerActivity (runtimeCtx , h .activityService , activityID , "Container restarted" , err )
678683 return nil , huma .Error500InternalServerError ((& common.ContainerRestartError {Err : err }).Error ())
679684 }
680- activitylib .CompleteHandlerActivity (ctx , h .activityService , activityID , "Container restarted" , nil )
685+ activitylib .CompleteHandlerActivity (runtimeCtx , h .activityService , activityID , "Container restarted" , nil )
681686
682687 return & ContainerActionOutput {
683688 Body : ContainerActionResponse {
@@ -697,20 +702,21 @@ func (h *ContainerHandler) RedeployContainer(ctx context.Context, input *Contain
697702 return nil , huma .Error401Unauthorized ("not authenticated" )
698703 }
699704
700- activityID := activitylib .StartHandlerActivityForUser (ctx , h .activityService , input .EnvironmentID , models .ActivityTypeContainerRedeploy , "container" , input .ContainerID , input .ContainerID , user , "Starting redeploy" , "Container redeploy requested" , models.JSON {"containerID" : input .ContainerID })
701- activityWriter := activitylib .NewWriter (ctx , h .activityService , activityID , io .Discard , "Redeploying container" )
702- redeployCtx := context .WithValue (ctx , projects.ProgressWriterKey {}, activityWriter )
705+ runtimeCtx := utils .ActivityRuntimeContext (ctx , h .appCtx )
706+ activityID := activitylib .StartHandlerActivityForUser (runtimeCtx , h .activityService , input .EnvironmentID , models .ActivityTypeContainerRedeploy , "container" , input .ContainerID , input .ContainerID , user , "Starting redeploy" , "Container redeploy requested" , models.JSON {"containerID" : input .ContainerID })
707+ activityWriter := activitylib .NewWriter (runtimeCtx , h .activityService , activityID , io .Discard , "Redeploying container" )
708+ redeployCtx := context .WithValue (runtimeCtx , projects.ProgressWriterKey {}, activityWriter )
703709 newContainerID , err := h .containerService .RedeployContainer (redeployCtx , input .ContainerID , * user )
704710 if err != nil {
705711 activitylib .FlushWriter (activityWriter )
706- activitylib .CompleteHandlerActivity (ctx , h .activityService , activityID , "Container redeploy failed" , err )
712+ activitylib .CompleteHandlerActivity (runtimeCtx , h .activityService , activityID , "Container redeploy failed" , err )
707713 return nil , huma .Error500InternalServerError ((& common.ContainerRedeployError {Err : err }).Error ())
708714 }
709715 activitylib .FlushWriter (activityWriter )
710- activitylib .CompleteHandlerActivity (ctx , h .activityService , activityID , "Container redeployed" , nil )
716+ activitylib .CompleteHandlerActivity (runtimeCtx , h .activityService , activityID , "Container redeployed" , nil )
711717
712718 // Fetch full container details to return (consistent with other endpoints)
713- details , inspectErr := h .containerService .GetContainerDetails (ctx , newContainerID )
719+ details , inspectErr := h .containerService .GetContainerDetails (runtimeCtx , newContainerID )
714720 if inspectErr == nil {
715721 details .ActivityID = utils .StringPtrFromTrimmed (activityID )
716722
@@ -745,12 +751,13 @@ func (h *ContainerHandler) DeleteContainer(ctx context.Context, input *DeleteCon
745751 return nil , huma .Error401Unauthorized ("not authenticated" )
746752 }
747753
748- activityID := activitylib .StartHandlerActivityForUser (ctx , h .activityService , input .EnvironmentID , models .ActivityTypeContainerDelete , "container" , input .ContainerID , input .ContainerID , user , "Deleting container" , "Container delete requested" , models.JSON {"containerID" : input .ContainerID , "force" : input .Force , "removeVolumes" : input .RemoveVolumes })
749- if err := h .containerService .DeleteContainer (ctx , input .ContainerID , input .Force , input .RemoveVolumes , * user ); err != nil {
750- activitylib .CompleteHandlerActivity (ctx , h .activityService , activityID , "Container deleted" , err )
754+ runtimeCtx := utils .ActivityRuntimeContext (ctx , h .appCtx )
755+ activityID := activitylib .StartHandlerActivityForUser (runtimeCtx , h .activityService , input .EnvironmentID , models .ActivityTypeContainerDelete , "container" , input .ContainerID , input .ContainerID , user , "Deleting container" , "Container delete requested" , models.JSON {"containerID" : input .ContainerID , "force" : input .Force , "removeVolumes" : input .RemoveVolumes })
756+ if err := h .containerService .DeleteContainer (runtimeCtx , input .ContainerID , input .Force , input .RemoveVolumes , * user ); err != nil {
757+ activitylib .CompleteHandlerActivity (runtimeCtx , h .activityService , activityID , "Container deleted" , err )
751758 return nil , huma .Error500InternalServerError ((& common.ContainerDeleteError {Err : err }).Error ())
752759 }
753- activitylib .CompleteHandlerActivity (ctx , h .activityService , activityID , "Container deleted" , nil )
760+ activitylib .CompleteHandlerActivity (runtimeCtx , h .activityService , activityID , "Container deleted" , nil )
754761
755762 return & DeleteContainerOutput {
756763 Body : ContainerActionResponse {
0 commit comments