package main import ( //"fmt" //"time" "gitee.com/wecisecode/util/logger" . "git.wecise.com/wecise/odbserver/odb" ) // CGO_ENABLED=1 go run --ldflags '-linkmode external -extldflags "-static"' testdw.go // #cgo LDFLAGS: -L/opt/odbserver/sqlite -lsqlite -ldl // #include "/opt/odbserver/sqlite/sqlite.h" // #include // #include // extern int64_t uhaha_seed; // extern int64_t uhaha_ts; // void uhaha_begin_reader(); // void uhaha_end_reader(); func main() { //options := map[string]interface{} {"cache":odb.CacheAll} //g,err:= odb.New( options ) //option := &StoreOption{Cache:CacheAll} option := &Option{ Cache:CacheAll, Keyspace:"matrix", DisableInitialHostLookup:true, DisableTask: true, DisableNotify: true } g,err:= test.NewG(option) if err != nil { logger.Error(err.Error()) }else{ defer g.Close() } //logger.SetRollingDaily("C:/test/zkcron/src/test", "test.log") logger.SetConsole(true) //logger.SetLevel(logger.DEBUG) //------------------------------------------ //insert into datawindow(log_insert, '/matrix/test/bucketlog', 'bklog', 'file1.log') values( '{"id": "linux:wecise", "msg": "1-1--DEBUG [CompactionExecutor:584] 2020-07-25 00:49:59,666 TimeWindowCompactionStrategy.java:124 - TWCS skipping check for fully expired SSTables"}' ) datawindow(log_insert).insert( "/matrix/test/bucketlog", "bklog", "file1.log", "linux:wecise", "msg": "1-1--DEBUG [CompactionExecutor:584] 2020-07-25 00:49:59,666 TimeWindowCompactionStrategy.java:124 - TWCS skipping check for fully expired SSTables" ) // put(key, value) return => last_timestamp, total_size // get(key) return nano_timestamp, value // delete(key , nano_timestamp) // clear( size ) => 前几条, 或全部 // https://github.com/hoisie/mustache // $size ,$timestamp //------------------------------------------ rst,meta,err := g.Query(` CREATE DataWindow log_insert <$class, $bucket, $file> INPUT class, bucket, file, id, msg SCHEDULE AFTER INSERT COMMENT 'batch insert log' TIMEOUT 15 SECOND SIZE 1000 WHEN fullsize or timeout THEN MQL `insert into {{$class}} (id, {{$bucket}}[ {{$file}} ]) values (?, ?)` , $id , join( msg, "\n") clear $size END `) rst,meta,err := g.Query(` CREATE DataWindow auto_closed <$class> INPUT class, status, eventid COMMENT 'auto close event' SCHEDULE BEFORE INSERT SLIDING 5 MINUTE WHEN status = 'open' and eventid = $eventid AS $serial THEN MQL `update {{class}} SET status='closed' WHERE id = ?` $eventid CANCEL DELETE $serial END `) rst,meta,err := g.Query(` CREATE DataWindow dyn_thred <$EventClass, $Field> INPUT EventClass, Field, host, param, value SCHEDULE BEFORE INSERT SLIDING 1 HOUR WHEN max(value) < $value THEN MQL `INSERT INTO {{ $EventClass}} (msg) VALUES (?) ` `in $Host, current $param value is {{ $value }} , too high .` END `) rst,meta,err := g.Query(` CREATE DataWindow chain <$transid> INPUT transid COMMENT 'chain log analysis' TIMEOUT 1 MINUTE SIZE 5 WHEN fullsize THEN FORWARD "queue name" data clear END WHEN timeout THEN log info 'tmplate' clear END `) rst,meta,err := g.Query(` CREATE DataWindow chain <$transid> INPUT transid COMMENT 'chain log analysis' TIMEOUT 1 MINUTE SIZE 5 WHEN fullsize THEN FORWARD "queue name" json(data) clear END WHEN timeout THEN foreach( data, $v => { $ts = gjson($v, "timestamp") log info `trans $transid isn’t complete . timestamp $ts` } ) $timestamp = timestamp MQL `INSERT INTO /matrix/devops/alerts_stats (msg) VALUES (?)` `trans $transid isn’t complete .` clear END `) //rst,meta,err := g.Query(`update /matrix/test set name="test8" , test="test" WHERE test2 = "Test22"`) if err != nil { logger.Info("Query error:"+err.Error()) logger.Warn(meta["type"]) }else{ logger.Info("rst ===>", rst) //logger.Error("meta ===>", meta) if meta["trace"] != nil && len(meta["trace"].([]string)) > 0 { for _, msg := range meta["trace"].([]string) { logger.Error(msg) } } logger.Warn(meta["columns"]) } }