testtrigger.go 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179
  1. package main
  2. import (
  3. //"fmt"
  4. //"time"
  5. //"math"
  6. . "git.wecise.com/wecise/odbserver/odb"
  7. "git.wecise.com/wecise/odbserver/odb/test"
  8. "gitee.com/wecisecode/util/logger"
  9. )
  10. // CGO_ENABLED=1 go run --ldflags '-linkmode external -extldflags "-static"' testtrigger.go
  11. // #cgo LDFLAGS: -L/opt/odbserver/sqlite -lsqlite -ldl
  12. // #include "/opt/odbserver/sqlite/sqlite.h"
  13. // #include <stdint.h>
  14. // #include <stdlib.h>
  15. // extern int64_t uhaha_seed;
  16. // extern int64_t uhaha_ts;
  17. // void uhaha_begin_reader();
  18. // void uhaha_end_reader();
  19. func main() {
  20. //options := map[string]interface{} {"cache":odb.CacheAll}
  21. //g,err:= odb.New( options )
  22. //option := &StoreOption{Cache:CacheAll}
  23. option := &Option{Cache: CacheAll, Keyspace: "ootest", DisableInitialHostLookup: true, DisableTask: true, DisableNotify: true}
  24. g, err := test.NewG(option)
  25. if err != nil {
  26. logger.Error(err.Error())
  27. } else {
  28. defer g.Close()
  29. }
  30. //logger.SetRollingDaily("C:/test/zkcron/src/test", "test.log")
  31. logger.SetConsole(true)
  32. //logger.SetLevel(logger.DEBUG)
  33. // 测试MQL
  34. /*rst,meta,err := g.Query(`
  35. CREATE TRIGGER test ON /matrix/entity
  36. SCHEDULE before INSERT
  37. PRIORITY 20
  38. STATUS enable
  39. BEGIN
  40. print("hello")
  41. END
  42. `, &QueryMeta{Return: ReturnAll, MinAsteriskField: false, KeepClassID: false} )*/
  43. /*rst,meta,err := g.Query(`
  44. CREATE OR REPLACE TRIGGER test ON /matrix/entity/aix
  45. comment '这是注释'
  46. ##这是注释
  47. SCHEDULE Every 5 SECOND
  48. WHEN name='aix:1'
  49. BIND class, id AS myvar
  50. PRIORITY 20
  51. GROUP 运维组
  52. STATUS enable
  53. begin
  54. for _, v in pairs(myvar) do
  55. log.info(" class : " .. v.class .. ",id : " .. v.id)
  56. end
  57. end
  58. `, &QueryMeta{Return: ReturnAll} )*/
  59. /*rst,meta,err := g.Query(` CREATE OR REPLACE TRIGGER testupdate2 ON /matrix/entity/aix
  60. COMMENT "这是注释"
  61. GROUP 运维组
  62. SCHEDULE before UPDATE
  63. PRIORITY 20
  64. STATUS enable
  65. BEGIN
  66. logger.Info("hello update")
  67. END`, &QueryMeta{Return: ReturnAll} )*/
  68. /*rst,meta,err := g.Query(` alter trigger testupdate ON /matrix/devops/alerts_status set COMMENT = "这是注释2", priority=30, script=BEGIN
  69. logger.Info("hello update0")
  70. END `, &QueryMeta{Return: ReturnAll} )*/
  71. /*rst,meta,err := g.Query(` CREATE OR REPLACE TRIGGER test_cron ON /matrix/devops/alerts_status
  72. COMMENT "这是注释"
  73. GROUP alter_status
  74. SCHEDULE every 30 second
  75. PRIORITY 20
  76. STATUS enable
  77. WHEN severity > 20
  78. BIND id, identifier, domaingroup, manager, node, altergroup, alterkey, type, lastoccurrence AS problems
  79. BEGIN
  80. local resolution = odb.mql("select node from /matrix/devops/alerts_status")
  81. for _, pv in pairs(problems) do
  82. for _,rv in pairs(resolution) do
  83. log.info(pv.node)
  84. end
  85. end
  86. END`, &QueryMeta{Return: ReturnAll} )
  87. */
  88. //rst,meta,err := g.Query(` alter trigger testupdate ON /matrix/entity/aix set status=enable `, &QueryMeta{Return: ReturnAll} )
  89. //rst,meta,err := g.Query(` drop trigger on /matrix/entity/aix`, &QueryMeta{Return: ReturnAll} )
  90. /*rst,meta,err := g.Query(` create trigger generic_clear on /matrix/devops/alert
  91. schedule every 30 second
  92. when severity>2 and status = 0
  93. bind id,ip,group,entity,inst,status as problems
  94. priority 20
  95. group network
  96. status enable
  97. begin
  98. for _,v in pairs(problems) do
  99. local mql = "select id from /matrix/devops/alert where ip = ? and group = ? and entity = ? and inst = ? and status = 0 and severity <=2 "
  100. local rec = odb.mql(mql,v.ip,v.group,v.entity,v.inst)
  101. if rec ~= nil then
  102. odb.mql("update /matrix/devops/alert set status = 12 where id = ?",v.id)
  103. end
  104. end
  105. end`, &QueryMeta{Return: ReturnAll} )*/
  106. //rst,meta,err := g.Query(` drop trigger on group 运维组 `, &QueryMeta{Return: ReturnAll} )
  107. //rst,meta,err := g.Query(` alter trigger on group 运维组 set priority=15, group=hello, status=disable `, &QueryMeta{Return: ReturnAll} )
  108. rst, meta, err := g.Query(`
  109. CREATE OR REPLACE TRIGGER test_cron ON /test/alert_status
  110. COMMENT "这是注释"
  111. GROUP alter_status
  112. SCHEDULE every 30 second
  113. PRIORITY 20
  114. STATUS enable
  115. WHEN severity > 4
  116. BIND id, identifier, domaingroup, manager, node, type, lastoccurrence AS problems
  117. BEGIN
  118. local resolution = odb.mql("select node from /test/alert_status")
  119. for _, pv in pairs(problems) do
  120. log.info(pv.node)
  121. end
  122. END
  123. `)
  124. //rst,meta,err := g.Query(` DROP TRIGGER test ON /matrix/entity `, &QueryMeta{Return: ReturnAll, MinAsteriskField: false, KeepClassID: false} )
  125. //rst,meta,err := g.Query(` SHOW TRIGGER ON /matrix/entity `, &QueryMeta{Return: ReturnAll, MinAsteriskField: false, KeepClassID: false} )
  126. if err != nil {
  127. logger.Info("Query error:" + err.Error())
  128. logger.Warn(meta["type"])
  129. } else {
  130. logger.Info("rst ===>", rst)
  131. //logger.Error("meta ===>", meta)
  132. if meta["trace"] != nil && len(meta["trace"].([]string)) > 0 {
  133. for _, msg := range meta["trace"].([]string) {
  134. logger.Error(msg)
  135. }
  136. }
  137. logger.Warn(meta["columns"])
  138. logger.Warn(meta["params"])
  139. }
  140. }