(ctx context.Context, req *connect.Request[v1pb.GetTaskRunSessionRequest])
| 559 | } |
| 560 | |
| 561 | func (s *RolloutService) GetTaskRunSession(ctx context.Context, req *connect.Request[v1pb.GetTaskRunSessionRequest]) (*connect.Response[v1pb.TaskRunSession], error) { |
| 562 | request := req.Msg |
| 563 | projectID, planID, _, taskUID, taskRunUID, err := common.GetProjectIDPlanIDStageIDTaskIDTaskRunID(request.Parent) |
| 564 | if err != nil { |
| 565 | return nil, connect.NewError(connect.CodeInvalidArgument, errors.Wrapf(err, "failed to get task run uid")) |
| 566 | } |
| 567 | |
| 568 | plan, err := s.store.GetPlan(ctx, &store.FindPlanMessage{ |
| 569 | Workspace: common.GetWorkspaceIDFromContext(ctx), |
| 570 | ProjectID: projectID, |
| 571 | UID: &planID, |
| 572 | }) |
| 573 | if err != nil { |
| 574 | return nil, connect.NewError(connect.CodeInternal, errors.Wrapf(err, "failed to get plan")) |
| 575 | } |
| 576 | if plan == nil { |
| 577 | return nil, connect.NewError(connect.CodeNotFound, errors.Errorf("plan %d not found in project %s", planID, projectID)) |
| 578 | } |
| 579 | |
| 580 | tasks, err := s.store.ListTasks(ctx, &store.TaskFind{Workspace: common.GetWorkspaceIDFromContext(ctx), ProjectID: projectID, ID: &taskUID, PlanID: &planID}) |
| 581 | if err != nil { |
| 582 | return nil, connect.NewError(connect.CodeInternal, errors.Wrapf(err, "failed to get task")) |
| 583 | } |
| 584 | if len(tasks) == 0 { |
| 585 | return nil, connect.NewError(connect.CodeNotFound, errors.Errorf("task %d not found in plan %d", taskUID, planID)) |
| 586 | } |
| 587 | task := tasks[0] |
| 588 | |
| 589 | instance, err := s.store.GetInstance(ctx, &store.FindInstanceMessage{Workspace: common.GetWorkspaceIDFromContext(ctx), ResourceID: &task.InstanceID}) |
| 590 | if err != nil { |
| 591 | return nil, connect.NewError(connect.CodeInternal, errors.Wrapf(err, "failed to get instance")) |
| 592 | } |
| 593 | |
| 594 | driver, err := s.dbFactory.GetAdminDatabaseDriver(ctx, instance, nil, db.ConnectionContext{}) |
| 595 | if err != nil { |
| 596 | return nil, connect.NewError(connect.CodeInternal, errors.Wrapf(err, "failed to get driver")) |
| 597 | } |
| 598 | defer driver.Close(ctx) |
| 599 | |
| 600 | appName := fmt.Sprintf("bytebase-taskrun-%d", taskRunUID) |
| 601 | session, err := getSession(ctx, instance.Metadata.GetEngine(), driver.GetDB(), appName) |
| 602 | if err != nil { |
| 603 | return nil, connect.NewError(connect.CodeInternal, errors.Wrapf(err, "failed to get session")) |
| 604 | } |
| 605 | |
| 606 | session.Name = request.Parent + "/session" |
| 607 | |
| 608 | return connect.NewResponse(session), nil |
| 609 | } |
| 610 | |
| 611 | func getSession(ctx context.Context, engine storepb.Engine, db *sql.DB, appName string) (*v1pb.TaskRunSession, error) { |
| 612 | switch engine { |
nothing calls this directly
no test coverage detected