Skip to content
This repository was archived by the owner on Aug 31, 2022. It is now read-only.
Open
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
43a8fcd
Add feature to support query for PFC watchdog
chaliu Sep 5, 2018
3908994
fix typos;rewrite log messeages; replace hard-coded : with database s…
chaliu Sep 5, 2018
cca4c30
replace hardcoded table separator |
chaliu Sep 6, 2018
750133e
Implement new virtual path for pfcwd
chaliu Sep 26, 2018
b2c6c5e
Unit tests for virtual database target SONiC, rename new_sonic_data_c…
randygaulmsft Mar 25, 2019
9ea0465
Merge branch 'master' into new-pfcwd
randygaulmsft Mar 26, 2019
0fcf9a5
remove testing directory imports
randygaulmsft Mar 26, 2019
f0e0fdb
silence unnecessary printfs
randygaulmsft Apr 10, 2019
bd4af90
remove more debug printf's
randygaulmsft Apr 10, 2019
da43c69
Attempt to fixup import paths and remove old unnecessary debug format…
randygaulmsft Apr 25, 2019
6dbe27c
Merge branch 'new-pfcwd' of https://github.com/randygaulmsft/sonic-te…
randygaulmsft Apr 25, 2019
d16da4c
get tests in a good state
randygaulmsft May 5, 2019
b414595
Got a basic subscribe test working.
randygaulmsft May 6, 2019
e29cfa5
Figured out way to subscribe to target SONiC_DB
randygaulmsft May 6, 2019
e597358
Wrapped up stream queries.
randygaulmsft May 7, 2019
90d4437
gofmt on all code under folder.
randygaulmsft May 15, 2019
ede7a94
Remove dead code (comments).
randygaulmsft May 15, 2019
f01f39c
SONiC_DB to SONIC_DB
randygaulmsft May 15, 2019
d33fca6
Removed dead code.
randygaulmsft May 17, 2019
9f94324
Remove more dead code.
randygaulmsft May 17, 2019
6f2b220
sdc to vdc (use correct path for setting TCP redis settings)
randygaulmsft May 17, 2019
53c0e70
Remove dead code from sonic_data_client.
randygaulmsft May 17, 2019
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 5 additions & 5 deletions virtual_database_client/handler_pfcwd.go
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,7 @@ func GetTmpl_PortQueuePfcwdStats(path *gnmipb.Path) {
func v2rPortQueuePfcwdStats(path *gnmipb.Path, pathG2S *map[*gnmipb.Path][]tablePath) error {
var tmpl = gnmipb.Path{}
GetTmpl_PortQueuePfcwdStats(&tmpl)
fmt.Printf("tmpl: %v\n", &tmpl)
//fmt.Printf("tmpl: %v\n", &tmpl)
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

remove please


parentConfig := map[int]string{1: "Port", 2: "Queue"}

Expand All @@ -103,12 +103,12 @@ func v2rPortQueuePfcwdStats(path *gnmipb.Path, pathG2S *map[*gnmipb.Path][]table
name: "Pfcwd",
}

target_fields := []string{}
updatePath(path, &tmpl, parentConfig, leaf, &target_fields)
targetFields := []string{}
updatePath(path, &tmpl, parentConfig, leaf, &targetFields)

// Populate tablePaths
fmt.Printf("path passed in populate: %v\n", &tmpl)
err := pop_PortQueuePfcwdStats(&tmpl, pathG2S, target_fields)
//fmt.Printf("path passed in populate: %v\n", &tmpl)
err := pop_PortQueuePfcwdStats(&tmpl, pathG2S, targetFields)
if err != nil {
return err
}
Expand Down
115 changes: 58 additions & 57 deletions virtual_database_client/path.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,29 +3,30 @@ package client
import (
"fmt"
"strconv"

//"strings"
"time"
"encoding/json"
"net"
"regexp"
"encoding/json"
"time"

log "github.com/golang/glog"
spb "github.com/Azure/sonic-telemetry/proto"
"github.com/go-redis/redis"
log "github.com/golang/glog"
gnmipb "github.com/openconfig/gnmi/proto/gnmi"
)

// gnmiFullPath builds the full path from the prefix and path.
func gnmiFullPath(prefix, path *gnmipb.Path) *gnmipb.Path {

fullPath := &gnmipb.Path{Origin: path.Origin}
if path.GetElement() != nil {
fullPath.Element = append(prefix.GetElement(), path.GetElement()...)
}
if path.GetElem() != nil {
fullPath.Elem = append(prefix.GetElem(), path.GetElem()...)
}
return fullPath
fullPath := &gnmipb.Path{Origin: path.Origin}
if path.GetElement() != nil {
fullPath.Element = append(prefix.GetElement(), path.GetElement()...)
}
if path.GetElem() != nil {
fullPath.Elem = append(prefix.GetElem(), path.GetElem()...)
}
return fullPath
}

func populateAlltablePaths(prefix *gnmipb.Path, paths []*gnmipb.Path, pathG2S *map[*gnmipb.Path][]tablePath) error {
Expand All @@ -42,16 +43,16 @@ func populateAlltablePaths(prefix *gnmipb.Path, paths []*gnmipb.Path, pathG2S *m
// root-to-leaf virtual paths in the vpath tree.
// Then map each vpath to a list of redis DB path.
func populateNewtablePath(prefix, path *gnmipb.Path, pathG2S *map[*gnmipb.Path][]tablePath) error {
fullPath := path
if prefix != nil {
fullPath = gnmiFullPath(prefix, path)
}
fmt.Printf("fullPath: %v\n", fullPath)
//fullPath := path
//if prefix != nil {
// fullPath = gnmiFullPath(prefix, path)
//}
//fmt.Printf("fullPath: %v\n", fullPath)

target := prefix.GetTarget()
stringSlice := []string{target}
elems := path.GetElem()
for _, elem := range elems{
for _, elem := range elems {
stringSlice = append(stringSlice, elem.GetName())
}

Expand All @@ -61,36 +62,36 @@ func populateNewtablePath(prefix, path *gnmipb.Path, pathG2S *map[*gnmipb.Path][
}

// Debug
for k, v := range (*pathG2S) {
fmt.Printf("gNMI path: %v\n", k)
for _, tblPath := range v{
fmt.Printf("new tablePath: %v\n", tblPath)
}
}
//for k, v := range (*pathG2S) {
// fmt.Printf("gNMI path: %v\n", k)
// for _, tblPath := range v{
// fmt.Printf("new tablePath: %v\n", tblPath)
// }
//}
return nil
}

func msi2TypedValue(msi map[string]interface{}) (*gnmipb.TypedValue, error) {
jv, err := emitJSON(&msi)
if err != nil {
log.V(2).Infof("emitJSON err %s for %v", err, msi)
return nil, fmt.Errorf("emitJSON err %s for %v", err, msi)
}
return &gnmipb.TypedValue{
Value: &gnmipb.TypedValue_JsonIetfVal{
JsonIetfVal: jv,
}}, nil
jv, err := emitJSON(&msi)
if err != nil {
log.V(2).Infof("emitJSON err %s for %v", err, msi)
return nil, fmt.Errorf("emitJSON err %s for %v", err, msi)
}
return &gnmipb.TypedValue{
Value: &gnmipb.TypedValue_JsonIetfVal{
JsonIetfVal: jv,
}}, nil
}

// emitJSON marshalls map[string]interface{} to JSON byte stream.
func emitJSON(v *map[string]interface{}) ([]byte, error) {
//j, err := json.MarshalIndent(*v, "", indentString)
j, err := json.Marshal(*v)
if err != nil {
return nil, fmt.Errorf("JSON marshalling error: %v", err)
}
//j, err := json.MarshalIndent(*v, "", indentString)
j, err := json.Marshal(*v)
if err != nil {
return nil, fmt.Errorf("JSON marshalling error: %v", err)
}

return j, nil
return j, nil
}

// Render the redis DB data to map[string]interface{}
Expand Down Expand Up @@ -135,7 +136,7 @@ func tableData2Msi(tblPath *tablePath, msi *map[string]interface{}) error {
for _, field := range fields {
if value, ok := val[field]; !ok {
log.V(1).Infof("Missing field: %v", field)
} else{
} else {
(*msi)[field] = value
}
}
Expand All @@ -145,23 +146,23 @@ func tableData2Msi(tblPath *tablePath, msi *map[string]interface{}) error {
func enqueFatalMsg(c *DbClient, msg string) {
c.q.Put(Value{
&spb.Value{
Timestamp: time.Now().UnixNano(),
Fatal: msg,
Timestamp: time.Now().UnixNano(),
Fatal: msg,
},
})
}

type redisSubData struct {
tblPath tablePath
pubsub *redis.PubSub
tblPath tablePath
pubsub *redis.PubSub
}

func dbSingleTableKeySubscribe(rsd redisSubData, c *DbClient, msiInit *map[string]interface{}, msiOut *map[string]interface{}) {
tblPath := rsd.tblPath
pubsub := rsd.pubsub
msi := make(map[string]interface{})
// Initialize msi
for k, v := range (*msiInit) {
for k, v := range *msiInit {
msi[k] = v
}

Expand Down Expand Up @@ -231,10 +232,10 @@ func dbPathSubscribe(gnmiPath *gnmipb.Path, tblPaths []tablePath, c *DbClient) {

var spbv *spb.Value
spbv = &spb.Value{
Prefix: c.prefix,
Path: gnmiPath,
Timestamp: time.Now().UnixNano(),
Val: val,
Prefix: c.prefix,
Path: gnmiPath,
Timestamp: time.Now().UnixNano(),
Val: val,
}
if err = c.q.Put(Value{spbv}); err != nil {
log.V(1).Infof("Queue error: %v", err)
Expand Down Expand Up @@ -263,7 +264,7 @@ func dbPathSubscribe(gnmiPath *gnmipb.Path, tblPaths []tablePath, c *DbClient) {
pattern += keyName
pubsub := redisDb.PSubscribe(pattern)
defer pubsub.Close()

msgi, err := pubsub.ReceiveTimeout(time.Second)
if err != nil {
log.V(1).Infof("psubscribe to %s failed for %v", pattern, tblPath)
Expand All @@ -278,17 +279,17 @@ func dbPathSubscribe(gnmiPath *gnmipb.Path, tblPaths []tablePath, c *DbClient) {
return
}
log.V(2).Infof("Psubscribe succeeded for %v: %v", tblPath, subscr)
rsd := redisSubData {
tblPath: tblPath,
pubsub: pubsub,

rsd := redisSubData{
tblPath: tblPath,
pubsub: pubsub,
}
go dbSingleTableKeySubscribe(rsd, c, &msiInit, &msi)
}

for {
select {
default :
default:
val = nil
err = nil
c.mu.Lock()
Expand All @@ -307,9 +308,9 @@ func dbPathSubscribe(gnmiPath *gnmipb.Path, tblPaths []tablePath, c *DbClient) {

if val != nil {
spbv = &spb.Value{
Path: gnmiPath,
Timestamp: time.Now().UnixNano(),
Val: val,
Path: gnmiPath,
Timestamp: time.Now().UnixNano(),
Val: val,
}

log.V(5).Infof("dbTableKeySubscribe enque: %v", spbv)
Expand Down