controller.go 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188
  1. package abango
  2. import (
  3. "encoding/json"
  4. "io/ioutil"
  5. "strings"
  6. "time"
  7. e "github.com/dabory/abango-rest/etc"
  8. "github.com/go-xorm/xorm"
  9. "gopkg.in/yaml.v2"
  10. )
  11. func (c *Controller) Init() (int, string) {
  12. var gtb GateTokenBase
  13. var gtbStr string
  14. var err error
  15. if XConfig["IsYDBFixed"] == "Yes" {
  16. data, err := ioutil.ReadFile("models/custom.yml")
  17. if err != nil {
  18. return 507, e.LogStr("ASDFQEWFA", "Can NOT Read custom.yml")
  19. }
  20. var config Config
  21. if err := yaml.Unmarshal(data, &config); err == nil {
  22. c.Gtb = config.Source
  23. c.Gtb.ConnString = config.Source.ConnStr // custom.yml의 Variable name 이 서로 달라서 복사해줌.
  24. } else {
  25. return 507, e.LogStr("ASDWEWFA", "connString in custom.yml format mismatch ")
  26. }
  27. } else {
  28. if c.GateToken == "" {
  29. return 505, e.LogStr("QWCAFVD", "GateToken is Empty: ")
  30. }
  31. if gtbStr, err = MdbView(c.GateToken); err != nil {
  32. return 505, e.LogStr("QWFAECD", "GateToken Not Found in MemoryDB: "+c.GateToken)
  33. }
  34. if err := json.Unmarshal([]byte(gtbStr), &gtb); err == nil {
  35. c.Gtb = gtb
  36. } else {
  37. return 505, e.LogStr("QWFAEC1AFVDS", "AfterBase64Content Format mismatch: "+c.GateToken)
  38. }
  39. }
  40. if status, msg := c.AttachDB(); status != 200 { // DB 까지 붙여야 memory error 가 안난다.
  41. return status, e.LogStr("PBUYJM-", msg)
  42. }
  43. return 200, ""
  44. }
  45. type Config struct {
  46. Source GateTokenBase
  47. }
  48. type Target struct {
  49. Type string `yaml:"type"`
  50. Language string `yaml:"language"`
  51. OutputDir string `yaml:"output_dir"`
  52. }
  53. func (c *Controller) AttachDB() (int, string) {
  54. var err error
  55. if c.Db, err = xorm.NewEngine(XConfig["DbType"], c.Gtb.ConnString); err != nil {
  56. return 600, e.LogStr("ADASEF", "DBEngine Open Error")
  57. }
  58. var connHint string
  59. strArr := strings.Split(c.Gtb.ConnString, "@tcp")
  60. if len(strArr) == 2 {
  61. connHint = strArr[1]
  62. } else {
  63. return 507, e.LogStr("ASDFQEWFA", "connString format mismatch: "+strArr[1])
  64. }
  65. c.Db.ShowSQL(false)
  66. c.Db.SetMaxOpenConns(100)
  67. c.Db.SetMaxIdleConns(20)
  68. c.Db.SetConnMaxLifetime(60 * time.Second)
  69. if _, err := c.Db.IsTableExist("aaa"); err == nil {
  70. return 200, e.LogStr("ASDFASFQFE", "YDB connection in "+connHint)
  71. } else {
  72. return 600, e.LogStr("PMUHIUYBUYJM-", "YDB connection Fail in "+connHint)
  73. }
  74. return 200, ""
  75. }
  76. // func (c *Controller) Init(ask AbangoAsk) {
  77. // c.ServerVars = make(map[string]string) // 반드시 할당해줘야 함.
  78. // c.Data = make(map[interface{}]interface{})
  79. // c.Ctx.Ask = ask
  80. // c.ConnString = XConfig["KafkaConnect"]
  81. // c.Ctx.ReturnTopic = c.Ctx.Ask.UniqueId
  82. // for _, p := range c.Ctx.Ask.ServerParams {
  83. // c.ServerVars[p.Key] = p.Value
  84. // }
  85. // c.GetAbangoAccessAndDb()
  86. // }
  87. // func (c *Controller) InitNormal() {
  88. // c.ServerVars = make(map[string]string) // 반드시 할당해줘야 함.
  89. // c.Data = make(map[interface{}]interface{})
  90. // //c.Ctx.ReturnTopic = "ljsldjfalsdfja" // 여기서 메모리 할당이 한됨'
  91. // c.GetAbangoAccessAndDb()
  92. // }
  93. // func (c *Controller) KafkaAnswer(body string) {
  94. // // c.Ctx.Answer.Body = []byte(body) // 쓸데없는 것 같은데 나중에 지
  95. // // e.Tp("ReturnTopic=" + c.Ctx.ReturnTopic)
  96. // if _, _, err := KafkaProducer(body,
  97. // c.Ctx.ReturnTopic, c.ConnString, XConfig["api_method"]); err != nil {
  98. // e.MyErr("WERRWEEWQRFDFHQW", err, false)
  99. // }
  100. // }
  101. func (c *Controller) AnswerJson() {
  102. // var ret []byte
  103. // if c.Data["json"] == nil {
  104. // msg := " QVCZEFAQWERQ " + c.Ctx.Ask.AskName + "[\"" + c.Ctx.Ask.ApiType + "\"] Data[json] is empty !"
  105. // e.MyErr(msg, errors.New(""), true)
  106. // return
  107. // }
  108. // if c.ServerVars["indent_answer"] == "yes" {
  109. // ret, _ = json.MarshalIndent(c.Data["json"], "", " ")
  110. // } else {
  111. // ret, _ = json.Marshal(c.Data["json"])
  112. // }
  113. // // e.Tp(string(ret))
  114. // if c.Ctx.Ask.ApiType == "Kafka" {
  115. // c.KafkaAnswer(string(ret))
  116. // } else if c.Ctx.Ask.ApiType == "gRpc" {
  117. // // 점진적으로 채워나가자.
  118. // } else if c.Ctx.Ask.ApiType == "Rest" {
  119. // // 점진적으로 채워나가자.
  120. // }
  121. }
  122. func (c *Controller) GetAbangoAccessAndDb() error {
  123. // if err := c.GetAccessAuth(); err == nil {
  124. // var err2 error
  125. // if c.Db, err2 = xorm.NewEngine(c.Access.DbType, c.Access.DbConnStr); err2 == nil {
  126. // // db, err := xorm.NewEngine(XEnc.DbType, "root:root@tcp(127.0.0.1:3306)/kangan?charset=utf8&parseTime=True")
  127. // strArr := strings.Split(c.Access.DbConnStr, "@tcp")
  128. // if len(strArr) == 2 {
  129. // e.OkLog(strArr[1])
  130. // } else {
  131. // e.MyErr(strArr[1], err2, true)
  132. // return err2
  133. // }
  134. // c.Db.ShowSQL(false)
  135. // c.Db.SetMaxOpenConns(100)
  136. // c.Db.SetMaxIdleConns(20)
  137. // c.Db.SetConnMaxLifetime(60 * time.Second)
  138. // if _, err := c.Db.IsTableExist("admin_menu"); err != nil {
  139. // e.MyErr("DB DISconnected in "+strArr[1], err, true)
  140. // } else {
  141. // e.OkLog("DB connect in " + strArr[1])
  142. // }
  143. // } else {
  144. // e.MyErr("xorm.NewEngine", err, true)
  145. // }
  146. // } else {
  147. // e.MyErr("GetAccessAuth", err, true)
  148. // }
  149. return nil
  150. }
  151. func (c *Controller) GetAccessAuth() error {
  152. return nil
  153. }