github.com/argoproj/argo-events@v1.9.1/sensors/trigger.go (about) 1 /* 2 Copyright 2018 BlackRock, Inc. 3 4 Licensed under the Apache License, Version 2.0 (the "License"); 5 you may not use this file except in compliance with the License. 6 You may obtain a copy of the License at 7 8 http://www.apache.org/licenses/LICENSE-2.0 9 10 Unless required by applicable law or agreed to in writing, software 11 distributed under the License is distributed on an "AS IS" BASIS, 12 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 See the License for the specific language governing permissions and 14 limitations under the License. 15 */ 16 package sensors 17 18 import ( 19 "context" 20 21 "go.uber.org/zap" 22 23 "github.com/argoproj/argo-events/common/logging" 24 apicommon "github.com/argoproj/argo-events/pkg/apis/common" 25 "github.com/argoproj/argo-events/pkg/apis/sensor/v1alpha1" 26 openwhisk "github.com/argoproj/argo-events/sensors/triggers/apache-openwhisk" 27 argoworkflow "github.com/argoproj/argo-events/sensors/triggers/argo-workflow" 28 awslambda "github.com/argoproj/argo-events/sensors/triggers/aws-lambda" 29 eventhubs "github.com/argoproj/argo-events/sensors/triggers/azure-event-hubs" 30 servicebus "github.com/argoproj/argo-events/sensors/triggers/azure-service-bus" 31 customtrigger "github.com/argoproj/argo-events/sensors/triggers/custom-trigger" 32 "github.com/argoproj/argo-events/sensors/triggers/email" 33 "github.com/argoproj/argo-events/sensors/triggers/http" 34 "github.com/argoproj/argo-events/sensors/triggers/kafka" 35 logtrigger "github.com/argoproj/argo-events/sensors/triggers/log" 36 "github.com/argoproj/argo-events/sensors/triggers/nats" 37 "github.com/argoproj/argo-events/sensors/triggers/pulsar" 38 "github.com/argoproj/argo-events/sensors/triggers/slack" 39 standardk8s "github.com/argoproj/argo-events/sensors/triggers/standard-k8s" 40 ) 41 42 // Trigger interface 43 type Trigger interface { 44 GetTriggerType() apicommon.TriggerType 45 // FetchResource fetches the trigger resource from external source 46 FetchResource(context.Context) (interface{}, error) 47 // ApplyResourceParameters applies parameters to the trigger resource 48 ApplyResourceParameters(events map[string]*v1alpha1.Event, resource interface{}) (interface{}, error) 49 // Execute executes the trigger 50 Execute(ctx context.Context, events map[string]*v1alpha1.Event, resource interface{}) (interface{}, error) 51 // ApplyPolicy applies the policy on the trigger 52 ApplyPolicy(ctx context.Context, resource interface{}) error 53 } 54 55 // GetTrigger returns a trigger 56 func (sensorCtx *SensorContext) GetTrigger(ctx context.Context, trigger *v1alpha1.Trigger) Trigger { 57 log := logging.FromContext(ctx).With(logging.LabelTriggerName, trigger.Template.Name) 58 if trigger.Template.K8s != nil { 59 return standardk8s.NewStandardK8sTrigger(sensorCtx.kubeClient, sensorCtx.dynamicClient, sensorCtx.sensor, trigger, log) 60 } 61 62 if trigger.Template.ArgoWorkflow != nil { 63 return argoworkflow.NewArgoWorkflowTrigger(sensorCtx.kubeClient, sensorCtx.dynamicClient, sensorCtx.sensor, trigger, log) 64 } 65 66 if trigger.Template.HTTP != nil { 67 result, err := http.NewHTTPTrigger(sensorCtx.httpClients, sensorCtx.sensor, trigger, log) 68 if err != nil { 69 log.Errorw("failed to new an HTTP trigger", zap.Error(err)) 70 return nil 71 } 72 return result 73 } 74 75 if trigger.Template.AWSLambda != nil { 76 result, err := awslambda.NewAWSLambdaTrigger(sensorCtx.awsLambdaClients, sensorCtx.sensor, trigger, log) 77 if err != nil { 78 log.Errorw("failed to new a Lambda trigger", zap.Error(err)) 79 return nil 80 } 81 return result 82 } 83 84 if trigger.Template.AzureEventHubs != nil { 85 result, err := eventhubs.NewAzureEventHubsTrigger(sensorCtx.sensor, trigger, sensorCtx.azureEventHubsClients, log) 86 if err != nil { 87 log.Errorw("failed to new an Azure Event Hubs trigger", zap.Error(err)) 88 return nil 89 } 90 return result 91 } 92 93 if trigger.Template.AzureServiceBus != nil { 94 result, err := servicebus.NewAzureServiceBusTrigger(sensorCtx.sensor, trigger, sensorCtx.azureServiceBusClients, log) 95 if err != nil { 96 log.Errorw("failed to new an Azure Service Bus trigger", zap.Error(err)) 97 return nil 98 } 99 return result 100 } 101 102 if trigger.Template.Kafka != nil { 103 result, err := kafka.NewKafkaTrigger(sensorCtx.sensor, trigger, sensorCtx.kafkaProducers, log) 104 if err != nil { 105 log.Errorw("failed to new a Kafka trigger", zap.Error(err)) 106 return nil 107 } 108 return result 109 } 110 111 if trigger.Template.Pulsar != nil { 112 result, err := pulsar.NewPulsarTrigger(sensorCtx.sensor, trigger, sensorCtx.pulsarProducers, log) 113 if err != nil { 114 log.Errorw("failed to new a Pulsar trigger", zap.Error(err)) 115 return nil 116 } 117 return result 118 } 119 120 if trigger.Template.NATS != nil { 121 result, err := nats.NewNATSTrigger(sensorCtx.sensor, trigger, sensorCtx.natsConnections, log) 122 if err != nil { 123 log.Errorw("failed to new a NATS trigger", zap.Error(err)) 124 return nil 125 } 126 return result 127 } 128 129 if trigger.Template.Slack != nil { 130 result, err := slack.NewSlackTrigger(sensorCtx.sensor, trigger, log, sensorCtx.slackHTTPClient) 131 if err != nil { 132 log.Errorw("failed to new a Slack trigger", zap.Error(err)) 133 return nil 134 } 135 return result 136 } 137 138 if trigger.Template.OpenWhisk != nil { 139 result, err := openwhisk.NewTriggerImpl(sensorCtx.sensor, trigger, sensorCtx.openwhiskClients, log) 140 if err != nil { 141 log.Errorw("failed to new an OpenWhisk trigger", zap.Error(err)) 142 return nil 143 } 144 return result 145 } 146 147 if trigger.Template.CustomTrigger != nil { 148 result, err := customtrigger.NewCustomTrigger(sensorCtx.sensor, trigger, log, sensorCtx.customTriggerClients) 149 if err != nil { 150 log.Errorw("failed to new a Custom trigger", zap.Error(err)) 151 return nil 152 } 153 return result 154 } 155 156 if trigger.Template.Log != nil { 157 result, err := logtrigger.NewLogTrigger(sensorCtx.sensor, trigger, log) 158 if err != nil { 159 log.Errorw("failed to new a Log trigger", zap.Error(err)) 160 return nil 161 } 162 return result 163 } 164 165 if trigger.Template.Email != nil { 166 result, err := email.NewEmailTrigger(sensorCtx.sensor, trigger, log) 167 if err != nil { 168 log.Errorw("failed to new a Email trigger", zap.Error(err)) 169 return nil 170 } 171 return result 172 } 173 return nil 174 }