implement filters
This commit is contained in:
		| @@ -5,6 +5,7 @@ import ( | |||||||
| 	"log" | 	"log" | ||||||
| 	"os" | 	"os" | ||||||
| 	"path/filepath" | 	"path/filepath" | ||||||
|  | 	"strings" | ||||||
| 	"sync" | 	"sync" | ||||||
|  |  | ||||||
| 	"git.k-space.ee/k-space/logmower-shipper/pkg/file" | 	"git.k-space.ee/k-space/logmower-shipper/pkg/file" | ||||||
| @@ -31,8 +32,8 @@ var App = &cli.App{ | |||||||
| 		//TODO: &cli.BoolFlag{Name: "normalize-log-level", Usage: "Normalize log.level values to Syslog defined keywords"}, | 		//TODO: &cli.BoolFlag{Name: "normalize-log-level", Usage: "Normalize log.level values to Syslog defined keywords"}, | ||||||
| 		//TODO: &cli.BoolFlag{Name: "parse-json"}, | 		//TODO: &cli.BoolFlag{Name: "parse-json"}, | ||||||
| 		// | 		// | ||||||
| 		// &cli.StringFlag{Category: "k8s metadata", Name: "pod-namespace", EnvVars: []string{"KUBE_POD_NAMESPACE"}}, | 		&cli.StringSliceFlag{Category: "selectors", Name: "pod-namespace", EnvVars: []string{"KUBE_POD_NAMESPACE"}}, | ||||||
| 		// &cli.StringFlag{Category: "k8s metadata", Name: "node-name", EnvVars: []string{"KUBE_NODE_NAME"}, Required: true}, | 		&cli.StringSliceFlag{Category: "selectors", Name: "pod-prefix", EnvVars: []string{"KUBE_NODE_NAME"}}, | ||||||
| 		// | 		// | ||||||
| 		&cli.StringFlag{Category: "secrets", Name: "mongo-uri", EnvVars: []string{"MONGO_URI"}, Usage: "mongodb://foo:bar@host:27017/database", Required: true}, | 		&cli.StringFlag{Category: "secrets", Name: "mongo-uri", EnvVars: []string{"MONGO_URI"}, Usage: "mongodb://foo:bar@host:27017/database", Required: true}, | ||||||
| 	}, | 	}, | ||||||
| @@ -48,6 +49,7 @@ var App = &cli.App{ | |||||||
| 	}, | 	}, | ||||||
|  |  | ||||||
| 	Action: func(ctx *cli.Context) error { | 	Action: func(ctx *cli.Context) error { | ||||||
|  | 		filterNamespace, filterPodPrefixes := sliceToMap(ctx.StringSlice("pod-namespace")), ctx.StringSlice("pod-prefix") | ||||||
| 		var wg sync.WaitGroup | 		var wg sync.WaitGroup | ||||||
|  |  | ||||||
| 		log.Printf("%s %s starting", ctx.App.Name, ctx.App.Version) | 		log.Printf("%s %s starting", ctx.App.Name, ctx.App.Version) | ||||||
| @@ -94,6 +96,14 @@ var App = &cli.App{ | |||||||
| 						continue | 						continue | ||||||
| 					} | 					} | ||||||
|  |  | ||||||
|  | 					if _, ok := filterNamespace[kubeInfo.Namespace]; !ok { | ||||||
|  | 						continue | ||||||
|  | 					} | ||||||
|  |  | ||||||
|  | 					if ok := hasSlicePrefix(kubeInfo.Pod, filterPodPrefixes); !ok { | ||||||
|  | 						continue | ||||||
|  | 					} | ||||||
|  |  | ||||||
| 					promWatcherFilesStarted.Add(1) | 					promWatcherFilesStarted.Add(1) | ||||||
|  |  | ||||||
| 					wg.Add(1) | 					wg.Add(1) | ||||||
| @@ -156,3 +166,22 @@ func simulateInitialCreates(dirName string, eventChan chan<- fsnotify.Event) err | |||||||
|  |  | ||||||
| 	return nil | 	return nil | ||||||
| } | } | ||||||
|  |  | ||||||
|  | func sliceToMap[T comparable](sl []T) map[T]interface{} { | ||||||
|  | 	m := make(map[T]interface{}) | ||||||
|  |  | ||||||
|  | 	for _, k := range sl { | ||||||
|  | 		m[k] = nil | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	return m | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func hasSlicePrefix(s string, sl []string) bool { | ||||||
|  | 	for _, prefix := range sl { | ||||||
|  | 		if strings.HasPrefix(s, prefix) { | ||||||
|  | 			return true | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 	return false | ||||||
|  | } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user