github.com/ouraigua/jenkins-library@v0.0.0-20231028010029-fbeaf2f3aa9b/cmd/influxWriteData_generated.go (about) 1 // Code generated by piper's step-generator. DO NOT EDIT. 2 3 package cmd 4 5 import ( 6 "fmt" 7 "os" 8 "time" 9 10 "github.com/SAP/jenkins-library/pkg/config" 11 "github.com/SAP/jenkins-library/pkg/log" 12 "github.com/SAP/jenkins-library/pkg/splunk" 13 "github.com/SAP/jenkins-library/pkg/telemetry" 14 "github.com/SAP/jenkins-library/pkg/validation" 15 "github.com/spf13/cobra" 16 ) 17 18 type influxWriteDataOptions struct { 19 ServerURL string `json:"serverUrl,omitempty"` 20 AuthToken string `json:"authToken,omitempty"` 21 Bucket string `json:"bucket,omitempty"` 22 Organization string `json:"organization,omitempty"` 23 DataMap string `json:"dataMap,omitempty"` 24 DataMapTags string `json:"dataMapTags,omitempty"` 25 } 26 27 // InfluxWriteDataCommand Writes metrics to influxdb 28 func InfluxWriteDataCommand() *cobra.Command { 29 const STEP_NAME = "influxWriteData" 30 31 metadata := influxWriteDataMetadata() 32 var stepConfig influxWriteDataOptions 33 var startTime time.Time 34 var logCollector *log.CollectorHook 35 var splunkClient *splunk.Splunk 36 telemetryClient := &telemetry.Telemetry{} 37 38 var createInfluxWriteDataCmd = &cobra.Command{ 39 Use: STEP_NAME, 40 Short: "Writes metrics to influxdb", 41 Long: `In this step, the metrics are written to the timeseries database [InfluxDB](https://www.influxdata.com/time-series-platform/influxdb/)`, 42 PreRunE: func(cmd *cobra.Command, _ []string) error { 43 startTime = time.Now() 44 log.SetStepName(STEP_NAME) 45 log.SetVerbose(GeneralConfig.Verbose) 46 47 GeneralConfig.GitHubAccessTokens = ResolveAccessTokens(GeneralConfig.GitHubTokens) 48 49 path, _ := os.Getwd() 50 fatalHook := &log.FatalHook{CorrelationID: GeneralConfig.CorrelationID, Path: path} 51 log.RegisterHook(fatalHook) 52 53 err := PrepareConfig(cmd, &metadata, STEP_NAME, &stepConfig, config.OpenPiperFile) 54 if err != nil { 55 log.SetErrorCategory(log.ErrorConfiguration) 56 return err 57 } 58 log.RegisterSecret(stepConfig.AuthToken) 59 60 if len(GeneralConfig.HookConfig.SentryConfig.Dsn) > 0 { 61 sentryHook := log.NewSentryHook(GeneralConfig.HookConfig.SentryConfig.Dsn, GeneralConfig.CorrelationID) 62 log.RegisterHook(&sentryHook) 63 } 64 65 if len(GeneralConfig.HookConfig.SplunkConfig.Dsn) > 0 { 66 splunkClient = &splunk.Splunk{} 67 logCollector = &log.CollectorHook{CorrelationID: GeneralConfig.CorrelationID} 68 log.RegisterHook(logCollector) 69 } 70 71 if err = log.RegisterANSHookIfConfigured(GeneralConfig.CorrelationID); err != nil { 72 log.Entry().WithError(err).Warn("failed to set up SAP Alert Notification Service log hook") 73 } 74 75 validation, err := validation.New(validation.WithJSONNamesForStructFields(), validation.WithPredefinedErrorMessages()) 76 if err != nil { 77 return err 78 } 79 if err = validation.ValidateStruct(stepConfig); err != nil { 80 log.SetErrorCategory(log.ErrorConfiguration) 81 return err 82 } 83 84 return nil 85 }, 86 Run: func(_ *cobra.Command, _ []string) { 87 stepTelemetryData := telemetry.CustomData{} 88 stepTelemetryData.ErrorCode = "1" 89 handler := func() { 90 config.RemoveVaultSecretFiles() 91 stepTelemetryData.Duration = fmt.Sprintf("%v", time.Since(startTime).Milliseconds()) 92 stepTelemetryData.ErrorCategory = log.GetErrorCategory().String() 93 stepTelemetryData.PiperCommitHash = GitCommit 94 telemetryClient.SetData(&stepTelemetryData) 95 telemetryClient.Send() 96 if len(GeneralConfig.HookConfig.SplunkConfig.Dsn) > 0 { 97 splunkClient.Initialize(GeneralConfig.CorrelationID, 98 GeneralConfig.HookConfig.SplunkConfig.Dsn, 99 GeneralConfig.HookConfig.SplunkConfig.Token, 100 GeneralConfig.HookConfig.SplunkConfig.Index, 101 GeneralConfig.HookConfig.SplunkConfig.SendLogs) 102 splunkClient.Send(telemetryClient.GetData(), logCollector) 103 } 104 if len(GeneralConfig.HookConfig.SplunkConfig.ProdCriblEndpoint) > 0 { 105 splunkClient.Initialize(GeneralConfig.CorrelationID, 106 GeneralConfig.HookConfig.SplunkConfig.ProdCriblEndpoint, 107 GeneralConfig.HookConfig.SplunkConfig.ProdCriblToken, 108 GeneralConfig.HookConfig.SplunkConfig.ProdCriblIndex, 109 GeneralConfig.HookConfig.SplunkConfig.SendLogs) 110 splunkClient.Send(telemetryClient.GetData(), logCollector) 111 } 112 } 113 log.DeferExitHandler(handler) 114 defer handler() 115 telemetryClient.Initialize(GeneralConfig.NoTelemetry, STEP_NAME) 116 influxWriteData(stepConfig, &stepTelemetryData) 117 stepTelemetryData.ErrorCode = "0" 118 log.Entry().Info("SUCCESS") 119 }, 120 } 121 122 addInfluxWriteDataFlags(createInfluxWriteDataCmd, &stepConfig) 123 return createInfluxWriteDataCmd 124 } 125 126 func addInfluxWriteDataFlags(cmd *cobra.Command, stepConfig *influxWriteDataOptions) { 127 cmd.Flags().StringVar(&stepConfig.ServerURL, "serverUrl", os.Getenv("PIPER_serverUrl"), "Base URL to the InfluxDB server") 128 cmd.Flags().StringVar(&stepConfig.AuthToken, "authToken", os.Getenv("PIPER_authToken"), "Token to authenticate to the Influxdb") 129 cmd.Flags().StringVar(&stepConfig.Bucket, "bucket", `piper`, "Name of database (1.8) or bucket (2.0)") 130 cmd.Flags().StringVar(&stepConfig.Organization, "organization", os.Getenv("PIPER_organization"), "Name of influx organization. Only for Influxdb 2.0") 131 cmd.Flags().StringVar(&stepConfig.DataMap, "dataMap", os.Getenv("PIPER_dataMap"), "Map of fields for each measurements. It has to be a JSON string. For example: {'series_1':{'field_a':11,'field_b':12},'series_2':{'field_c':21,'field_d':22}}") 132 cmd.Flags().StringVar(&stepConfig.DataMapTags, "dataMapTags", os.Getenv("PIPER_dataMapTags"), "Map of tags for each measurements. It has to be a JSON string. For example: {'series_1':{'tag_a':'a','tag_b':'b'},'series_2':{'tag_c':'c','tag_d':'d'}}") 133 134 cmd.MarkFlagRequired("serverUrl") 135 cmd.MarkFlagRequired("authToken") 136 cmd.MarkFlagRequired("dataMap") 137 } 138 139 // retrieve step metadata 140 func influxWriteDataMetadata() config.StepData { 141 var theMetaData = config.StepData{ 142 Metadata: config.StepMetadata{ 143 Name: "influxWriteData", 144 Aliases: []config.Alias{}, 145 Description: "Writes metrics to influxdb", 146 }, 147 Spec: config.StepSpec{ 148 Inputs: config.StepInputs{ 149 Secrets: []config.StepSecrets{ 150 {Name: "influxAuthTokenId", Description: "Influxdb token for authentication to the InfluxDB. In 1.8 version use 'username:password' instead.", Type: "jenkins"}, 151 }, 152 Parameters: []config.StepParameters{ 153 { 154 Name: "serverUrl", 155 ResourceRef: []config.ResourceReference{}, 156 Scope: []string{"PARAMETERS", "STAGES", "STEPS", "GENERAL"}, 157 Type: "string", 158 Mandatory: true, 159 Aliases: []config.Alias{}, 160 Default: os.Getenv("PIPER_serverUrl"), 161 }, 162 { 163 Name: "authToken", 164 ResourceRef: []config.ResourceReference{ 165 { 166 Name: "influxAuthTokenId", 167 Type: "secret", 168 }, 169 170 { 171 Name: "influxVaultSecretName", 172 Type: "vaultSecret", 173 Default: "influxdb", 174 }, 175 }, 176 Scope: []string{"PARAMETERS", "STAGES", "STEPS"}, 177 Type: "string", 178 Mandatory: true, 179 Aliases: []config.Alias{}, 180 Default: os.Getenv("PIPER_authToken"), 181 }, 182 { 183 Name: "bucket", 184 ResourceRef: []config.ResourceReference{}, 185 Scope: []string{"PARAMETERS", "STAGES", "STEPS"}, 186 Type: "string", 187 Mandatory: false, 188 Aliases: []config.Alias{}, 189 Default: `piper`, 190 }, 191 { 192 Name: "organization", 193 ResourceRef: []config.ResourceReference{}, 194 Scope: []string{"PARAMETERS", "STAGES", "STEPS"}, 195 Type: "string", 196 Mandatory: false, 197 Aliases: []config.Alias{}, 198 Default: os.Getenv("PIPER_organization"), 199 }, 200 { 201 Name: "dataMap", 202 ResourceRef: []config.ResourceReference{}, 203 Scope: []string{"PARAMETERS", "STAGES", "STEPS"}, 204 Type: "string", 205 Mandatory: true, 206 Aliases: []config.Alias{}, 207 Default: os.Getenv("PIPER_dataMap"), 208 }, 209 { 210 Name: "dataMapTags", 211 ResourceRef: []config.ResourceReference{}, 212 Scope: []string{"PARAMETERS", "STAGES", "STEPS"}, 213 Type: "string", 214 Mandatory: false, 215 Aliases: []config.Alias{}, 216 Default: os.Getenv("PIPER_dataMapTags"), 217 }, 218 }, 219 }, 220 }, 221 } 222 return theMetaData 223 }