|
@@ -15,147 +15,63 @@
|
|
|
package meta
|
|
|
|
|
|
import (
|
|
|
- "fmt"
|
|
|
+ "bytes"
|
|
|
"os"
|
|
|
"path"
|
|
|
"strings"
|
|
|
|
|
|
"github.com/lf-edge/ekuiper/internal/conf"
|
|
|
- "github.com/lf-edge/ekuiper/internal/pkg/filex"
|
|
|
)
|
|
|
|
|
|
-type (
|
|
|
- fileFunc struct {
|
|
|
- Name string `json:"name"`
|
|
|
- Example string `json:"example"`
|
|
|
- Hint *fileLanguage `json:"hint"`
|
|
|
- Aggregate bool `json:"aggregate"`
|
|
|
- ArgsFields []*fileField `json:"args"`
|
|
|
- Node *fileNode `json:"node"`
|
|
|
- Outputs []interface{} `json:"outputs"`
|
|
|
- }
|
|
|
- fileFuncs struct {
|
|
|
- About *fileAbout `json:"about"`
|
|
|
- Name string `json:"name"`
|
|
|
- Version string `json:"version"`
|
|
|
- FiFuncs []*fileFunc `json:"functions"`
|
|
|
- }
|
|
|
- uiFunc struct {
|
|
|
- Name string `json:"name"`
|
|
|
- Example string `json:"example"`
|
|
|
- Hint *language `json:"hint"`
|
|
|
- Aggregate bool `json:"aggregate"`
|
|
|
- ArgsFields []*fileField `json:"args"`
|
|
|
- Node *node `json:"node"`
|
|
|
- Outputs []interface{} `json:"outputs"`
|
|
|
- }
|
|
|
- uiFuncs struct {
|
|
|
- About *about `json:"about"`
|
|
|
- Name string `json:"name"`
|
|
|
- Version string `json:"version"`
|
|
|
- UiFuncs []*uiFunc `json:"functions"`
|
|
|
- }
|
|
|
-)
|
|
|
-
|
|
|
-func newUiFuncs(fi *fileFuncs) *uiFuncs {
|
|
|
- if nil == fi {
|
|
|
- return nil
|
|
|
- }
|
|
|
- uis := new(uiFuncs)
|
|
|
- uis.About = newAbout(fi.About)
|
|
|
- uis.Name = fi.Name
|
|
|
- for _, v := range fi.FiFuncs {
|
|
|
- ui := new(uiFunc)
|
|
|
- ui.Name = v.Name
|
|
|
- ui.Example = v.Example
|
|
|
- ui.Hint = newLanguage(v.Hint)
|
|
|
- ui.Aggregate = v.Aggregate
|
|
|
- ui.ArgsFields = v.ArgsFields
|
|
|
- ui.Node = newNode(v.Node)
|
|
|
- ui.Outputs = make([]interface{}, len(v.Outputs))
|
|
|
- for k, field := range v.Outputs {
|
|
|
- ui.Outputs[k] = field
|
|
|
- }
|
|
|
- uis.UiFuncs = append(uis.UiFuncs, ui)
|
|
|
- }
|
|
|
- return uis
|
|
|
-}
|
|
|
+func readFuncMetaDir() []fileContent {
|
|
|
+ var filesByte []fileContent
|
|
|
|
|
|
-var gFuncmetadata = make(map[string]*uiFuncs)
|
|
|
-
|
|
|
-func ReadFuncMetaDir(checker InstallChecker) error {
|
|
|
confDir, err := conf.GetConfLoc()
|
|
|
if nil != err {
|
|
|
- return err
|
|
|
+ return nil
|
|
|
}
|
|
|
|
|
|
dir := path.Join(confDir, "functions")
|
|
|
files, err := os.ReadDir(dir)
|
|
|
if nil != err {
|
|
|
- return err
|
|
|
+ return nil
|
|
|
}
|
|
|
for _, file := range files {
|
|
|
fname := file.Name()
|
|
|
if !strings.HasSuffix(fname, ".json") {
|
|
|
continue
|
|
|
}
|
|
|
-
|
|
|
- if err := ReadFuncMetaFile(path.Join(dir, fname), checker(strings.TrimSuffix(fname, ".json"))); nil != err {
|
|
|
- return err
|
|
|
- }
|
|
|
+ filesByte = append(filesByte, readFuncMetaFile(path.Join(dir, fname)))
|
|
|
}
|
|
|
|
|
|
confDir, err = conf.GetDataLoc()
|
|
|
if nil != err {
|
|
|
- return err
|
|
|
+ return nil
|
|
|
}
|
|
|
|
|
|
dir = path.Join(confDir, "functions")
|
|
|
files, err = os.ReadDir(dir)
|
|
|
if nil != err {
|
|
|
- return err
|
|
|
+ return nil
|
|
|
}
|
|
|
for _, file := range files {
|
|
|
fname := file.Name()
|
|
|
if !strings.HasSuffix(fname, ".json") {
|
|
|
continue
|
|
|
}
|
|
|
-
|
|
|
- if err := ReadFuncMetaFile(path.Join(dir, fname), checker(strings.TrimSuffix(fname, ".json"))); nil != err {
|
|
|
- return err
|
|
|
- }
|
|
|
- }
|
|
|
- return nil
|
|
|
-}
|
|
|
-
|
|
|
-func UninstallFunc(name string) {
|
|
|
- if ui, ok := gFuncmetadata[name+".json"]; ok {
|
|
|
- if nil != ui.About {
|
|
|
- ui.About.Installed = false
|
|
|
- }
|
|
|
+ filesByte = append(filesByte, readFuncMetaFile(path.Join(dir, fname)))
|
|
|
}
|
|
|
+ return filesByte
|
|
|
}
|
|
|
|
|
|
-func ReadFuncMetaFile(filePath string, installed bool) error {
|
|
|
+func readFuncMetaFile(filePath string) fileContent {
|
|
|
fiName := path.Base(filePath)
|
|
|
- fis := new(fileFuncs)
|
|
|
- err := filex.ReadJsonUnmarshal(filePath, fis)
|
|
|
- if nil != err {
|
|
|
- return fmt.Errorf("filePath:%s err:%v", filePath, err)
|
|
|
- }
|
|
|
- if nil == fis.About {
|
|
|
- return fmt.Errorf("not found about of %s", filePath)
|
|
|
- } else {
|
|
|
- fis.About.Installed = installed
|
|
|
- }
|
|
|
- gFuncmetadata[fiName] = newUiFuncs(fis)
|
|
|
+ sliByte, _ := os.ReadFile(filePath)
|
|
|
conf.Log.Infof("funcMeta file : %s", fiName)
|
|
|
- return nil
|
|
|
+ return sliByte
|
|
|
}
|
|
|
|
|
|
-func GetFunctions() (ret []*uiFuncs) {
|
|
|
- for _, v := range gFuncmetadata {
|
|
|
- ret = append(ret, v)
|
|
|
- }
|
|
|
- return ret
|
|
|
+func GetFunctions() bytes.Buffer {
|
|
|
+ files := readFuncMetaDir()
|
|
|
+ return ConstructJsonArray(files)
|
|
|
}
|