Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion internal/model/backup.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,19 +12,23 @@ type Backup struct {
Id string
StartTime time.Time
Duration time.Duration
Failed bool
}

func NewBackup(environment string) *Backup {
return &Backup{
Id: environment + "-" + gofakeit.UUID(),
StartTime: time.Now().Round(time.Second),
Duration: 120 * time.Second,
Failed: false,
}
}

func (b *Backup) Status() pb.BackupStatus_Phase {
status := pb.BackupStatus_Completed
if b.StartTime.Add(b.Duration).After(time.Now()) {
if b.Failed {
status = pb.BackupStatus_Failed
} else if b.StartTime.Add(b.Duration).After(time.Now()) {
status = pb.BackupStatus_InProgress
}
return status
Expand Down
11 changes: 11 additions & 0 deletions internal/model/model.go
Original file line number Diff line number Diff line change
Expand Up @@ -127,16 +127,19 @@ func (s *Model) CreateEnvironment(name string, size int) {
Id: name + "-b84dd996-8113-4cd3-8dfe-018c990f5f1a",
StartTime: time.Now().Add(-12 * time.Hour).Round(time.Second),
Duration: 115 * time.Second,
Failed: false,
},
name + "-aabb7bee-ab04-4ae1-ba3f-1142aae1353f": {
Id: name + "-aabb7bee-ab04-4ae1-ba3f-1142aae1353f",
StartTime: time.Now().Add(-24 * time.Hour).Round(time.Second),
Duration: 134 * time.Second,
Failed: true,
},
name + "-7d419959-a3b7-483b-8fa7-769a0977e46b": {
Id: name + "-7d419959-a3b7-483b-8fa7-769a0977e46b",
StartTime: time.Now().Add(-36 * time.Hour).Round(time.Second),
Duration: 123 * time.Second,
Failed: false,
},
}

Expand All @@ -146,6 +149,14 @@ func (s *Model) CreateEnvironment(name string, size int) {
BackupId: name + "-7d419959-a3b7-483b-8fa7-769a0977e46b",
StartTime: time.Now().Add(-12 * time.Hour).Round(time.Second),
Duration: 145 * time.Second,
Failed: false,
},
name + "-39b11746-eca6-40ac-9aed-094d38c1e444": {
Id: name + "-39b11746-eca6-40ac-9aed-094d38c1e444",
BackupId: name + "-7d419959-a3b7-483b-8fa7-769a0977e46b",
StartTime: time.Now().Add(-12 * time.Hour).Round(time.Second),
Duration: 145 * time.Second,
Failed: true,
},
}

Expand Down
6 changes: 5 additions & 1 deletion internal/model/restore.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ type Restore struct {
BackupId string
StartTime time.Time
Duration time.Duration
Failed bool
}

func NewRestore(environment string, backupId string) *Restore {
Expand All @@ -21,12 +22,15 @@ func NewRestore(environment string, backupId string) *Restore {
BackupId: backupId,
StartTime: time.Now().Round(time.Second),
Duration: 150 * time.Second,
Failed: false,
}
}

