102 lines
2.1 KiB
Go
102 lines
2.1 KiB
Go
package worker
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"os"
|
|
"path/filepath"
|
|
|
|
"gorm.io/driver/sqlite"
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
type Logger interface {
|
|
Write(line string)
|
|
}
|
|
|
|
type RootConfig struct {
|
|
Data struct {
|
|
Driver string `json:"driver"`
|
|
Path string `json:"path"`
|
|
} `json:"data"`
|
|
Log struct {
|
|
Path string `json:"log_root_path"`
|
|
} `json:"log"`
|
|
}
|
|
|
|
type Function struct {
|
|
ID uint `gorm:"primaryKey"`
|
|
FunctionName string
|
|
Version string
|
|
Path string
|
|
DeletedAt gorm.DeletedAt `gorm:"index"`
|
|
}
|
|
|
|
type FuncConfig struct {
|
|
Name string `json:"name"`
|
|
Version string `json:"version"`
|
|
Entry string `json:"entry"`
|
|
Runtime string `json:"runtime"`
|
|
Log struct {
|
|
Output string `json:"output"`
|
|
} `json:"log"`
|
|
}
|
|
|
|
func LoadTreeConfig(root string) (*RootConfig, error) {
|
|
cfgPath := filepath.Join(root, "config.json")
|
|
b, err := os.ReadFile(cfgPath)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
var cfg RootConfig
|
|
if err := json.Unmarshal(b, &cfg); err != nil {
|
|
return nil, err
|
|
}
|
|
return &cfg, nil
|
|
}
|
|
|
|
func OpenDB(cfg *RootConfig, root string) (*gorm.DB, error) {
|
|
switch cfg.Data.Driver {
|
|
case "sqlite":
|
|
dbPath := filepath.Join(root, cfg.Data.Path)
|
|
db, err := gorm.Open(sqlite.Open(dbPath), &gorm.Config{})
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return db, nil
|
|
default:
|
|
return nil, fmt.Errorf("unsupported db driver: %s", cfg.Data.Driver)
|
|
}
|
|
}
|
|
|
|
func FindFunction(db *gorm.DB, name, version string) (*Function, error) {
|
|
var f Function
|
|
if version == "latest" {
|
|
err := db.Where("function_name = ? AND deleted_at IS NULL", name).
|
|
Order("created_at DESC").
|
|
First(&f).Error
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
} else {
|
|
if err := db.Where("function_name = ? AND version = ? AND deleted_at IS NULL", name, version).
|
|
First(&f).Error; err != nil {
|
|
return nil, err
|
|
}
|
|
}
|
|
return &f, nil
|
|
}
|
|
|
|
func LoadFunctionConfig(root, funcName, funcPath string) (*FuncConfig, error) {
|
|
cfgFile := filepath.Join(root, funcName, funcPath, "config.json")
|
|
b, err := os.ReadFile(cfgFile)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
var cfg FuncConfig
|
|
if err := json.Unmarshal(b, &cfg); err != nil {
|
|
return nil, err
|
|
}
|
|
return &cfg, nil
|
|
}
|