Skip to content
Open
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
7 changes: 4 additions & 3 deletions cmd/apiserver-mock/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -59,12 +59,13 @@ func main() {
o := Options{}

globalModel := model.NewModel()
globalModel.AddProject(model.NewProject("project1", "Project One", []string{"group1", "group3"}, "small"))
globalModel.AddProject(model.NewProject("project2", "Project Two", []string{}, "medium"))
globalModel.AddProject(model.NewProject("project3", "Project Three", []string{"group2", "group3"}, "large"))
globalModel.AddProject(model.NewProject("drupal", "Drupal", []string{"group1", "group3"}, "small"))
globalModel.AddProject(model.NewProject("php", "Php", []string{}, "medium"))
globalModel.AddProject(model.NewProject("basic", "Basic", []string{"group2", "group3"}, "large"))
globalModel.CreateEnvironment("dev", 1, true)
globalModel.CreateEnvironment("stg", 2, true)
globalModel.CreateEnvironment("prod", 4, false)
globalModel.CreateEnvironment("pr-123", 1, true)

cmd := &cobra.Command{
Use: "apiserver-mock",
Expand Down
11 changes: 9 additions & 2 deletions environment.proto
Original file line number Diff line number Diff line change
Expand Up @@ -49,11 +49,11 @@ message Environment {
}
Type type = 2; // Type of environment
bool Production = 3; // If this is a production environment
bool Insecure = 4; // DEPRECIATED: If the environment is insecure (no read only filesystem)
bool Insecure = 4; // DEPRECATED: If the environment is insecure (no read only filesystem)
string Version = 5; // Version associated with an environment
string Size = 6; // Size of the environment
Ingress Ingress = 7; // Ingress configuration for routing
Image Image = 8; // Image respository information
Image Image = 8; // Image repository information
repeated Cron Cron = 9; // Cron configuration for an environment
repeated MySQL MySQL = 10; // MySQL configuration for an environment
SMTP SMTP = 11; // SMTP configuration for an environment
Expand All @@ -67,6 +67,13 @@ message Environment {
repeated Daemon Daemon = 19; // Daemon configuration for an environment
EnvironmentResources Resources = 20; // Resources utilised by this environment
EnvironmentMetrics Metrics = 21; // Metrics configuration for this environment
enum Tier {
TierNone = 0; // Default tier type
TierProduction = 1;
TierNonProduction = 2;
TierScratch = 3;
}
Tier tier = 22; // Tier of this environment
}

/**
Expand Down
10 changes: 9 additions & 1 deletion internal/model/model.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package model

import (
"fmt"
"strings"
"time"

"github.com/skpr/api/pb"
Expand Down Expand Up @@ -43,9 +44,10 @@ func (s *Model) GetEnvironments() []*Environment {
func (s *Model) CreateEnvironment(name string, size int, metrics bool) {
environment := &pb.Environment{
Name: name,
Version: "v0.0.1",
Version: "v1.0.1",
Phase: "Deployed",
Production: name == "prod",
Tier: pb.Environment_TierNonProduction,
Ingress: &pb.Ingress{
Routes: []string{
fmt.Sprintf("%s.mock.local.skpr.dev", name),
Expand Down Expand Up @@ -95,6 +97,12 @@ func (s *Model) CreateEnvironment(name string, size int, metrics bool) {
}
if name == "prod" {
environment.Ingress.Routes = append(environment.Ingress.Routes, "example.com", "www.example.com")
environment.Tier = pb.Environment_TierProduction
environment.Version = "v1.0.0"
}
if strings.HasPrefix(name, "pr-") {
environment.Tier = pb.Environment_TierScratch
environment.Version = "v1.0.1-a3ef9c"
}

cron := make(map[string]*Cron)
Expand Down
14 changes: 10 additions & 4 deletions internal/server/mock/project/server.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package project
import (
"context"
"fmt"
"sort"

"google.golang.org/grpc/metadata"

Expand All @@ -19,7 +20,12 @@ type Server struct {
func (s *Server) List(ctx context.Context, req *pb.ProjectListRequest) (*pb.ProjectListResponse, error) {
resp := &pb.ProjectListResponse{}

for _, project := range s.Model.GetProjects() {
projects := s.Model.GetProjects()
sort.Slice(projects, func(i, j int) bool {
return projects[i].Id < projects[j].Id
})

for _, project := range projects {
respProject, _ := buildProject(s.Model, project.Id)
resp.Projects = append(resp.Projects, respProject)
}
Expand Down Expand Up @@ -114,9 +120,9 @@ func buildProject(model *model.Model, id string) (*pb.Project, error) {

environments := model.GetEnvironments()
for _, env := range environments {
respProject.ResourceTotals.CPU = respProject.ResourceTotals.CPU + env.Environment.Resources.CPU.Limit
respProject.ResourceTotals.Memory = respProject.ResourceTotals.Memory + env.Environment.Resources.Memory.Limit
respProject.ResourceTotals.Replicas = respProject.ResourceTotals.Replicas + env.Environment.Resources.Replicas.Max
respProject.ResourceTotals.CPU = respProject.ResourceTotals.CPU + env.Environment.Resources.CPU.Current
respProject.ResourceTotals.Memory = respProject.ResourceTotals.Memory + env.Environment.Resources.Memory.Current
respProject.ResourceTotals.Replicas = respProject.ResourceTotals.Replicas + env.Environment.Resources.Replicas.Current

if env.Environment.Production {
respProject.Environments.Prod = env.Environment.Name
Expand Down
Loading