pkg/accesslog/common/filter.go (54 lines of code) (raw):

// Licensed to Apache Software Foundation (ASF) under one or more contributor // license agreements. See the NOTICE file distributed with // this work for additional information regarding copyright // ownership. Apache Software Foundation (ASF) licenses this file to you under // the Apache License, Version 2.0 (the "License"); you may // not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, // software distributed under the License is distributed on an // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. package common import ( "os" "strings" "github.com/apache/skywalking-rover/pkg/process/api" "github.com/apache/skywalking-rover/pkg/process/finders/kubernetes" ) type MonitorFilter interface { // ShouldIncludeProcesses returns true if the processes should be included in monitoring. ShouldIncludeProcesses(process []api.ProcessInterface) []api.ProcessInterface // ExcludeNamespaces returns a list of namespaces that should be excluded from monitoring. ExcludeNamespaces() []string } type StaticMonitorFilter struct { namespaces map[string]bool clusters map[string]bool originalNamespaces []string } func NewStaticMonitorFilter(namespaces, clusters []string) *StaticMonitorFilter { return &StaticMonitorFilter{ namespaces: convertArrayToMapBool(namespaces), clusters: convertArrayToMapBool(clusters), originalNamespaces: namespaces, } } func (s *StaticMonitorFilter) ShouldIncludeProcesses(processes []api.ProcessInterface) (res []api.ProcessInterface) { var selfPid = os.Getpid() for _, entity := range processes { if int(entity.Pid()) == selfPid { continue } if entity.DetectType() != api.Kubernetes { // for now, we only have the kubernetes detected processes continue } namespace := entity.DetectProcess().(*kubernetes.Process).PodContainer().Pod.Namespace nameExclude := s.namespaces[namespace] clusterExclude := false if cluster, _, found := strings.Cut(entity.Entity().ServiceName, "::"); found && s.clusters[cluster] { clusterExclude = true } // if the namespace and cluster are not excluded, include the process if !nameExclude && !clusterExclude { res = append(res, entity) } } return } func (s *StaticMonitorFilter) ExcludeNamespaces() []string { return s.originalNamespaces } func convertArrayToMapBool(a []string) map[string]bool { m := make(map[string]bool, len(a)) for _, v := range a { m[v] = true } return m }