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
5 changes: 4 additions & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,9 @@ require (
github.com/go-playground/locales v0.14.1 // indirect
github.com/go-playground/universal-translator v0.18.1 // indirect
github.com/leodido/go-urn v1.4.0 // indirect
github.com/nats-io/nats.go v1.36.0 // indirect
github.com/nats-io/nkeys v0.4.7 // indirect
github.com/nats-io/nuid v1.0.1 // indirect
github.com/nyaruka/phonenumbers v1.0.55 // indirect
github.com/thoas/go-funk v0.9.3 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
Expand Down Expand Up @@ -119,7 +122,7 @@ require (
github.com/josharian/intern v1.0.0 // indirect
github.com/json-iterator/go v1.1.12 // indirect
github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 // indirect
github.com/klauspost/compress v1.16.7 // indirect
github.com/klauspost/compress v1.17.2 // indirect
github.com/klauspost/pgzip v1.2.5 // indirect
github.com/labstack/gommon v0.4.0 // indirect
github.com/lann/builder v0.0.0-20180802200727-47ae307949d0 // indirect
Expand Down
8 changes: 8 additions & 0 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -388,6 +388,8 @@ github.com/klauspost/compress v1.4.1/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0
github.com/klauspost/compress v1.11.4/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs=
github.com/klauspost/compress v1.16.7 h1:2mk3MPGNzKyxErAw8YaohYh69+pa4sIQSC0fPGCFR9I=
github.com/klauspost/compress v1.16.7/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE=
github.com/klauspost/compress v1.17.2 h1:RlWWUY/Dr4fL8qk9YG7DTZ7PDgME2V4csBXA8L/ixi4=
github.com/klauspost/compress v1.17.2/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE=
github.com/klauspost/cpuid v1.2.0/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek=
github.com/klauspost/pgzip v1.2.5 h1:qnWYvvKqedOF2ulHpMG72XQol4ILEJ8k2wwRl/Km8oE=
github.com/klauspost/pgzip v1.2.5/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs=
Expand Down Expand Up @@ -480,6 +482,12 @@ github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7P
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA=
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
github.com/nats-io/nats.go v1.36.0 h1:suEUPuWzTSse/XhESwqLxXGuj8vGRuPRoG7MoRN/qyU=
github.com/nats-io/nats.go v1.36.0/go.mod h1:Ubdu4Nh9exXdSz0RVWRFBbRfrbSxOYd26oF0wkWclB8=
github.com/nats-io/nkeys v0.4.7 h1:RwNJbbIdYCoClSDNY7QVKZlyb/wfT6ugvFCiKy6vDvI=
github.com/nats-io/nkeys v0.4.7/go.mod h1:kqXRgRDPlGy7nGaEDMuYzmiJCIAAWDK0IMBtDmGD0nc=
github.com/nats-io/nuid v1.0.1 h1:5iA8DT8V7q8WK2EScv2padNa/rTESc1KdnPw4TC2paw=
github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c=
github.com/nwaples/rardecode v1.1.0 h1:vSxaY8vQhOcVr4mm5e8XllHWTiM4JF507A0Katqw7MQ=
github.com/nwaples/rardecode v1.1.0/go.mod h1:5DzqNKiOdpKKBH87u8VlvAnPZMXcGRhxWkRpHbbfGS0=
github.com/nyaruka/phonenumbers v1.0.55 h1:bj0nTO88Y68KeUQ/n3Lo2KgK7lM1hF7L9NFuwcCl3yg=
Expand Down
138 changes: 71 additions & 67 deletions pkg/api/server/handlers_api.go
Original file line number Diff line number Diff line change
Expand Up @@ -40,8 +40,9 @@ func (h *handlers) getAppConfig(ctx *fiber.Ctx) error {
"message": fmt.Sprintf("Application not found"),
})
}
username := ctx.Locals("username").(string)

