All Downloads are FREE. Search and download functionalities are using the official Maven repository.

software.amazon.awscdk.services.lambda.EventSourceMappingProps Maven / Gradle / Ivy

package software.amazon.awscdk.services.lambda;

/**
 * Properties for declaring a new event source mapping.
 * 

* Example: *

*

 * // The code below shows an example of how to instantiate this type.
 * // The values are placeholders you should change.
 * import software.amazon.awscdk.services.lambda.*;
 * import software.amazon.awscdk.core.*;
 * IEventSourceDlq eventSourceDlq;
 * Function function_;
 * SourceAccessConfigurationType sourceAccessConfigurationType;
 * EventSourceMappingProps eventSourceMappingProps = EventSourceMappingProps.builder()
 *         .target(function_)
 *         // the properties below are optional
 *         .batchSize(123)
 *         .bisectBatchOnError(false)
 *         .enabled(false)
 *         .eventSourceArn("eventSourceArn")
 *         .kafkaBootstrapServers(List.of("kafkaBootstrapServers"))
 *         .kafkaTopic("kafkaTopic")
 *         .maxBatchingWindow(Duration.minutes(30))
 *         .maxRecordAge(Duration.minutes(30))
 *         .onFailure(eventSourceDlq)
 *         .parallelizationFactor(123)
 *         .reportBatchItemFailures(false)
 *         .retryAttempts(123)
 *         .sourceAccessConfigurations(List.of(SourceAccessConfiguration.builder()
 *                 .type(sourceAccessConfigurationType)
 *                 .uri("uri")
 *                 .build()))
 *         .startingPosition(StartingPosition.TRIM_HORIZON)
 *         .tumblingWindow(Duration.minutes(30))
 *         .build();
 * 
*/ @javax.annotation.Generated(value = "jsii-pacmak/1.46.0 (build cd08c55)", date = "2021-11-23T14:40:40.064Z") @software.amazon.jsii.Jsii(module = software.amazon.awscdk.services.lambda.$Module.class, fqn = "@aws-cdk/aws-lambda.EventSourceMappingProps") @software.amazon.jsii.Jsii.Proxy(EventSourceMappingProps.Jsii$Proxy.class) @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable) public interface EventSourceMappingProps extends software.amazon.jsii.JsiiSerializable, software.amazon.awscdk.services.lambda.EventSourceMappingOptions { /** * The target AWS Lambda function. */ @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable) @org.jetbrains.annotations.NotNull software.amazon.awscdk.services.lambda.IFunction getTarget(); /** * @return a {@link Builder} of {@link EventSourceMappingProps} */ @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable) static Builder builder() { return new Builder(); } /** * A builder for {@link EventSourceMappingProps} */ @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable) public static final class Builder implements software.amazon.jsii.Builder { software.amazon.awscdk.services.lambda.IFunction target; java.lang.Number batchSize; java.lang.Boolean bisectBatchOnError; java.lang.Boolean enabled; java.lang.String eventSourceArn; java.util.List kafkaBootstrapServers; java.lang.String kafkaTopic; software.amazon.awscdk.core.Duration maxBatchingWindow; software.amazon.awscdk.core.Duration maxRecordAge; software.amazon.awscdk.services.lambda.IEventSourceDlq onFailure; java.lang.Number parallelizationFactor; java.lang.Boolean reportBatchItemFailures; java.lang.Number retryAttempts; java.util.List sourceAccessConfigurations; software.amazon.awscdk.services.lambda.StartingPosition startingPosition; software.amazon.awscdk.core.Duration tumblingWindow; /** * Sets the value of {@link EventSourceMappingProps#getTarget} * @param target The target AWS Lambda function. This parameter is required. * @return {@code this} */ @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable) public Builder target(software.amazon.awscdk.services.lambda.IFunction target) { this.target = target; return this; } /** * Sets the value of {@link EventSourceMappingProps#getBatchSize} * @param batchSize The largest number of records that AWS Lambda will retrieve from your event source at the time of invoking your function. * Your function receives an * event with all the retrieved records. *

* Valid Range: Minimum value of 1. Maximum value of 10000. * @return {@code this} */ @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable) public Builder batchSize(java.lang.Number batchSize) { this.batchSize = batchSize; return this; } /** * Sets the value of {@link EventSourceMappingProps#getBisectBatchOnError} * @param bisectBatchOnError If the function returns an error, split the batch in two and retry. * @return {@code this} */ @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable) public Builder bisectBatchOnError(java.lang.Boolean bisectBatchOnError) { this.bisectBatchOnError = bisectBatchOnError; return this; } /** * Sets the value of {@link EventSourceMappingProps#getEnabled} * @param enabled Set to false to disable the event source upon creation. * @return {@code this} */ @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable) public Builder enabled(java.lang.Boolean enabled) { this.enabled = enabled; return this; } /** * Sets the value of {@link EventSourceMappingProps#getEventSourceArn} * @param eventSourceArn The Amazon Resource Name (ARN) of the event source. * Any record added to * this stream can invoke the Lambda function. * @return {@code this} */ @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable) public Builder eventSourceArn(java.lang.String eventSourceArn) { this.eventSourceArn = eventSourceArn; return this; } /** * Sets the value of {@link EventSourceMappingProps#getKafkaBootstrapServers} * @param kafkaBootstrapServers A list of host and port pairs that are the addresses of the Kafka brokers in a self managed "bootstrap" Kafka cluster that a Kafka client connects to initially to bootstrap itself. * They are in the format abc.example.com:9096. * @return {@code this} */ @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable) public Builder kafkaBootstrapServers(java.util.List kafkaBootstrapServers) { this.kafkaBootstrapServers = kafkaBootstrapServers; return this; } /** * Sets the value of {@link EventSourceMappingProps#getKafkaTopic} * @param kafkaTopic The name of the Kafka topic. * @return {@code this} */ @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable) public Builder kafkaTopic(java.lang.String kafkaTopic) { this.kafkaTopic = kafkaTopic; return this; } /** * Sets the value of {@link EventSourceMappingProps#getMaxBatchingWindow} * @param maxBatchingWindow The maximum amount of time to gather records before invoking the function. * Maximum of Duration.minutes(5) * @return {@code this} */ @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable) public Builder maxBatchingWindow(software.amazon.awscdk.core.Duration maxBatchingWindow) { this.maxBatchingWindow = maxBatchingWindow; return this; } /** * Sets the value of {@link EventSourceMappingProps#getMaxRecordAge} * @param maxRecordAge The maximum age of a record that Lambda sends to a function for processing. * Valid Range: *

*

    *
  • Minimum value of 60 seconds
  • *
  • Maximum value of 7 days
  • *
* @return {@code this} */ @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable) public Builder maxRecordAge(software.amazon.awscdk.core.Duration maxRecordAge) { this.maxRecordAge = maxRecordAge; return this; } /** * Sets the value of {@link EventSourceMappingProps#getOnFailure} * @param onFailure An Amazon SQS queue or Amazon SNS topic destination for discarded records. * @return {@code this} */ @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable) public Builder onFailure(software.amazon.awscdk.services.lambda.IEventSourceDlq onFailure) { this.onFailure = onFailure; return this; } /** * Sets the value of {@link EventSourceMappingProps#getParallelizationFactor} * @param parallelizationFactor The number of batches to process from each shard concurrently. * Valid Range: *

*

    *
  • Minimum value of 1
  • *
  • Maximum value of 10
  • *
* @return {@code this} */ @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable) public Builder parallelizationFactor(java.lang.Number parallelizationFactor) { this.parallelizationFactor = parallelizationFactor; return this; } /** * Sets the value of {@link EventSourceMappingProps#getReportBatchItemFailures} * @param reportBatchItemFailures Allow functions to return partially successful responses for a batch of records. * @return {@code this} */ @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable) public Builder reportBatchItemFailures(java.lang.Boolean reportBatchItemFailures) { this.reportBatchItemFailures = reportBatchItemFailures; return this; } /** * Sets the value of {@link EventSourceMappingProps#getRetryAttempts} * @param retryAttempts The maximum number of times to retry when the function returns an error. * Set to undefined if you want lambda to keep retrying infinitely or until * the record expires. *

* Valid Range: *

*

    *
  • Minimum value of 0
  • *
  • Maximum value of 10000
  • *
* @return {@code this} */ @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable) public Builder retryAttempts(java.lang.Number retryAttempts) { this.retryAttempts = retryAttempts; return this; } /** * Sets the value of {@link EventSourceMappingProps#getSourceAccessConfigurations} * @param sourceAccessConfigurations Specific settings like the authentication protocol or the VPC components to secure access to your event source. * @return {@code this} */ @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable) @SuppressWarnings("unchecked") public Builder sourceAccessConfigurations(java.util.List sourceAccessConfigurations) { this.sourceAccessConfigurations = (java.util.List)sourceAccessConfigurations; return this; } /** * Sets the value of {@link EventSourceMappingProps#getStartingPosition} * @param startingPosition The position in the DynamoDB, Kinesis or MSK stream where AWS Lambda should start reading. * @return {@code this} */ @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable) public Builder startingPosition(software.amazon.awscdk.services.lambda.StartingPosition startingPosition) { this.startingPosition = startingPosition; return this; } /** * Sets the value of {@link EventSourceMappingProps#getTumblingWindow} * @param tumblingWindow The size of the tumbling windows to group records sent to DynamoDB or Kinesis. * @return {@code this} */ @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable) public Builder tumblingWindow(software.amazon.awscdk.core.Duration tumblingWindow) { this.tumblingWindow = tumblingWindow; return this; } /** * Builds the configured instance. * @return a new instance of {@link EventSourceMappingProps} * @throws NullPointerException if any required attribute was not provided */ @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable) @Override public EventSourceMappingProps build() { return new Jsii$Proxy(this); } } /** * An implementation for {@link EventSourceMappingProps} */ @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable) @software.amazon.jsii.Internal final class Jsii$Proxy extends software.amazon.jsii.JsiiObject implements EventSourceMappingProps { private final software.amazon.awscdk.services.lambda.IFunction target; private final java.lang.Number batchSize; private final java.lang.Boolean bisectBatchOnError; private final java.lang.Boolean enabled; private final java.lang.String eventSourceArn; private final java.util.List kafkaBootstrapServers; private final java.lang.String kafkaTopic; private final software.amazon.awscdk.core.Duration maxBatchingWindow; private final software.amazon.awscdk.core.Duration maxRecordAge; private final software.amazon.awscdk.services.lambda.IEventSourceDlq onFailure; private final java.lang.Number parallelizationFactor; private final java.lang.Boolean reportBatchItemFailures; private final java.lang.Number retryAttempts; private final java.util.List sourceAccessConfigurations; private final software.amazon.awscdk.services.lambda.StartingPosition startingPosition; private final software.amazon.awscdk.core.Duration tumblingWindow; /** * Constructor that initializes the object based on values retrieved from the JsiiObject. * @param objRef Reference to the JSII managed object. */ protected Jsii$Proxy(final software.amazon.jsii.JsiiObjectRef objRef) { super(objRef); this.target = software.amazon.jsii.Kernel.get(this, "target", software.amazon.jsii.NativeType.forClass(software.amazon.awscdk.services.lambda.IFunction.class)); this.batchSize = software.amazon.jsii.Kernel.get(this, "batchSize", software.amazon.jsii.NativeType.forClass(java.lang.Number.class)); this.bisectBatchOnError = software.amazon.jsii.Kernel.get(this, "bisectBatchOnError", software.amazon.jsii.NativeType.forClass(java.lang.Boolean.class)); this.enabled = software.amazon.jsii.Kernel.get(this, "enabled", software.amazon.jsii.NativeType.forClass(java.lang.Boolean.class)); this.eventSourceArn = software.amazon.jsii.Kernel.get(this, "eventSourceArn", software.amazon.jsii.NativeType.forClass(java.lang.String.class)); this.kafkaBootstrapServers = software.amazon.jsii.Kernel.get(this, "kafkaBootstrapServers", software.amazon.jsii.NativeType.listOf(software.amazon.jsii.NativeType.forClass(java.lang.String.class))); this.kafkaTopic = software.amazon.jsii.Kernel.get(this, "kafkaTopic", software.amazon.jsii.NativeType.forClass(java.lang.String.class)); this.maxBatchingWindow = software.amazon.jsii.Kernel.get(this, "maxBatchingWindow", software.amazon.jsii.NativeType.forClass(software.amazon.awscdk.core.Duration.class)); this.maxRecordAge = software.amazon.jsii.Kernel.get(this, "maxRecordAge", software.amazon.jsii.NativeType.forClass(software.amazon.awscdk.core.Duration.class)); this.onFailure = software.amazon.jsii.Kernel.get(this, "onFailure", software.amazon.jsii.NativeType.forClass(software.amazon.awscdk.services.lambda.IEventSourceDlq.class)); this.parallelizationFactor = software.amazon.jsii.Kernel.get(this, "parallelizationFactor", software.amazon.jsii.NativeType.forClass(java.lang.Number.class)); this.reportBatchItemFailures = software.amazon.jsii.Kernel.get(this, "reportBatchItemFailures", software.amazon.jsii.NativeType.forClass(java.lang.Boolean.class)); this.retryAttempts = software.amazon.jsii.Kernel.get(this, "retryAttempts", software.amazon.jsii.NativeType.forClass(java.lang.Number.class)); this.sourceAccessConfigurations = software.amazon.jsii.Kernel.get(this, "sourceAccessConfigurations", software.amazon.jsii.NativeType.listOf(software.amazon.jsii.NativeType.forClass(software.amazon.awscdk.services.lambda.SourceAccessConfiguration.class))); this.startingPosition = software.amazon.jsii.Kernel.get(this, "startingPosition", software.amazon.jsii.NativeType.forClass(software.amazon.awscdk.services.lambda.StartingPosition.class)); this.tumblingWindow = software.amazon.jsii.Kernel.get(this, "tumblingWindow", software.amazon.jsii.NativeType.forClass(software.amazon.awscdk.core.Duration.class)); } /** * Constructor that initializes the object based on literal property values passed by the {@link Builder}. */ @SuppressWarnings("unchecked") protected Jsii$Proxy(final Builder builder) { super(software.amazon.jsii.JsiiObject.InitializationMode.JSII); this.target = java.util.Objects.requireNonNull(builder.target, "target is required"); this.batchSize = builder.batchSize; this.bisectBatchOnError = builder.bisectBatchOnError; this.enabled = builder.enabled; this.eventSourceArn = builder.eventSourceArn; this.kafkaBootstrapServers = builder.kafkaBootstrapServers; this.kafkaTopic = builder.kafkaTopic; this.maxBatchingWindow = builder.maxBatchingWindow; this.maxRecordAge = builder.maxRecordAge; this.onFailure = builder.onFailure; this.parallelizationFactor = builder.parallelizationFactor; this.reportBatchItemFailures = builder.reportBatchItemFailures; this.retryAttempts = builder.retryAttempts; this.sourceAccessConfigurations = (java.util.List)builder.sourceAccessConfigurations; this.startingPosition = builder.startingPosition; this.tumblingWindow = builder.tumblingWindow; } @Override public final software.amazon.awscdk.services.lambda.IFunction getTarget() { return this.target; } @Override public final java.lang.Number getBatchSize() { return this.batchSize; } @Override public final java.lang.Boolean getBisectBatchOnError() { return this.bisectBatchOnError; } @Override public final java.lang.Boolean getEnabled() { return this.enabled; } @Override public final java.lang.String getEventSourceArn() { return this.eventSourceArn; } @Override public final java.util.List getKafkaBootstrapServers() { return this.kafkaBootstrapServers; } @Override public final java.lang.String getKafkaTopic() { return this.kafkaTopic; } @Override public final software.amazon.awscdk.core.Duration getMaxBatchingWindow() { return this.maxBatchingWindow; } @Override public final software.amazon.awscdk.core.Duration getMaxRecordAge() { return this.maxRecordAge; } @Override public final software.amazon.awscdk.services.lambda.IEventSourceDlq getOnFailure() { return this.onFailure; } @Override public final java.lang.Number getParallelizationFactor() { return this.parallelizationFactor; } @Override public final java.lang.Boolean getReportBatchItemFailures() { return this.reportBatchItemFailures; } @Override public final java.lang.Number getRetryAttempts() { return this.retryAttempts; } @Override public final java.util.List getSourceAccessConfigurations() { return this.sourceAccessConfigurations; } @Override public final software.amazon.awscdk.services.lambda.StartingPosition getStartingPosition() { return this.startingPosition; } @Override public final software.amazon.awscdk.core.Duration getTumblingWindow() { return this.tumblingWindow; } @Override @software.amazon.jsii.Internal public com.fasterxml.jackson.databind.JsonNode $jsii$toJson() { final com.fasterxml.jackson.databind.ObjectMapper om = software.amazon.jsii.JsiiObjectMapper.INSTANCE; final com.fasterxml.jackson.databind.node.ObjectNode data = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode(); data.set("target", om.valueToTree(this.getTarget())); if (this.getBatchSize() != null) { data.set("batchSize", om.valueToTree(this.getBatchSize())); } if (this.getBisectBatchOnError() != null) { data.set("bisectBatchOnError", om.valueToTree(this.getBisectBatchOnError())); } if (this.getEnabled() != null) { data.set("enabled", om.valueToTree(this.getEnabled())); } if (this.getEventSourceArn() != null) { data.set("eventSourceArn", om.valueToTree(this.getEventSourceArn())); } if (this.getKafkaBootstrapServers() != null) { data.set("kafkaBootstrapServers", om.valueToTree(this.getKafkaBootstrapServers())); } if (this.getKafkaTopic() != null) { data.set("kafkaTopic", om.valueToTree(this.getKafkaTopic())); } if (this.getMaxBatchingWindow() != null) { data.set("maxBatchingWindow", om.valueToTree(this.getMaxBatchingWindow())); } if (this.getMaxRecordAge() != null) { data.set("maxRecordAge", om.valueToTree(this.getMaxRecordAge())); } if (this.getOnFailure() != null) { data.set("onFailure", om.valueToTree(this.getOnFailure())); } if (this.getParallelizationFactor() != null) { data.set("parallelizationFactor", om.valueToTree(this.getParallelizationFactor())); } if (this.getReportBatchItemFailures() != null) { data.set("reportBatchItemFailures", om.valueToTree(this.getReportBatchItemFailures())); } if (this.getRetryAttempts() != null) { data.set("retryAttempts", om.valueToTree(this.getRetryAttempts())); } if (this.getSourceAccessConfigurations() != null) { data.set("sourceAccessConfigurations", om.valueToTree(this.getSourceAccessConfigurations())); } if (this.getStartingPosition() != null) { data.set("startingPosition", om.valueToTree(this.getStartingPosition())); } if (this.getTumblingWindow() != null) { data.set("tumblingWindow", om.valueToTree(this.getTumblingWindow())); } final com.fasterxml.jackson.databind.node.ObjectNode struct = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode(); struct.set("fqn", om.valueToTree("@aws-cdk/aws-lambda.EventSourceMappingProps")); struct.set("data", data); final com.fasterxml.jackson.databind.node.ObjectNode obj = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode(); obj.set("$jsii.struct", struct); return obj; } @Override public final boolean equals(final Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; EventSourceMappingProps.Jsii$Proxy that = (EventSourceMappingProps.Jsii$Proxy) o; if (!target.equals(that.target)) return false; if (this.batchSize != null ? !this.batchSize.equals(that.batchSize) : that.batchSize != null) return false; if (this.bisectBatchOnError != null ? !this.bisectBatchOnError.equals(that.bisectBatchOnError) : that.bisectBatchOnError != null) return false; if (this.enabled != null ? !this.enabled.equals(that.enabled) : that.enabled != null) return false; if (this.eventSourceArn != null ? !this.eventSourceArn.equals(that.eventSourceArn) : that.eventSourceArn != null) return false; if (this.kafkaBootstrapServers != null ? !this.kafkaBootstrapServers.equals(that.kafkaBootstrapServers) : that.kafkaBootstrapServers != null) return false; if (this.kafkaTopic != null ? !this.kafkaTopic.equals(that.kafkaTopic) : that.kafkaTopic != null) return false; if (this.maxBatchingWindow != null ? !this.maxBatchingWindow.equals(that.maxBatchingWindow) : that.maxBatchingWindow != null) return false; if (this.maxRecordAge != null ? !this.maxRecordAge.equals(that.maxRecordAge) : that.maxRecordAge != null) return false; if (this.onFailure != null ? !this.onFailure.equals(that.onFailure) : that.onFailure != null) return false; if (this.parallelizationFactor != null ? !this.parallelizationFactor.equals(that.parallelizationFactor) : that.parallelizationFactor != null) return false; if (this.reportBatchItemFailures != null ? !this.reportBatchItemFailures.equals(that.reportBatchItemFailures) : that.reportBatchItemFailures != null) return false; if (this.retryAttempts != null ? !this.retryAttempts.equals(that.retryAttempts) : that.retryAttempts != null) return false; if (this.sourceAccessConfigurations != null ? !this.sourceAccessConfigurations.equals(that.sourceAccessConfigurations) : that.sourceAccessConfigurations != null) return false; if (this.startingPosition != null ? !this.startingPosition.equals(that.startingPosition) : that.startingPosition != null) return false; return this.tumblingWindow != null ? this.tumblingWindow.equals(that.tumblingWindow) : that.tumblingWindow == null; } @Override public final int hashCode() { int result = this.target.hashCode(); result = 31 * result + (this.batchSize != null ? this.batchSize.hashCode() : 0); result = 31 * result + (this.bisectBatchOnError != null ? this.bisectBatchOnError.hashCode() : 0); result = 31 * result + (this.enabled != null ? this.enabled.hashCode() : 0); result = 31 * result + (this.eventSourceArn != null ? this.eventSourceArn.hashCode() : 0); result = 31 * result + (this.kafkaBootstrapServers != null ? this.kafkaBootstrapServers.hashCode() : 0); result = 31 * result + (this.kafkaTopic != null ? this.kafkaTopic.hashCode() : 0); result = 31 * result + (this.maxBatchingWindow != null ? this.maxBatchingWindow.hashCode() : 0); result = 31 * result + (this.maxRecordAge != null ? this.maxRecordAge.hashCode() : 0); result = 31 * result + (this.onFailure != null ? this.onFailure.hashCode() : 0); result = 31 * result + (this.parallelizationFactor != null ? this.parallelizationFactor.hashCode() : 0); result = 31 * result + (this.reportBatchItemFailures != null ? this.reportBatchItemFailures.hashCode() : 0); result = 31 * result + (this.retryAttempts != null ? this.retryAttempts.hashCode() : 0); result = 31 * result + (this.sourceAccessConfigurations != null ? this.sourceAccessConfigurations.hashCode() : 0); result = 31 * result + (this.startingPosition != null ? this.startingPosition.hashCode() : 0); result = 31 * result + (this.tumblingWindow != null ? this.tumblingWindow.hashCode() : 0); return result; } } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy