mirror of
https://github.com/kubeshark/kubeshark.git
synced 2025-06-26 08:14:42 +00:00
[refactor/TRA-3693] type:latency to slo and latency field to response-time (#282)
* type:latency to slo and latency field to response-time * remove comment from import * Friendly message on ignored rules and format * formatting * change conditional to catch negative values and ignore it * Fix Bug Alon Reported * sliceUtils to shared
This commit is contained in:
parent
26efaa101d
commit
c26eb843e3
@ -101,7 +101,7 @@ func MatchRequestPolicy(harEntry har.Entry, service string) (resultPolicyToSend
|
|||||||
|
|
||||||
func PassedValidationRules(rulesMatched []RulesMatched) (bool, int64, int) {
|
func PassedValidationRules(rulesMatched []RulesMatched) (bool, int64, int) {
|
||||||
var numberOfRulesMatched = len(rulesMatched)
|
var numberOfRulesMatched = len(rulesMatched)
|
||||||
var latency int64 = -1
|
var responseTime int64 = -1
|
||||||
|
|
||||||
if numberOfRulesMatched == 0 {
|
if numberOfRulesMatched == 0 {
|
||||||
return false, 0, numberOfRulesMatched
|
return false, 0, numberOfRulesMatched
|
||||||
@ -109,15 +109,15 @@ func PassedValidationRules(rulesMatched []RulesMatched) (bool, int64, int) {
|
|||||||
|
|
||||||
for _, rule := range rulesMatched {
|
for _, rule := range rulesMatched {
|
||||||
if rule.Matched == false {
|
if rule.Matched == false {
|
||||||
return false, latency, numberOfRulesMatched
|
return false, responseTime, numberOfRulesMatched
|
||||||
} else {
|
} else {
|
||||||
if strings.ToLower(rule.Rule.Type) == "latency" {
|
if strings.ToLower(rule.Rule.Type) == "responseTime" {
|
||||||
if rule.Rule.Latency < latency || latency == -1 {
|
if rule.Rule.ResponseTime < responseTime || responseTime == -1 {
|
||||||
latency = rule.Rule.Latency
|
responseTime = rule.Rule.ResponseTime
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return true, latency, numberOfRulesMatched
|
return true, responseTime, numberOfRulesMatched
|
||||||
}
|
}
|
||||||
|
@ -76,7 +76,7 @@ func RunMizuTap() {
|
|||||||
targetNamespaces := getNamespaces(kubernetesProvider)
|
targetNamespaces := getNamespaces(kubernetesProvider)
|
||||||
|
|
||||||
if config.Config.IsNsRestrictedMode() {
|
if config.Config.IsNsRestrictedMode() {
|
||||||
if len(targetNamespaces) != 1 || !mizu.Contains(targetNamespaces, config.Config.MizuResourcesNamespace) {
|
if len(targetNamespaces) != 1 || !shared.Contains(targetNamespaces, config.Config.MizuResourcesNamespace) {
|
||||||
logger.Log.Errorf("Not supported mode. Mizu can't resolve IPs in other namespaces when running in namespace restricted mode.\n"+
|
logger.Log.Errorf("Not supported mode. Mizu can't resolve IPs in other namespaces when running in namespace restricted mode.\n"+
|
||||||
"You can use the same namespace for --%s and --%s", configStructs.NamespacesTapName, config.MizuResourcesNamespaceConfigName)
|
"You can use the same namespace for --%s and --%s", configStructs.NamespacesTapName, config.MizuResourcesNamespaceConfigName)
|
||||||
return
|
return
|
||||||
@ -84,7 +84,7 @@ func RunMizuTap() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
var namespacesStr string
|
var namespacesStr string
|
||||||
if !mizu.Contains(targetNamespaces, mizu.K8sAllNamespaces) {
|
if !shared.Contains(targetNamespaces, mizu.K8sAllNamespaces) {
|
||||||
namespacesStr = fmt.Sprintf("namespaces \"%s\"", strings.Join(targetNamespaces, "\", \""))
|
namespacesStr = fmt.Sprintf("namespaces \"%s\"", strings.Join(targetNamespaces, "\", \""))
|
||||||
} else {
|
} else {
|
||||||
namespacesStr = "all namespaces"
|
namespacesStr = "all namespaces"
|
||||||
@ -99,7 +99,7 @@ func RunMizuTap() {
|
|||||||
|
|
||||||
if len(state.currentlyTappedPods) == 0 {
|
if len(state.currentlyTappedPods) == 0 {
|
||||||
var suggestionStr string
|
var suggestionStr string
|
||||||
if !mizu.Contains(targetNamespaces, mizu.K8sAllNamespaces) {
|
if !shared.Contains(targetNamespaces, mizu.K8sAllNamespaces) {
|
||||||
suggestionStr = ". Select a different namespace with -n or tap all namespaces with -A"
|
suggestionStr = ". Select a different namespace with -n or tap all namespaces with -A"
|
||||||
}
|
}
|
||||||
logger.Log.Warningf(uiUtils.Warning, fmt.Sprintf("Did not find any pods matching the regex argument%s", suggestionStr))
|
logger.Log.Warningf(uiUtils.Warning, fmt.Sprintf("Did not find any pods matching the regex argument%s", suggestionStr))
|
||||||
@ -639,7 +639,7 @@ func getNamespaces(kubernetesProvider *kubernetes.Provider) []string {
|
|||||||
if config.Config.Tap.AllNamespaces {
|
if config.Config.Tap.AllNamespaces {
|
||||||
return []string{mizu.K8sAllNamespaces}
|
return []string{mizu.K8sAllNamespaces}
|
||||||
} else if len(config.Config.Tap.Namespaces) > 0 {
|
} else if len(config.Config.Tap.Namespaces) > 0 {
|
||||||
return mizu.Unique(config.Config.Tap.Namespaces)
|
return shared.Unique(config.Config.Tap.Namespaces)
|
||||||
} else {
|
} else {
|
||||||
return []string{kubernetesProvider.CurrentNamespace()}
|
return []string{kubernetesProvider.CurrentNamespace()}
|
||||||
}
|
}
|
||||||
|
@ -4,7 +4,7 @@ import (
|
|||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"github.com/up9inc/mizu/cli/logger"
|
"github.com/up9inc/mizu/cli/logger"
|
||||||
"github.com/up9inc/mizu/cli/mizu"
|
"github.com/up9inc/mizu/shared"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"os"
|
"os"
|
||||||
"reflect"
|
"reflect"
|
||||||
@ -89,7 +89,7 @@ func initFlag(f *pflag.Flag) {
|
|||||||
configElemValue := reflect.ValueOf(&Config).Elem()
|
configElemValue := reflect.ValueOf(&Config).Elem()
|
||||||
|
|
||||||
var flagPath []string
|
var flagPath []string
|
||||||
if mizu.Contains([]string{ConfigFilePathCommandName}, f.Name) {
|
if shared.Contains([]string{ConfigFilePathCommandName}, f.Name) {
|
||||||
flagPath = []string{f.Name}
|
flagPath = []string{f.Name}
|
||||||
} else {
|
} else {
|
||||||
flagPath = []string{cmdName, f.Name}
|
flagPath = []string{cmdName, f.Name}
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
package shared
|
package shared
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
|
"log"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"gopkg.in/yaml.v3"
|
"gopkg.in/yaml.v3"
|
||||||
@ -83,14 +83,14 @@ type RulesPolicy struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type RulePolicy struct {
|
type RulePolicy struct {
|
||||||
Type string `yaml:"type"`
|
Type string `yaml:"type"`
|
||||||
Service string `yaml:"service"`
|
Service string `yaml:"service"`
|
||||||
Path string `yaml:"path"`
|
Path string `yaml:"path"`
|
||||||
Method string `yaml:"method"`
|
Method string `yaml:"method"`
|
||||||
Key string `yaml:"key"`
|
Key string `yaml:"key"`
|
||||||
Value string `yaml:"value"`
|
Value string `yaml:"value"`
|
||||||
Latency int64 `yaml:"latency"`
|
ResponseTime int64 `yaml:"response-time"`
|
||||||
Name string `yaml:"name"`
|
Name string `yaml:"name"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type RulesMatched struct {
|
type RulesMatched struct {
|
||||||
@ -99,14 +99,17 @@ type RulesMatched struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (r *RulePolicy) validateType() bool {
|
func (r *RulePolicy) validateType() bool {
|
||||||
permitedTypes := []string{"json", "header", "latency"}
|
permitedTypes := []string{"json", "header", "slo"}
|
||||||
_, found := Find(permitedTypes, r.Type)
|
_, found := Find(permitedTypes, r.Type)
|
||||||
if !found {
|
if !found {
|
||||||
fmt.Printf("\nRule with name %s will be ignored. Err: only json, header and latency types are supported on rule definition.\n", r.Name)
|
log.Printf("Error: %s. ", r.Name)
|
||||||
|
log.Printf("Only json, header and slo types are supported on rule definition. This rule will be ignored\n")
|
||||||
|
found = false
|
||||||
}
|
}
|
||||||
if strings.ToLower(r.Type) == "latency" {
|
if strings.ToLower(r.Type) == "slo" {
|
||||||
if r.Latency == 0 {
|
if r.ResponseTime <= 0 {
|
||||||
fmt.Printf("\nRule with name %s will be ignored. Err: when type=latency, the field Latency should be specified and have a value >= 1\n\n", r.Name)
|
log.Printf("Error: %s. ", r.Name)
|
||||||
|
log.Printf("When type=slo, the field response-time should be specified and have a value >= 1\n\n")
|
||||||
found = false
|
found = false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -124,10 +127,6 @@ func (rules *RulesPolicy) ValidateRulesPolicy() []int {
|
|||||||
return invalidIndex
|
return invalidIndex
|
||||||
}
|
}
|
||||||
|
|
||||||
func (rules *RulesPolicy) RemoveRule(idx int) {
|
|
||||||
rules.Rules = append(rules.Rules[:idx], rules.Rules[idx+1:]...)
|
|
||||||
}
|
|
||||||
|
|
||||||
func Find(slice []string, val string) (int, bool) {
|
func Find(slice []string, val string) (int, bool) {
|
||||||
for i, item := range slice {
|
for i, item := range slice {
|
||||||
if item == val {
|
if item == val {
|
||||||
@ -148,10 +147,15 @@ func DecodeEnforcePolicy(path string) (RulesPolicy, error) {
|
|||||||
return enforcePolicy, err
|
return enforcePolicy, err
|
||||||
}
|
}
|
||||||
invalidIndex := enforcePolicy.ValidateRulesPolicy()
|
invalidIndex := enforcePolicy.ValidateRulesPolicy()
|
||||||
|
var k = 0
|
||||||
if len(invalidIndex) != 0 {
|
if len(invalidIndex) != 0 {
|
||||||
for i := range invalidIndex {
|
for i, rule := range enforcePolicy.Rules {
|
||||||
enforcePolicy.RemoveRule(invalidIndex[i])
|
if !ContainsInt(invalidIndex, i) {
|
||||||
|
enforcePolicy.Rules[k] = rule
|
||||||
|
k++
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
enforcePolicy.Rules = enforcePolicy.Rules[:k]
|
||||||
}
|
}
|
||||||
return enforcePolicy, nil
|
return enforcePolicy, nil
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
package mizu
|
package shared
|
||||||
|
|
||||||
func Contains(slice []string, containsValue string) bool {
|
func Contains(slice []string, containsValue string) bool {
|
||||||
for _, sliceValue := range slice {
|
for _, sliceValue := range slice {
|
||||||
@ -10,6 +10,16 @@ func Contains(slice []string, containsValue string) bool {
|
|||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func ContainsInt(slice []int, containsValue int) bool {
|
||||||
|
for _, sliceValue := range slice {
|
||||||
|
if sliceValue == containsValue {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
func Unique(slice []string) []string {
|
func Unique(slice []string) []string {
|
||||||
keys := make(map[string]bool)
|
keys := make(map[string]bool)
|
||||||
var list []string
|
var list []string
|
@ -1,8 +1,8 @@
|
|||||||
package mizu_test
|
package shared_test
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"github.com/up9inc/mizu/cli/mizu"
|
"github.com/up9inc/mizu/shared"
|
||||||
"reflect"
|
"reflect"
|
||||||
"testing"
|
"testing"
|
||||||
)
|
)
|
||||||
@ -21,7 +21,7 @@ func TestContainsExists(t *testing.T) {
|
|||||||
|
|
||||||
for _, test := range tests {
|
for _, test := range tests {
|
||||||
t.Run(test.ContainsValue, func(t *testing.T) {
|
t.Run(test.ContainsValue, func(t *testing.T) {
|
||||||
actual := mizu.Contains(test.Slice, test.ContainsValue)
|
actual := shared.Contains(test.Slice, test.ContainsValue)
|
||||||
if actual != test.Expected {
|
if actual != test.Expected {
|
||||||
t.Errorf("unexpected result - Expected: %v, actual: %v", test.Expected, actual)
|
t.Errorf("unexpected result - Expected: %v, actual: %v", test.Expected, actual)
|
||||||
}
|
}
|
||||||
@ -43,7 +43,7 @@ func TestContainsNotExists(t *testing.T) {
|
|||||||
|
|
||||||
for _, test := range tests {
|
for _, test := range tests {
|
||||||
t.Run(test.ContainsValue, func(t *testing.T) {
|
t.Run(test.ContainsValue, func(t *testing.T) {
|
||||||
actual := mizu.Contains(test.Slice, test.ContainsValue)
|
actual := shared.Contains(test.Slice, test.ContainsValue)
|
||||||
if actual != test.Expected {
|
if actual != test.Expected {
|
||||||
t.Errorf("unexpected result - Expected: %v, actual: %v", test.Expected, actual)
|
t.Errorf("unexpected result - Expected: %v, actual: %v", test.Expected, actual)
|
||||||
}
|
}
|
||||||
@ -63,7 +63,7 @@ func TestContainsEmptySlice(t *testing.T) {
|
|||||||
|
|
||||||
for _, test := range tests {
|
for _, test := range tests {
|
||||||
t.Run(test.ContainsValue, func(t *testing.T) {
|
t.Run(test.ContainsValue, func(t *testing.T) {
|
||||||
actual := mizu.Contains(test.Slice, test.ContainsValue)
|
actual := shared.Contains(test.Slice, test.ContainsValue)
|
||||||
if actual != test.Expected {
|
if actual != test.Expected {
|
||||||
t.Errorf("unexpected result - Expected: %v, actual: %v", test.Expected, actual)
|
t.Errorf("unexpected result - Expected: %v, actual: %v", test.Expected, actual)
|
||||||
}
|
}
|
||||||
@ -83,7 +83,7 @@ func TestContainsNilSlice(t *testing.T) {
|
|||||||
|
|
||||||
for _, test := range tests {
|
for _, test := range tests {
|
||||||
t.Run(test.ContainsValue, func(t *testing.T) {
|
t.Run(test.ContainsValue, func(t *testing.T) {
|
||||||
actual := mizu.Contains(test.Slice, test.ContainsValue)
|
actual := shared.Contains(test.Slice, test.ContainsValue)
|
||||||
if actual != test.Expected {
|
if actual != test.Expected {
|
||||||
t.Errorf("unexpected result - Expected: %v, actual: %v", test.Expected, actual)
|
t.Errorf("unexpected result - Expected: %v, actual: %v", test.Expected, actual)
|
||||||
}
|
}
|
||||||
@ -102,7 +102,7 @@ func TestUniqueNoDuplicateValues(t *testing.T) {
|
|||||||
|
|
||||||
for index, test := range tests {
|
for index, test := range tests {
|
||||||
t.Run(fmt.Sprintf("%v", index), func(t *testing.T) {
|
t.Run(fmt.Sprintf("%v", index), func(t *testing.T) {
|
||||||
actual := mizu.Unique(test.Slice)
|
actual := shared.Unique(test.Slice)
|
||||||
if !reflect.DeepEqual(test.Expected, actual) {
|
if !reflect.DeepEqual(test.Expected, actual) {
|
||||||
t.Errorf("unexpected result - Expected: %v, actual: %v", test.Expected, actual)
|
t.Errorf("unexpected result - Expected: %v, actual: %v", test.Expected, actual)
|
||||||
}
|
}
|
||||||
@ -121,7 +121,7 @@ func TestUniqueDuplicateValues(t *testing.T) {
|
|||||||
|
|
||||||
for index, test := range tests {
|
for index, test := range tests {
|
||||||
t.Run(fmt.Sprintf("%v", index), func(t *testing.T) {
|
t.Run(fmt.Sprintf("%v", index), func(t *testing.T) {
|
||||||
actual := mizu.Unique(test.Slice)
|
actual := shared.Unique(test.Slice)
|
||||||
if !reflect.DeepEqual(test.Expected, actual) {
|
if !reflect.DeepEqual(test.Expected, actual) {
|
||||||
t.Errorf("unexpected result - Expected: %v, actual: %v", test.Expected, actual)
|
t.Errorf("unexpected result - Expected: %v, actual: %v", test.Expected, actual)
|
||||||
}
|
}
|
@ -68,7 +68,7 @@ export const EntryItem: React.FC<EntryProps> = ({entry, setFocusedEntryId, isSel
|
|||||||
let rule = 'latency' in entry.rules
|
let rule = 'latency' in entry.rules
|
||||||
if (rule) {
|
if (rule) {
|
||||||
if (entry.rules.latency !== -1) {
|
if (entry.rules.latency !== -1) {
|
||||||
if (entry.rules.latency >= entry.latency) {
|
if (entry.rules.latency >= entry.latency || !('latency' in entry)) {
|
||||||
additionalRulesProperties = styles.ruleSuccessRow
|
additionalRulesProperties = styles.ruleSuccessRow
|
||||||
ruleSuccess = true
|
ruleSuccess = true
|
||||||
} else {
|
} else {
|
||||||
|
Loading…
Reference in New Issue
Block a user