github.com/jaylevin/jenkins-library@v1.230.4/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 validation, err := validation.New(validation.WithJSONNamesForStructFields(), validation.WithPredefinedErrorMessages()) 72 if err != nil { 73 return err 74 } 75 if err = validation.ValidateStruct(stepConfig); err != nil { 76 log.SetErrorCategory(log.ErrorConfiguration) 77 return err 78 } 79 80 return nil 81 }, 82 Run: func(_ *cobra.Command, _ []string) { 83 stepTelemetryData := telemetry.CustomData{} 84 stepTelemetryData.ErrorCode = "1" 85 handler := func() { 86 config.RemoveVaultSecretFiles() 87 stepTelemetryData.Duration = fmt.Sprintf("%v", time.Since(startTime).Milliseconds()) 88 stepTelemetryData.ErrorCategory = log.GetErrorCategory().String() 89 stepTelemetryData.PiperCommitHash = GitCommit 90 telemetryClient.SetData(&stepTelemetryData) 91 telemetryClient.Send() 92 if len(GeneralConfig.HookConfig.SplunkConfig.Dsn) > 0 { 93 splunkClient.Send(telemetryClient.GetData(), logCollector) 94 } 95 } 96 log.DeferExitHandler(handler) 97 defer handler() 98 telemetryClient.Initialize(GeneralConfig.NoTelemetry, STEP_NAME) 99 if len(GeneralConfig.HookConfig.SplunkConfig.Dsn) > 0 { 100 splunkClient.Initialize(GeneralConfig.CorrelationID, 101 GeneralConfig.HookConfig.SplunkConfig.Dsn, 102 GeneralConfig.HookConfig.SplunkConfig.Token, 103 GeneralConfig.HookConfig.SplunkConfig.Index, 104 GeneralConfig.HookConfig.SplunkConfig.SendLogs) 105 } 106 influxWriteData(stepConfig, &stepTelemetryData) 107 stepTelemetryData.ErrorCode = "0" 108 log.Entry().Info("SUCCESS") 109 }, 110 } 111 112 addInfluxWriteDataFlags(createInfluxWriteDataCmd, &stepConfig) 113 return createInfluxWriteDataCmd 114 } 115 116 func addInfluxWriteDataFlags(cmd *cobra.Command, stepConfig *influxWriteDataOptions) { 117 cmd.Flags().StringVar(&stepConfig.ServerURL, "serverUrl", os.Getenv("PIPER_serverUrl"), "Base URL to the InfluxDB server") 118 cmd.Flags().StringVar(&stepConfig.AuthToken, "authToken", os.Getenv("PIPER_authToken"), "Token to authenticate to the Influxdb") 119 cmd.Flags().StringVar(&stepConfig.Bucket, "bucket", `piper`, "Name of database (1.8) or bucket (2.0)") 120 cmd.Flags().StringVar(&stepConfig.Organization, "organization", os.Getenv("PIPER_organization"), "Name of influx organization. Only for Influxdb 2.0") 121 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}}") 122 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'}}") 123 124 cmd.MarkFlagRequired("serverUrl") 125 cmd.MarkFlagRequired("authToken") 126 cmd.MarkFlagRequired("dataMap") 127 } 128 129 // retrieve step metadata 130 func influxWriteDataMetadata() config.StepData { 131 var theMetaData = config.StepData{ 132 Metadata: config.StepMetadata{ 133 Name: "influxWriteData", 134 Aliases: []config.Alias{}, 135 Description: "Writes metrics to influxdb", 136 }, 137 Spec: config.StepSpec{ 138 Inputs: config.StepInputs{ 139 Secrets: []config.StepSecrets{ 140 {Name: "influxAuthTokenId", Description: "Influxdb token for authentication to the InfluxDB. In 1.8 version use 'username:password' instead.", Type: "jenkins"}, 141 }, 142 Parameters: []config.StepParameters{ 143 { 144 Name: "serverUrl", 145 ResourceRef: []config.ResourceReference{}, 146 Scope: []string{"PARAMETERS", "STAGES", "STEPS", "GENERAL"}, 147 Type: "string", 148 Mandatory: true, 149 Aliases: []config.Alias{}, 150 Default: os.Getenv("PIPER_serverUrl"), 151 }, 152 { 153 Name: "authToken", 154 ResourceRef: []config.ResourceReference{ 155 { 156 Name: "influxAuthTokenId", 157 Type: "secret", 158 }, 159 160 { 161 Name: "influxVaultSecretName", 162 Type: "vaultSecret", 163 Default: "influxdb", 164 }, 165 }, 166 Scope: []string{"PARAMETERS", "STAGES", "STEPS"}, 167 Type: "string", 168 Mandatory: true, 169 Aliases: []config.Alias{}, 170 Default: os.Getenv("PIPER_authToken"), 171 }, 172 { 173 Name: "bucket", 174 ResourceRef: []config.ResourceReference{}, 175 Scope: []string{"PARAMETERS", "STAGES", "STEPS"}, 176 Type: "string", 177 Mandatory: false, 178 Aliases: []config.Alias{}, 179 Default: `piper`, 180 }, 181 { 182 Name: "organization", 183 ResourceRef: []config.ResourceReference{}, 184 Scope: []string{"PARAMETERS", "STAGES", "STEPS"}, 185 Type: "string", 186 Mandatory: false, 187 Aliases: []config.Alias{}, 188 Default: os.Getenv("PIPER_organization"), 189 }, 190 { 191 Name: "dataMap", 192 ResourceRef: []config.ResourceReference{}, 193 Scope: []string{"PARAMETERS", "STAGES", "STEPS"}, 194 Type: "string", 195 Mandatory: true, 196 Aliases: []config.Alias{}, 197 Default: os.Getenv("PIPER_dataMap"), 198 }, 199 { 200 Name: "dataMapTags", 201 ResourceRef: []config.ResourceReference{}, 202 Scope: []string{"PARAMETERS", "STAGES", "STEPS"}, 203 Type: "string", 204 Mandatory: false, 205 Aliases: []config.Alias{}, 206 Default: os.Getenv("PIPER_dataMapTags"), 207 }, 208 }, 209 }, 210 }, 211 } 212 return theMetaData 213 }