add function handling (basic)
This commit is contained in:
82
internal/worker/handle.go
Normal file
82
internal/worker/handle.go
Normal file
@@ -0,0 +1,82 @@
|
||||
package worker
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"os"
|
||||
"path/filepath"
|
||||
|
||||
"gorm.io/driver/sqlite"
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
type RootConfig struct {
|
||||
Data struct {
|
||||
Driver string `json:"driver"`
|
||||
Path string `json:"path"`
|
||||
} `json:"data"`
|
||||
}
|
||||
|
||||
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"`
|
||||
}
|
||||
|
||||
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 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
|
||||
}
|
||||
Reference in New Issue
Block a user