[
https://issues.apache.org/jira/browse/NIFI-2872?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15569803#comment-15569803
]
ASF GitHub Bot commented on NIFI-2872:
--------------------------------------
Github user jvwing commented on a diff in the pull request:
https://github.com/apache/nifi/pull/1125#discussion_r83092101
--- Diff:
nifi-nar-bundles/nifi-aws-bundle/nifi-aws-processors/src/main/java/org/apache/nifi/processors/aws/cloudwatch/PutCloudWatchMetric.java
---
@@ -0,0 +1,203 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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
+ *
+ * http://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 org.apache.nifi.processors.aws.cloudwatch;
+
+import com.amazonaws.ClientConfiguration;
+import com.amazonaws.auth.AWSCredentials;
+import com.amazonaws.auth.AWSCredentialsProvider;
+import com.amazonaws.services.cloudwatch.AmazonCloudWatchClient;
+import com.amazonaws.services.cloudwatch.model.MetricDatum;
+import com.amazonaws.services.cloudwatch.model.PutMetricDataRequest;
+import org.apache.nifi.annotation.behavior.InputRequirement;
+import org.apache.nifi.annotation.behavior.InputRequirement.Requirement;
+import org.apache.nifi.annotation.behavior.SupportsBatching;
+import org.apache.nifi.annotation.documentation.CapabilityDescription;
+import org.apache.nifi.annotation.documentation.Tags;
+import org.apache.nifi.components.PropertyDescriptor;
+import org.apache.nifi.components.ValidationContext;
+import org.apache.nifi.components.ValidationResult;
+import org.apache.nifi.components.Validator;
+import org.apache.nifi.flowfile.FlowFile;
+import org.apache.nifi.processor.ProcessContext;
+import org.apache.nifi.processor.ProcessSession;
+import org.apache.nifi.processor.Relationship;
+import org.apache.nifi.processor.exception.ProcessException;
+import org.apache.nifi.processor.util.StandardValidators;
+import
org.apache.nifi.processors.aws.AbstractAWSCredentialsProviderProcessor;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Date;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+
+@SupportsBatching
+@InputRequirement(Requirement.INPUT_REQUIRED)
+@Tags({"amazon", "aws", "cloudwatch", "metrics", "put", "publish"})
+@CapabilityDescription("Publishes metrics to Amazon CloudWatch")
+public class PutCloudWatchMetric extends
AbstractAWSCredentialsProviderProcessor<AmazonCloudWatchClient> {
+
+ public static final Set<Relationship> relationships =
Collections.unmodifiableSet(
+ new HashSet<>(Arrays.asList(REL_SUCCESS, REL_FAILURE)));
+
+ private static final Validator DOUBLE_VALIDATOR = new Validator() {
+ @Override
+ public ValidationResult validate(String subject, String input,
ValidationContext context) {
+ if (context.isExpressionLanguageSupported(subject) &&
context.isExpressionLanguagePresent(input)) {
+ return (new
ValidationResult.Builder()).subject(subject).input(input).explanation("Expression
Language Present").valid(true).build();
+ } else {
+ String reason = null;
+
+ try {
+ Double.parseDouble(input);
+ } catch (NumberFormatException var6) {
+ reason = "not a valid Double";
+ }
+
+ return (new
ValidationResult.Builder()).subject(subject).input(input).explanation(reason).valid(reason
== null).build();
+ }
+ }
+ };
+
+ public static final PropertyDescriptor NAMESPACE = new
PropertyDescriptor.Builder()
+ .name("Namespace")
+ .displayName("Namespace")
+ .description("The namespace for the metric data for
CloudWatch")
+ .required(true)
+ .expressionLanguageSupported(true)
+ .addValidator(StandardValidators.NON_EMPTY_VALIDATOR)
+ .build();
+
+ public static final PropertyDescriptor METRIC_NAME = new
PropertyDescriptor.Builder()
+ .name("MetricName")
+ .displayName("MetricName")
+ .description("The name of the metric")
+ .expressionLanguageSupported(true)
+ .required(true)
+ .addValidator(new StandardValidators.StringLengthValidator(1,
255))
+ .build();
+
+ public static final PropertyDescriptor VALUE = new
PropertyDescriptor.Builder()
+ .name("Value")
+ .displayName("Value")
+ .description("The value for the metric. Must be a double")
+ .expressionLanguageSupported(true)
+ .required(true)
+ .addValidator(DOUBLE_VALIDATOR)
+ .build();
+
+ public static final PropertyDescriptor TIMESTAMP = new
PropertyDescriptor.Builder()
+ .name("Timestamp")
+ .displayName("Timestamp")
+ .description("A point in time expressed as the number of
milliseconds since Jan 1, 1970 00:00:00 UTC. If not specified, the default
value is set to the time the metric data was received")
+ .expressionLanguageSupported(true)
+ .required(false)
+ .addValidator(StandardValidators.LONG_VALIDATOR)
+ .build();
+
+ public static final PropertyDescriptor UNIT = new
PropertyDescriptor.Builder()
+ .name("Unit")
+ .displayName("Unit")
+ .description("The unit of the metric. (e.g Seconds, Bytes,
Megabytes, Percent, Count, Kilobytes/Second, Terabits/Second, Count/Second)
For details see
http://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_MetricDatum.html")
+ .expressionLanguageSupported(true)
+ .required(false)
+ .addValidator(StandardValidators.NON_EMPTY_VALIDATOR)
+ .build();
+
+ public static final List<PropertyDescriptor> properties =
+ Collections.unmodifiableList(
+ Arrays.asList(NAMESPACE, METRIC_NAME, VALUE,
TIMESTAMP, UNIT, REGION, ACCESS_KEY, SECRET_KEY,
+ CREDENTIALS_FILE,
AWS_CREDENTIALS_PROVIDER_SERVICE, TIMEOUT, SSL_CONTEXT_SERVICE,
+ ENDPOINT_OVERRIDE, PROXY_HOST, PROXY_HOST_PORT)
+ );
+
+ @Override
+ protected List<PropertyDescriptor> getSupportedPropertyDescriptors() {
+ return properties;
+ }
+
+ @Override
+ public Set<Relationship> getRelationships() {
+ return relationships;
+ }
+
+ /**
+ * Create client using aws credentials provider. This is the preferred
way for creating clients
+ */
+
+ @Override
+ protected AmazonCloudWatchClient createClient(ProcessContext
processContext, AWSCredentialsProvider awsCredentialsProvider,
ClientConfiguration clientConfiguration) {
+ getLogger().info("Creating client using aws credentials provider");
+ return new AmazonCloudWatchClient(awsCredentialsProvider,
clientConfiguration);
+ }
+
+ /**
+ * Create client using AWSCredentials
+ *
+ * @deprecated use {@link #createClient(ProcessContext,
AWSCredentialsProvider, ClientConfiguration)} instead
+ */
+ @Override
+ protected AmazonCloudWatchClient createClient(ProcessContext
processContext, AWSCredentials awsCredentials, ClientConfiguration
clientConfiguration) {
+ getLogger().debug("Creating client with aws credentials");
+ return new AmazonCloudWatchClient(awsCredentials,
clientConfiguration);
+ }
+
+
+ @Override
+ public void onTrigger(ProcessContext context, ProcessSession session)
throws ProcessException {
+ FlowFile flowFile = session.get();
+ if (flowFile == null) {
+ return;
+ }
+
+ final AmazonCloudWatchClient client = getClient();
+
+ MetricDatum dataum = new MetricDatum();
--- End diff --
Should this be `datum` instead of `dataum`? Admittedly not my most
insightful review comment, I'm just trying to prove I'm paying attention.
> Create PutCloudwatchMetric Processor
> ------------------------------------
>
> Key: NIFI-2872
> URL: https://issues.apache.org/jira/browse/NIFI-2872
> Project: Apache NiFi
> Issue Type: Task
> Components: Core Framework
> Affects Versions: 1.1.0
> Reporter: Edgardo Vega
> Priority: Minor
>
> Create a processor for put metrics into aws cloudwatch.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)