Compare commits
2 commits
f8bafbbff0
...
edc9c7aecb
Author | SHA1 | Date | |
---|---|---|---|
edc9c7aecb | |||
2b8de67405 |
2 changed files with 47 additions and 7 deletions
|
@ -2,6 +2,7 @@ package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"log"
|
||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -10,17 +11,34 @@ type Resources interface {
|
||||||
AgentInfo() map[string]interface{}
|
AgentInfo() map[string]interface{}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// FILLME creating new plugin interface template
|
||||||
// type NewPluginInterface interface {
|
// type NewPluginInterface interface {
|
||||||
// PluginMethod() returnType
|
// PluginMethod() returnType
|
||||||
// }
|
// }
|
||||||
|
|
||||||
// Loads Plugins and runs them.
|
// Loads Plugins and runs them concurrently.
|
||||||
// When you create a new plugin create a new interface and call this plugin in this function
|
// When you create a new plugin create a new interface and call this plugin in this function
|
||||||
func PluginManager() {
|
func PluginManager() {
|
||||||
var resources Resources = LoadPlugin("resources").(Resources)
|
chanPlug := make(chan interface{})
|
||||||
// var pluginName NewPluginInterface = LoadPlugin("pluginName").(NewPluginInterface)
|
|
||||||
|
go LoadPlugin("resources", chanPlug)
|
||||||
|
res, ok := <-chanPlug
|
||||||
|
var resources Resources = res.(Resources)
|
||||||
|
checkPlugin(res, ok)
|
||||||
|
|
||||||
|
// FILLME Loading new plugin template
|
||||||
|
// go LoadPlugin("pluginName", chanPlug)
|
||||||
|
// res, ok = <-chanPlug
|
||||||
|
// var pluginName NewPluginInterface = res.(NewPluginInterface)
|
||||||
|
// checkPlugin(res, ok)
|
||||||
|
|
||||||
|
// Run plugins concurrently and log out
|
||||||
for {
|
for {
|
||||||
logPlugin("AgentInfo", resources.AgentInfo())
|
go logPlugin("AgentInfo", resources.AgentInfo())
|
||||||
|
|
||||||
|
// FILLME Running/Logout a plugin template
|
||||||
|
// go logPlugin("InfoAboutFunction", pluginName.Function() )
|
||||||
|
|
||||||
time.Sleep(30 * time.Second)
|
time.Sleep(30 * time.Second)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -33,6 +51,23 @@ func logPlugin(title string, mp map[string]interface{}) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Checks plugin status
|
||||||
|
func checkPlugin(plugVal interface{}, status bool) {
|
||||||
|
if status {
|
||||||
|
if plugVal == nil {
|
||||||
|
log.Fatal("Plugin loaded but there is no value!")
|
||||||
|
} else {
|
||||||
|
log.Println("Plugin loaded and ready to use")
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if plugVal == nil {
|
||||||
|
log.Fatal("Plugin closed and there is no value! ")
|
||||||
|
} else {
|
||||||
|
log.Fatal("Plugin closed or there is an error")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// // TODO response to Lider
|
// // TODO response to Lider
|
||||||
// // func createResponse() {
|
// // func createResponse() {
|
||||||
|
|
||||||
|
|
|
@ -8,11 +8,11 @@ import (
|
||||||
"git.aliberksandikci.com.tr/Liderahenk/ahenk-go/pkg/utils"
|
"git.aliberksandikci.com.tr/Liderahenk/ahenk-go/pkg/utils"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Load Plugin placed in PluginDir, returns empty interface.
|
// Load Plugin placed in PluginDir, returns empty interface with channel
|
||||||
// Do not forget to cast in plugin manager
|
// Do not forget to cast in plugin manager
|
||||||
//
|
//
|
||||||
// Give Plugin Name as argument and be sure you compiled plugins with `-buildmode=plugin` to PluginDir as `pluginname.so`
|
// Give Plugin Name as argument and be sure you compiled plugins with `-buildmode=plugin` to PluginDir as `pluginname.so`
|
||||||
func LoadPlugin(plugName string) interface{} {
|
func LoadPlugin(plugName string, chn chan interface{}) {
|
||||||
|
|
||||||
// TODO if error caugth try without relative path, this will be good for local testing
|
// TODO if error caugth try without relative path, this will be good for local testing
|
||||||
plug, err := plugin.Open(PluginDir + plugName + ".so")
|
plug, err := plugin.Open(PluginDir + plugName + ".so")
|
||||||
|
@ -28,5 +28,10 @@ func LoadPlugin(plugName string) interface{} {
|
||||||
fmt.Println("unexpected type from module symbol")
|
fmt.Println("unexpected type from module symbol")
|
||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
}
|
}
|
||||||
return plugOut
|
chn <- plugOut
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// NEXT implement unload function
|
||||||
|
// func UnloadPlugin(plugName string) interface{} {
|
||||||
|
|
||||||
|
// }
|
||||||
|
|
Loading…
Reference in a new issue