testodb.go 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202
  1. package main
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. "log"
  6. "time"
  7. )
  8. type odbDemo struct {
  9. g *odb.Gutil
  10. }
  11. func (demo *odbDemo) graph() {
  12. //ret, _, err := g.Query(`match ('biz:b1')-[:contain]->()-[:contain]->()`)
  13. ret, meta, err := demo.g.Query(`match ('biz:查账系统')-[*]->() until 'router:router1','router:router2'`)
  14. if err != nil {
  15. log.Fatal(err)
  16. }
  17. fmt.Println("Meta:")
  18. mb, err := json.MarshalIndent(meta, "", " ")
  19. if err != nil {
  20. log.Fatal(err)
  21. }
  22. fmt.Println(string(mb))
  23. fmt.Println("Data:")
  24. b, err := json.MarshalIndent(ret, "", " ")
  25. if err != nil {
  26. log.Fatal(err)
  27. }
  28. fmt.Println(string(b))
  29. fmt.Println(len(ret[0]["graph"].(*odb.CypherGraph).Edges))
  30. if len(ret) != 0 {
  31. var endPoints []string
  32. allSource := make(map[string]struct{})
  33. allTarget := make(map[string]struct{})
  34. graph := ret[0]["graph"].(*odb.CypherGraph)
  35. for _, edge := range graph.Edges {
  36. fmt.Println(edge["source"])
  37. allSource[edge["source"].(string)] = struct{}{}
  38. allTarget[edge["target"].(string)] = struct{}{}
  39. }
  40. fmt.Println(allSource)
  41. fmt.Println(allTarget)
  42. for targetID := range allTarget {
  43. if _, ok := allSource[targetID]; !ok {
  44. endPoints = append(endPoints, targetID)
  45. }
  46. }
  47. fmt.Println(endPoints)
  48. fmt.Print(len(ret[0]["graph"].(*odb.CypherGraph).Edges))
  49. }
  50. }
  51. func (demo *odbDemo) classTree() {
  52. start := time.Now()
  53. obj, err := demo.g.GetClassChildren("/matrix/entity/pe/electric_sys", true)
  54. if err != nil {
  55. log.Fatal(err)
  56. }
  57. _, err = json.Marshal(obj)
  58. log.Println(time.Now().Sub(start).String())
  59. }
  60. func (demo *odbDemo) testCql() {
  61. ret, err := demo.g.RawQuery(`select * from matrix.object limit 1`)
  62. if err != nil {
  63. log.Fatal(err)
  64. }
  65. fmt.Println(ret)
  66. }
  67. func (demo *odbDemo) testPrepare() {
  68. stmt := `insert into /matrix/system/depot (tags, name, version, remark) values (?, ?, ?, ?)`
  69. ps, err := demo.g.Prepare(stmt, &odb.QueryMeta{Return: odb.ReturnColMeta})
  70. if err != nil {
  71. log.Fatal(err)
  72. }
  73. values := []interface{}{
  74. `["SCRIPT"]`,
  75. "test12",
  76. "10",
  77. "null",
  78. }
  79. data, schema, err := ps.Exec(values...)
  80. if err != nil {
  81. log.Fatal(err)
  82. }
  83. log.Println("data:", data)
  84. log.Println("schema:", schema)
  85. }
  86. func (demo *odbDemo) testMql() {
  87. data, meta, err := demo.g.Query("select id, name, biz, contain from /matrix/devops/event limit 10", &odb.QueryMeta{Return: odb.ReturnColMeta})
  88. if err != nil {
  89. log.Fatal(err)
  90. }
  91. fmt.Println("Meta:")
  92. mb, err := json.MarshalIndent(meta, "", " ")
  93. if err != nil {
  94. log.Fatal(err)
  95. }
  96. fmt.Println(string(mb))
  97. fmt.Println("Data:")
  98. b, err := json.MarshalIndent(data, "", " ")
  99. if err != nil {
  100. log.Fatal(err)
  101. }
  102. fmt.Println(string(b))
  103. }
  104. func (demo *odbDemo) testBucket() {
  105. //mql := `select id, host, bk2["iparam1", "iparam2"].time('2020-05-23 00:00:00', '2020-05-23 23:59:59') from testbucket4`
  106. mql := `SELECT id, bk2 FROM /matrix/testbucket7/subbk`
  107. data, meta, err := demo.g.Query(mql)
  108. if err != nil {
  109. log.Fatal(err)
  110. }
  111. fmt.Println("Meta:")
  112. mb, _ := json.MarshalIndent(meta, "", " ")
  113. fmt.Println("Data:")
  114. db, _ := json.MarshalIndent(data, "", " ")
  115. fmt.Println(string(mb))
  116. fmt.Println(string(db))
  117. }
  118. func main() {
  119. log.SetFlags(log.LstdFlags | log.Lshortfile)
  120. g, err := odb.New(&odb.Option{Cache: odb.CacheAll, DisableInitialHostLookup: true}) // For aliyun
  121. //g, err := odb.New(&odb.Option{Cache:odb.CacheAll})
  122. if err != nil {
  123. log.Fatal(err)
  124. }
  125. demo := &odbDemo{g: g}
  126. //demo.testMql()
  127. //demo.testPrepare()
  128. //demo.testCql()
  129. demo.graph()
  130. //demo.classTree()
  131. //demo.testStreamingSearch()
  132. //demo.testBucket()
  133. //demo.testIndex()
  134. }
  135. /*
  136. [
  137. {
  138. "graph": {
  139. "nodes": [
  140. {
  141. "_icon": "linux",
  142. "class": "/matrix/entity/linux",
  143. "id": "linux:h2"
  144. },
  145. {
  146. "_icon": "cassandra",
  147. "class": "/matrix/entity/cassandra",
  148. "id": "cassandra:c1"
  149. },
  150. {
  151. "_icon": "biz",
  152. "class": "/matrix/entity/biz",
  153. "id": "biz:b1"
  154. },
  155. {
  156. "_icon": "linux",
  157. "class": "/matrix/entity/linux",
  158. "id": "linux:h1"
  159. }
  160. ],
  161. "edges": [
  162. {
  163. "class": "contain",
  164. "id": "biz:b1-linux:h1",
  165. "source": "biz:b1",
  166. "target": "linux:h1"
  167. },
  168. {
  169. "class": "contain",
  170. "id": "biz:b1-linux:h2",
  171. "source": "biz:b1",
  172. "target": "linux:h2"
  173. },
  174. {
  175. "class": "contain",
  176. "id": "linux:h1-cassandra:c1",
  177. "source": "linux:h1",
  178. "target": "cassandra:c1"
  179. }
  180. ],
  181. "paths": null,
  182. "pathtags": null
  183. }
  184. }
  185. ]
  186. */