Commit 945f256c by yunpeng.song

替换第三发日志库,修改配置文件为json。

parent 91aa9a4e
{
"servercfg":{
"traceid":"ser1",
"project":"clientserver"
},
"prefix":{
"msgname":"",
"clientname":"",
"clientserver":"",
"msgstatusname":"",
"routestatusname":""
}
}
\ No newline at end of file
......@@ -27,8 +27,6 @@ const OVER_ClIENT_TIME = 30
const ROUTE_MAX_RECV_LEN = 10240
const ROUTE_HOST_IP_PORT = "127.0.0.1:38000"
//const MyNmae = "ser1"
//注册服务类型
type SSERTYPE uint32
......@@ -47,7 +45,7 @@ type SerCommand struct {
Data [1024]byte
}
var Ctrl_Config_ = NewCtrlConfig_
var Ctrl_Config_ = newCfg()
type Config_ struct {
Mq map[string]string `json:"mq list"`
......@@ -66,15 +64,20 @@ type Server struct {
}
type SERVER_CONFIG struct {
Traceid string //"路由的唯一,追踪的标示"
Project string //"项目的唯一标示"
Traceid string `json:"traceid"` //"路由的唯一,追踪的标示"
Project string `json:"project"` //"项目的唯一标示"
}
//redis key name
type REDISNAME_CONFIG struct {
MsgName_prefix string //"消息的前缀"
ClientName_prefix string //"客户端的前缀"
ClientServer_prefix string //""
MsgStatusListName string //"未执行消息的list,只带消息id的"
RotuteStatuslistName string //"在线路由的列表"
MsgName_prefix string `json:"msgname"` //"消息的前缀"
ClientName_prefix string `json:"clientname"` //"客户端的前缀"
ClientServer_prefix string `json:"clientserver"` //""
MsgStatusListName string `json:"msgstatusname"` //"未执行消息的list,只带消息id的"
RotuteStatuslistName string `json:"routestatusname"` //"在线路由的列表"
}
type CFG struct {
Prefix REDISNAME_CONFIG `json:"prefix"`
ServerCfg SERVER_CONFIG `json:"servercfg"`
}
package config
import (
"fmp_kit_eyeatom/eyeatom"
"fmt"
"encoding/json"
"io/ioutil"
"os"
"os/exec"
"strings"
"github.com/Unknwon/goconfig"
log "github.com/sirupsen/logrus"
)
const CONFIG_CONFIGNAME = "Server.ini"
const CONFIG_CONFIGNAME = "cfg.json"
var SerConfig SERVER_CONFIG
var OctopusRedisConfig REDISNAME_CONFIG //各种数据在redis 中的名称
var ConfigFilePath string
//日志库,redis 配置
var Eyelog *eyeatom.EyeAtom
type CtrlConfig struct {
}
func NewCtrlConfig() *CtrlConfig {
p := &CtrlConfig{}
ConfigFilePath = fmt.Sprintf("%s%s", p.getCurrentPath(), CONFIG_CONFIGNAME)
p.creteConfigFile()
//初始 CONFIG 化结构体
{
SerConfig.Traceid = ""
SerConfig.Project = ""
}
p.LoadLocalOctopusConfig()
OctopusRedisConfig.MsgName_prefix = fmt.Sprintf("%s.Msg", SerConfig.Project)
OctopusRedisConfig.ClientName_prefix = fmt.Sprintf("%s.Client", SerConfig.Project)
OctopusRedisConfig.ClientServer_prefix = fmt.Sprintf("%s.ClientServer", SerConfig.Project)
OctopusRedisConfig.MsgStatusListName = fmt.Sprintf("%s.%s.%s", SerConfig.Project, SerConfig.Traceid, "MsgStatsus")
OctopusRedisConfig.RotuteStatuslistName = fmt.Sprintf("%s.%s", SerConfig.Project, "RouteStatus")
fmt.Println(OctopusRedisConfig.MsgName_prefix)
fmt.Println(OctopusRedisConfig.ClientName_prefix)
fmt.Println(OctopusRedisConfig.ClientServer_prefix)
fmt.Println(OctopusRedisConfig.MsgStatusListName)
fmt.Println(OctopusRedisConfig.RotuteStatuslistName)
//初始化 eyelog
{
var callrpc = eyeatom.CALLRPC{Project: SerConfig.Project, Traceid: SerConfig.Traceid, LogName: "serlog"}
var redisconfig = eyeatom.RedisConfig{Addr: "127.0.0.1:6379", Password: "", Db: 0}
Eyelog = eyeatom.NewCtrlCallChain(callrpc, redisconfig)
}
return p
func newCfg() *CFG {
cfg := &CFG{}
return cfg
}
func (p *CtrlConfig) LoadLocalOctopusConfig() SERVER_CONFIG {
cfg, err := goconfig.LoadConfigFile(ConfigFilePath)
if err != nil {
panic("错误")
}
SerConfig.Traceid, err = cfg.GetValue("Server", "traceid")
SerConfig.Project, err = cfg.GetValue("Server", "project")
if err != nil {
SerConfig.Traceid = ""
}
cfg.Reload()
return SerConfig
func GetSrverId() string {
return SerConfig.Traceid
}
func (p *CtrlConfig) GetSerConfig() SERVER_CONFIG {
return SerConfig
func GetSrverName() string {
return SerConfig.Project
}
//serConfig
func (p *CtrlConfig) GetLocalSerConfig() SERVER_CONFIG {
cfg, err := goconfig.LoadConfigFile(ConfigFilePath)
if err != nil {
panic("错误")
}
SerConfig.Traceid, err = cfg.GetValue("Server", "traceid")
SerConfig.Project, err = cfg.GetValue("Server", "project")
if err != nil {
SerConfig.Traceid = "ser1"
}
cfg.Reload()
return SerConfig
func initOhterCfg() {
SerConfig = Ctrl_Config_.ServerCfg
OctopusRedisConfig.MsgName_prefix = SerConfig.Project + ".Msg"
OctopusRedisConfig.ClientName_prefix = SerConfig.Project + ".Client"
OctopusRedisConfig.ClientServer_prefix = SerConfig.Project + "ClientServer"
OctopusRedisConfig.MsgStatusListName = SerConfig.Project + SerConfig.Traceid + "MsgStatsus"
OctopusRedisConfig.RotuteStatuslistName = SerConfig.Project + "RouteStatus"
log.WithFields(log.Fields{
"Traceid": Ctrl_Config_.ServerCfg.Traceid,
"Project": Ctrl_Config_.ServerCfg.Project,
"MsgName_prefix": OctopusRedisConfig.MsgName_prefix,
"ClientName_prefix": OctopusRedisConfig.ClientName_prefix,
"ClientServer_prefix": OctopusRedisConfig.ClientServer_prefix,
"MsgStatusListName": OctopusRedisConfig.MsgStatusListName,
"RotuteStatuslistName": OctopusRedisConfig.RotuteStatuslistName,
}).Info()
}
func (p *CtrlConfig) getCurrentPath() string {
func getCurrentPath() string {
s, err := exec.LookPath(os.Args[0])
if err != nil {
......@@ -100,18 +58,26 @@ func (p *CtrlConfig) getCurrentPath() string {
path := string(s[0 : i+1])
return path
}
func (p *CtrlConfig) creteConfigFile() {
if p.isFileExist(ConfigFilePath) == false {
file2, error := os.OpenFile(ConfigFilePath, os.O_RDWR|os.O_CREATE, 0766)
if error != nil {
fmt.Println(error)
}
file2.Close()
func LoadCfg() (err error) {
ConfigFilePath = getCurrentPath() + CONFIG_CONFIGNAME
log.WithFields(log.Fields{
"cfgpath": ConfigFilePath,
}).Info()
var fp *os.File
if fp, err = os.Open(ConfigFilePath); err != nil {
return err
}
}
func (p *CtrlConfig) isFileExist(filename string) bool {
if _, err := os.Stat(filename); os.IsNotExist(err) {
return false
var data []byte
if data, err = ioutil.ReadAll(fp); err != nil {
return err
}
if err = fp.Close(); err != nil {
return err
}
if err = json.Unmarshal(data, Ctrl_Config_); err != nil {
return err
}
return true
initOhterCfg()
return nil
}
......@@ -26,10 +26,10 @@ func InitLog() {
log.SetLevel(log.InfoLevel)
logWriter, err := rotatelogs.New(
logName+".%Y-%m-%d-%H-%M.log",
rotatelogs.WithLinkName(logName), // 生成软链,指向最新日志文件
rotatelogs.WithMaxAge(30*24*time.Hour), // 文件最大保存时间
//rotatelogs.WithRotationTime(24*time.Hour), // 日志切割时间间隔
rotatelogs.WithRotationTime(1*time.Minute),
rotatelogs.WithLinkName(logName), // 生成软链,指向最新日志文件
rotatelogs.WithMaxAge(30*24*time.Hour), // 文件最大保存时间
rotatelogs.WithRotationTime(24*time.Hour), // 日志切割时间间隔
//rotatelogs.WithRotationTime(1*time.Minute),
)
writeMap := lfshook.WriterMap{
log.InfoLevel: logWriter,
......
......@@ -9,9 +9,8 @@ import (
//"ficus_clientserver/route"
"ficus_clientserver/thrifthandler"
"log"
"os"
log "github.com/sirupsen/logrus"
"github.com/apache/thrift/lib/go/thrift"
)
......@@ -28,9 +27,7 @@ var quitFlag chan int
func main() {
//读取配置文件
InitLog()
ctrlConfig := config.NewCtrlConfig()
localConfig := ctrlConfig.GetLocalSerConfig()
log.Println("Config Traceid:", localConfig.Traceid, " Project", localConfig.Project)
InitCfg()
quitFlag = make(chan int)
go StartWork()
go Startwork0()
......@@ -52,8 +49,7 @@ func StartWork() {
func Startwork0() {
serverTransport, err := thrift.NewTServerSocket(NetworkAddr0)
if err != nil {
log.Println("Error!", err)
os.Exit(1)
log.Fatalln("Error!", err)
}
//redis 控制
processorFactory := thrifthandler.NewMyTProcessorFactory(model.GetDefaultClientMap(), redis.NewCtrl_RedisClient_())
......@@ -71,8 +67,7 @@ func Startwork0() {
func Startwork1() {
serverTransport, err := thrift.NewTServerSocket(NetworkAddr1)
if err != nil {
log.Println("Error!", err)
os.Exit(1)
log.Fatalln(err)
}
pkgHandle := &thrifthandler.PkgHandle{}
......@@ -90,7 +85,7 @@ func Startwork1() {
log.Println("thrift server in", NetworkAddr1)
if err := server.Serve(); err != nil {
panic(err)
log.Panicln(err)
}
}
......@@ -99,3 +94,10 @@ func StartPackServer() {
r := route.InitRouter()
r.Run(":36790")
}
func InitCfg() {
if err := config.LoadCfg(); err != nil {
log.Fatalln(err)
}
}
......@@ -3,9 +3,10 @@ package model
import (
"ficus/mission"
"ficus_clientserver/config"
"fmt"
"sync"
"time"
log "github.com/sirupsen/logrus"
)
//维护一个任务列表的状态
......@@ -90,7 +91,7 @@ func (p *CtrlmapClientMsg_) ClientMsg_Work(t T_CMsg) {
//查询是否在线
if cc.Trans.IsOpen() {
//发送消息
fmt.Println("准备发送消息!")
log.Println("准备发送消息!")
dis := &MyPushMsg{}
dis.PushDispatch(cc, t.Mis, p.Ctrl_MapClient)
......@@ -100,11 +101,11 @@ func (p *CtrlmapClientMsg_) ClientMsg_Work(t T_CMsg) {
//设置map列表不在线
p.Ctrl_MapClient.SetLine(cc.Agent.ID, false)
//设置redis列表显示不在线
fmt.Println("设置map列表不在线!")
log.Println("设置map列表不在线!")
}
} else {
//不在线
fmt.Println("不在线")
log.Println("不在线")
}
return
......
......@@ -4,10 +4,9 @@ import (
"context"
"ficus/mission"
"ficus/service"
"ficus_clientserver/config"
"fmt"
"github.com/apache/thrift/lib/go/thrift"
log "github.com/sirupsen/logrus"
)
//interface
......@@ -30,10 +29,6 @@ func (p *MyPushMsg) PushDispatch(client T_FmClient, mis mission.Message, Ctrl_ma
func (p *MyPushMsg) PushClientDispatch(trans thrift.TTransport, mis mission.Message) bool {
callbackClient := service.NewDispatchServiceClientFactory(thrift.NewTFramedTransport(trans), thrift.NewTCompactProtocolFactory())
{
config.Eyelog.WriteCallAndLog(string(mis.ID), "", "发送消息到客户端 ... - 消息ID:", string(mis.ID), "客户端id:", mis.Agent)
}
// Type_DAEMON Type = 4587776
// Type_FRAMEWORK Type = 4588032
// Type_SYSTEMINFO Type = 4588288
......@@ -50,7 +45,7 @@ func (p *MyPushMsg) PushClientDispatch(trans thrift.TTransport, mis mission.Mess
err := callbackClient.Dispatch(context.Background(), &mis)
if err != nil {
fmt.Println("err:", err)
log.Println("err:", err)
}
return true
}
......@@ -29,7 +29,6 @@ func NewCtrl_RedisClient_() *CtrlRedisClient_ {
})
go p.Read_Chan_Client()
//defer c.Close()
return p
}
func (p *CtrlRedisClient_) UpdateMsgStatus(mis mission.Message) bool {
......@@ -54,7 +53,7 @@ func (p *CtrlRedisClient_) set(c model.T_FmClient) bool {
func (p *CtrlRedisClient_) setClient(c model.T_FmClient) bool {
jsonStr, _ := json.Marshal(c)
kname := fmt.Sprintf("%s.%s", config.OctopusRedisConfig.ClientName_prefix, c.Agent.ID)
fmt.Println(kname)
fmt.Println("clientkey", kname)
err := p.ctrlRedis.Set(kname, string(jsonStr), 0).Err()
if err != nil {
fmt.Println("redis set failed:", err)
......@@ -128,9 +127,7 @@ func (p *CtrlRedisClient_) get(k string) model.T_FmClient {
func (p *CtrlRedisClient_) Write_RouteRedis(key string) {
go func() {
k := fmt.Sprintf("%s.%v", config.OctopusRedisConfig.ClientServer_prefix, key)
fmt.Println("ClientServer :", k)
v := config.SerConfig.Traceid
fmt.Println("ClientServer value:", v)
p.setKV(k, v)
}()
}
......
......@@ -2,11 +2,8 @@ package route
import (
"bytes"
"fmt"
"io"
"io/ioutil"
"net/http"
"os"
"time"
"github.com/gin-gonic/gin"
......@@ -14,7 +11,7 @@ import (
)
func WrongRequest(c *gin.Context, err error) {
fmt.Fprintln(gin.DefaultWriter, "错误", err)
log.Println("错误", err)
c.JSON(http.StatusOK, gin.H{
"statusCOde": "101",
"msg": err.Error(),
......@@ -33,9 +30,9 @@ func InitGin() {
}
func InitLog() {
gin.DisableConsoleColor()
f, _ := os.Create("gin.log")
gin.DefaultWriter = io.MultiWriter(f)
// gin.DisableConsoleColor()
// f, _ := os.Create("gin.log")
// gin.DefaultWriter = io.MultiWriter(f)
//gin.DefaultWriter = io.MultiWriter(f, os.Stdout)
}
......@@ -51,9 +48,7 @@ func LogMiddle(c *gin.Context) {
end := time.Now()
//执行时间
latency := end.Sub(start)
path := c.Request.URL.Path
clientIP := c.ClientIP()
method := c.Request.Method
statusCode := c.Writer.Status()
......
......@@ -4,7 +4,6 @@ import (
"ficus_clientserver/config"
"ficus_clientserver/model"
"ficus_clientserver/redis"
"fmt"
"net"
"sync"
"time"
......@@ -59,7 +58,7 @@ func (p *Ctrl_RotuteRecv) ConnRotuteAndRead() {
//发送一个登录消息
{
sname := "ser1"
sname := config.GetSrverId()
var login config.SerCommand
login.Command = config.COMMAND_LOGIN
login.SerType = config.SERTYPE_CONSUME
......@@ -85,16 +84,16 @@ func (p *Ctrl_RotuteRecv) ConnRotuteAndRead() {
for {
_, err2 := conn.Read(buffer)
if err2 != nil {
fmt.Println("conn error return")
log.Println("conn error return")
return
}
//接受数据成功
pServer := *(**config.SerCommand)(unsafe.Pointer(&buffer))
fmt.Println("Recv Command:", pServer.Command)
log.Println("Recv Command:", pServer.Command)
if pServer.Command == config.COMMAND_LOGIN {
// 登录成功,添加路由到Map
fmt.Println("登录路由成功,路由名称", string(pServer.Data[:pServer.Length]), "角色:消费者")
log.Println("登录路由成功,路由名称", string(pServer.Data[:pServer.Length]), "角色:消费者")
//rs.Name=string(pServer.Data[:]);
//rs.Conn = conn;
p.Rotute.Conn = conn
......@@ -109,30 +108,27 @@ func (p *Ctrl_RotuteRecv) ConnRotuteAndRead() {
err:=json.Unmarshal(pServer.Data[:pServer.Length],&msg)
msg.RouteName=p.Rotute.Name
if err == nil {
fmt.Println("Recv Msg Id:",msg.Mis.ID)
log.Println("Recv Msg Id:",msg.Mis.ID)
//转成相关的数据格式
//Ctrl_mapCMsg.Set(msg.Mis.ID,msg)
p.ctrl_mapClientMsg.Write_Chan_ClientMsg(msg)
}else{
fmt.Println("json.Unmarshal:",err)
log.Println("json.Unmarshal:",err)
}
*/
id := pServer.Data[:pServer.Length]
//id
fmt.Println("recv one msg-------------id:", string(id), "---------------------------------------")
{
config.Eyelog.WriteCallAndLog(string(id), "", "接收到路由消息 ... - 消息ID:", string(id))
}
log.Println("recv one msg-------------id:", string(id), "---------------------------------------")
msg := p.ctrl_redisMsg.GetMsg(string(id))
if msg.Mis.ID == string(id) {
p.ctrl_mapClientMsg.Write_Chan_ClientMsg(msg)
} else {
fmt.Println("存在这个消息吗")
log.Println("存在这个消息吗")
}
} else {
fmt.Println("未登录成功,不接受消息推送 …… ")
log.Println("未登录成功,不接受消息推送 …… ")
}
}
}
......
......@@ -4,11 +4,12 @@ import (
json2 "encoding/json"
"ficus/mission"
"ficus_clientserver/config"
"fmt"
"net"
"sync"
"time"
"unsafe"
log "github.com/sirupsen/logrus"
)
//接受推送服务
......@@ -81,8 +82,8 @@ func (p *Ctrl_RouteSend) StartCommRetute() {
func (p *Ctrl_RouteSend) ConnRotuteAndRead() {
conn, err := net.Dial("tcp", config.ROUTE_HOST_IP_PORT)
if err != nil {
fmt.Println("dial failed:", err)
fmt.Println("wait reconnection …… …… ……")
log.Println("dial failed:", err)
log.Println("wait reconnection …… …… ……")
//os.Exit(1)
return
}
......@@ -91,7 +92,7 @@ func (p *Ctrl_RouteSend) ConnRotuteAndRead() {
//发送一个登录消息
//sbuffer:=make([]byte, 1024)
{
sname := "ser1"
sname := config.GetSrverId()
var login config.SerCommand
login.Command = config.COMMAND_LOGIN
login.SerType = config.SERTYPE_FEEDBACK // 反馈者
......@@ -117,16 +118,16 @@ func (p *Ctrl_RouteSend) ConnRotuteAndRead() {
buffer := make([]byte, config.ROUTE_MAX_RECV_LEN)
_, err2 := conn.Read(buffer)
if err2 != nil {
fmt.Println("conn error return")
log.Println("conn error return")
return
}
//接受数据成功
pServer := *(**config.SerCommand)(unsafe.Pointer(&buffer))
fmt.Println("Recv Command:", pServer.Command)
log.Println("Recv Command:", pServer.Command)
if pServer.Command == config.COMMAND_LOGIN {
// 登录成功,添加路由到Map
fmt.Println("登录路由成功,路由名称", string(pServer.Data[:pServer.Length]), "角色:反馈者")
log.Println("登录路由成功,路由名称", string(pServer.Data[:pServer.Length]), "角色:反馈者")
p.Rotute.Name = string(pServer.Data[:])
p.Rotute.Conn = conn
//p.Rotute=rs
......
......@@ -3,6 +3,7 @@ package serrpcid
import (
"ficus_clientserver/config"
"fmt"
"log"
)
/*******************************
......@@ -31,7 +32,7 @@ func NewCtrlCallChain() *CallChain {
func (p *CallChain) Work() {
for {
mycall := <-p.chanCallLog
fmt.Println(mycall.Project)
log.Println(mycall.Project)
}
}
......
......@@ -6,15 +6,16 @@ import (
"ficus_clientserver/model"
"fmt"
"html/template"
"log"
"net/http"
"time"
log "github.com/sirupsen/logrus"
)
//运行状态接口
func StartRunningSysState(host string) {
fmt.Println("start http:", host)
log.Println("start http:", host)
http.HandleFunc("/GetClientCount", GetClientCount)
http.HandleFunc("/DispatchClient", DispatchClient)
http.HandleFunc("/MsgCount", GetClientMsgCount)
......@@ -84,7 +85,7 @@ type Person struct {
func initTemplate(fileName string) (err error) {
myTemplate, err = template.ParseFiles(fileName)
if err != nil {
fmt.Println("parse file err:", err)
log.Println("parse file err:", err)
return
}
return
......
package thrifthandler
type (
DeviceHandle struct {
}
)
// func DeviceServer() {
// serverTransport, err := thrift.NewTServerSocket(net.JoinHostPort("127.0.0.1", "9091"))
// if err != nil {
// log.Println("Error!", err)
// os.Exit(1)
// }
// handle := &PkgHandle{}
// processor := service.NewPackageServiceProcessor(handle)
// protocolFactory := thrift.NewTCompactProtocolFactory()
// transportFactory := thrift.NewTFramedTransportFactory(thrift.NewTTransportFactory())
// server := thrift.NewTSimpleServer4(processor, serverTransport, transportFactory, protocolFactory)
// log.Println("thrift server in", "9091")
// if err := server.Serve(); err != nil {
// panic(err)
// }
// }
// func (d *DeviceHandle) identify(ctx context.Context, string uuid) (d *Device, err error) {
// }
// func (d *DeviceHandle) bind(ctx context.Context, string uuid, Device device) (bool, err error) {
// }
......@@ -7,7 +7,6 @@ import (
"ficus/service"
"ficus_clientserver/model"
"ficus_clientserver/redis"
"fmt"
"time"
log "github.com/sirupsen/logrus"
......@@ -27,8 +26,7 @@ func NewMyDispatchService(trans thrift.TTransport, ctrl_mapClient *model.Ctrlmap
}
func (p *MyDispatchService) Heartbeat(ctx context.Context, whom *native.Agent) (r bool, err error) {
log.Println("心跳id:", whom.ID)
log.WithFields(log.Fields{"func": "Heartbeat", "心跳id": whom.ID}).Info(whom)
//心跳上来,更新在线时间,同时检测一下 客户端的在线状态
p.ctrl_mapClient.UpdateOnlyHartTime(whom.ID)
//RouteRedis 写入客户端路由标示 --- 防止过期
......@@ -43,14 +41,13 @@ func (p *MyDispatchService) Feedback(ctx context.Context, response *mission.Mess
}
func (p *MyDispatchService) Login(ctx context.Context, sself *native.Agent) (r bool, err error) {
log.Println("login :", sself.ID)
log.WithFields(log.Fields{"func": "Login", "登录id": sself.ID}).Info(sself)
go func() {
//判断是否存在
key := sself.ID
if p.ctrl_mapClient.IsKey(key) {
p.ctrl_mapClient.UpdateHartTime(key, p.trans)
} else {
fmt.Println("上线---client:", key)
var gfclient model.T_FmClient
gfclient.ClientUuid = sself.ID
gfclient.Agent = *sself
......@@ -70,7 +67,6 @@ func (p *MyDispatchService) Login(ctx context.Context, sself *native.Agent) (r b
}
func (p *MyDispatchService) Dispatch(ctx context.Context, request *mission.Message) (err error) {
log.Println("Dispatch:")
return nil
}
......
......@@ -4,9 +4,9 @@ import (
"context"
"ficus/pkg"
"ficus/service"
"ficus_clientserver/model"
"net"
"os"
"ficus_clientserver/model"
log "github.com/sirupsen/logrus"
......@@ -56,6 +56,6 @@ func PkgServer() {
}
}
func (p *PkgHandle) GetSpec(ctx context.Context, pkgName string, ver string) (r *pkg.PackageSpec, err error) {
log.WithFields(log.Fields{"pkgName": pkgName, "ver": ver}).Info("GetSpec")
return model.DefaultPkgManger.GetCurrentPkg(pkgName,ver)
log.WithFields(log.Fields{"func": "GetSpec", "pkgName": pkgName, "ver": ver}).Info()
return model.DefaultPkgManger.GetCurrentPkg(pkgName, ver)
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment