|
@@ -0,0 +1,89 @@
|
|
|
+package main
|
|
|
+
|
|
|
+import (
|
|
|
+ "fmt"
|
|
|
+ "os"
|
|
|
+ "time"
|
|
|
+
|
|
|
+ "git.wecise.com/wecise/odb-go/odbc"
|
|
|
+ "git.wecise.com/wecise/odbtools/omtool"
|
|
|
+ "github.com/wecisecode/util/cmap"
|
|
|
+)
|
|
|
+
|
|
|
+var mcfg, logger = odbc.SetDefaultAppName("odbtools")
|
|
|
+
|
|
|
+func main() {
|
|
|
+ odbtools := NewODBTools()
|
|
|
+ e := odbtools.Init()
|
|
|
+ if e != nil {
|
|
|
+ println(fmt.Sprint(e))
|
|
|
+ os.Exit(1)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ e = odbtools.Run()
|
|
|
+ if e != nil {
|
|
|
+ println(fmt.Sprint(e))
|
|
|
+ os.Exit(1)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ time.Sleep(1 * time.Second)
|
|
|
+}
|
|
|
+
|
|
|
+type ODBTools struct {
|
|
|
+ tools cmap.ConcurrentMap[omtool.OMTool, bool]
|
|
|
+}
|
|
|
+
|
|
|
+func NewODBTools() *ODBTools {
|
|
|
+ tools := cmap.NewSingle(map[omtool.OMTool]bool{
|
|
|
+ // datasync.NewDataSync(): false,
|
|
|
+ })
|
|
|
+ return &ODBTools{
|
|
|
+ tools: tools,
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+func (ots *ODBTools) Init() error {
|
|
|
+ for i := range ots.tools.IterBuffered() {
|
|
|
+ e := i.Key.Init()
|
|
|
+ if e != nil {
|
|
|
+ if !odbc.NoConfError.Contains(e) {
|
|
|
+ return e
|
|
|
+ }
|
|
|
+ ots.tools.Set(i.Key, false)
|
|
|
+ } else {
|
|
|
+ ots.tools.Set(i.Key, true)
|
|
|
+ logger.Info(fmt.Sprintf("%T inited", i.Key))
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return nil
|
|
|
+}
|
|
|
+
|
|
|
+func (ots *ODBTools) Run() error {
|
|
|
+ dones := map[omtool.OMTool]<-chan error{}
|
|
|
+ for i := range ots.tools.IterBuffered() {
|
|
|
+ configured := i.Val
|
|
|
+ if configured {
|
|
|
+ done := i.Key.Run()
|
|
|
+ if done != nil {
|
|
|
+ dones[i.Key] = done
|
|
|
+ } else {
|
|
|
+ logger.Info(fmt.Sprintf("%T not run", i.Key))
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ for len(dones) > 0 {
|
|
|
+ for kt, done := range dones {
|
|
|
+ select {
|
|
|
+ case e := <-done:
|
|
|
+ logger.Info(fmt.Sprintf("%T done", kt))
|
|
|
+ if e != nil {
|
|
|
+ logger.Error(e)
|
|
|
+ }
|
|
|
+ delete(dones, kt)
|
|
|
+ default:
|
|
|
+ }
|
|
|
+ }
|
|
|
+ time.Sleep(1 * time.Second)
|
|
|
+ }
|
|
|
+ return nil
|
|
|
+}
|