Files
kubeshark/tap/diagnose/errors_map.go
T
M. Mert YıldıranandGitHub 0eb7883a47 Rename the project to Kubeshark (#1226)
* Rename `mizu` to `kubeshark`

* Rename `up9inc` to `kubeshark`

* Change the logo, title, motto and the main color

* Replace the favicon

* Update the docs link

* Change the copyright text in C files

* Remove a comment

* Rewrite the `README.md` and update the logo and screenshots used in it

* Add a `TODO`

* Fix the grammar

* Fix the bottom text in the filtering guide

* Change the Docker Hub username of cross-compilation intermediate images

* Add an install script

* Fix `docker/login-action` in the CI

* Delete `build-custom-branch.yml` GitHub workflow

* Update `README.md`

* Remove `install.sh`

* Change the motto back to "Traffic viewer for Kubernetes"
2022-11-19 11:13:15 +03:00

86 lines
1.9 KiB
Go

package diagnose
import (
"fmt"
"sync"
"github.com/google/gopacket/examples/util"
"github.com/kubeshark/kubeshark/logger"
)
var TapErrors *errorsMap
type errorsMap struct {
errorsMap map[string]uint
OutputLevel int
ErrorsCount uint
errorsMapMutex sync.Mutex
}
func InitializeErrorsMap(debug bool, verbose bool, quiet bool) {
var outputLevel int
defer util.Run()()
if debug {
outputLevel = 2
} else if verbose {
outputLevel = 1
} else if quiet {
outputLevel = -1
}
TapErrors = newErrorsMap(outputLevel)
}
func newErrorsMap(outputLevel int) *errorsMap {
return &errorsMap{
errorsMap: make(map[string]uint),
OutputLevel: outputLevel,
}
}
/* minOutputLevel: Error will be printed only if outputLevel is above this value
* t: key for errorsMap (counting errors)
* s, a: arguments logger.Log.Infof
* Note: Too bad for perf that a... is evaluated
*/
func (e *errorsMap) logError(minOutputLevel int, t string, s string, a ...interface{}) {
e.errorsMapMutex.Lock()
e.ErrorsCount++
nb := e.errorsMap[t]
e.errorsMap[t] = nb + 1
e.errorsMapMutex.Unlock()
if e.OutputLevel >= minOutputLevel {
formatStr := fmt.Sprintf("%s: %s", t, s)
logger.Log.Errorf(formatStr, a...)
}
}
func (e *errorsMap) Error(t string, s string, a ...interface{}) {
e.logError(0, t, s, a...)
}
func (e *errorsMap) SilentError(t string, s string, a ...interface{}) {
e.logError(2, t, s, a...)
}
func (e *errorsMap) Debug(s string, a ...interface{}) {
logger.Log.Debugf(s, a...)
}
func (e *errorsMap) GetErrorsSummary() (int, string) {
e.errorsMapMutex.Lock()
errorMapLen := len(e.errorsMap)
errorsSummery := fmt.Sprintf("%v", e.errorsMap)
e.errorsMapMutex.Unlock()
return errorMapLen, errorsSummery
}
func (e *errorsMap) PrintSummary() {
logger.Log.Infof("Errors: %d", e.ErrorsCount)
for t := range e.errorsMap {
logger.Log.Infof(" %s:\t\t%d", e, e.errorsMap[t])
}
}