[ 
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)

Reply via email to