64 lines
1.4 KiB
Go
64 lines
1.4 KiB
Go
package engine
|
|
|
|
import (
|
|
"crypto/sha256"
|
|
"fmt"
|
|
"log"
|
|
"strings"
|
|
|
|
"github.com/nemunaire/minifaas/jobs"
|
|
)
|
|
|
|
const CTR_NAME_PREFIX = "minifaas"
|
|
|
|
func GenContainerPrefix(jobtype string) string {
|
|
return fmt.Sprintf("%s-%x-", CTR_NAME_PREFIX, sha256.Sum224([]byte(jobtype)))
|
|
}
|
|
|
|
func ParseContainerName(name string) (jobtype, id string, err error) {
|
|
if !strings.HasPrefix(strings.TrimPrefix(name, "/"), CTR_NAME_PREFIX+"-") {
|
|
return "", "", fmt.Errorf("This is not a %s job: starting with %q", CTR_NAME_PREFIX, name)
|
|
}
|
|
|
|
tmp := strings.Split(name, "-")
|
|
if len(tmp) < 3 {
|
|
return "", "", fmt.Errorf("This is not a %s job: %q didn't has at least 3 args", CTR_NAME_PREFIX, name)
|
|
}
|
|
|
|
jobtype = jobs.GetJobType(tmp[1])
|
|
if jobtype == "" {
|
|
return "", "", fmt.Errorf("This is not a %s job: unknown job type %q", CTR_NAME_PREFIX, tmp[1])
|
|
}
|
|
|
|
id = strings.Join(tmp[2:], "-")
|
|
|
|
return
|
|
}
|
|
|
|
func FilterRunningContainers(jobtype string, ctrs map[string]string) (ret []string) {
|
|
prefix := GenContainerPrefix(jobtype)
|
|
|
|
for cname, _ := range ctrs {
|
|
if jobtype == "" || strings.HasPrefix(cname, prefix) {
|
|
ret = append(ret, cname)
|
|
}
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
func CountRunningContainers(jobtype string, ctrs map[string]string) (n int) {
|
|
prefix := GenContainerPrefix(jobtype)
|
|
|
|
log.Println(ctrs)
|
|
|
|
for cname, _ := range ctrs {
|
|
log.Println(strings.TrimPrefix(cname, "/"), prefix)
|
|
if jobtype == "" || strings.HasPrefix(strings.TrimPrefix(cname, "/"), prefix) {
|
|
n += 1
|
|
}
|
|
}
|
|
|
|
return
|
|
}
|