func (b *Restore) Status() pb.RestoreStatus_Phase {
status := pb.RestoreStatus_Completed
if b.StartTime.Add(b.Duration).After(time.Now()) {
if b.Failed {
status = pb.RestoreStatus_Failed
} else if b.StartTime.Add(b.Duration).After(time.Now()) {
status = pb.RestoreStatus_InProgress
}
return status
Expand Down
47 changes: 23 additions & 24 deletions internal/server/mock/backup/server.go
Original file line number Diff line number Diff line change
Expand Up @@ -35,23 +35,11 @@ func (s *Server) Get(ctx context.Context, req *pb.BackupGetRequest) (*pb.BackupG
return nil, fmt.Errorf("id not provided")
}

backup, err := s.Model.GetBackup(req.ID)
backupResponse, err := buildBackup(s.Model, req.ID)
if err != nil {
return nil, err
}

backupResponse := &pb.BackupStatus{
Name: backup.Id,
Phase: backup.Status(),
StartTime: backup.StartTime.Format(time.RFC3339),
Duration: backup.Duration.String(),
Databases: []string{"default"},
Volumes: []string{"public", "private"},
}
if backup.Status() == pb.BackupStatus_Completed {
backupResponse.CompletionTime = backup.StartTime.Add(backup.Duration).Format(time.RFC3339)
}

resp := &pb.BackupGetResponse{
Backup: backupResponse,
}
Expand All @@ -67,17 +55,7 @@ func (s *Server) List(ctx context.Context, req *pb.BackupListRequest) (*pb.Backu
resp := &pb.BackupListResponse{}

for _, value := range environment.Backup {
summary := &pb.BackupStatus{
Name: value.Id,
Phase: value.Status(),
StartTime: value.StartTime.Format(time.RFC3339),
Duration: value.Duration.String(),
Databases: []string{"default"},
Volumes: []string{"public", "private"},
}
if value.Status() == pb.BackupStatus_Completed {
summary.CompletionTime = value.StartTime.Add(value.Duration).Format(time.RFC3339)
}
summary, _ := buildBackup(s.Model, value.Id)
resp.List = append(resp.List, summary)
}

Expand All @@ -87,3 +65,24 @@ func (s *Server) List(ctx context.Context, req *pb.BackupListRequest) (*pb.Backu

return resp, nil
}

func buildBackup(model *model.Model, id string) (*pb.BackupStatus, error) {
backup, err := model.GetBackup(id)
if err != nil {
return nil, err
}

backupResponse := &pb.BackupStatus{
Name: backup.Id,
Phase: backup.Status(),
StartTime: backup.StartTime.Format(time.RFC3339),
Duration: backup.Duration.String(),
Databases: []string{"default"},
Volumes: []string{"public", "private"},
}
if backup.Status() != pb.BackupStatus_InProgress {
backupResponse.CompletionTime = backup.StartTime.Add(backup.Duration).Format(time.RFC3339)
}

return backupResponse, nil
}
6 changes: 2 additions & 4 deletions internal/server/mock/project/server.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,10 +20,8 @@ func (s *Server) List(ctx context.Context, req *pb.ProjectListRequest) (*pb.Proj
resp := &pb.ProjectListResponse{}

for _, project := range s.Model.GetProjects() {
respProject, err := buildProject(s.Model, project.Id)
if err == nil {
resp.Projects = append(resp.Projects, respProject)
}
respProject, _ := buildProject(s.Model, project.Id)
resp.Projects = append(resp.Projects, respProject)
}

return resp, nil
Expand Down
71 changes: 38 additions & 33 deletions internal/server/mock/restore/server.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,17 +21,24 @@ func (s *Server) Create(ctx context.Context, req *pb.RestoreCreateRequest) (*pb.
return nil, fmt.Errorf("backup not provided")
}

environment, err := s.Model.GetEnvironment(req.Environment)
if err != nil {
return nil, err
var backup *model.Backup
exists := false
for _, environment := range s.Model.GetEnvironments() {
backup, exists = environment.Backup[req.Backup]
if exists {
break
}
}

backup, exists := environment.Backup[req.Backup]
if !exists {
return nil, fmt.Errorf("backup does not exist")
}
if backup.Status() == pb.BackupStatus_InProgress {
return nil, fmt.Errorf("backup is not yet complete")
if backup.Status() != pb.BackupStatus_Completed {
return nil, fmt.Errorf("backup is not available for restore")
}

environment, err := s.Model.GetEnvironment(req.Environment)
if err != nil {
return nil, err
}

restore := model.NewRestore(environment.Environment.Name, req.Backup)
Expand All @@ -47,24 +54,11 @@ func (s *Server) Get(ctx context.Context, req *pb.RestoreGetRequest) (*pb.Restor
return nil, fmt.Errorf("id not provided")
}

restore, err := s.Model.GetRestore(req.ID)
restoreResponse, err := buildRestore(s.Model, req.ID)
if err != nil {
return nil, err
}

restoreResponse := &pb.RestoreStatus{
Name: restore.Id,
Backup: restore.BackupId,
Phase: restore.Status(),
StartTime: restore.StartTime.Format(time.RFC3339),
Duration: restore.Duration.String(),
Databases: []string{"default"},
Volumes: []string{"public", "private"},
}
if restore.Status() == pb.RestoreStatus_Completed {
restoreResponse.CompletionTime = restore.StartTime.Add(restore.Duration).Format(time.RFC3339)
}

resp := &pb.RestoreGetResponse{
Restore: restoreResponse,
}
Expand All @@ -80,18 +74,7 @@ func (s *Server) List(ctx context.Context, req *pb.RestoreListRequest) (*pb.Rest
resp := &pb.RestoreListResponse{}

for _, value := range environment.Restore {
summary := &pb.RestoreStatus{
Name: value.Id,
Backup: value.BackupId,
Phase: value.Status(),
StartTime: value.StartTime.Format(time.RFC3339),
Duration: value.Duration.String(),
Databases: []string{"default"},
Volumes: []string{"public", "private"},
}
if value.Status() == pb.RestoreStatus_Completed {
summary.CompletionTime = value.StartTime.Add(value.Duration).Format(time.RFC3339)
}
summary, _ := buildRestore(s.Model, value.Id)
resp.List = append(resp.List, summary)
}

Expand All @@ -101,3 +84,25 @@ func (s *Server) List(ctx context.Context, req *pb.RestoreListRequest) (*pb.Rest

return resp, nil
}

func buildRestore(model *model.Model, id string) (*pb.RestoreStatus, error) {
restore, err := model.GetRestore(id)
if err != nil {
return nil, err
}

restoreResponse := &pb.RestoreStatus{
Name: restore.Id,
Backup: restore.BackupId,
Phase: restore.Status(),
StartTime: restore.StartTime.Format(time.RFC3339),
Duration: restore.Duration.String(),
Databases: []string{"default"},
Volumes: []string{"public", "private"},
}
if restore.Status() != pb.RestoreStatus_InProgress {
restoreResponse.CompletionTime = restore.StartTime.Add(restore.Duration).Format(time.RFC3339)
}

return restoreResponse, nil
}