You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
161 lines
3.7 KiB
161 lines
3.7 KiB
package cache
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"github.com/syndtr/goleveldb/leveldb"
|
|
"github.com/syndtr/goleveldb/leveldb/filter"
|
|
"github.com/syndtr/goleveldb/leveldb/opt"
|
|
"go.mongodb.org/mongo-driver/bson"
|
|
"strings"
|
|
"wss-pool/config"
|
|
"wss-pool/internal"
|
|
"wss-pool/internal/data"
|
|
"wss-pool/logging/applogger"
|
|
"wss-pool/pkg/model"
|
|
"wss-pool/pkg/model/stock"
|
|
)
|
|
|
|
var db *leveldb.DB
|
|
|
|
// initDB
|
|
//
|
|
// @Description:
|
|
func InitDB(name string) {
|
|
o := &opt.Options{
|
|
Filter: filter.NewBloomFilter(10),
|
|
}
|
|
|
|
var tableNamePath string
|
|
switch config.Config.ServerLevel {
|
|
case "test":
|
|
tableNamePath = fmt.Sprintf("./cmd/websocketcollect/db/%v", name)
|
|
default:
|
|
tableNamePath = fmt.Sprintf("/home/ubuntu/wss-server/db/%v", name)
|
|
}
|
|
|
|
dba, err := leveldb.OpenFile(tableNamePath, o)
|
|
if err != nil {
|
|
applogger.Error("OpenFile err:%v", err)
|
|
return
|
|
}
|
|
|
|
db = dba
|
|
}
|
|
|
|
// WriteDB
|
|
//
|
|
// @Description:
|
|
// @param key
|
|
// @param value
|
|
// @return error
|
|
func WriteDB(key, value string) error {
|
|
batch := new(leveldb.Batch)
|
|
batch.Put([]byte(key), []byte(value))
|
|
if err := db.Write(batch, nil); err != nil {
|
|
fmt.Printf("Write err:%v\n", err)
|
|
return err
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// ReadDB
|
|
//
|
|
// @Description:
|
|
// @param key
|
|
// @return []byte
|
|
func ReadDB(key string) []byte {
|
|
data, err := db.Get([]byte(key), nil)
|
|
if err != nil {
|
|
fmt.Printf("OpenFile err:%v\n", err)
|
|
return []byte{}
|
|
}
|
|
|
|
return data
|
|
}
|
|
|
|
// ReadListDB
|
|
//
|
|
// @Description:
|
|
// @return []string
|
|
func ReadListDB() []string {
|
|
var privateKey []string
|
|
iter := db.NewIterator(nil, nil)
|
|
for iter.Next() {
|
|
value := iter.Value()
|
|
privateKey = append(privateKey, string(value))
|
|
}
|
|
iter.Release()
|
|
if err := iter.Error(); err != nil {
|
|
fmt.Printf("iter.Error:%v\n", err)
|
|
return privateKey
|
|
}
|
|
|
|
return privateKey
|
|
}
|
|
|
|
// DeleteByKey
|
|
//
|
|
// @Description:
|
|
// @param key
|
|
// @return error
|
|
func DeleteByKey(key string) error {
|
|
if err := db.Delete([]byte(key), nil); err != nil {
|
|
return err
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// InitShareUsCode
|
|
//
|
|
// @Description: 初始化美股股票代码列表
|
|
func InitShareUsCode() {
|
|
filter := bson.M{"Country": "US", "YesterdayClose": bson.M{"$ne": ""}}
|
|
projection := bson.M{"Code": 1}
|
|
|
|
for _, mongoClient := range data.MgoDbClientMap {
|
|
stockRes := make([]stock.StockPolygon, 0)
|
|
data.MgoPagingFindStructProjectionNew(mongoClient, data.StockList, filter, projection, 20000, 1, -1, &stockRes)
|
|
for _, v := range stockRes {
|
|
if err := WriteDB(v.Code, v.Code); err != nil {
|
|
applogger.Error("sendUsCodeNew err:%v", err)
|
|
continue
|
|
}
|
|
}
|
|
applogger.Info("写入美股股票代码列表:%v", ReadListDB())
|
|
applogger.Debug("写入美股股票代码列表总数:%v", len(ReadListDB()))
|
|
}
|
|
}
|
|
|
|
// InitForexCode
|
|
//
|
|
// @Description: 初始化外汇代码列表
|
|
func InitForexCode() {
|
|
// https://finnhub.io/api/v1/forex/symbol?exchange=oanda&token=cqt0409r01qvdch2gnpgcqt0409r01qvdch2gnq0
|
|
url := fmt.Sprintf("https://%vforex/symbol?exchange=oanda&token=%v", config.Config.FinnhubUs.FinnhubHost, config.Config.FinnhubUs.FinnhubKey)
|
|
applogger.Debug("url data info:%v", url)
|
|
|
|
bodyStr, err := internal.HttpGet(url)
|
|
if err != nil {
|
|
applogger.Error("WriteShareUs err info:%v", err)
|
|
return
|
|
}
|
|
applogger.Debug("new add shareUs code info:%v", bodyStr)
|
|
|
|
var dataForex []model.ForexCodeList
|
|
if err = json.Unmarshal([]byte(bodyStr), &dataForex); err != nil {
|
|
applogger.Error("json.Unmarshal err info:%v", err)
|
|
return
|
|
}
|
|
for _, v := range dataForex {
|
|
code := strings.Replace(v.DisplaySymbol, "/", "", -1)
|
|
if err := WriteDB(code, code); err != nil {
|
|
applogger.Error("sendUsCodeNew err:%v", err)
|
|
continue
|
|
}
|
|
}
|
|
applogger.Info("写入外汇代码列表:%v", ReadListDB())
|
|
applogger.Debug("写入外汇代码列表总数:%v", len(ReadListDB()))
|
|
}
|
|
|