mirror of
https://github.com/kubeshark/kubeshark.git
synced 2025-06-22 06:18:51 +00:00
* Add gin-contrib/pprof dependency * Run pprof server on agent with --profiler flag * Add --profiler flag to cli * Fix error message * Print cpu usage percentage * measure cpu of current pid instead of globaly on the system * Add scripts to plot performance * Plot packetsCount in analysis * Concat to DataFrame * Plot in turbo colorscheme * Make COLORMAP const * Fix rss units * Reduce code repetition by adding function for plotting * Allow grouping based on filenames * Temporary: Marked with comments where to disable code for experiments * Add newline at end of file * Add tap.cpuprofile flag. Change memprofile flag to tap.memprofile * create tapper modes for debugging using env vars * Fix rss plot units (MB instead of bytes) * Remove comment * Add info to plot script * Remove tap.cpumemprofile. Rename tap.memprofile to memprofile * Remove unused import * Remove whitespaces Co-authored-by: M. Mert Yıldıran <mehmet@up9.com> * Remove whitespaces Co-authored-by: M. Mert Yıldıran <mehmet@up9.com> * Remove whitespaces Co-authored-by: M. Mert Yıldıran <mehmet@up9.com> * Remove whitespaces Co-authored-by: M. Mert Yıldıran <mehmet@up9.com> * Remove whitespaces Co-authored-by: M. Mert Yıldıran <mehmet@up9.com> * Remove whitespaces Co-authored-by: M. Mert Yıldıran <mehmet@up9.com> * Rename debug env vars * Create package for debug env vars, read each env var once * Run go mod tidy * Increment MatchedPairs before emitting * Only count cores once * Count virtual and physical cores * Add dbgctl replace in cli * Fix lint: Check return values * Add tap/dbgctl to test-lint make rule * Replace tap/dbgctl in all modules * #run_acceptance_tests * Copy dbgctl module to docker image * Debug/profile tapper benchmark (#1093) * add mizu debug env to avoid all extensions * add readme + run_tapper_benchmark.sh * temporary change branch name * fix readme * fix MIZU_BENCHMARK_CLIENTS_COUNT env * change tap target to tcp stream * track live tcp streams * pr fixes * rename tapperPacketsCount to ignored_packets_count * change mizu tapper to mizu debugg Co-authored-by: David Levanon <dvdlevanon@gmail.com> Co-authored-by: M. Mert Yıldıran <mehmet@up9.com>
110 lines
4.1 KiB
Go
110 lines
4.1 KiB
Go
package configStructs
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
"io/fs"
|
|
"io/ioutil"
|
|
"os"
|
|
"regexp"
|
|
|
|
"github.com/up9inc/mizu/cli/uiUtils"
|
|
"github.com/up9inc/mizu/shared"
|
|
|
|
"github.com/up9inc/mizu/logger"
|
|
"github.com/up9inc/mizu/shared/units"
|
|
)
|
|
|
|
const (
|
|
GuiPortTapName = "gui-port"
|
|
NamespacesTapName = "namespaces"
|
|
AnalysisTapName = "analysis"
|
|
AllNamespacesTapName = "all-namespaces"
|
|
PlainTextFilterRegexesTapName = "regex-masking"
|
|
DisableRedactionTapName = "no-redact"
|
|
HumanMaxEntriesDBSizeTapName = "max-entries-db-size"
|
|
InsertionFilterName = "insertion-filter"
|
|
DryRunTapName = "dry-run"
|
|
WorkspaceTapName = "workspace"
|
|
EnforcePolicyFile = "traffic-validation-file"
|
|
ContractFile = "contract"
|
|
ServiceMeshName = "service-mesh"
|
|
TlsName = "tls"
|
|
ProfilerName = "profiler"
|
|
)
|
|
|
|
type TapConfig struct {
|
|
UploadIntervalSec int `yaml:"upload-interval" default:"10"`
|
|
PodRegexStr string `yaml:"regex" default:".*"`
|
|
GuiPort uint16 `yaml:"gui-port" default:"8899"`
|
|
ProxyHost string `yaml:"proxy-host" default:"127.0.0.1"`
|
|
Namespaces []string `yaml:"namespaces"`
|
|
Analysis bool `yaml:"analysis" default:"false"`
|
|
AllNamespaces bool `yaml:"all-namespaces" default:"false"`
|
|
PlainTextFilterRegexes []string `yaml:"regex-masking"`
|
|
IgnoredUserAgents []string `yaml:"ignored-user-agents"`
|
|
DisableRedaction bool `yaml:"no-redact" default:"false"`
|
|
HumanMaxEntriesDBSize string `yaml:"max-entries-db-size" default:"200MB"`
|
|
InsertionFilter string `yaml:"insertion-filter" default:""`
|
|
DryRun bool `yaml:"dry-run" default:"false"`
|
|
Workspace string `yaml:"workspace"`
|
|
EnforcePolicyFile string `yaml:"traffic-validation-file"`
|
|
ContractFile string `yaml:"contract"`
|
|
AskUploadConfirmation bool `yaml:"ask-upload-confirmation" default:"true"`
|
|
ApiServerResources shared.Resources `yaml:"api-server-resources"`
|
|
TapperResources shared.Resources `yaml:"tapper-resources"`
|
|
ServiceMesh bool `yaml:"service-mesh" default:"false"`
|
|
Tls bool `yaml:"tls" default:"false"`
|
|
Profiler bool `yaml:"profiler" default:"false"`
|
|
}
|
|
|
|
func (config *TapConfig) PodRegex() *regexp.Regexp {
|
|
podRegex, _ := regexp.Compile(config.PodRegexStr)
|
|
return podRegex
|
|
}
|
|
|
|
func (config *TapConfig) MaxEntriesDBSizeBytes() int64 {
|
|
maxEntriesDBSizeBytes, _ := units.HumanReadableToBytes(config.HumanMaxEntriesDBSize)
|
|
return maxEntriesDBSizeBytes
|
|
}
|
|
|
|
func (config *TapConfig) GetInsertionFilter() string {
|
|
insertionFilter := config.InsertionFilter
|
|
if fs.ValidPath(insertionFilter) {
|
|
if _, err := os.Stat(insertionFilter); err == nil {
|
|
b, err := ioutil.ReadFile(insertionFilter)
|
|
if err != nil {
|
|
logger.Log.Warningf(uiUtils.Warning, fmt.Sprintf("Couldn't read the file on path: %s, err: %v", insertionFilter, err))
|
|
} else {
|
|
insertionFilter = string(b)
|
|
}
|
|
}
|
|
}
|
|
return insertionFilter
|
|
}
|
|
|
|
func (config *TapConfig) Validate() error {
|
|
_, compileErr := regexp.Compile(config.PodRegexStr)
|
|
if compileErr != nil {
|
|
return fmt.Errorf("%s is not a valid regex %s", config.PodRegexStr, compileErr)
|
|
}
|
|
|
|
_, parseHumanDataSizeErr := units.HumanReadableToBytes(config.HumanMaxEntriesDBSize)
|
|
if parseHumanDataSizeErr != nil {
|
|
return fmt.Errorf("Could not parse --%s value %s", HumanMaxEntriesDBSizeTapName, config.HumanMaxEntriesDBSize)
|
|
}
|
|
|
|
if config.Workspace != "" {
|
|
workspaceRegex, _ := regexp.Compile("[A-Za-z0-9][-A-Za-z0-9_.]*[A-Za-z0-9]+$")
|
|
if len(config.Workspace) > 63 || !workspaceRegex.MatchString(config.Workspace) {
|
|
return errors.New("invalid workspace name")
|
|
}
|
|
}
|
|
|
|
if config.Analysis && config.Workspace != "" {
|
|
return fmt.Errorf("Can't run with both --%s and --%s flags", AnalysisTapName, WorkspaceTapName)
|
|
}
|
|
|
|
return nil
|
|
}
|