path := getAppPath(app)
path := getAppPath(username, app)
appCfgPath := filepath.Join(path, constants.AppCfgFileName)
data, err := os.ReadFile(appCfgPath)
if err != nil {
Expand All @@ -57,7 +58,7 @@ func (h *handlers) getAppConfig(ctx *fiber.Ctx) error {
//var appcfg application.AppConfiguration
//err = yaml.Unmarshal(data, &appcfg)

appcfg, err := utils.GetAppConfig(data)
appcfg, err := utils.GetAppConfig(username, data)
if err != nil {
klog.Error("parse app cfg error, ", err)
klog.Error(string(data))
Expand All @@ -74,15 +75,17 @@ func (h *handlers) getAppConfig(ctx *fiber.Ctx) error {
}

func (h *handlers) updateAppConfig(ctx *fiber.Ctx) error {

app := ctx.Query("app")
if app == "" {
return ctx.JSON(fiber.Map{
"code": http.StatusNotFound,
"message": fmt.Sprintf("Application not found"),
})
}
username := ctx.Locals("username").(string)

path := getAppPath(app)
path := getAppPath(username, app)
appCfgPath := filepath.Join(path, constants.AppCfgFileName)

var appcfg oachecker.AppConfiguration
Expand Down Expand Up @@ -122,7 +125,7 @@ func (h *handlers) updateAppConfig(ctx *fiber.Ctx) error {
"message": fmt.Sprintf("Save OlaresManifest.yaml error: %v", err),
})
}
err = command.CheckCfg().WithDir(BaseDir).Run(ctx.Context(), app)
err = command.CheckCfg().WithDir(BaseDir).Run(ctx.Context(), username, app)
if err != nil {
klog.Error("check app cfg error, ", err)
return ctx.JSON(fiber.Map{
Expand All @@ -138,58 +141,58 @@ func (h *handlers) updateAppConfig(ctx *fiber.Ctx) error {

}

func (h *handlers) listMyContainers(ctx *fiber.Ctx) error {
sql := `select a.*, b.pod_selector, b.app_id, b.container_name, c.app_name
from dev_containers a
left join dev_app_containers b on a.id = b.container_id
left join dev_apps c on b.app_id = c.id
order by a.create_time desc`
list := make([]*model.DevContainerInfo, 0)

err := h.db.DB.Raw(sql).Scan(&list).Error
if err != nil {
klog.Error("exec sql error, ", err, ", ", sql)
return ctx.JSON(fiber.Map{
"code": http.StatusBadRequest,
"message": fmt.Sprintf("Exec sql failed: %v", err),
})
}

unbind := ctx.Query("unbind") == "true"
ret := make([]*model.DevContainerInfo, 0, len(list))

for i, c := range list {
ret = append(ret, list[i])
if c.AppID != nil {

// filter binding dev container
if unbind {
ret = append(ret[:i], ret[i+1:]...)
continue
}
// container is bind into an app, check the container running status
// ignore error, cause state is not a critical message
state, devPort, _ := container.GetContainerStatus(ctx.Context(), h.kubeConfig, c)
c.State = &state

port := "/proxy/" + devPort + "/"
c.DevPath = &port
appcfg, err := readAppInfo(filepath.Join(BaseDir, *c.AppName, constants.AppCfgFileName))
if err != nil {
klog.Error("readCfgFromFile error, ", err)
continue
}

list[i].Icon = &appcfg.Metadata.Icon
}
}

return ctx.JSON(fiber.Map{
"code": http.StatusOK,
"data": ret,
})

}
//func (h *handlers) listMyContainers(ctx *fiber.Ctx) error {
// sql := `select a.*, b.pod_selector, b.app_id, b.container_name, c.app_name
// from dev_containers a
// left join dev_app_containers b on a.id = b.container_id
// left join dev_apps c on b.app_id = c.id
// order by a.create_time desc`
// list := make([]*model.DevContainerInfo, 0)
//
// err := h.db.DB.Raw(sql).Scan(&list).Error
// if err != nil {
// klog.Error("exec sql error, ", err, ", ", sql)
// return ctx.JSON(fiber.Map{
// "code": http.StatusBadRequest,
// "message": fmt.Sprintf("Exec sql failed: %v", err),
// })
// }
//
// unbind := ctx.Query("unbind") == "true"
// ret := make([]*model.DevContainerInfo, 0, len(list))
//
// for i, c := range list {
// ret = append(ret, list[i])
// if c.AppID != nil {
//
// // filter binding dev container
// if unbind {
// ret = append(ret[:i], ret[i+1:]...)
// continue
// }
// // container is bind into an app, check the container running status
// // ignore error, cause state is not a critical message
// state, devPort, _ := container.GetContainerStatus(ctx.Context(), h.kubeConfig, c)
// c.State = &state
//
// port := "/proxy/" + devPort + "/"
// c.DevPath = &port
// appcfg, err := readAppInfo(filepath.Join(BaseDir, *c.AppName, constants.AppCfgFileName))
// if err != nil {
// klog.Error("readCfgFromFile error, ", err)
// continue
// }
//
// list[i].Icon = &appcfg.Metadata.Icon
// }
// }
//
// return ctx.JSON(fiber.Map{
// "code": http.StatusOK,
// "data": ret,
// })
//
//}

func (h *handlers) bindContainer(ctx *fiber.Ctx) error {
var postData struct {
Expand Down Expand Up @@ -354,9 +357,10 @@ func (h *handlers) listAppContainersInChart(ctx *fiber.Ctx) error {
"message": fmt.Sprintf("Application Not Found"),
})
}
username := ctx.Locals("username").(string)

appName := fmt.Sprintf("%s-dev", app)
testNamespace := fmt.Sprintf("%s-%s", appName, constants.Owner)
testNamespace := fmt.Sprintf("%s-%s", appName, username)

// mock vals
values := make(map[string]interface{})
Expand Down Expand Up @@ -408,7 +412,7 @@ func (h *handlers) listAppContainersInChart(ctx *fiber.Ctx) error {

values["gpu"] = "nvidia"

path := getAppPath(app)
path := getAppPath(username, app)
appCfgPath := filepath.Join(path, constants.AppCfgFileName)
data, err := os.ReadFile(appCfgPath)
if err != nil {
Expand All @@ -419,7 +423,7 @@ func (h *handlers) listAppContainersInChart(ctx *fiber.Ctx) error {
})
}

appcfg, err := utils.GetAppConfig(data)
appcfg, err := utils.GetAppConfig(username, data)

if err != nil {
klog.Error("parse app cfg error, ", err)
Expand All @@ -436,7 +440,7 @@ func (h *handlers) listAppContainersInChart(ctx *fiber.Ctx) error {
}
values["domain"] = entries

manifest, err := helm.DryRun(ctx.Context(), h.kubeConfig, testNamespace, appName, getAppPath(app), values)
manifest, err := helm.DryRun(ctx.Context(), h.kubeConfig, testNamespace, appName, getAppPath(username, app), values)
if err != nil {
return ctx.JSON(fiber.Map{
"code": http.StatusBadRequest,
Expand Down Expand Up @@ -475,7 +479,7 @@ func (h *handlers) listAppContainersInChart(ctx *fiber.Ctx) error {
containers[i].AppID = pointer.Int(int(da.ID))
if container.IsSysAppDevImage(containers[i].Image) {
containers[i].DevPath = pointer.String("/proxy/3000/")
userspace := "user-space-" + constants.Owner
userspace := "os-framework"
pods, err := client.CoreV1().Pods(userspace).List(ctx.Context(), metav1.ListOptions{
LabelSelector: containers[i].PodSelector,
})
Expand Down Expand Up @@ -791,10 +795,10 @@ func (h *handlers) updateDevContainer(ctx *fiber.Ctx) error {
})
}

func GetAppContainersInChart(app string) ([]*helm.ContainerInfo, error) {
func GetAppContainersInChart(owner, app string) ([]*helm.ContainerInfo, error) {

appName := fmt.Sprintf("%s-dev", app)
testNamespace := fmt.Sprintf("%s-%s", appName, constants.Owner)
testNamespace := fmt.Sprintf("%s-%s", appName, owner)

// mock vals
values := make(map[string]interface{})
Expand Down Expand Up @@ -846,15 +850,15 @@ func GetAppContainersInChart(app string) ([]*helm.ContainerInfo, error) {

values["gpu"] = "nvidia"

path := getAppPath(app)
path := getAppPath(owner, app)
appCfgPath := filepath.Join(path, constants.AppCfgFileName)
data, err := os.ReadFile(appCfgPath)
if err != nil {
klog.Error("read app cfg error, ", err, ", ", app, ", ", appCfgPath)
return nil, err
}

appcfg, err := utils.GetAppConfig(data)
appcfg, err := utils.GetAppConfig(owner, data)

if err != nil {
klog.Error("parse app cfg error, ", err)
Expand All @@ -872,7 +876,7 @@ func GetAppContainersInChart(app string) ([]*helm.ContainerInfo, error) {
return nil, err
}

manifest, err := helm.DryRun(context.TODO(), kubeConfig, testNamespace, appName, getAppPath(app), values)
manifest, err := helm.DryRun(context.TODO(), kubeConfig, testNamespace, appName, getAppPath(owner, app), values)
if err != nil {
return nil, err
}
Expand Down Expand Up @@ -901,7 +905,7 @@ func GetAppContainersInChart(app string) ([]*helm.ContainerInfo, error) {
containers[i].AppID = pointer.Int(int(da.ID))
if container.IsSysAppDevImage(containers[i].Image) {
containers[i].DevPath = pointer.String("/proxy/3000/")
userspace := "user-space-" + constants.Owner
userspace := "os-framework"
pods, err := client.CoreV1().Pods(userspace).List(context.TODO(), metav1.ListOptions{
LabelSelector: containers[i].PodSelector,
})
Expand Down
Loading