main.go 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. package main
  2. import (
  3. "fmt"
  4. "os"
  5. "time"
  6. "git.wecise.com/wecise/odb-go/odbc"
  7. "git.wecise.com/wecise/odbtools/omtool"
  8. "github.com/wecisecode/util/cmap"
  9. )
  10. var mcfg, logger = odbc.SetDefaultAppName("odbtools")
  11. func main() {
  12. odbtools := NewODBTools()
  13. e := odbtools.Init()
  14. if e != nil {
  15. println(fmt.Sprint(e))
  16. os.Exit(1)
  17. return
  18. }
  19. e = odbtools.Run()
  20. if e != nil {
  21. println(fmt.Sprint(e))
  22. os.Exit(1)
  23. return
  24. }
  25. time.Sleep(1 * time.Second)
  26. }
  27. type ODBTools struct {
  28. tools cmap.ConcurrentMap[omtool.OMTool, bool]
  29. }
  30. func NewODBTools() *ODBTools {
  31. tools := cmap.NewSingle(map[omtool.OMTool]bool{
  32. // datasync.NewDataSync(): false,
  33. })
  34. return &ODBTools{
  35. tools: tools,
  36. }
  37. }
  38. func (ots *ODBTools) Init() error {
  39. for i := range ots.tools.IterBuffered() {
  40. e := i.Key.Init()
  41. if e != nil {
  42. if !odbc.NoConfError.Contains(e) {
  43. return e
  44. }
  45. ots.tools.Set(i.Key, false)
  46. } else {
  47. ots.tools.Set(i.Key, true)
  48. logger.Info(fmt.Sprintf("%T inited", i.Key))
  49. }
  50. }
  51. return nil
  52. }
  53. func (ots *ODBTools) Run() error {
  54. dones := map[omtool.OMTool]<-chan error{}
  55. for i := range ots.tools.IterBuffered() {
  56. configured := i.Val
  57. if configured {
  58. done := i.Key.Run()
  59. if done != nil {
  60. dones[i.Key] = done
  61. } else {
  62. logger.Info(fmt.Sprintf("%T not run", i.Key))
  63. }
  64. }
  65. }
  66. for len(dones) > 0 {
  67. for kt, done := range dones {
  68. select {
  69. case e := <-done:
  70. logger.Info(fmt.Sprintf("%T done", kt))
  71. if e != nil {
  72. logger.Error(e)
  73. }
  74. delete(dones, kt)
  75. default:
  76. }
  77. }
  78. time.Sleep(1 * time.Second)
  79. }
  80. return nil
  81. }