internal/workloadmanager/parameters.go (73 lines of code) (raw):

/* Copyright 2023 Google LLC Licensed 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 https://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 workloadmanager import ( "context" "fmt" "os" "golang.org/x/oauth2/google" "golang.org/x/oauth2" "github.com/GoogleCloudPlatform/sapagent/internal/hanainsights/preprocessor" "github.com/GoogleCloudPlatform/sapagent/internal/heartbeat" "github.com/GoogleCloudPlatform/sapagent/internal/instanceinfo" "github.com/GoogleCloudPlatform/workloadagentplatform/sharedlibraries/cloudmonitoring" "github.com/GoogleCloudPlatform/workloadagentplatform/sharedlibraries/commandlineexecutor" "github.com/GoogleCloudPlatform/workloadagentplatform/sharedlibraries/log" "github.com/GoogleCloudPlatform/workloadagentplatform/sharedlibraries/osinfo" cdpb "github.com/GoogleCloudPlatform/sapagent/protos/collectiondefinition" cpb "github.com/GoogleCloudPlatform/sapagent/protos/configuration" rpb "github.com/GoogleCloudPlatform/sapagent/protos/hanainsights" sappb "github.com/GoogleCloudPlatform/sapagent/protos/sapapp" wlmpb "github.com/GoogleCloudPlatform/sapagent/protos/wlmvalidation" spb "github.com/GoogleCloudPlatform/workloadagentplatform/sharedprotos/system" ) /* OSStatReader abstracts os.FileInfo reading. OSStatReader Example usage: OSStatReader(func(f string) (os.FileInfo, error) { return os.Stat(f) }) */ type OSStatReader func(string) (os.FileInfo, error) // DefaultTokenGetter obtains a "default" oauth2 token source within the getDefaultBearerToken function. type DefaultTokenGetter func(context.Context, ...string) (oauth2.TokenSource, error) // JSONCredentialsGetter obtains a JSON oauth2 google credentials within the getJSONBearerToken function. type JSONCredentialsGetter func(context.Context, []byte, ...string) (*google.Credentials, error) type discoveryInterface interface { GetSAPSystems() []*spb.SapDiscovery GetSAPInstances() *sappb.SAPInstances } type gceInterface interface { GetSecret(ctx context.Context, projectID, secretName string) (string, error) } // Parameters holds the parameters for all of the Collect* function calls. type Parameters struct { Config *cpb.Configuration WorkloadConfig *wlmpb.WorkloadValidation WorkloadConfigCh <-chan *cdpb.CollectionDefinition Remote bool ConfigFileReader ConfigFileReader OSStatReader OSStatReader Execute commandlineexecutor.Execute Exists commandlineexecutor.Exists InstanceInfoReader instanceinfo.Reader TimeSeriesCreator cloudmonitoring.TimeSeriesCreator DefaultTokenGetter DefaultTokenGetter JSONCredentialsGetter JSONCredentialsGetter OSType string BackOffs *cloudmonitoring.BackOffIntervals HeartbeatSpec *heartbeat.Spec InterfaceAddrsGetter InterfaceAddrsGetter OSReleaseFilePath string GCEService gceInterface WLMService wlmInterface Discovery discoveryInterface // fields derived from parsing the file specified by OSReleaseFilePath osVendorID string osVersion string // fields derived from reading HANA Insights rules hanaInsightRules []*rpb.Rule } // Init runs additional setup that is a prerequisite for WLM metric collection. func (p *Parameters) Init(ctx context.Context) { osData, err := osinfo.ReadData(ctx, osinfo.FileReadCloser(p.ConfigFileReader), p.OSType, p.OSReleaseFilePath) if err != nil { log.CtxLogger(ctx).Debugw(fmt.Sprintf("Could not read OS release info from %s", p.OSReleaseFilePath), "error", err) } p.osVendorID = osData.OSVendor p.osVersion = osData.OSVersion p.hanaInsightRules = readHANAInsightsRules() } // readHANAInsightsRules reads the HANA Insights rules. func readHANAInsightsRules() []*rpb.Rule { hanaInsightRules, err := preprocessor.ReadRules(preprocessor.RuleFilenames) if err != nil { log.Logger.Errorw("Error Reading HANA Insights rules", "error", err) return nil } return hanaInsightRules }